From ac8cfceabbae8ef96f9be7a695e03a4a1d02a971 Mon Sep 17 00:00:00 2001 From: loong10k <20489781+loong10k@users.noreply.github.com> Date: Tue, 29 Sep 2026 12:26:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=BA=20TSX=20=E5=88=9D=E6=A3=80?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=8B=AC=E7=AB=8B=20grammar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- README.zh-CN.md | 4 +- .../src/grammar_asset_manifest.rs | 20 ++++- .../src/syntax_precheck_candidate_report.rs | 14 ++++ .../tests/grammar_asset_manifest.rs | 6 +- .../tests/syntax_precheck_report_contract.rs | 17 ++++ .../src/syntax_worker_command.rs | 1 + .../src/typescript_syntax_precheck.rs | 17 +++- .../codeguard-cli/tests/grammar_status_cli.rs | 4 +- .../typescript_syntax_fallback_candidate.rs | 66 ++++++++++++++++ .../tests/wasm_grammar_load.rs | 22 ++++++ docs/Codeguard-Architecture.md | 4 +- docs/Codeguard-Architecture.zh_CN.md | 4 +- docs/Codeguard-Technical-Design.md | 8 +- docs/Codeguard-Technical-Design.zh_CN.md | 8 +- docs/Codeguard-Trust-and-Distribution.md | 4 +- .../Codeguard-Trust-and-Distribution.zh_CN.md | 4 +- grammars/manifest.json | 18 +++++ grammars/tsx/parser.wasm | Bin 0 -> 1445641 bytes .../specs/syntax-precheck/spec.md | 7 ++ .../introduce-rust-codeguard-cli/tasks.md | 8 +- .../eslint-local-feedback-v0.4.schema.json | 73 ++++++++++++++++++ schemas/grammar-asset-manifest.schema.json | 10 +-- .../acceptance/codegraph-grammar-coverage.md | 2 + tests/acceptance/grammar-asset-candidates.md | 2 + tests/acceptance/tsx-grammar-candidate.md | 9 +++ .../typescript-syntax-fallback-candidate.md | 2 + 27 files changed, 299 insertions(+), 39 deletions(-) create mode 100644 grammars/tsx/parser.wasm create mode 100644 schemas/eslint-local-feedback-v0.4.schema.json create mode 100644 tests/acceptance/tsx-grammar-candidate.md diff --git a/README.md b/README.md index 25545623..a3cd8cb5 100644 --- a/README.md +++ b/README.md @@ -94,9 +94,9 @@ cargo build --locked -p codeguard-cli Version output includes `cli_version`, `target`, and protocol information. Discovery and init preview return observations and unknowns. Dry-run creates neither `AGENTS.md` nor a project data directory. Add Cargo `--offline` only when dependencies are cached. -The workspace requires `std`. The opt-in `wasm-precheck` build feature uses a bounded Rust worker with pinned Java/TypeScript grammar candidates. It currently reaches only single-file `lint java` and `lint typescript` requests without explicit native context; it is absent from the published npm `0.1.2` package. No `no_std`, completed project-wide WASM fallback, zero-unsafe, or fastest-runtime claim is made. Runtime OS calls require safety review; a comprehensive security audit is not claimed. +The workspace requires `std`. The opt-in `wasm-precheck` build feature uses a bounded Rust worker with pinned Java, TypeScript, and TSX grammar candidates. It currently reaches only single-file `lint java` and `lint typescript` requests without explicit native context; `.tsx` uses its own grammar. It is absent from the published npm `0.1.2` package. No `no_std`, completed project-wide WASM fallback, zero-unsafe, or fastest-runtime claim is made. Runtime OS calls require safety review; a comprehensive security audit is not claimed. -The current source-built CLI's `codeguard grammar status --format=json` reports the coverage gap without loading grammars or running lint: the pinned CodeGraph source has 30 vendored WASM files plus two distinct grammars resolved through its dependency; CodeGuard has two unqualified candidates and zero released syntax capabilities. The separate [coverage inventory](grammars/codegraph-coverage.json) is not an approved asset manifest. COBOL's 16.4 MB source asset also exceeds the current Rust loader's 8 MiB limit. +The current source-built CLI's `codeguard grammar status --format=json` reports the coverage gap without loading grammars or running lint: the pinned CodeGraph source has 30 vendored WASM files plus two distinct grammars resolved through its dependency; CodeGuard has three unqualified candidates and zero released syntax capabilities. The separate [coverage inventory](grammars/codegraph-coverage.json) is not an approved asset manifest. COBOL's 16.4 MB source asset also exceeds the current Rust loader's 8 MiB limit. ### npm installation and one-off use diff --git a/README.zh-CN.md b/README.zh-CN.md index e223ce3a..d116c971 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -94,9 +94,9 @@ cargo build --locked -p codeguard-cli 版本输出包含 `cli_version`、`target` 和协议信息。发现与 init 预览返回观察及未知项。Dry-run 不创建 `AGENTS.md` 或项目数据目录。仅在依赖已缓存时为 Cargo 添加 `--offline`。 -工作区要求 `std`。可选 `wasm-precheck` 构建特性已用固定的 Java/TypeScript grammar 候选资产与有界 Rust worker,为缺少显式原生上下文的 `lint java`、`lint typescript` 单文件请求提供疑似语法观察;公开 npm `0.1.2` 不含该路径。不声称 `no_std`、已完成项目级 WASM 兜底、零 unsafe 或性能最快。运行层系统调用需要安全审查,当前不宣称已完成整体安全审计。 +工作区要求 `std`。可选 `wasm-precheck` 构建特性已用固定的 Java、TypeScript、TSX grammar 候选资产与有界 Rust worker,为缺少显式原生上下文的 `lint java`、`lint typescript` 单文件请求提供疑似语法观察;`.tsx` 使用独立 grammar。公开 npm `0.1.2` 不含该路径。不声称 `no_std`、已完成项目级 WASM 兜底、零 unsafe 或性能最快。运行层系统调用需要安全审查,当前不宣称已完成整体安全审计。 -当前源码构建的 CLI 可用 `codeguard grammar status --format=json` 只读展示来源覆盖缺口,不加载 grammar 或运行 lint:固定 CodeGraph 来源含 30 份随仓 WASM,另有两种独立 grammar 从其依赖取得;CodeGuard 当前只有两份未验收候选,已发行语法能力为零。[覆盖库存](grammars/codegraph-coverage.json)不是已批准资产清单。COBOL 来源资产约 16.4 MB,还超过当前 Rust 加载器的 8 MiB 限额。 +当前源码构建的 CLI 可用 `codeguard grammar status --format=json` 只读展示来源覆盖缺口,不加载 grammar 或运行 lint:固定 CodeGraph 来源含 30 份随仓 WASM,另有两种独立 grammar 从其依赖取得;CodeGuard 当前有三份未验收候选,已发行语法能力为零。[覆盖库存](grammars/codegraph-coverage.json)不是已批准资产清单。COBOL 来源资产约 16.4 MB,还超过当前 Rust 加载器的 8 MiB 限额。 ### npm 安装与一次性调用 diff --git a/crates/codeguard-adapters/src/grammar_asset_manifest.rs b/crates/codeguard-adapters/src/grammar_asset_manifest.rs index e1979b0f..83b8f843 100644 --- a/crates/codeguard-adapters/src/grammar_asset_manifest.rs +++ b/crates/codeguard-adapters/src/grammar_asset_manifest.rs @@ -68,7 +68,7 @@ pub struct GrammarAsset { pub release_status: String, } -/// 读取仓内固定清单,并检查 CodeGraph 许可证及两份资产的原始字节。 +/// 读取仓内固定清单,并检查 CodeGraph 许可证及三份资产的原始字节。 pub fn bundled_grammar_candidates() -> Result { let manifest = parse_grammar_asset_manifest(include_bytes!("../../../grammars/manifest.json"))?; let codegraph_license = include_bytes!("../../../grammars/LICENSE.codegraph"); @@ -85,6 +85,10 @@ pub fn bundled_grammar_candidates() -> Result { include_bytes!("../../../grammars/typescript/parser.wasm").as_slice(), include_bytes!("../../../grammars/typescript/LICENSE").as_slice(), ), + "tsx" => ( + include_bytes!("../../../grammars/tsx/parser.wasm").as_slice(), + include_bytes!("../../../grammars/typescript/LICENSE").as_slice(), + ), _ => return Err("候选语言未知".into()), }; verify_grammar_asset(asset, wasm, license)?; @@ -106,7 +110,7 @@ pub fn parse_grammar_asset_manifest(raw: &[u8]) -> Result Result Result ( + "https://github.com/tree-sitter/tree-sitter-typescript", + TYPESCRIPT_COMMIT, + "v0.23.2", + "tsx/parser.wasm", + "8f647a1b2cafe9ab00fb2056d79021d2a144ba17a72f45511072311c1b05d08e", + 1445641, + "typescript/LICENSE", + "49bf33cf78ef5897e4e161ce1517df7de1ae5042a65b6bcfd44401e0fc606559", + ), _ => return Err("grammar 语言未知".into()), }; if asset.dialect != asset.language diff --git a/crates/codeguard-adapters/src/syntax_precheck_candidate_report.rs b/crates/codeguard-adapters/src/syntax_precheck_candidate_report.rs index c7b412b4..a5a92167 100644 --- a/crates/codeguard-adapters/src/syntax_precheck_candidate_report.rs +++ b/crates/codeguard-adapters/src/syntax_precheck_candidate_report.rs @@ -100,6 +100,9 @@ pub fn parse_syntax_precheck_candidate_report( } let mut observations = Vec::with_capacity(report.files.len()); for file in report.files { + if !path_matches_language(&file.path, &report.backend.language) { + return Err("syntax_precheck_source_dialect_mismatch".into()); + } let source = source_bytes .get(&file.path) .ok_or("syntax_precheck_source_missing")?; @@ -132,3 +135,14 @@ pub fn parse_syntax_precheck_candidate_report( } Ok(actual) } + +fn path_matches_language(path: &str, language: &str) -> bool { + match language { + "java" => path.ends_with(".java"), + "typescript" => [".ts", ".mts", ".cts"] + .iter() + .any(|suffix| path.ends_with(suffix)), + "tsx" => path.ends_with(".tsx"), + _ => false, + } +} diff --git a/crates/codeguard-adapters/tests/grammar_asset_manifest.rs b/crates/codeguard-adapters/tests/grammar_asset_manifest.rs index 6efe63b3..c5a99096 100644 --- a/crates/codeguard-adapters/tests/grammar_asset_manifest.rs +++ b/crates/codeguard-adapters/tests/grammar_asset_manifest.rs @@ -5,7 +5,7 @@ use codeguard_adapters::{ #[test] fn bundled_candidates_pin_source_bytes_license_and_abi_without_claiming_support() { let manifest = bundled_grammar_candidates().expect("bundled manifest"); - assert_eq!(manifest.assets.len(), 2); + assert_eq!(manifest.assets.len(), 3); for asset in &manifest.assets { let (wasm, license) = match asset.language.as_str() { "java" => ( @@ -16,6 +16,10 @@ fn bundled_candidates_pin_source_bytes_license_and_abi_without_claiming_support( include_bytes!("../../../grammars/typescript/parser.wasm").as_slice(), include_bytes!("../../../grammars/typescript/LICENSE").as_slice(), ), + "tsx" => ( + include_bytes!("../../../grammars/tsx/parser.wasm").as_slice(), + include_bytes!("../../../grammars/typescript/LICENSE").as_slice(), + ), other => panic!("unexpected language {other}"), }; verify_grammar_asset(asset, wasm, license).expect("pinned candidate bytes"); diff --git a/crates/codeguard-adapters/tests/syntax_precheck_report_contract.rs b/crates/codeguard-adapters/tests/syntax_precheck_report_contract.rs index 8565ff13..3e65e4b6 100644 --- a/crates/codeguard-adapters/tests/syntax_precheck_report_contract.rs +++ b/crates/codeguard-adapters/tests/syntax_precheck_report_contract.rs @@ -105,3 +105,20 @@ fn candidate_schema_declares_closed_versioned_contract() { assert_eq!(schema["additionalProperties"], false); assert_eq!(schema["properties"]["precheck"]["$ref"], "#/$defs/precheck"); } + +#[test] +fn tsx_candidate_requires_tsx_source_and_cannot_relabel_java() { + let mut report = candidate(); + report["backend"]["language"] = json!("tsx"); + report["backend"]["dialect"] = json!("tsx"); + report["backend"]["grammar_sha256"] = + json!("8f647a1b2cafe9ab00fb2056d79021d2a144ba17a72f45511072311c1b05d08e"); + assert!(read(&report).is_err()); + + report["files"][0]["path"] = json!("src/Component.tsx"); + let sources = BTreeMap::from([("src/Component.tsx".into(), b"hello".to_vec())]); + let status = + parse_syntax_precheck_candidate_report(&serde_json::to_vec(&report).unwrap(), &sources) + .unwrap(); + assert_eq!(status.status, SyntaxPrecheckStatus::Incomplete); +} diff --git a/crates/codeguard-cli/src/syntax_worker_command.rs b/crates/codeguard-cli/src/syntax_worker_command.rs index 8f911dd2..3c684c0e 100644 --- a/crates/codeguard-cli/src/syntax_worker_command.rs +++ b/crates/codeguard-cli/src/syntax_worker_command.rs @@ -63,6 +63,7 @@ fn observe(language: &str, source: &[u8]) -> Result include_bytes!("../../../grammars/java/parser.wasm").as_slice(), "typescript" => include_bytes!("../../../grammars/typescript/parser.wasm").as_slice(), + "tsx" => include_bytes!("../../../grammars/tsx/parser.wasm").as_slice(), _ => return Err("不支持的 grammar 语种".into()), }; let mut grammar = WasmGrammar::load(language, wasm, &asset.sha256, asset.abi_version as usize)?; diff --git a/crates/codeguard-cli/src/typescript_syntax_precheck.rs b/crates/codeguard-cli/src/typescript_syntax_precheck.rs index 1304535c..8d1ab151 100644 --- a/crates/codeguard-cli/src/typescript_syntax_precheck.rs +++ b/crates/codeguard-cli/src/typescript_syntax_precheck.rs @@ -28,15 +28,24 @@ pub(crate) fn eligible(args: &EslintLintArguments) -> bool { } /// 使用本轮源码快照与私有 Rust worker 补充疑似语法观察;原生仍未运行。 -/// 参数为受支持的单文件请求及共同截止时间;返回无交付权威的 0.3.0 反馈。 +/// 参数为受支持的单文件请求及共同截止时间;返回无交付权威的 TypeScript 0.3.0 或 TSX 0.4.0 反馈。 pub(crate) fn observe(args: &EslintLintArguments, deadline: Instant) -> Value { + let language = if args + .source + .extension() + .is_some_and(|extension| extension == "tsx") + { + "tsx" + } else { + "typescript" + }; let source_name = args .source .file_name() .and_then(|name| name.to_str()) .unwrap_or("source.ts"); let mut report = json!({ - "schema_version": "0.3.0", + "schema_version": if language == "tsx" { "0.4.0" } else { "0.3.0" }, "report_type": "eslint_local_feedback", "status": "incomplete", "local_coherent": false, @@ -51,7 +60,7 @@ pub(crate) fn observe(args: &EslintLintArguments, deadline: Instant) -> Value { "setup": {"requirement": "required", "reason": "native_confirmation_needed", "task_id": null}, "syntax_precheck": { "backend": "bundled_tree_sitter_wasm_candidate", - "language": "typescript", + "language": language, "status": "incomplete", "reason": "not_run", "source_path": source_name, @@ -82,7 +91,7 @@ pub(crate) fn observe(args: &EslintLintArguments, deadline: Instant) -> Value { }; let observation = match run_syntax_worker_candidate( &executable, - "typescript", + language, source_name, &source, deadline, diff --git a/crates/codeguard-cli/tests/grammar_status_cli.rs b/crates/codeguard-cli/tests/grammar_status_cli.rs index 70757069..78daef0c 100644 --- a/crates/codeguard-cli/tests/grammar_status_cli.rs +++ b/crates/codeguard-cli/tests/grammar_status_cli.rs @@ -12,7 +12,7 @@ fn codegraph_coverage_is_explicit_and_never_claims_parser_or_gate_completion() { assert_eq!(report["report_type"], "grammar_coverage_inventory"); assert_eq!(report["codegraph_grammar_count"], 32); assert_eq!(report["codegraph_vendored_count"], 30); - assert_eq!(report["candidate_count"], 2); + assert_eq!(report["candidate_count"], 3); assert_eq!(report["released_count"], 0); assert_eq!(report["authority"], "source_inventory_only"); assert_eq!(report["parser_capability"], "unverified"); @@ -25,7 +25,7 @@ fn codegraph_coverage_is_explicit_and_never_claims_parser_or_gate_completion() { assert_eq!(asset["released"], false); assert!(!asset["gap"].as_str().unwrap().is_empty()); } - for language in ["java", "typescript"] { + for language in ["java", "typescript", "tsx"] { let asset = assets .iter() .find(|row| row["language"] == language) diff --git a/crates/codeguard-cli/tests/typescript_syntax_fallback_candidate.rs b/crates/codeguard-cli/tests/typescript_syntax_fallback_candidate.rs index 61193ffe..423f9999 100644 --- a/crates/codeguard-cli/tests/typescript_syntax_fallback_candidate.rs +++ b/crates/codeguard-cli/tests/typescript_syntax_fallback_candidate.rs @@ -90,6 +90,72 @@ fn no_recovery_remains_incomplete_and_javascript_does_not_use_typescript_grammar assert!(js_report.get("syntax_precheck").is_none()); } +#[test] +fn tsx_uses_its_own_grammar_instead_of_reporting_valid_jsx_as_suspect() { + let project = Project::new(); + fs::write( + project.0.join("component.tsx"), + "const node =
hello
;\n", + ) + .unwrap(); + let (status, report) = project.lint("component.tsx"); + assert_eq!(status, 3); + assert_eq!(report["schema_version"], "0.4.0"); + assert_eq!(report["native"]["status"], "not_run"); + assert_eq!(report["syntax_precheck"]["language"], "tsx"); + assert_eq!(report["syntax_precheck"]["checked_files"], 1); + assert_eq!( + report["syntax_precheck"]["grammar_sha256"], + "8f647a1b2cafe9ab00fb2056d79021d2a144ba17a72f45511072311c1b05d08e" + ); + assert!( + report["syntax_precheck"]["observations"] + .as_array() + .unwrap() + .is_empty() + ); + assert_eq!(report["delivery_decision"], "not_evaluated"); + + fs::write( + project.0.join("broken.tsx"), + "const node =
;\n", + ) + .unwrap(); + let (_, broken) = project.lint("broken.tsx"); + assert_eq!(broken["syntax_precheck"]["language"], "tsx"); + assert!( + !broken["syntax_precheck"]["observations"] + .as_array() + .unwrap() + .is_empty() + ); + assert_eq!(broken["syntax_precheck"]["status"], "incomplete"); + assert!(broken["findings"].as_array().unwrap().is_empty()); + + let schema: Value = serde_json::from_str(include_str!( + "../../../schemas/eslint-local-feedback-v0.4.schema.json" + )) + .unwrap(); + assert_eq!(schema["properties"]["schema_version"]["const"], "0.4.0"); + assert_eq!( + schema["properties"]["syntax_precheck"]["properties"]["language"]["const"], + "tsx" + ); + let actual: std::collections::BTreeSet<_> = report + .as_object() + .unwrap() + .keys() + .map(String::as_str) + .collect(); + let required: std::collections::BTreeSet<_> = schema["required"] + .as_array() + .unwrap() + .iter() + .map(|item| item.as_str().unwrap()) + .collect(); + assert_eq!(actual, required); +} + #[test] fn candidate_feedback_schema_is_versioned_and_closed() { let schema: Value = serde_json::from_str(include_str!( diff --git a/crates/codeguard-runtime/tests/wasm_grammar_load.rs b/crates/codeguard-runtime/tests/wasm_grammar_load.rs index 347176ef..b9119d75 100644 --- a/crates/codeguard-runtime/tests/wasm_grammar_load.rs +++ b/crates/codeguard-runtime/tests/wasm_grammar_load.rs @@ -4,6 +4,7 @@ use codeguard_runtime::WasmGrammar; const JAVA: &[u8] = include_bytes!("../../../grammars/java/parser.wasm"); const TYPESCRIPT: &[u8] = include_bytes!("../../../grammars/typescript/parser.wasm"); +const TSX: &[u8] = include_bytes!("../../../grammars/tsx/parser.wasm"); #[test] fn pinned_grammars_load_offline_and_parse_valid_sources() { @@ -45,6 +46,27 @@ fn pinned_grammars_load_offline_and_parse_valid_sources() { .has_error() ); assert!(typescript.parse(&vec![b'x'; 1024 * 1024 + 1]).is_err()); + + let mut tsx = WasmGrammar::load( + "tsx", + TSX, + "8f647a1b2cafe9ab00fb2056d79021d2a144ba17a72f45511072311c1b05d08e", + 14, + ) + .expect("固定 TSX WASM 应可由 Rust 加载"); + assert_eq!(tsx.abi_version(), 14); + assert!( + !tsx.parse(b"const node =
hello
;") + .unwrap() + .root_node() + .has_error() + ); + assert!( + tsx.parse(b"const node =
;") + .unwrap() + .root_node() + .has_error() + ); } #[test] diff --git a/docs/Codeguard-Architecture.md b/docs/Codeguard-Architecture.md index 19fae3ae..6207a4d1 100644 --- a/docs/Codeguard-Architecture.md +++ b/docs/Codeguard-Architecture.md @@ -28,7 +28,7 @@ The existing [OpenSpec change](../openspec/changes/introduce-rust-codeguard-cli/ | [Core aggregation](../crates/codeguard-core/src/aggregate.rs), [delivery gate](../crates/codeguard-core/src/delivery_gate.rs) | Pure result semantics, not trusted public gate availability | | [Acceptance records](../tests/acceptance) | Scoped observations, test method, and residual gaps | -WASM requirements and 18 implementation tasks are recorded in the existing change. An opt-in Rust worker, pinned grammar candidates, and TypeScript/Java single-file feedback schemas now exist. Project-wide native-first routing, qualified grammar ranges, stable syntax tasks, and host integrations remain incomplete; design examples are not current command output. +WASM requirements and 18 implementation tasks are recorded in the existing change. An opt-in Rust worker, pinned Java/TypeScript/TSX grammar candidates, and narrow single-file feedback schemas now exist. Project-wide native-first routing, qualified grammar ranges, stable syntax tasks, and host integrations remain incomplete; design examples are not current command output. ## 2. Architectural drivers @@ -241,7 +241,7 @@ A completed native violation never selects fallback to obtain a clean result. A Reuse pinned CodeGraph grammar WASM artifacts and applicable upstream licenses, source references, patches and corpus cases. Do not copy CodeGraph's graph extraction or source-blanking heuristics into a syntax verdict. CodeGraph's `src/extraction/grammars.ts` loads language artifacts through `web-tree-sitter`; successful loading there does not prove compatibility with Codeguard's Rust runtime. The local source review on 2026-09-28 found modified grammar artifacts and about 65 MB of grammar files, so a live directory is not a release input. -The read-only `codeguard grammar status` command now projects a [pinned CodeGraph coverage inventory](../grammars/codegraph-coverage.json): 30 vendored WASM files and two dependency-provided grammars, with Java and TypeScript as CodeGuard candidates and none qualified for release. This inventory is deliberately separate from the pinned [candidate asset manifest](../grammars/manifest.json). In particular, the COBOL source file exceeds the current loader's 8 MiB input limit. Inventory rows never trigger loading or count as supported parser capability. +The read-only `codeguard grammar status` command now projects a [pinned CodeGraph coverage inventory](../grammars/codegraph-coverage.json): 30 vendored WASM files and two dependency-provided grammars, with Java, TypeScript and TSX as CodeGuard candidates and none qualified for release. This inventory is deliberately separate from the pinned [candidate asset manifest](../grammars/manifest.json). In particular, the COBOL source file exceeds the current loader's 8 MiB input limit. Inventory rows never trigger loading or count as supported parser capability. ```text grammars/ # proposed release assets, not project state diff --git a/docs/Codeguard-Architecture.zh_CN.md b/docs/Codeguard-Architecture.zh_CN.md index d6cde4b1..c206f26e 100644 --- a/docs/Codeguard-Architecture.zh_CN.md +++ b/docs/Codeguard-Architecture.zh_CN.md @@ -28,7 +28,7 @@ | [核心聚合](../crates/codeguard-core/src/aggregate.rs)、[交付门禁](../crates/codeguard-core/src/delivery_gate.rs) | 纯结果语义,不代表公开可信门禁已可用 | | [验收记录](../tests/acceptance) | 限定范围的观察、测试方法和剩余缺口 | -WASM 的规范与 18 项实施任务已纳入既有 change;可选 Rust worker、固定 grammar 候选资产和 TypeScript/Java 单文件反馈 schema 已存在。项目级原生优先调度、grammar 版本范围验收、稳定语法任务及宿主接线仍未完成;设计示例不是当前命令输出。 +WASM 的规范与 18 项实施任务已纳入既有 change;可选 Rust worker、固定 Java/TypeScript/TSX grammar 候选资产和局部单文件反馈 schema 已存在。项目级原生优先调度、grammar 版本范围验收、稳定语法任务及宿主接线仍未完成;设计示例不是当前命令输出。 ## 2. 架构驱动 @@ -241,7 +241,7 @@ flowchart TD 复用固定版本的 CodeGraph grammar WASM,以及适用的上游许可证、源码引用、补丁和语料。不能把 CodeGraph 的图提取或源码遮盖启发式直接用于语法判定。CodeGraph 的 `src/extraction/grammars.ts` 通过 `web-tree-sitter` 加载语言资产,在那里可加载不证明兼容 Codeguard 的 Rust 运行时。发行时必须固定不可变的来源与资产清单,不能把正在修改的本地目录直接当作发行输入。 -只读 `codeguard grammar status` 现投影[固定来源覆盖库存](../grammars/codegraph-coverage.json):CodeGraph 随仓 30 份 WASM,依赖提供另两种独立 grammar;CodeGuard 只有 Java、TypeScript 两份候选,尚无已验收发行能力。覆盖库存与[候选资产清单](../grammars/manifest.json)分开,不能凭库存行自动加载或宣称支持。尤其 COBOL 来源资产超过当前加载器 8 MiB 限额。 +只读 `codeguard grammar status` 现投影[固定来源覆盖库存](../grammars/codegraph-coverage.json):CodeGraph 随仓 30 份 WASM,依赖提供另两种独立 grammar;CodeGuard 有 Java、TypeScript、TSX 三份候选,尚无已验收发行能力。覆盖库存与[候选资产清单](../grammars/manifest.json)分开,不能凭库存行自动加载或宣称支持。尤其 COBOL 来源资产超过当前加载器 8 MiB 限额。 ```text grammars/ # 规划中的发行资产,不是项目状态 diff --git a/docs/Codeguard-Technical-Design.md b/docs/Codeguard-Technical-Design.md index 0b16c872..4c854190 100644 --- a/docs/Codeguard-Technical-Design.md +++ b/docs/Codeguard-Technical-Design.md @@ -14,7 +14,7 @@ The existing [OpenSpec change](../openspec/changes/introduce-rust-codeguard-cli/ Current source is the authority for callable behavior. Target contracts are labelled as such. The product priority is configuration discovery → native results → useful repair guidance. Internal consistency checks support this experience; they are not a demand for users to manually construct execution certificates. -WASM requirements and 18 implementation tasks are recorded in the existing change. Candidate Rust worker, pinned assets, and narrow TypeScript/Java single-file reports now exist behind an opt-in feature; project-wide native-first routing, qualified grammar ranges, and host integrations remain incomplete. Design examples are not current command output. +WASM requirements and 18 implementation tasks are recorded in the existing change. Candidate Rust worker, pinned Java/TypeScript/TSX assets, and narrow single-file reports now exist behind an opt-in feature; project-wide native-first routing, qualified grammar ranges, and host integrations remain incomplete. Design examples are not current command output. ## 2. Technology choices and trade-offs @@ -183,15 +183,15 @@ Core now has a local pure setup-action selector taking an upstream-verified nati When some files have suspected issues and others are unresolved, use overall `incomplete` while retaining all usable suspected observations. `clean` requires nonempty, completely checked selected scope. -These are the target semantic fields, not a shipped project-wide lint/check report. A narrow [candidate precheck schema](../schemas/syntax-precheck-candidate.schema.json) and [strict Rust reader](../crates/codeguard-adapters/src/syntax_precheck_candidate_report.rs) bind source SHA-256 and pinned grammar identity, recalculate status, and reject unknown versions or forged `clean`. Optional CLI single-file [TypeScript](../schemas/eslint-local-feedback-v0.3.schema.json) and [Java](../schemas/java-syntax-precheck-feedback-v0.1.schema.json) producers now include recovery positions and setup guidance; host rendering and durable task references remain absent. The bundled grammars remain unvalidated, so these reports cannot return `clean`. Missing required native execution remains incomplete (`3`); a suspected parser issue alone is not a confirmed violation (`1`). If a dedicated syntax-only operation is later introduced, its success must be explicitly scoped to syntax; no new `syntax` command is claimed here. +These are the target semantic fields, not a shipped project-wide lint/check report. A narrow [candidate precheck schema](../schemas/syntax-precheck-candidate.schema.json) and [strict Rust reader](../crates/codeguard-adapters/src/syntax_precheck_candidate_report.rs) bind source SHA-256, pinned grammar identity and file dialect, recalculate status, and reject unknown versions or forged `clean`. Optional CLI single-file [TypeScript](../schemas/eslint-local-feedback-v0.3.schema.json), [TSX](../schemas/eslint-local-feedback-v0.4.schema.json) and [Java](../schemas/java-syntax-precheck-feedback-v0.1.schema.json) producers include recovery positions and setup guidance; host rendering and durable task references remain absent. The bundled grammars remain unvalidated, so these reports cannot return `clean`. Missing required native execution remains incomplete (`3`); a suspected parser issue alone is not a confirmed violation (`1`). If a dedicated syntax-only operation is later introduced, its success must be explicitly scoped to syntax; no new `syntax` command is claimed here. -The opt-in CLI build now also emits [ESLint feedback 0.3.0](../schemas/eslint-local-feedback-v0.3.schema.json) for an explicit TypeScript file when no native execution context was supplied. It preserves `native=not_run` and `delivery=not_evaluated`, maps parser recoveries to suspected Unicode positions, and keeps the overall result incomplete even with zero recoveries. A partial native context or symlink does not trigger this candidate path; configured native execution stays on the original route. This is one local entry-point slice, not per-module native-first orchestration or automatic host feedback. +The opt-in CLI build emits [ESLint feedback 0.3.0](../schemas/eslint-local-feedback-v0.3.schema.json) for `.ts/.mts/.cts`, and [0.4.0](../schemas/eslint-local-feedback-v0.4.schema.json) for `.tsx`, when no native execution context was supplied. TSX uses its own pinned grammar, avoiding a TypeScript-parser false positive for valid JSX. Both preserve `native=not_run` and `delivery=not_evaluated`, map parser recoveries to suspected Unicode positions, and remain incomplete even with zero recoveries. A partial native context or symlink does not trigger this candidate path; configured native execution stays on the original route. This is one local entry-point slice, not per-module native-first orchestration or automatic host feedback. ### 5.4 Grammar import and runtime lifecycle — target Import only pinned WASM bytes with upstream license, commit/patch provenance, SHA-256, ABI, tested runtime and language/dialect ranges, corpus reference and known gaps. Verify each copied CodeGraph artifact in the selected Rust Tree-sitter runtime; do not copy TypeScript extraction logic or assume CodeGraph support equals syntax acceptance. A release manifest belongs to distribution assets, not writable `.codeguard/` project state. -Use `codeguard grammar status --format=json` to query the separate source coverage inventory. It reports 32 distinct CodeGraph grammar assets, two CodeGuard candidates, and zero released capabilities without running a parser. The two dependency-provided assets lack pinned bytes, and COBOL exceeds the current 8 MiB loader limit; these remain explicit gaps before any per-language qualification. +Use `codeguard grammar status --format=json` to query the separate source coverage inventory. It reports 32 distinct CodeGraph grammar assets, three CodeGuard candidates, and zero released capabilities without running a parser. The two dependency-provided assets lack pinned bytes, and COBOL exceeds the current 8 MiB loader limit; these remain explicit gaps before any per-language qualification. Use a parent-controlled parser worker with a total deadline, per-file input bound, memory/process limit and capped diagnostics. Lazy-load selected grammars, parse without general network/filesystem imports, and terminate a stuck worker without losing native results from other modules. Host-specific enforcement and Rust MSRV compatibility must be tested; numeric production budgets remain measurement-driven rather than invented promises. diff --git a/docs/Codeguard-Technical-Design.zh_CN.md b/docs/Codeguard-Technical-Design.zh_CN.md index 9136581f..a783b433 100644 --- a/docs/Codeguard-Technical-Design.zh_CN.md +++ b/docs/Codeguard-Technical-Design.zh_CN.md @@ -14,7 +14,7 @@ 可调用行为以当前源码为准,目标契约明确标注。产品优先级是配置发现 → 原生结果 → 有用的修复指引。内部一致性校验为这个体验服务,不要求用户手工构造执行证明。 -WASM 的规范与 18 项实施任务已纳入既有 change;可选特性下的 Rust worker、固定资产及 TypeScript/Java 单文件候选报告已存在,项目级原生优先调度、grammar 版本范围验收与宿主接线仍未完成。设计示例不是当前命令输出。 +WASM 的规范与 18 项实施任务已纳入既有 change;可选特性下的 Rust worker、固定 Java/TypeScript/TSX 资产及局部单文件候选报告已存在,项目级原生优先调度、grammar 版本范围验收与宿主接线仍未完成。设计示例不是当前命令输出。 ## 2. 技术选型与权衡 @@ -183,15 +183,15 @@ flowchart LR 部分文件有疑似异常、另有文件未解析时,总体为 `incomplete`,同时保留所有可用疑似观察。`clean` 要求选定范围非空且全部完成检查。 -这些是目标语义字段,尚非已发行的项目级 lint/check 报告。局部的[候选初检 schema](../schemas/syntax-precheck-candidate.schema.json) 与 [Rust 严格读者](../crates/codeguard-adapters/src/syntax_precheck_candidate_report.rs)已绑定源码 SHA-256 和固定 grammar 身份,重新计算状态,并拒绝未知版本及伪造的 `clean`。可选 CLI 的 [TypeScript](../schemas/eslint-local-feedback-v0.3.schema.json) 与 [Java](../schemas/java-syntax-precheck-feedback-v0.1.schema.json) 单文件生产端已提供恢复位置和准备指引;宿主渲染与持久任务引用仍缺。内置 grammar 仍是未验收候选,因此不能返回 `clean`。保持既有退出语义:必需原生执行缺失仍为未完成(`3`);解析器疑似问题本身不是已确认违规(`1`)。若未来增加独立语法操作,其成功必须限定为语法初检;本文不宣称已有 `syntax` 命令。 +这些是目标语义字段,尚非已发行的项目级 lint/check 报告。局部的[候选初检 schema](../schemas/syntax-precheck-candidate.schema.json) 与 [Rust 严格读者](../crates/codeguard-adapters/src/syntax_precheck_candidate_report.rs)已绑定源码 SHA-256、固定 grammar 身份和文件方言,重新计算状态,并拒绝未知版本及伪造的 `clean`。可选 CLI 的 [TypeScript](../schemas/eslint-local-feedback-v0.3.schema.json)、[TSX](../schemas/eslint-local-feedback-v0.4.schema.json) 与 [Java](../schemas/java-syntax-precheck-feedback-v0.1.schema.json) 单文件生产端已提供恢复位置和准备指引;宿主渲染与持久任务引用仍缺。内置 grammar 仍是未验收候选,因此不能返回 `clean`。保持既有退出语义:必需原生执行缺失仍为未完成(`3`);解析器疑似问题本身不是已确认违规(`1`)。若未来增加独立语法操作,其成功必须限定为语法初检;本文不宣称已有 `syntax` 命令。 -可选特性构建的 CLI 现在还会在显式 TypeScript 文件完全未提供原生执行上下文时输出 [ESLint 反馈 0.3.0](../schemas/eslint-local-feedback-v0.3.schema.json):保留 `native=not_run`、`delivery=not_evaluated`,恢复节点只作为 Unicode 位置的疑似观察;即使零恢复节点也保持总体未完成。部分原生上下文或符号链接不触发候选路径,已配置的原生执行继续走原路径。这只是一个局部统一入口,不代表逐模块原生优先调度或宿主自动对话已完成。 +可选特性构建的 CLI 在 `.ts/.mts/.cts` 完全未提供原生执行上下文时输出 [ESLint 反馈 0.3.0](../schemas/eslint-local-feedback-v0.3.schema.json),`.tsx` 则使用独立 grammar 输出 [0.4.0](../schemas/eslint-local-feedback-v0.4.schema.json),避免普通 TypeScript grammar 把有效 JSX 标为疑似异常。两者保留 `native=not_run`、`delivery=not_evaluated`,恢复节点只作为 Unicode 位置的疑似观察;即使零恢复节点也保持总体未完成。部分原生上下文或符号链接不触发候选路径,已配置的原生执行继续走原路径。这只是一个局部统一入口,不代表逐模块原生优先调度或宿主自动对话已完成。 ### 5.4 Grammar 引入与运行生命周期——目标 只引入固定 WASM 字节及上游许可证、提交/补丁来源、SHA-256、ABI、已验证运行时和语言/方言范围、语料引用与已知缺口。逐个验证 CodeGraph 资产与选定 Rust Tree-sitter 运行时兼容,不能复制 TypeScript 提取逻辑或把 CodeGraph 支持等同语法验收。发行清单属于分发资产,不属于可写的 `.codeguard/` 项目状态。 -可用 `codeguard grammar status --format=json` 查询独立的来源覆盖库存。它只读报告 CodeGraph 32 种独立 grammar、CodeGuard 两份候选和零项已发行能力,不运行解析器。依赖提供的两份资产尚未固定字节,COBOL 超过现有加载器的 8 MiB 限额;每语言验收前仍须解决这些缺口。 +可用 `codeguard grammar status --format=json` 查询独立的来源覆盖库存。它只读报告 CodeGraph 32 种独立 grammar、CodeGuard 三份候选和零项已发行能力,不运行解析器。依赖提供的两份资产尚未固定字节,COBOL 超过现有加载器的 8 MiB 限额;每语言验收前仍须解决这些缺口。 由父进程控制解析工作进程,设置总截止时间、单文件输入上限、内存/进程限制及诊断数量上限。按需加载 grammar,不提供通用网络/文件系统导入;终止卡住的进程时保留其它模块的原生结果。宿主约束执行和 Rust MSRV 兼容性须测试,生产数值预算须经测量后确定,不编造性能承诺。 diff --git a/docs/Codeguard-Trust-and-Distribution.md b/docs/Codeguard-Trust-and-Distribution.md index 3de80d3a..a2a38bf8 100644 --- a/docs/Codeguard-Trust-and-Distribution.md +++ b/docs/Codeguard-Trust-and-Distribution.md @@ -48,9 +48,9 @@ Network publication verifies signature and exact site permission before transfer The recorded npm `@partme.ai/codeguard@0.1.0` publication wraps an Apple Silicon macOS Rust binary. Node forwards argv/cwd/environment/streams/exit and is not another checker implementation. Current packaging has no automatic grammar download or install hook. Public installation verification is scoped in [npm acceptance](../tests/acceptance/npm-public-candidate.md); immutable source/tag and multi-platform qualification remain separate. -The repository now includes a [candidate asset manifest](../grammars/manifest.json), fixed-commit Java/TypeScript WASM bytes and three MIT licenses. The [Rust verifier](../crates/codeguard-adapters/src/grammar_asset_manifest.rs) checks provenance fields and exact bytes. Rust offline loading and basic parsing tests pass for both assets; language versions, dialects, full corpora, CLI dispatch and a real MSRV build remain unvalidated. The assets therefore remain `candidate_unvalidated`. See [scoped acceptance](../tests/acceptance/grammar-asset-candidates.md). They are not yet packaged into public npm or selected by lint. +The repository now includes a [candidate asset manifest](../grammars/manifest.json), fixed-commit Java, TypeScript and TSX WASM bytes with their CodeGraph and upstream MIT licenses. The [Rust verifier](../crates/codeguard-adapters/src/grammar_asset_manifest.rs) checks provenance fields and exact bytes. Rust offline loading and basic parsing tests pass for these three candidates; language versions, dialects, full corpora, complete CLI routing and a real MSRV build remain unvalidated. They therefore remain `candidate_unvalidated`. See [scoped acceptance](../tests/acceptance/grammar-asset-candidates.md) and [TSX correction](../tests/acceptance/tsx-grammar-candidate.md). The optional source build uses them for narrow single-file fallback; public npm still does not package or select them. -CodeGraph loads grammar WASM with JavaScript `web-tree-sitter`, which was also used for the initial ABI observation. CodeGuard's Rust [WasmGrammar](../crates/codeguard-runtime/src/wasm_grammar.rs) now loads the **same pinned bytes** through Tree-sitter `WasmStore` and parses Java/TypeScript in tests. The grammar assets are shared; the JavaScript loader is not. Node only forwards the npm command. Rust loading proves limited compatibility of this path, not syntax accuracy or completion of every OpenSpec 14.2 criterion. +CodeGraph loads grammar WASM with JavaScript `web-tree-sitter`, which was also used for the initial ABI observation. CodeGuard's Rust [WasmGrammar](../crates/codeguard-runtime/src/wasm_grammar.rs) loads the **same pinned bytes** through Tree-sitter `WasmStore` and parses Java, TypeScript and TSX in tests. The grammar assets are shared; the JavaScript loader is not. Node only forwards the npm command. Rust loading proves limited compatibility of this path, not syntax accuracy or completion of every OpenSpec 14.2 criterion. Full WASM distribution still requires pinned patches, compatibility ranges and corpora. Copying an active build directory is not a release contract. Users should not require tree-sitter-cli. The Rust parser host needs memory/time limits, safe loading, integrity verification and explicit unsupported/error status. diff --git a/docs/Codeguard-Trust-and-Distribution.zh_CN.md b/docs/Codeguard-Trust-and-Distribution.zh_CN.md index db30b8a5..a9919d23 100644 --- a/docs/Codeguard-Trust-and-Distribution.zh_CN.md +++ b/docs/Codeguard-Trust-and-Distribution.zh_CN.md @@ -71,9 +71,9 @@ Git 联合入口现进一步核对每跳已签名基线的原生祖先关系( npm 已发布 macOS arm64 0.1.0;Node 只转发到打包的 Rust 二进制,无检测或解析逻辑,无安装生命周期脚本。默认本地 private 打包与显式 public 模式分开。当前缺不可变源码/tag 绑定,多平台支持不能由打包器分支或交叉编译推断。使用方式归 [README](../README.zh-CN.md#npm-安装与一次性调用)。 -目前已有[候选资产清单](../grammars/manifest.json)及固定提交的 Java、TypeScript WASM 与三份 MIT 许可证;[Rust 校验器](../crates/codeguard-adapters/src/grammar_asset_manifest.rs)核对来源字段和原始字节。两份资产的 Rust 离线加载及基本解析测试已通过;语言版本、方言、完整语料、正式调度和 MSRV 实编仍未验收,所以资产仍标记为 `candidate_unvalidated`。详见[局部验收](../tests/acceptance/grammar-asset-candidates.md)。这些字节尚未进入公开 npm 包,也不触发 CLI 初检。 +目前已有[候选资产清单](../grammars/manifest.json)及固定提交的 Java、TypeScript、TSX WASM,保留 CodeGraph 和上游 MIT 许可证;[Rust 校验器](../crates/codeguard-adapters/src/grammar_asset_manifest.rs)核对来源字段和原始字节。三份资产的 Rust 离线加载及基本解析测试已通过;语言版本、方言、完整语料、完整调度和 MSRV 实编仍未验收,所以资产仍标记为 `candidate_unvalidated`。详见[局部验收](../tests/acceptance/grammar-asset-candidates.md)和 [TSX 纠错验收](../tests/acceptance/tsx-grammar-candidate.md)。可选源码构建已用于局部单文件兜底,公开 npm 包仍不含这些字节或检查路径。 -CodeGraph 使用 JavaScript `web-tree-sitter` 加载 grammar WASM,初始 ABI 观察也沿用该加载器。CodeGuard 的 Rust [WasmGrammar](../crates/codeguard-runtime/src/wasm_grammar.rs) 已使用 Tree-sitter `WasmStore` 加载**同一固定字节**并在测试中解析 Java/TypeScript。这里复用的是 grammar 资产,不是 JavaScript 加载器;Node 仅负责 npm 命令转发。Rust 加载成功只证明该加载路径的有限兼容性,不证明语法判定准确,也不代表 OpenSpec 14.2 的全部验收完成。 +CodeGraph 使用 JavaScript `web-tree-sitter` 加载 grammar WASM,初始 ABI 观察也沿用该加载器。CodeGuard 的 Rust [WasmGrammar](../crates/codeguard-runtime/src/wasm_grammar.rs) 已使用 Tree-sitter `WasmStore` 加载**同一固定字节**并在测试中解析 Java、TypeScript、TSX。这里复用的是 grammar 资产,不是 JavaScript 加载器;Node 仅负责 npm 命令转发。Rust 加载成功只证明该加载路径的有限兼容性,不证明语法判定准确,也不代表 OpenSpec 14.2 的全部验收完成。 完整 WASM 发行仍须固定补丁、兼容范围及语料,不得复制活动目录或运行时取 latest。包内资产应离线可用,按需加载;取消或部分覆盖不缓存 clean。升级/回滚重新核验资产和缓存身份,保留历史观察与白名单失效记录。完整生产声明还需平台、宿主、原生工具和质量评测分别验收。 diff --git a/grammars/manifest.json b/grammars/manifest.json index 0b5349eb..83405b52 100644 --- a/grammars/manifest.json +++ b/grammars/manifest.json @@ -41,6 +41,24 @@ "language_versions": [], "known_limitations": ["Rust loader smoke passed; MSRV build, dialect versions, isolation and syntax corpus are not yet validated"], "release_status": "candidate_unvalidated" + }, + { + "language": "tsx", + "dialect": "tsx", + "grammar_repository": "https://github.com/tree-sitter/tree-sitter-typescript", + "grammar_commit": "f975a621f4e7f532fe322e13c4f79495e0a7b2e7", + "grammar_version": "v0.23.2", + "path": "tsx/parser.wasm", + "sha256": "8f647a1b2cafe9ab00fb2056d79021d2a144ba17a72f45511072311c1b05d08e", + "bytes": 1445641, + "license": "typescript/LICENSE", + "license_sha256": "49bf33cf78ef5897e4e161ce1517df7de1ae5042a65b6bcfd44401e0fc606559", + "abi_version": 14, + "codegraph_runtime": "web-tree-sitter 0.25.3", + "codeguard_runtime_validation": "rust_loader_smoke_passed", + "language_versions": [], + "known_limitations": ["Rust loader smoke passed; TSX language versions, JSX dialects, isolation and syntax corpus are not yet validated"], + "release_status": "candidate_unvalidated" } ] } diff --git a/grammars/tsx/parser.wasm b/grammars/tsx/parser.wasm new file mode 100644 index 0000000000000000000000000000000000000000..66ab8577216b841362e424fb52f500216bf868e8 GIT binary patch literal 1445641 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%0D}x}a9m?O{8kyT+RS&uLxRJ?lT#S{rNPFX8=( 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 literal 0 HcmV?d00001 diff --git a/openspec/changes/introduce-rust-codeguard-cli/specs/syntax-precheck/spec.md b/openspec/changes/introduce-rust-codeguard-cli/specs/syntax-precheck/spec.md index 8d31ff60..ef82f6fa 100644 --- a/openspec/changes/introduce-rust-codeguard-cli/specs/syntax-precheck/spec.md +++ b/openspec/changes/introduce-rust-codeguard-cli/specs/syntax-precheck/spec.md @@ -105,6 +105,13 @@ Rust runtime MUST 按需加载 grammar,在受控解析工作进程中限制输 解析 MUST 同时识别 ERROR/MISSING 恢复,并按同一恢复原因归并级联节点;诊断 MUST 保留原文件位置、必要的有界脱敏上下文及 grammar 身份。不确定版本/方言、模板、宏、嵌入语言 MUST 明示覆盖限制。CodeGraph 用于提取符号的源码遮盖/启发式 MUST NOT 静默移入语法判定。仅凭恢复节点不得猜测具体缺失 token 或自动授予源码修改范围。 +同一语言族有独立 grammar 的方言 MUST 按实际文件类型选择和报告;尤其 `.tsx` MUST 使用 TSX grammar,不能拿普通 TypeScript grammar 的恢复节点当作 JSX 源码异常。候选报告读者 MUST 核对 grammar 方言与源文件扩展名一致;不匹配视为报告无效,不生成源码 finding。 + +#### Scenario: Valid JSX is parsed with a TypeScript-only grammar + +- **WHEN** `.tsx` 文件含合法 JSX,而普通 TypeScript grammar 会产生恢复节点 +- **THEN** 选用固定的 TSX grammar 并保留候选未验收状态;不得制造疑似源码异常或声称原生 lint 已执行 + #### Scenario: One unmatched delimiter produces many recovery nodes - **WHEN** 同一恢复原因造成重复或级联节点 - **THEN** 归并为可处理观察并保留受影响范围,不创建大量同义任务 diff --git a/openspec/changes/introduce-rust-codeguard-cli/tasks.md b/openspec/changes/introduce-rust-codeguard-cli/tasks.md index 4cf18ec6..cb9da0a2 100644 --- a/openspec/changes/introduce-rust-codeguard-cli/tasks.md +++ b/openspec/changes/introduce-rust-codeguard-cli/tasks.md @@ -1028,13 +1028,13 @@ TDD缺自动同步先RED。相关普通:build9、work sync15、next6,共30 状态:全部待实施。统一规格 [syntax-precheck](specs/syntax-precheck/spec.md)。依赖已有 CLI/原生调度/工作台切片,不等待整个 S13;本阶段验收进入 S12、S13。各任务须先失败样本后实现与回归;不改写原生规则。责任为模块维护职责,非已分配人员。 -- [ ] 14.1 资产清单与来源。责任:adapters / 发布。规格:SP04。依赖:无。验收:固定 CodeGraph 来源提交、grammar 版本、许可证、SHA-256、ABI、语言/方言;缺来源、错散列和不兼容样本拒绝加载。进行中:已从固定 CodeGraph 提交复制 Java/TypeScript WASM 与 MIT 许可证,清单和 Rust 校验拒绝来源/字节/声明 ABI 漂移;两份资产已由 Rust 离线加载并实测 ABI;[局部证据](../../../tests/acceptance/grammar-asset-candidates.md)。新增与批准资产清单分离的[完整来源覆盖库存](../../../grammars/codegraph-coverage.json)及只读 `grammar status`:固定提交中的 30 份随仓 WASM 已逐字节核对,另两种依赖资产标为未固定,COBOL 的 16.4 MB 超出当前 8 MiB 加载限额;[覆盖验收](../../../tests/acceptance/codegraph-grammar-coverage.md)。其余 grammar 的上游许可证/版本、Rust 加载、语言版本/方言、语料及可发行验收仍缺,不勾选。 -- [ ] 14.2 Rust WASM 加载器。责任:runtime。规格:SP04,SP05。依赖:14.1。验收:支持固定资产离线加载;不依赖 Node 解析器、CodeGraph 或用户安装 tree-sitter-cli;通过有效/损坏/错 ABI 样本及 MSRV。进行中:可选 `wasm-precheck` 特性已通过 Java/TypeScript Rust `WasmStore` 加载与反例测试,并由私有工作进程从 stdin 处理真实源码、父进程核对身份与恢复锚点,见[局部验收](../../../tests/acceptance/syntax-worker-candidate.md);本机无 Rust 1.85,MSRV 实编及正式 `lint/check` 接线尚缺。 +- [ ] 14.1 资产清单与来源。责任:adapters / 发布。规格:SP04。依赖:无。验收:固定 CodeGraph 来源提交、grammar 版本、许可证、SHA-256、ABI、语言/方言;缺来源、错散列和不兼容样本拒绝加载。进行中:已从固定 CodeGraph 提交复制 Java/TypeScript/TSX WASM 与 MIT 许可证,清单和 Rust 校验拒绝来源/字节/声明 ABI 漂移;三份资产已由 Rust 离线加载并实测 ABI;[局部证据](../../../tests/acceptance/grammar-asset-candidates.md)。新增与批准资产清单分离的[完整来源覆盖库存](../../../grammars/codegraph-coverage.json)及只读 `grammar status`:固定提交中的 30 份随仓 WASM 已逐字节核对,另两种依赖资产标为未固定,COBOL 的 16.4 MB 超出当前 8 MiB 加载限额;[覆盖验收](../../../tests/acceptance/codegraph-grammar-coverage.md)。其余 grammar 的上游许可证/版本、Rust 加载、语言版本/方言、语料及可发行验收仍缺,不勾选。 +- [ ] 14.2 Rust WASM 加载器。责任:runtime。规格:SP04,SP05。依赖:14.1。验收:支持固定资产离线加载;不依赖 Node 解析器、CodeGraph 或用户安装 tree-sitter-cli;通过有效/损坏/错 ABI 样本及 MSRV。进行中:可选 `wasm-precheck` 特性已通过 Java/TypeScript/TSX Rust `WasmStore` 加载与反例测试,并由私有工作进程从 stdin 处理真实源码、父进程核对身份与恢复锚点,见[局部验收](../../../tests/acceptance/syntax-worker-candidate.md);本机无 Rust 1.85,MSRV 实编及正式 `lint/check` 接线尚缺。 - [ ] 14.3 进程资源隔离。责任:runtime。规格:SP05。依赖:14.2。验收:验证超时、内存、输出、取消与崩溃;损坏 grammar 不阻塞其他模块、不遗留进程。进行中:Unix 候选 worker 复用受控进程组内核,输入 1 MiB、输出 64 KiB,父进程有共同截止时间和取消;崩溃后代清理、输出洪泛、运行中取消及随后正常解析均增加真实子进程反例。Linux 2 GiB `RLIMIT_AS`、3 GiB 分配负例与 worker 故障隔离在 [Ubuntu CI](https://github.com/full-stack-plugins/codeguard/actions/runs/36478461118) 真实通过;Wasmtime 虚拟预留缩小。macOS 本机硬限制实测不支持,候选仍不具内存隔离权威;见[局部验收](../../../tests/acceptance/syntax-worker-candidate.md)。其它目标平台、损坏 grammar 隔离及正式调度仍缺,不勾选。 - [ ] 14.4 语言覆盖与源码映射。责任:adapters。规格:SP06。依赖:14.2。验收:识别 ERROR/MISSING,合并恢复节点;测试 Unicode、换行、嵌入语言、新语法和未知版本,不将不支持当源码违规。进行中:Rust 已提取两类原始节点,adapters 核对 UTF-8/CRLF 字节锚点并转换 Unicode 标量列;结构祖先归组保留并列错误,预算截断保持不完整;[局部证据](../../../tests/acceptance/syntax-recovery-candidate.md)。级联归并语料、版本/嵌入语言及原生对照仍缺。 - [ ] 14.5 原生工具准备探测。责任:adapters。规格:SP01,SP03。依赖:现有配置发现。验收:识别项目本地工具、wrapper、版本和无效配置;PATH 缺失不等于未安装,不对坏配置重复建议安装。进行中:ESLint 本地包/入口及 Maven Wrapper 脚本/发行配置已有只读候选分类,`detect` 与 `check` 已输出固定路径观察的候选;`node_modules` 普通源码遍历被排除,链接和损坏配置保留阻塞;发现协议升级为 0.4.0,聚合协议升级为 0.31.0 并保留旧 schema;[局部证据](../../../tests/acceptance/native-tool-readiness-candidates.md)。显式工具、受控原生版本探针、原生优先调度、更多构建器和真实多平台验收尚缺,不勾选。 -- [ ] 14.6 逐模块原生优先调度。责任:CLI/core。规格:SP01。依赖:14.4,14.5。验收:原生可用先执行;原生违规不得被 WASM 洗白;多根分别选择并保留运行失败与兄弟结果。进行中:可选 CLI 特性在 `lint typescript`、`lint java` 显式单文件且完全缺少原生上下文时附加候选语法观察,部分原生上下文、符号链接、其它扩展名及 Javadoc/Checkstyle 选择保留原路径,见 [TypeScript 局部验收](../../../tests/acceptance/typescript-syntax-fallback-candidate.md)、[Java 局部验收](../../../tests/acceptance/java-syntax-fallback-candidate.md)。这只证明未给显式上下文,不证明原生工具缺失;本地工具自动选择、多模块调度、真实原生/初检混合保留仍缺,不勾选。 -- [ ] 14.7 初检协议与 schema。责任:core/CLI。规格:SP02,SP11。依赖:14.4。验收:固定版本和状态枚举、输入/资产身份、范围及缺口;空文件集、部分解析和未知版本不能 clean;未知 major 拒绝。进行中:core 已有状态聚合及[局部证据](../../../tests/acceptance/syntax-precheck-status-candidate.md);adapters 候选报告 1.0.0 的封闭 schema 与严格读者拒绝重复键、未知版本、身份漂移与伪造 clean,见[候选报告证据](../../../tests/acceptance/syntax-precheck-report-candidate.md);可选 CLI `lint typescript` 与 `lint java` 单文件入口分别产生 0.3.0/0.1.0 局部候选反馈及位置化疑似观察,见 [TypeScript](../../../tests/acceptance/typescript-syntax-fallback-candidate.md) 与 [Java](../../../tests/acceptance/java-syntax-fallback-candidate.md) 验收。正式全范围/嵌入区域/排除原因、持久化任务引用、所有消费者未知 major 拒绝与发布兼容仍缺,不勾选。 +- [ ] 14.6 逐模块原生优先调度。责任:CLI/core。规格:SP01。依赖:14.4,14.5。验收:原生可用先执行;原生违规不得被 WASM 洗白;多根分别选择并保留运行失败与兄弟结果。进行中:可选 CLI 特性在 `lint typescript`、`lint java` 显式单文件且完全缺少原生上下文时附加候选语法观察,部分原生上下文、符号链接、其它扩展名及 Javadoc/Checkstyle 选择保留原路径,见 [TypeScript 局部验收](../../../tests/acceptance/typescript-syntax-fallback-candidate.md)、[Java 局部验收](../../../tests/acceptance/java-syntax-fallback-candidate.md)。新增 `.tsx` 独立 grammar 的有效/无效 JSX 反例与候选报告方言绑定,见 [TSX 纠错验收](../../../tests/acceptance/tsx-grammar-candidate.md)。这只证明未给显式上下文,不证明原生工具缺失;本地工具自动选择、多模块调度、真实原生/初检混合保留仍缺,不勾选。 +- [ ] 14.7 初检协议与 schema。责任:core/CLI。规格:SP02,SP11。依赖:14.4。验收:固定版本和状态枚举、输入/资产身份、范围及缺口;空文件集、部分解析和未知版本不能 clean;未知 major 拒绝。进行中:core 已有状态聚合及[局部证据](../../../tests/acceptance/syntax-precheck-status-candidate.md);adapters 候选报告 1.0.0 的封闭 schema 与严格读者拒绝重复键、未知版本、身份漂移与伪造 clean,见[候选报告证据](../../../tests/acceptance/syntax-precheck-report-candidate.md);可选 CLI `lint typescript` 与 `lint java` 单文件入口分别产生 TypeScript 0.3.0、TSX 0.4.0、Java 0.1.0 局部候选反馈及位置化疑似观察,见 [TypeScript](../../../tests/acceptance/typescript-syntax-fallback-candidate.md) 与 [Java](../../../tests/acceptance/java-syntax-fallback-candidate.md) 验收。正式全范围/嵌入区域/排除原因、持久化任务引用、所有消费者未知 major 拒绝与发布兼容仍缺,不勾选。 - [ ] 14.8 安装建议与必须确认策略。责任:core。规格:SP03。依赖:14.6,14.7。验收:可选原生缺失且完整 clean 仅推荐;疑似或已有必需义务要求恢复原生确认;无适配器给具体决策。进行中:core 已有纯决策函数,区分缺工具、坏配置、执行失败和无适配器;仅非空、完整、已验收且无恢复节点的 clean 才允许可选建议,伪造 clean 状态不能降级。见[局部验收](../../../tests/acceptance/syntax-setup-guidance-candidate.md)。真实工具准备来源、CLI/工作台任务投影及宿主反馈尚未接线,不勾选。 - [ ] 14.9 四类可读与 JSON 报告。责任:CLI。规格:SP07,SP11。依赖:14.7,14.8。验收:覆盖原生成功、缺原生且 clean、疑似语法、初检不可用;结果范围/行动/交付语义一致;不伪造任务 ID。进行中:启用可选 WASM 特性的 TypeScript 与 Java 单文件在无显式原生上下文时提供 JSON/human 候选疑似观察;无恢复节点仍为 incomplete,任务引用为空;Java 超大输入保留 worker 未完成,见 [TypeScript](../../../tests/acceptance/typescript-syntax-fallback-candidate.md) 与 [Java](../../../tests/acceptance/java-syntax-fallback-candidate.md) 局部验收。正式四类报告、多模块范围与宿主渲染仍缺,不勾选。 - [ ] 14.10 稳定任务与下一步。责任:core/CLI。规格:SP08。依赖:14.8,14.9及现有工作台。验收:重复扫描更新同一准备/确认任务,失败尝试有记录,无进展给具体诊断;推荐项不持续占用 next。 diff --git a/schemas/eslint-local-feedback-v0.4.schema.json b/schemas/eslint-local-feedback-v0.4.schema.json new file mode 100644 index 00000000..5afc92b2 --- /dev/null +++ b/schemas/eslint-local-feedback-v0.4.schema.json @@ -0,0 +1,73 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "urn:codeguard:eslint-local-feedback:0.4.0", + "title": "Incomplete TSX lint feedback with optional candidate WASM syntax observation", + "type": "object", + "additionalProperties": false, + "required": ["schema_version", "report_type", "status", "local_coherent", "coverage_proven", "delivery_decision", "reason", "findings", "suppressed_count", "workbench_status", "workbench", "native", "setup", "syntax_precheck", "next_action"], + "properties": { + "schema_version": {"const": "0.4.0"}, + "report_type": {"const": "eslint_local_feedback"}, + "status": {"const": "incomplete"}, + "local_coherent": {"const": false}, + "coverage_proven": {"const": false}, + "delivery_decision": {"const": "not_evaluated"}, + "reason": {"const": "eslint_execution_context_missing"}, + "findings": {"const": []}, + "suppressed_count": {"const": 0}, + "workbench_status": {"const": "not_connected"}, + "workbench": {"type": "null"}, + "native": { + "type": "object", "additionalProperties": false, + "required": ["status", "reason"], + "properties": {"status": {"const": "not_run"}, "reason": {"const": "explicit_context_missing"}} + }, + "setup": { + "type": "object", "additionalProperties": false, + "required": ["requirement", "reason", "task_id"], + "properties": { + "requirement": {"const": "required"}, + "reason": {"const": "native_confirmation_needed"}, + "task_id": {"type": "null"} + } + }, + "syntax_precheck": { + "type": "object", "additionalProperties": false, + "required": ["backend", "language", "status", "reason", "source_path", "source_sha256", "grammar_sha256", "grammar_qualified", "selected_files", "checked_files", "truncated", "observations"], + "properties": { + "backend": {"const": "bundled_tree_sitter_wasm_candidate"}, + "language": {"const": "tsx"}, + "status": {"const": "incomplete"}, + "reason": {"enum": ["not_run", "source_unavailable", "worker_executable_unavailable", "worker_incomplete", "recovery_budget_truncated", "grammar_version_unqualified", "position_mapping_incomplete"]}, + "source_path": {"type": "string", "minLength": 1}, + "source_sha256": {"$ref": "#/$defs/nullable_digest"}, + "grammar_sha256": {"$ref": "#/$defs/nullable_digest"}, + "grammar_qualified": {"const": false}, + "selected_files": {"const": 1}, + "checked_files": {"enum": [0, 1]}, + "truncated": {"type": "boolean"}, + "observations": {"type": "array", "maxItems": 128, "items": {"$ref": "#/$defs/observation"}} + } + }, + "next_action": {"type": "string", "minLength": 1} + }, + "$defs": { + "nullable_digest": { + "anyOf": [{"type": "null"}, {"type": "string", "pattern": "^[0-9a-f]{64}$"}] + }, + "observation": { + "type": "object", "additionalProperties": false, + "required": ["classification", "kind", "syntax_kind", "start_line", "start_column", "end_line", "end_column", "group_id"], + "properties": { + "classification": {"const": "suspected"}, + "kind": {"enum": ["ERROR", "MISSING"]}, + "syntax_kind": {"type": "string", "minLength": 1}, + "start_line": {"type": "integer", "minimum": 1}, + "start_column": {"type": "integer", "minimum": 1}, + "end_line": {"type": "integer", "minimum": 1}, + "end_column": {"type": "integer", "minimum": 1}, + "group_id": {"type": "integer", "minimum": 1} + } + } + } +} diff --git a/schemas/grammar-asset-manifest.schema.json b/schemas/grammar-asset-manifest.schema.json index 702fb695..322f954d 100644 --- a/schemas/grammar-asset-manifest.schema.json +++ b/schemas/grammar-asset-manifest.schema.json @@ -14,8 +14,8 @@ "build_tool": {"const": "tree-sitter-cli 0.25.10 build --wasm"}, "assets": { "type": "array", - "minItems": 2, - "maxItems": 2, + "minItems": 3, + "maxItems": 3, "items": {"$ref": "#/$defs/asset"} } }, @@ -27,12 +27,12 @@ "additionalProperties": false, "required": ["language", "dialect", "grammar_repository", "grammar_commit", "grammar_version", "path", "sha256", "bytes", "license", "license_sha256", "abi_version", "codegraph_runtime", "codeguard_runtime_validation", "language_versions", "known_limitations", "release_status"], "properties": { - "language": {"enum": ["java", "typescript"]}, - "dialect": {"enum": ["java", "typescript"]}, + "language": {"enum": ["java", "typescript", "tsx"]}, + "dialect": {"enum": ["java", "typescript", "tsx"]}, "grammar_repository": {"type": "string", "pattern": "^https://github.com/tree-sitter/tree-sitter-"}, "grammar_commit": {"$ref": "#/$defs/commit"}, "grammar_version": {"type": "string", "pattern": "^v[0-9]+\\.[0-9]+\\.[0-9]+$"}, - "path": {"enum": ["java/parser.wasm", "typescript/parser.wasm"]}, + "path": {"enum": ["java/parser.wasm", "typescript/parser.wasm", "tsx/parser.wasm"]}, "sha256": {"$ref": "#/$defs/sha256"}, "bytes": {"type": "integer", "minimum": 8, "maximum": 8388608}, "license": {"enum": ["java/LICENSE", "typescript/LICENSE"]}, diff --git a/tests/acceptance/codegraph-grammar-coverage.md b/tests/acceptance/codegraph-grammar-coverage.md index f631847f..559c52b8 100644 --- a/tests/acceptance/codegraph-grammar-coverage.md +++ b/tests/acceptance/codegraph-grammar-coverage.md @@ -7,3 +7,5 @@ `cargo test --locked -p codeguard-cli --test grammar_status_cli`:2/2 通过。实际调用 `target/debug/codeguard grammar status --format=json` 返回 `grammar_coverage_inventory`、`codegraph_grammar_count=32`、`codegraph_vendored_count=30`、`candidate_count=2`、`released_count=0`、`execution=not_run`、`delivery_decision=not_evaluated`。Java/TypeScript 是 `candidate_unvalidated`;`objc`/`solidity` 为 `dependency_bytes_not_pinned`。COBOL 源文件 16,355,286 字节,超过现有 Rust 加载器 8 MiB 限额,明确显示 `current_loader_size_limit`。 未完成:其余 30 份资产的上游版本/许可证、Rust ABI 与真实加载、各语言版本/方言/语料、原生对照、运行时预算和发行打包。此库存不证明任何新增语言已可进行语法初检,不改变原生 lint 或交付门禁。 + +后续增量:[TSX 候选纠错](tsx-grammar-candidate.md)将 TSX 纳入候选资产,当前源码构建的 `grammar status` 候选数变为 3,仍无已验收发行能力。上面的 2 候选与 2/2 测试记录保留为本次覆盖库存引入时的验收快照。 diff --git a/tests/acceptance/grammar-asset-candidates.md b/tests/acceptance/grammar-asset-candidates.md index 05c63a29..f6adab8c 100644 --- a/tests/acceptance/grammar-asset-candidates.md +++ b/tests/acceptance/grammar-asset-candidates.md @@ -14,3 +14,5 @@ TDD:新增 `grammar_asset_manifest` 测试先因缺少 Rust API 编译失败 Rust 加载器的 `wasm_grammar_load` 测试先因缺少 `WasmGrammar` 编译失败;实现后覆盖 Java/TypeScript 固定资产、损坏模块、错误摘要和错误 ABI 声明。离线运行 `cargo test --locked -p codeguard-runtime -p codeguard-adapters --features codeguard-runtime/wasm-precheck`、`cargo test --workspace --locked --quiet` 均通过,前者显式覆盖新功能,后者验证默认功能回归;还通过带新特性的 runtime Clippy 检查。加载器是可选编译特性,当前仅为受控兼容性试验,不进入 CLI 调度,也未具备工作进程隔离。`cargo metadata` 显示当前解析到的依赖未声明高于 1.85 的 Rust 版本;本机未安装 Rust 1.85,实际 MSRV 编译尚未验收。 OpenSpec 14.1 和 14.2 仍不勾选:语言/方言版本边界、MSRV 实编、进程隔离、错误节点/位置和可发行验收仍需后续任务补齐。加载成功不意味着语法规则准确或原生 lint 义务已完成。 + +后续增量:[TSX 候选纠错](tsx-grammar-candidate.md)把同一来源仓库的 TSX 独立 WASM 加入固定候选清单;当前候选资产数为 3。本页的“两份”及初次验收命令属于原 Java/TypeScript 引入时的历史快照。 diff --git a/tests/acceptance/tsx-grammar-candidate.md b/tests/acceptance/tsx-grammar-candidate.md new file mode 100644 index 00000000..3c8bce06 --- /dev/null +++ b/tests/acceptance/tsx-grammar-candidate.md @@ -0,0 +1,9 @@ +# TSX grammar 候选纠错:局部验收 + +此前可选 `lint typescript` 单文件初检接受 `.tsx`,却总把源码交给普通 TypeScript grammar。有效 JSX 的回归测试先失败:报告 `syntax_precheck.language=typescript`,有把合法代码误报为疑似语法异常的风险。 + +从固定 `partme-ai/codegraph@40f112453583a2304c4b605a3a9d6545919662bd` 的 `src/extraction/wasm/tree-sitter-tsx.wasm` 复制原始字节;SHA-256 为 `8f647a1b2cafe9ab00fb2056d79021d2a144ba17a72f45511072311c1b05d08e`,长度 1,445,641 字节。TSX 与 TypeScript 来自同一 `tree-sitter/tree-sitter-typescript@f975a621f4e7f532fe322e13c4f79495e0a7b2e7`,共用仓内固定的 MIT 许可证。Rust `WasmStore` 离线加载实测 ABI 14;合法 JSX 无恢复错误,明显缺失属性值的 JSX 有恢复错误。仅测试语法恢复,不把 JSX 标签语义校验等同于 Tree-sitter 语法能力。 + +可选 `wasm-precheck` 构建下,`.tsx` 使用 TSX grammar、按其摘要绑定父子进程报告,输出独立 `eslint_local_feedback` 0.4.0;`.ts/.mts/.cts` 保留 0.3.0 TypeScript grammar 路径。两者都保持原生 `not_run`、候选 `incomplete`、交付 `not_evaluated`,不会产生原生 finding。报告读者拒绝 `.java` 路径冒充 TSX 方言,此测试同样先失败后通过。 + +验证:`cargo test --locked -p codeguard-adapters --test grammar_asset_manifest --test syntax_precheck_report_contract`、`cargo test --locked -p codeguard-runtime --features wasm-precheck --test wasm_grammar_load`、`cargo test --locked -p codeguard-cli --features wasm-precheck --test typescript_syntax_fallback_candidate`、`cargo test --locked -p codeguard-cli --test grammar_status_cli` 均通过。仍待逐语言/版本语料、原生确认、完整 lint/check 调度、公开制品和宿主真实反馈;OpenSpec S14 保持未完成。 diff --git a/tests/acceptance/typescript-syntax-fallback-candidate.md b/tests/acceptance/typescript-syntax-fallback-candidate.md index 09caa8c2..4d804c49 100644 --- a/tests/acceptance/typescript-syntax-fallback-candidate.md +++ b/tests/acceptance/typescript-syntax-fallback-candidate.md @@ -40,3 +40,5 @@ openspec validate introduce-rust-codeguard-cli --strict ``` 实际结果:TypeScript 候选路径 5 项测试通过;既有 ESLint CLI 测试 6 项通过、4 项需显式真实 Node/ESLint 环境而 ignored;Clippy 无警告;启用候选特性的完整 Rust workspace 回归退出码 0;OpenSpec 严格校验与 `git diff --check` 通过。真实 ESLint 自动选择、正式任务同步和三宿主对话仍未验收。 + +后续增量:[TSX 候选纠错](tsx-grammar-candidate.md)将 `.tsx` 从普通 TypeScript grammar 改为固定 TSX grammar,并使用独立的 0.4.0 报告;本页 0.3.0 示例仍适用于 `.ts/.mts/.cts`。上述 5 项与完整 workspace 测试结果是当时的历史验收记录。