From 7afde5ebafd5b8cb0b00aaaac4943c037fc9dce4 Mon Sep 17 00:00:00 2001 From: yaojingang Date: Sun, 14 Jun 2026 01:54:00 +0800 Subject: [PATCH] feat: add architecture maintainability review gate --- Makefile | 9 +- registry/index.json | 2 +- registry/packages/yao-meta-skill.json | 6 +- reports/adoption_drift_report.json | 2 +- reports/architecture_maintainability.json | 150 ++++++ reports/architecture_maintainability.md | 49 ++ reports/benchmark_reproducibility.json | 34 +- reports/benchmark_reproducibility.md | 20 +- reports/compiled_targets.json | 110 +++-- reports/context_budget.json | 6 +- reports/install_simulation.json | 2 +- reports/output_execution_runs.json | 18 +- reports/output_execution_runs.md | 18 +- reports/package_verification.json | 4 +- reports/package_verification.md | 2 +- reports/python_compatibility.json | 14 +- reports/python_compatibility.md | 2 +- reports/registry_audit.json | 8 +- reports/registry_audit.md | 4 +- reports/review-studio.html | 24 +- reports/review-studio.json | 465 ++++++++++++++---- reports/review-viewer.json | 46 +- reports/security_trust_report.json | 45 +- reports/security_trust_report.md | 17 +- reports/skill-overview.html | 2 +- reports/skill-overview.json | 46 +- reports/skill_atlas.json | 9 +- reports/skill_os2_audit.json | 6 +- reports/skill_os2_audit.md | 6 +- reports/skill_os2_coverage.json | 8 +- reports/skill_os2_coverage.md | 8 +- reports/upgrade_check.json | 4 +- reports/world_class_claim_guard.json | 6 +- reports/world_class_claim_guard.md | 2 +- scripts/ci_test.py | 1 + .../render_architecture_maintainability.py | 231 +++++++++ scripts/render_review_annotations.py | 3 + scripts/render_review_studio.py | 23 + scripts/review_studio_gates.py | 32 ++ scripts/yao.py | 21 + scripts/yao_cli_parser.py | 17 + skill-ir/examples/yao-meta-skill.json | 4 +- skill_atlas/catalog.json | 7 +- skill_atlas/stale_skills.json | 2 +- tests/verify_architecture_maintainability.py | 83 ++++ tests/verify_review_studio.py | 55 ++- tests/verify_yao_cli.py | 24 +- 47 files changed, 1325 insertions(+), 332 deletions(-) create mode 100644 reports/architecture_maintainability.json create mode 100644 reports/architecture_maintainability.md create mode 100644 scripts/render_architecture_maintainability.py create mode 100644 tests/verify_architecture_maintainability.py diff --git a/Makefile b/Makefile index 9c64378c..add83b79 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ PYTHON ?= python3 LOCAL_SKILL_INSTALL_DIR ?= $(HOME)/.agents/skills.disabled/yao-meta-skill ACTIVE_SKILL_INSTALL_DIR ?= $(HOME)/.agents/skills/yao-meta-skill -.PHONY: eval eval-suite route-scorecard route-confusion-check description-optimization judge-blind-eval description-optimization-check promotion-check python-compat-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger results-panel regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check sync-local-install sync-active-install test ci-test clean +.PHONY: eval eval-suite route-scorecard route-confusion-check description-optimization judge-blind-eval description-optimization-check promotion-check python-compat-check architecture-maintainability-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger results-panel regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check sync-local-install sync-active-install test ci-test clean eval: $(PYTHON) scripts/trigger_eval.py --description-file evals/improved_description.txt --cases evals/trigger_cases.json --baseline-description-file evals/baseline_description.txt @@ -31,6 +31,9 @@ promotion-check: python-compat-check: $(PYTHON) tests/verify_python_compat_check.py +architecture-maintainability-check: + $(PYTHON) tests/verify_architecture_maintainability.py + yao-cli-check: $(PYTHON) tests/verify_yao_cli.py @@ -223,11 +226,11 @@ sync-local-install: package-check sync-active-install: package-check $(PYTHON) scripts/sync_local_install.py --install-dir "$(ACTIVE_SKILL_INSTALL_DIR)" -test: eval eval-suite route-scorecard route-confusion-check description-optimization description-optimization-check promotion-check python-compat-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check +test: eval eval-suite route-scorecard route-confusion-check description-optimization description-optimization-check promotion-check python-compat-check architecture-maintainability-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check ci-test: $(PYTHON) scripts/ci_test.py clean: - rm -rf dist tests/tmp tests/tmp_snapshot tests/tmp_cli tests/tmp_python_compat tests/tmp_skill_overview tests/tmp_skill_report_metrics tests/tmp_skill_report_charts tests/tmp_skill_ir tests/tmp_compile_skill tests/tmp_output_eval tests/tmp_output_execution tests/tmp_output_review_adjudication tests/tmp_conformance tests/tmp_runtime_permission tests/tmp_trust tests/tmp_skill_atlas tests/tmp_registry tests/tmp_package_verification tests/tmp_install_simulation tests/tmp_upgrade_check tests/tmp_reference_scan tests/tmp_iteration_directions tests/tmp_review_viewer tests/tmp_review_studio tests/tmp_skill_os2_audit tests/tmp_skill_os2_coverage tests/tmp_world_class_evidence tests/tmp_world_class_evidence_ledger tests/tmp_world_class_evidence_intake tests/tmp_world_class_claim_guard tests/tmp_benchmark_reproducibility tests/tmp_feedback tests/tmp_adoption_drift tests/tmp_telemetry_import tests/tmp_telemetry_emit tests/tmp_telemetry_hooks tests/tmp_telemetry_native_host tests/tmp_review_waivers tests/tmp_review_annotations tests/tmp_github_benchmark_scan tests/tmp_intent_confidence tests/tmp_reference_synthesis tests/tmp_output_risk_profile tests/tmp_artifact_design_profile tests/tmp_prompt_quality_profile tests/tmp_system_model tests/tmp_security tests/tmp_baseline_compare.json tests/tmp_baseline_compare.md + rm -rf dist tests/tmp tests/tmp_snapshot tests/tmp_cli tests/tmp_python_compat tests/tmp_architecture_maintainability tests/tmp_skill_overview tests/tmp_skill_report_metrics tests/tmp_skill_report_charts tests/tmp_skill_ir tests/tmp_compile_skill tests/tmp_output_eval tests/tmp_output_execution tests/tmp_output_review_adjudication tests/tmp_conformance tests/tmp_runtime_permission tests/tmp_trust tests/tmp_skill_atlas tests/tmp_registry tests/tmp_package_verification tests/tmp_install_simulation tests/tmp_upgrade_check tests/tmp_reference_scan tests/tmp_iteration_directions tests/tmp_review_viewer tests/tmp_review_studio tests/tmp_skill_os2_audit tests/tmp_skill_os2_coverage tests/tmp_world_class_evidence tests/tmp_world_class_evidence_ledger tests/tmp_world_class_evidence_intake tests/tmp_world_class_claim_guard tests/tmp_benchmark_reproducibility tests/tmp_feedback tests/tmp_adoption_drift tests/tmp_telemetry_import tests/tmp_telemetry_emit tests/tmp_telemetry_hooks tests/tmp_telemetry_native_host tests/tmp_review_waivers tests/tmp_review_annotations tests/tmp_github_benchmark_scan tests/tmp_intent_confidence tests/tmp_reference_synthesis tests/tmp_output_risk_profile tests/tmp_artifact_design_profile tests/tmp_prompt_quality_profile tests/tmp_system_model tests/tmp_security tests/tmp_baseline_compare.json tests/tmp_baseline_compare.md find . -type d -name __pycache__ -prune -exec rm -rf {} + diff --git a/registry/index.json b/registry/index.json index 7399bf0b..b80d90de 100644 --- a/registry/index.json +++ b/registry/index.json @@ -16,7 +16,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" } ] } diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json index 9c57cbed..2a46fda0 100644 --- a/registry/packages/yao-meta-skill.json +++ b/registry/packages/yao-meta-skill.json @@ -16,8 +16,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723", - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, "compatibility": { "openai": "pass", @@ -48,7 +48,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" diff --git a/reports/adoption_drift_report.json b/reports/adoption_drift_report.json index eced7fea..d0e6429c 100644 --- a/reports/adoption_drift_report.json +++ b/reports/adoption_drift_report.json @@ -1,7 +1,7 @@ { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13T17:32:44Z", + "generated_at": "2026-06-13T17:49:00Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json new file mode 100644 index 00000000..97c137ae --- /dev/null +++ b/reports/architecture_maintainability.json @@ -0,0 +1,150 @@ +{ + "schema_version": "1.0", + "ok": true, + "generated_at": "2026-06-14", + "skill_dir": ".", + "summary": { + "python_file_count": 139, + "script_file_count": 83, + "test_file_count": 56, + "internal_module_count": 12, + "cli_script_count": 72, + "command_handler_count": 55, + "warn_line_threshold": 900, + "block_line_threshold": 1500, + "largest_file_lines": 1438, + "hotspot_count": 3, + "blocker_count": 0, + "decision": "watch-maintainability-hotspots" + }, + "largest_files": [ + { + "path": "scripts/yao.py", + "lines": 1438, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + }, + { + "path": "scripts/render_review_studio.py", + "lines": 1196, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." + }, + { + "path": "scripts/render_review_viewer.py", + "lines": 983, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Split viewer data assembly from HTML section rendering." + }, + { + "path": "tests/verify_yao_cli.py", + "lines": 833, + "kind": "test", + "severity": "pass", + "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." + }, + { + "path": "scripts/skill_report_model.py", + "lines": 782, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/compile_skill.py", + "lines": 734, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/optimize_description.py", + "lines": 723, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/trust_check.py", + "lines": 714, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/yao_cli_parser.py", + "lines": 691, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/build_skill_atlas.py", + "lines": 674, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/skill_report_layout.py", + "lines": 653, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/render_reference_synthesis.py", + "lines": 644, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + } + ], + "hotspots": [ + { + "path": "scripts/yao.py", + "lines": 1438, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + }, + { + "path": "scripts/render_review_studio.py", + "lines": 1196, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." + }, + { + "path": "scripts/render_review_viewer.py", + "lines": 983, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Split viewer data assembly from HTML section rendering." + } + ], + "actions": [ + { + "path": "scripts/yao.py", + "severity": "warn", + "action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + }, + { + "path": "scripts/render_review_studio.py", + "severity": "warn", + "action": "Move data loading and large section renderers into focused review_studio_* modules." + }, + { + "path": "scripts/render_review_viewer.py", + "severity": "warn", + "action": "Split viewer data assembly from HTML section rendering." + } + ], + "artifacts": { + "json": "reports/architecture_maintainability.json", + "markdown": "reports/architecture_maintainability.md" + } +} diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md new file mode 100644 index 00000000..7484f199 --- /dev/null +++ b/reports/architecture_maintainability.md @@ -0,0 +1,49 @@ +# Architecture Maintainability + +Generated at: `2026-06-14` + +## Summary + +- decision: `watch-maintainability-hotspots` +- python files: `139` +- scripts: `83` +- tests: `56` +- internal modules: `12` +- CLI scripts: `72` +- Yao CLI command handlers: `55` +- largest file lines: `1438` +- hotspots: `3` +- blockers: `0` + +This report keeps maintainability risk visible before the Meta Skill grows more gates, renderers, and CLI commands. + +## Hotspots + +| File | Lines | Kind | Severity | Recommended action | +| --- | ---: | --- | --- | --- | +| `scripts/yao.py` | `1438` | `cli-script` | `warn` | Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator. | +| `scripts/render_review_studio.py` | `1196` | `cli-script` | `warn` | Move data loading and large section renderers into focused review_studio_* modules. | +| `scripts/render_review_viewer.py` | `983` | `cli-script` | `warn` | Split viewer data assembly from HTML section rendering. | + +## Largest Files + +| File | Lines | Kind | Severity | +| --- | ---: | --- | --- | +| `scripts/yao.py` | `1438` | `cli-script` | `warn` | +| `scripts/render_review_studio.py` | `1196` | `cli-script` | `warn` | +| `scripts/render_review_viewer.py` | `983` | `cli-script` | `warn` | +| `tests/verify_yao_cli.py` | `833` | `test` | `pass` | +| `scripts/skill_report_model.py` | `782` | `internal-module` | `pass` | +| `scripts/compile_skill.py` | `734` | `cli-script` | `pass` | +| `scripts/optimize_description.py` | `723` | `cli-script` | `pass` | +| `scripts/trust_check.py` | `714` | `internal-module` | `pass` | +| `scripts/yao_cli_parser.py` | `691` | `internal-module` | `pass` | +| `scripts/build_skill_atlas.py` | `674` | `cli-script` | `pass` | +| `scripts/skill_report_layout.py` | `653` | `internal-module` | `pass` | +| `scripts/render_reference_synthesis.py` | `644` | `cli-script` | `pass` | + +## Release Rule + +- `block` hotspots should be split before governed release. +- `warn` hotspots can ship only when Review Studio keeps them visible and a reviewer accepts the modularization plan. +- Do not split a file only for line count; split when a stable responsibility boundary is clear. diff --git a/reports/benchmark_reproducibility.json b/reports/benchmark_reproducibility.json index bd2e1650..fce60636 100644 --- a/reports/benchmark_reproducibility.json +++ b/reports/benchmark_reproducibility.json @@ -3,12 +3,13 @@ "ok": true, "generated_at": "2026-06-14", "skill_dir": ".", - "commit": "4737358f3c7acb6650d5463793e5f0e8f913aada", + "commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d", "git_status": { "available": true, "dirty": true, - "changed_file_count": 30, + "changed_file_count": 44, "sample": [ + " M Makefile", " M registry/index.json", " M registry/packages/yao-meta-skill.json", " M reports/adoption_drift_report.json", @@ -16,11 +17,10 @@ " M reports/benchmark_reproducibility.md", " M reports/compiled_targets.json", " M reports/context_budget.json", + " M reports/install_simulation.json", " M reports/output_execution_runs.json", " M reports/output_execution_runs.md", - " M reports/package_verification.json", - " M reports/package_verification.md", - " M reports/registry_audit.json" + " M reports/package_verification.json" ] }, "summary": { @@ -42,7 +42,7 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 30 + "changed_file_count": 44 }, "methodology": { "path": "reports/benchmark_methodology.md", @@ -116,7 +116,7 @@ "path": "reports/output_execution_runs.json", "exists": true, "bytes": 7967, - "sha256": "cd6de0ee193725d03c3e16b3b116eda21ee2db71d830505de50da4c3624c8f3e" + "sha256": "1c204ff667b83e4635c792e2ea387865af24dd3191147f24f22f69ceaff968b5" }, { "label": "blind_review", @@ -150,43 +150,43 @@ "label": "trust_report", "path": "reports/security_trust_report.json", "exists": true, - "bytes": 87272, - "sha256": "3cbe50361df9b509477ee70f27da9fc4e95462d588b1e7b71ba31da8e9f75d7b" + "bytes": 88376, + "sha256": "c846881bdb45e47b6f7c576e9c0e58cc157d7fd2f358ba710fbf92e9564d89fd" }, { "label": "python_compatibility", "path": "reports/python_compatibility.json", "exists": true, - "bytes": 18283, - "sha256": "435dabcd3ce01fc90fc01f1b359e5063e1ff468eec8ae38daeb05116edc5d08f" + "bytes": 18557, + "sha256": "29fd6618afda3e74452262ed5c0ebd03d585495bb08aeac08d6341c4aa3be54c" }, { "label": "registry_audit", "path": "reports/registry_audit.json", "exists": true, "bytes": 3183, - "sha256": "d293ac8472d4c16f32f77cecb735d7c32f5a0bf9a409f43006c74b7d826de34b" + "sha256": "729094faff9d20fec82ea1a481332389b3104a6e37bfe87b20cd4dfc833c7d80" }, { "label": "package_verification", "path": "reports/package_verification.json", "exists": true, "bytes": 19325, - "sha256": "bef665206e2f6ca0e998caa941fc6ffe75cf782036945595d743f83f156fc04f" + "sha256": "5f45e45cc28c43693f702228587a82a9246a35df09f95046e3d111dd5f48897c" }, { "label": "install_simulation", "path": "reports/install_simulation.json", "exists": true, "bytes": 8557, - "sha256": "2bb990fc21986c840309a8ca118612ba27baa7538fd426538ab7955ea9bebb57" + "sha256": "c0ffaaded1898df656415208722157213bb364200d8834d9d21812d574e7b269" }, { "label": "skill_os2_audit", "path": "reports/skill_os2_audit.json", "exists": true, "bytes": 13946, - "sha256": "ef085ddc8a1e23ddda43d41adde62b50e6b1988842b232019c28a2e29b1d807a" + "sha256": "80ef52f1775e85d6b96643cbebe99f21a0f04d86af6e38a4f1901e3b5511a235" }, { "label": "world_class_evidence_plan", @@ -213,8 +213,8 @@ "label": "world_class_claim_guard", "path": "reports/world_class_claim_guard.json", "exists": true, - "bytes": 7898, - "sha256": "63628e78d1d2967928b86f73faa133ddc7d712499ffb5dd1d7947b2c070f3899" + "bytes": 7995, + "sha256": "608c954d1af917a0e062d90d976a157a44a578e1137e3759209be90c100fecc2" } ], "missing_artifacts": [], diff --git a/reports/benchmark_reproducibility.md b/reports/benchmark_reproducibility.md index 6c44ec79..5436a567 100644 --- a/reports/benchmark_reproducibility.md +++ b/reports/benchmark_reproducibility.md @@ -1,7 +1,7 @@ # Benchmark Reproducibility Generated at: `2026-06-14` -Commit: `4737358f3c7acb6650d5463793e5f0e8f913aada` +Commit: `ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d` Working tree dirty at generation: `true` ## Summary @@ -16,7 +16,7 @@ Working tree dirty at generation: `true` - provider evidence complete: `false` - human review complete: `false` - world-class ready: `false` -- changed files at generation: `30` +- changed files at generation: `44` This report proves local benchmark reproducibility only. It keeps external provider and human-review gaps visible instead of counting them as complete. @@ -40,21 +40,21 @@ This report proves local benchmark reproducibility only. It keeps external provi | output_cases | `evals/output/cases.jsonl` | present | `a6ae96857116` | | output_schema | `evals/output/schema.json` | present | `8ee340c95064` | | output_scorecard | `reports/output_quality_scorecard.json` | present | `0806258a8e08` | -| output_execution | `reports/output_execution_runs.json` | present | `cd6de0ee1937` | +| output_execution | `reports/output_execution_runs.json` | present | `1c204ff667b8` | | blind_review | `reports/output_blind_review_pack.json` | present | `bbe2db8ec277` | | review_adjudication | `reports/output_review_adjudication.json` | present | `ddd9af90d42e` | | trigger_scorecard | `reports/route_scorecard.json` | present | `c164e83e36d0` | | runtime_conformance | `reports/conformance_matrix.json` | present | `8251329e663d` | -| trust_report | `reports/security_trust_report.json` | present | `3cbe50361df9` | -| python_compatibility | `reports/python_compatibility.json` | present | `435dabcd3ce0` | -| registry_audit | `reports/registry_audit.json` | present | `d293ac8472d4` | -| package_verification | `reports/package_verification.json` | present | `bef665206e2f` | -| install_simulation | `reports/install_simulation.json` | present | `2bb990fc2198` | -| skill_os2_audit | `reports/skill_os2_audit.json` | present | `ef085ddc8a1e` | +| trust_report | `reports/security_trust_report.json` | present | `c846881bdb45` | +| python_compatibility | `reports/python_compatibility.json` | present | `29fd6618afda` | +| registry_audit | `reports/registry_audit.json` | present | `729094faff9d` | +| package_verification | `reports/package_verification.json` | present | `5f45e45cc28c` | +| install_simulation | `reports/install_simulation.json` | present | `c0ffaaded189` | +| skill_os2_audit | `reports/skill_os2_audit.json` | present | `80ef52f1775e` | | world_class_evidence_plan | `reports/world_class_evidence_plan.json` | present | `ed1274b7c18c` | | world_class_evidence_ledger | `reports/world_class_evidence_ledger.json` | present | `5ed043491c3d` | | world_class_evidence_intake | `reports/world_class_evidence_intake.json` | present | `124b9239d7f3` | -| world_class_claim_guard | `reports/world_class_claim_guard.json` | present | `63628e78d1d2` | +| world_class_claim_guard | `reports/world_class_claim_guard.json` | present | `608c954d1af9` | ## Reproduction Commands diff --git a/reports/compiled_targets.json b/reports/compiled_targets.json index 7d5f1f9a..c0786f75 100644 --- a/reports/compiled_targets.json +++ b/reports/compiled_targets.json @@ -172,6 +172,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -223,8 +224,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -383,7 +383,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -404,6 +404,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -481,14 +482,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -510,7 +511,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -623,7 +624,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -644,6 +645,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -721,14 +723,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -748,7 +750,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -1009,6 +1011,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -1060,8 +1063,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -1220,7 +1222,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -1241,6 +1243,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -1318,14 +1321,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -1347,7 +1350,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -1460,7 +1463,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -1481,6 +1484,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -1558,14 +1562,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -1585,7 +1589,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -1846,6 +1850,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -1897,8 +1902,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -2057,7 +2061,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -2078,6 +2082,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -2155,14 +2160,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -2184,7 +2189,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -2290,7 +2295,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -2311,6 +2316,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -2388,14 +2394,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -2415,7 +2421,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -2667,6 +2673,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -2718,8 +2725,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -2878,7 +2884,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -2899,6 +2905,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -2976,14 +2983,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -3005,7 +3012,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -3111,7 +3118,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -3132,6 +3139,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -3209,14 +3217,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -3236,7 +3244,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -3488,6 +3496,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -3539,8 +3548,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -3699,7 +3707,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -3720,6 +3728,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -3797,14 +3806,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -3826,7 +3835,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -3936,7 +3945,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -3957,6 +3966,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -4034,14 +4044,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -4061,7 +4071,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, diff --git a/reports/context_budget.json b/reports/context_budget.json index 7bfbc4c8..083f3285 100644 --- a/reports/context_budget.json +++ b/reports/context_budget.json @@ -6,10 +6,10 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1073524, + "other_text_tokens": 1081013, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1074275, - "relevant_file_count": 461, + "estimated_total_text_tokens": 1081764, + "relevant_file_count": 465, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 diff --git a/reports/install_simulation.json b/reports/install_simulation.json index 78bc145e..ac8329c4 100644 --- a/reports/install_simulation.json +++ b/reports/install_simulation.json @@ -8,7 +8,7 @@ "installed_skill_dir": "[temporary-install-root]/yao-meta-skill", "summary": { "archive_present": true, - "archive_entry_count": 547, + "archive_entry_count": 551, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json index 4911b403..79813db8 100644 --- a/reports/output_execution_runs.json +++ b/reports/output_execution_runs.json @@ -62,7 +62,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.31, + "duration_ms": 25.63, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -85,7 +85,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.31, + "duration_ms": 25.52, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -113,7 +113,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.65, + "duration_ms": 27.26, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -136,7 +136,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.46, + "duration_ms": 29.55, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -164,7 +164,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.46, + "duration_ms": 29.51, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -187,7 +187,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.63, + "duration_ms": 29.52, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -214,7 +214,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.51, + "duration_ms": 29.37, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -237,7 +237,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.72, + "duration_ms": 29.31, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -266,7 +266,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.64, + "duration_ms": 29.01, "provider": "local-output-eval-runner", "model": "", "usage": { diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md index ce7e8192..f75e84fa 100644 --- a/reports/output_execution_runs.md +++ b/reports/output_execution_runs.md @@ -24,15 +24,15 @@ Command runner evidence is present. This proves the eval harness executed an ext | Case | Variant | Mode | Model | Duration ms | Tokens | Score | Status | | --- | --- | --- | --- | ---: | ---: | ---: | --- | | skill-package-contract | baseline | command | local-output-eval-runner | 25.92 | 33 | 0.0 | pass | -| skill-package-contract | with_skill | command | local-output-eval-runner | 25.31 | 73 | 100.0 | pass | -| output-eval-expectation | baseline | command | local-output-eval-runner | 25.31 | 36 | 0.0 | pass | -| output-eval-expectation | with_skill | command | local-output-eval-runner | 25.65 | 80 | 100.0 | pass | -| ir-before-packaging | baseline | command | local-output-eval-runner | 25.46 | 33 | 0.0 | pass | -| ir-before-packaging | with_skill | command | local-output-eval-runner | 25.46 | 80 | 100.0 | pass | -| near-neighbor-boundary | baseline | command | local-output-eval-runner | 25.63 | 36 | 0.0 | pass | -| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 25.51 | 65 | 100.0 | pass | -| file-backed-governed-package | baseline | command | local-output-eval-runner | 25.72 | 37 | 0.0 | pass | -| file-backed-governed-package | with_skill | command | local-output-eval-runner | 25.64 | 98 | 100.0 | pass | +| skill-package-contract | with_skill | command | local-output-eval-runner | 25.63 | 73 | 100.0 | pass | +| output-eval-expectation | baseline | command | local-output-eval-runner | 25.52 | 36 | 0.0 | pass | +| output-eval-expectation | with_skill | command | local-output-eval-runner | 27.26 | 80 | 100.0 | pass | +| ir-before-packaging | baseline | command | local-output-eval-runner | 29.55 | 33 | 0.0 | pass | +| ir-before-packaging | with_skill | command | local-output-eval-runner | 29.51 | 80 | 100.0 | pass | +| near-neighbor-boundary | baseline | command | local-output-eval-runner | 29.52 | 36 | 0.0 | pass | +| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 29.37 | 65 | 100.0 | pass | +| file-backed-governed-package | baseline | command | local-output-eval-runner | 29.31 | 37 | 0.0 | pass | +| file-backed-governed-package | with_skill | command | local-output-eval-runner | 29.01 | 98 | 100.0 | pass | ## Next Fixes diff --git a/reports/package_verification.json b/reports/package_verification.json index 17224887..a5940798 100644 --- a/reports/package_verification.json +++ b/reports/package_verification.json @@ -8,8 +8,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", - "archive_entry_count": 547, + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_entry_count": 551, "failure_count": 0, "warning_count": 0 }, diff --git a/reports/package_verification.md b/reports/package_verification.md index 66f5746b..60dfcf98 100644 --- a/reports/package_verification.md +++ b/reports/package_verification.md @@ -4,7 +4,7 @@ - Package directory: `dist` - Targets: `4 / 4` adapters present - Archive present: `True` -- Archive SHA256: `d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2` +- Archive SHA256: `b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7` - Failures: `0` - Warnings: `0` diff --git a/reports/python_compatibility.json b/reports/python_compatibility.json index 7cb7a7de..89b897e1 100644 --- a/reports/python_compatibility.json +++ b/reports/python_compatibility.json @@ -5,7 +5,7 @@ "root": ".", "summary": { "target_python": "3.11", - "file_count": 140, + "file_count": 142, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -202,6 +202,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/render_architecture_maintainability.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/render_artifact_design_profile.py", "ok": true, @@ -544,6 +550,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "tests/verify_architecture_maintainability.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "tests/verify_artifact_design_profile.py", "ok": true, diff --git a/reports/python_compatibility.md b/reports/python_compatibility.md index fbf432d1..79745b56 100644 --- a/reports/python_compatibility.md +++ b/reports/python_compatibility.md @@ -6,7 +6,7 @@ Generated at: `2026-06-14` - decision: `pass` - target python: `3.11` -- files scanned: `140` +- files scanned: `142` - issues: `0` - syntax errors: `0` - f-string 3.11 violations: `0` diff --git a/reports/registry_audit.json b/reports/registry_audit.json index 1e71d6fc..f5b8c754 100644 --- a/reports/registry_audit.json +++ b/reports/registry_audit.json @@ -21,8 +21,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723", - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, "compatibility": { "openai": "pass", @@ -53,7 +53,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -78,7 +78,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" } ] }, diff --git a/reports/registry_audit.md b/reports/registry_audit.md index dcd9d416..2d0bf1ac 100644 --- a/reports/registry_audit.md +++ b/reports/registry_audit.md @@ -6,8 +6,8 @@ - Maturity: `governed` - Owner: `Yao Team` - License: `MIT` -- Package SHA256: `e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723` -- Archive SHA256: `d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2` +- Package SHA256: `1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa` +- Archive SHA256: `b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7` - Install simulated: `True` ## Compatibility diff --git a/reports/review-studio.html b/reports/review-studio.html index 04f68bf0..1f1177dd 100644 --- a/reports/review-studio.html +++ b/reports/review-studio.html @@ -286,28 +286,28 @@
审查结论 review - Score 90/100 + Score 89/100

核心指标

-
Skill IR2.0.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

82 scripts scanned; secrets found

Py Compat0

140 files scanned for Python 3.11

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

67 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

547 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

+
Skill IR2.0.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

83 scripts scanned; secrets found

Py Compat0

142 files scanned for Python 3.11

Arch Debt3

1438 largest lines; 55 CLI handlers

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

68 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

551 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

审查闸门

-
通过

意图画布

intent confidence 100/100; Intent is clear enough to package the first routeable version.

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 944/1000; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

0 secrets; 82 scripts; 3 network-capable scripts; 0 help smoke failures

reports/security_trust_report.json 证据
通过

Python 兼容

Python 3.11; 140 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards

reports/python_compatibility.json 证据
通过

权限批准

3/3 permissions approved; gaps 0; required file_write, network, subprocess

reports/security_trust_report.json + security/permission_policy.json 证据
通过

权限探针

4/4 targets probed; native 0; metadata fallback 4; residual risks 4

reports/runtime_permission_probes.json 证据
通过

组合治理

12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues

reports/skill_atlas.json 证据
通过

运营回路

1 metadata events; adoption 0; missed 0; bad-output 0; risk low

reports/adoption_drift_report.json 证据
关注

人工批准

0 active waivers; 1 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true

reports/world_class_evidence_ledger.json 证据
通过

注册审计

yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures

reports/registry_audit.json + reports/install_simulation.json 证据
通过

发布路线

0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended

reports/promotion_decisions.json + reports/upgrade_check.json + docs/migration-v2.md 证据
+
通过

意图画布

intent confidence 100/100; Intent is clear enough to package the first routeable version.

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 944/1000; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

0 secrets; 83 scripts; 3 network-capable scripts; 0 help smoke failures

reports/security_trust_report.json 证据
通过

Python 兼容

Python 3.11; 142 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards

reports/python_compatibility.json 证据
关注

架构维护

139 Python files; 3 hotspots; 0 blockers; largest 1438 lines; 55 CLI handlers

reports/architecture_maintainability.json 证据
通过

权限批准

3/3 permissions approved; gaps 0; required file_write, network, subprocess

reports/security_trust_report.json + security/permission_policy.json 证据
通过

权限探针

4/4 targets probed; native 0; metadata fallback 4; residual risks 4

reports/runtime_permission_probes.json 证据
通过

组合治理

12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues

reports/skill_atlas.json 证据
通过

运营回路

1 metadata events; adoption 0; missed 0; bad-output 0; risk low

reports/adoption_drift_report.json 证据
关注

人工批准

0 active waivers; 2 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true

reports/world_class_evidence_ledger.json 证据
通过

注册审计

yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures

reports/registry_audit.json + reports/install_simulation.json 证据
通过

发布路线

0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended

reports/promotion_decisions.json + reports/upgrade_check.json + docs/migration-v2.md 证据

阻断事项

无。

-

关注事项

  • 输出实验5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5
  • 人工批准0 active waivers; 1 warning gates still need reviewer decision
  • 世界证据4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true
+

关注事项

  • 输出实验5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5
  • 架构维护139 Python files; 3 hotspots; 0 blockers; largest 1438 lines; 55 CLI handlers
  • 人工批准0 active waivers; 2 warning gates still need reviewer decision
  • 世界证据4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true

修复动作

-
关注

输出实验

补足 output eval 覆盖、execution evidence、blind A/B 和 reviewer adjudication。

没有输出质量和人工盲评证据时,Skill 只能证明会触发,不能证明输出真的更好且经得起审查。
修复位置
evals/output/cases.jsonl + reports/output_quality_scorecard.md + reports/output_review_decisions.json + reports/output_review_adjudication.md
验证命令
python3 scripts/adjudicate_output_review.py --write-template && python3 scripts/yao.py output-review
关注

人工批准

对保留的 warning 写入 reviewer、理由、范围和到期时间,或修掉 warning。

warning 可以被接受,但必须可审计、会过期,并且不能掩盖 blocker。
修复位置
reports/review_waivers.md
验证命令
python3 scripts/render_review_waivers.py .
关注

世界证据

补齐 provider、真人盲评、原生权限执行和真实客户端遥测证据,或明确本次发布不声明 world-class 完成。

世界级结论必须来自已接受的外部/人工证据;计划、metadata fallback、待评审和本地命令都不能替代完成证据。
修复位置
reports/world_class_evidence_ledger.md + reports/world_class_evidence_plan.md + reports/world_class_evidence_intake.md
验证命令
python3 scripts/yao.py world-class-ledger . && python3 scripts/yao.py review-studio .
+
关注

输出实验

补足 output eval 覆盖、execution evidence、blind A/B 和 reviewer adjudication。

没有输出质量和人工盲评证据时,Skill 只能证明会触发,不能证明输出真的更好且经得起审查。
修复位置
evals/output/cases.jsonl + reports/output_quality_scorecard.md + reports/output_review_decisions.json + reports/output_review_adjudication.md
验证命令
python3 scripts/adjudicate_output_review.py --write-template && python3 scripts/yao.py output-review
关注

架构维护

处理大文件和 CLI command surface 的维护性热点,优先拆分稳定职责边界。

Meta Skill 的门禁、报告和 CLI 会持续增长;如果不把架构债纳入审查,后续能力会越来越难验证和迁移。
修复位置
reports/architecture_maintainability.md + scripts/yao.py + scripts/render_review_studio.py
验证命令
python3 scripts/yao.py architecture-audit .
关注

人工批准

对保留的 warning 写入 reviewer、理由、范围和到期时间,或修掉 warning。

warning 可以被接受,但必须可审计、会过期,并且不能掩盖 blocker。
修复位置
reports/review_waivers.md
验证命令
python3 scripts/render_review_waivers.py .
关注

世界证据

补齐 provider、真人盲评、原生权限执行和真实客户端遥测证据,或明确本次发布不声明 world-class 完成。

世界级结论必须来自已接受的外部/人工证据;计划、metadata fallback、待评审和本地命令都不能替代完成证据。
修复位置
reports/world_class_evidence_ledger.md + reports/world_class_evidence_plan.md + reports/world_class_evidence_intake.md
验证命令
python3 scripts/yao.py world-class-ledger . && python3 scripts/yao.py review-studio .
@@ -323,7 +323,7 @@

证据路径

-
  • skill_overviewreports/skill-overview.html
  • review_viewerreports/review-viewer.html
  • output_evalreports/output_quality_scorecard.md
  • output_executionreports/output_execution_runs.md
  • output_blind_reviewreports/output_blind_review_pack.md
  • output_review_decisionsreports/output_review_decisions.json
  • output_review_adjudicationreports/output_review_adjudication.md
  • benchmark_reproducibilityreports/benchmark_reproducibility.md
  • skill_os2_coveragereports/skill_os2_coverage.md
  • runtime_conformancereports/conformance_matrix.md
  • trust_reportreports/security_trust_report.md
  • python_compatibilityreports/python_compatibility.md
  • permission_policysecurity/permission_policy.md
  • runtime_permissionsreports/runtime_permission_probes.md
  • skill_atlasreports/skill_atlas.html
  • compiled_targetsreports/compiled_targets.md
  • adoption_driftreports/adoption_drift_report.md
  • review_waiversreports/review_waivers.md
  • review_annotationsreports/review_annotations.md
  • world_class_evidence_planreports/world_class_evidence_plan.md
  • world_class_evidence_ledgerreports/world_class_evidence_ledger.md
  • world_class_evidence_intakereports/world_class_evidence_intake.md
  • world_class_claim_guardreports/world_class_claim_guard.md
  • registry_auditreports/registry_audit.md
  • package_verificationreports/package_verification.md
  • install_simulationreports/install_simulation.md
  • upgrade_checkreports/upgrade_check.md
  • migrationdocs/migration-v2.md
+
  • skill_overviewreports/skill-overview.html
  • review_viewerreports/review-viewer.html
  • output_evalreports/output_quality_scorecard.md
  • output_executionreports/output_execution_runs.md
  • output_blind_reviewreports/output_blind_review_pack.md
  • output_review_decisionsreports/output_review_decisions.json
  • output_review_adjudicationreports/output_review_adjudication.md
  • benchmark_reproducibilityreports/benchmark_reproducibility.md
  • skill_os2_coveragereports/skill_os2_coverage.md
  • runtime_conformancereports/conformance_matrix.md
  • trust_reportreports/security_trust_report.md
  • python_compatibilityreports/python_compatibility.md
  • architecture_maintainabilityreports/architecture_maintainability.md
  • permission_policysecurity/permission_policy.md
  • runtime_permissionsreports/runtime_permission_probes.md
  • skill_atlasreports/skill_atlas.html
  • compiled_targetsreports/compiled_targets.md
  • adoption_driftreports/adoption_drift_report.md
  • review_waiversreports/review_waivers.md
  • review_annotationsreports/review_annotations.md
  • world_class_evidence_planreports/world_class_evidence_plan.md
  • world_class_evidence_ledgerreports/world_class_evidence_ledger.md
  • world_class_evidence_intakereports/world_class_evidence_intake.md
  • world_class_claim_guardreports/world_class_claim_guard.md
  • registry_auditreports/registry_audit.md
  • package_verificationreports/package_verification.md
  • install_simulationreports/install_simulation.md
  • upgrade_checkreports/upgrade_check.md
  • migrationdocs/migration-v2.md
@@ -363,12 +363,12 @@
-

信任报告

Secret
0
脚本数
82
网络脚本
3
Help 失败
0
包体哈希
e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723
+

信任报告

Secret
0
脚本数
83
网络脚本
3
Help 失败
0
包体哈希
1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa

安全边界

高风险 secret、远程 inline execution、缺失依赖策略或无法解释的脚本接口应阻断 governed release。

-

Python 兼容

目标 Python
3.11
文件数
140
问题数
0
语法错误
0
F-string 3.11
0
+

Python 兼容

目标 Python
3.11
文件数
142
问题数
0
语法错误
0
F-string 3.11
0

解释器边界

CI 和发布审查以 Python 3.11 兼容为底线;本地更高版本允许的新语法不能绕过兼容门禁。

@@ -393,7 +393,7 @@
-

人工批准

0 active waivers; 1 warning gates still need reviewer decision

+

人工批准

0 active waivers; 2 warning gates still need reviewer decision

批准台账

Waiver Count
0
Active Count
0
Expired Count
0
Invalid Count
0
覆盖 Gate
0
@@ -419,18 +419,18 @@
-

声明守卫

台账可声明
台账待补
4
声明面
67
违规数
0
Overclaim Guard Active
+

声明守卫

台账可声明
台账待补
4
声明面
68
违规数
0
Overclaim Guard Active

声明边界

claim guard 扫描 README、docs 和 reports 中的完成态表述;ledger 未 ready 时,任何英文完成断言、true 状态声明或中文完成态都会阻断发布审查。

注册审计

yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures

-

包体元数据

名称
yao-meta-skill
版本
1.1.0
Maturity
governed
Owner
Yao Team
License
MIT
信任级别
local
目标平台
openai, claude, generic, agent-skills-compatible, vscode
兼容通过
6/6
归档哈希
d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2
+

包体元数据

名称
yao-meta-skill
版本
1.1.0
Maturity
governed
Owner
Yao Team
License
MIT
信任级别
local
目标平台
openai, claude, generic, agent-skills-compatible, vscode
兼容通过
6/6
归档哈希
b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7

发布路线

0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended

-

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
547
失败数
0
警告数
0
归档哈希
d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2
+

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
551
失败数
0
警告数
0
归档哈希
b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7
diff --git a/reports/review-studio.json b/reports/review-studio.json index 942cc047..9829460d 100644 --- a/reports/review-studio.json +++ b/reports/review-studio.json @@ -4,11 +4,11 @@ "skill_dir": ".", "summary": { "decision": "review", - "world_class_score": 90, - "gate_count": 15, + "world_class_score": 89, + "gate_count": 16, "blocker_count": 0, - "warning_count": 3, - "action_count": 3, + "warning_count": 4, + "action_count": 4, "annotation_count": 0, "open_annotation_count": 0, "open_annotation_blocker_count": 0, @@ -59,7 +59,7 @@ "key": "trust-report", "label": "信任报告", "status": "pass", - "detail": "0 secrets; 82 scripts; 3 network-capable scripts; 0 help smoke failures", + "detail": "0 secrets; 83 scripts; 3 network-capable scripts; 0 help smoke failures", "evidence": "reports/security_trust_report.json", "link": "security_trust_report.md" }, @@ -67,10 +67,18 @@ "key": "python-compat", "label": "Python 兼容", "status": "pass", - "detail": "Python 3.11; 140 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards", + "detail": "Python 3.11; 142 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards", "evidence": "reports/python_compatibility.json", "link": "python_compatibility.md" }, + { + "key": "architecture-maintainability", + "label": "架构维护", + "status": "warn", + "detail": "139 Python files; 3 hotspots; 0 blockers; largest 1438 lines; 55 CLI handlers", + "evidence": "reports/architecture_maintainability.json", + "link": "architecture_maintainability.md" + }, { "key": "permission-gates", "label": "权限批准", @@ -107,7 +115,7 @@ "key": "review-waivers", "label": "人工批准", "status": "warn", - "detail": "0 active waivers; 1 warning gates still need reviewer decision", + "detail": "0 active waivers; 2 warning gates still need reviewer decision", "evidence": "reports/review_waivers.json", "link": "review_waivers.md" }, @@ -146,11 +154,19 @@ "evidence": "reports/output_quality_scorecard.json", "link": "output_quality_scorecard.md" }, + { + "key": "architecture-maintainability", + "label": "架构维护", + "status": "warn", + "detail": "139 Python files; 3 hotspots; 0 blockers; largest 1438 lines; 55 CLI handlers", + "evidence": "reports/architecture_maintainability.json", + "link": "architecture_maintainability.md" + }, { "key": "review-waivers", "label": "人工批准", "status": "warn", - "detail": "0 active waivers; 1 warning gates still need reviewer decision", + "detail": "0 active waivers; 2 warning gates still need reviewer decision", "evidence": "reports/review_waivers.json", "link": "review_waivers.md" }, @@ -226,6 +242,52 @@ "evidence_link": "output_quality_scorecard.md", "verification_command": "python3 scripts/adjudicate_output_review.py --write-template && python3 scripts/yao.py output-review" }, + { + "gate_key": "architecture-maintainability", + "label": "架构维护", + "status": "warn", + "priority": "warning", + "summary": "处理大文件和 CLI command surface 的维护性热点,优先拆分稳定职责边界。", + "why": "Meta Skill 的门禁、报告和 CLI 会持续增长;如果不把架构债纳入审查,后续能力会越来越难验证和迁移。", + "source_fix": "reports/architecture_maintainability.md + scripts/yao.py + scripts/render_review_studio.py", + "source_refs": [ + { + "path": "reports/architecture_maintainability.md", + "label": "architecture maintainability", + "kind": "report", + "line": 1, + "exists": true, + "link": "architecture_maintainability.md" + }, + { + "path": "scripts/yao.py", + "label": "Yao CLI orchestrator", + "kind": "source", + "line": 124, + "exists": true, + "link": "../scripts/yao.py" + }, + { + "path": "scripts/render_review_studio.py", + "label": "Review Studio renderer", + "kind": "source", + "line": 387, + "exists": true, + "link": "../scripts/render_review_studio.py" + }, + { + "path": "scripts/render_review_viewer.py", + "label": "review viewer renderer", + "kind": "source", + "line": 19, + "exists": true, + "link": "../scripts/render_review_viewer.py" + } + ], + "evidence": "reports/architecture_maintainability.json", + "evidence_link": "architecture_maintainability.md", + "verification_command": "python3 scripts/yao.py architecture-audit ." + }, { "gate_key": "review-waivers", "label": "人工批准", @@ -372,6 +434,7 @@ "runtime_conformance": "reports/conformance_matrix.md", "trust_report": "reports/security_trust_report.md", "python_compatibility": "reports/python_compatibility.md", + "architecture_maintainability": "reports/architecture_maintainability.md", "permission_policy": "security/permission_policy.md", "runtime_permissions": "reports/runtime_permission_probes.md", "skill_atlas": "reports/skill_atlas.html", @@ -3710,7 +3773,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.31, + "duration_ms": 25.63, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3733,7 +3796,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.31, + "duration_ms": 25.52, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3761,7 +3824,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.65, + "duration_ms": 27.26, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3784,7 +3847,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.46, + "duration_ms": 29.55, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3812,7 +3875,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.46, + "duration_ms": 29.51, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3835,7 +3898,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.63, + "duration_ms": 29.52, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3862,7 +3925,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.51, + "duration_ms": 29.37, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3885,7 +3948,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.72, + "duration_ms": 29.31, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3914,7 +3977,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.64, + "duration_ms": 29.01, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -4345,7 +4408,7 @@ "label": "Trust Security", "status": "pass", "objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.", - "current": "82 scripts; secrets 0; help failures 0", + "current": "83 scripts; secrets 0; help failures 0", "command": "python3 scripts/yao.py trust .", "test": "python3 tests/verify_trust_check.py", "evidence": [ @@ -4419,7 +4482,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 547; install failures 0", + "current": "archive entries 551; install failures 0", "command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .", "test": "python3 tests/verify_registry_audit.py", "evidence": [ @@ -4460,7 +4523,7 @@ "label": "Review Studio", "status": "pass", "objective": "One HTML page supports first-pass production review across trigger, output, runtime, trust, release, and evidence actions.", - "current": "15 gates; decision review; warnings 3", + "current": "16 gates; decision review; warnings 4", "command": "python3 scripts/yao.py review-studio .", "test": "python3 tests/verify_review_studio.py", "evidence": [ @@ -4778,7 +4841,7 @@ "label": "Review Studio 2.0", "status": "pass", "objective": "Recommended Skill OS 2.0 implementation PR from the upgrade plan.", - "current": "15 review gates", + "current": "16 review gates", "command": "make ci-test", "test": "tests/verify_review_studio.py", "evidence": [ @@ -5011,6 +5074,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -5062,8 +5126,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -5222,7 +5285,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -5243,6 +5306,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -5320,14 +5384,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -5349,7 +5413,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -5462,7 +5526,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -5483,6 +5547,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -5560,14 +5625,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -5587,7 +5652,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -5848,6 +5913,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -5899,8 +5965,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -6059,7 +6124,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -6080,6 +6145,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -6157,14 +6223,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -6186,7 +6252,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -6299,7 +6365,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -6320,6 +6386,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -6397,14 +6464,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -6424,7 +6491,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -6685,6 +6752,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -6736,8 +6804,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -6896,7 +6963,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -6917,6 +6984,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -6994,14 +7062,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -7023,7 +7091,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -7129,7 +7197,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -7150,6 +7218,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -7227,14 +7296,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -7254,7 +7323,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -7506,6 +7575,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -7557,8 +7627,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -7717,7 +7786,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -7738,6 +7807,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -7815,14 +7885,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -7844,7 +7914,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -7950,7 +8020,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -7971,6 +8041,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -8048,14 +8119,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -8075,7 +8146,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -8327,6 +8398,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -8378,8 +8450,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -8538,7 +8609,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -8559,6 +8630,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -8636,14 +8708,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -8665,7 +8737,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -8775,7 +8847,7 @@ }, "file_write": { "required": true, - "script_count": 59, + "script_count": 60, "scripts": [ "scripts/adjudicate_output_review.py", "scripts/build_confusion_matrix.py", @@ -8796,6 +8868,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -8873,14 +8946,14 @@ }, "help_smoke": { "enabled": true, - "checked_count": 72, + "checked_count": 73, "failed_count": 0, "failed_scripts": [] }, "trust_summary": { "secret_findings": 0, "network_script_count": 3, - "file_write_script_count": 59, + "file_write_script_count": 60, "subprocess_script_count": 8, "interactive_script_count": 0, "help_smoke_failed_count": 0 @@ -8900,7 +8973,7 @@ ], "capability_counts": { "network": 3, - "file_write": 59, + "file_write": 60, "subprocess": 8, "interactive": 0 }, @@ -9572,8 +9645,8 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 166, - "script_count": 82, + "scanned_files": 167, + "script_count": 83, "internal_module_count": 10, "secret_findings": 0, "dependency_files": [ @@ -9582,18 +9655,18 @@ "network_script_count": 3, "network_policy_covered_count": 3, "network_policy_missing_count": 0, - "file_write_script_count": 59, + "file_write_script_count": 60, "permission_required_count": 3, "permission_approved_count": 3, "permission_missing_count": 0, "permission_invalid_count": 0, "permission_expired_count": 0, - "help_smoke_checked_count": 72, + "help_smoke_checked_count": 73, "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 166, - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "package_hash_file_count": 167, + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" }, "failures": [], "warnings": [], @@ -9990,6 +10063,20 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/render_architecture_maintainability.py", + "interface": "cli", + "interface_declared": false, + "interface_reason": "Default CLI classification; add SCRIPT_INTERFACE for internal modules.", + "has_argparse": true, + "has_main_guard": true, + "uses_input": false, + "uses_network": false, + "uses_file_write": true, + "uses_subprocess": false, + "network_urls": [], + "network_hosts": [] + }, { "path": "scripts/render_artifact_design_profile.py", "interface": "cli", @@ -10795,9 +10882,9 @@ "help_smoke": { "enabled": true, "timeout_seconds": 5.0, - "candidate_count": 72, - "checked_count": 72, - "passed_count": 72, + "candidate_count": 73, + "checked_count": 73, + "passed_count": 73, "failed_count": 0, "skipped_count": 10, "failed_scripts": [], @@ -11072,6 +11159,16 @@ "stdout_excerpt": "usage: render_adoption_drift_report.py [-h] [--events-jsonl EVENTS_JSONL]\n [--output-json OUTPUT_JSON]\n [--output-md OUTPUT_MD]\n ", "stderr_excerpt": "" }, + { + "path": "scripts/render_architecture_maintainability.py", + "command": "python3 scripts/render_architecture_maintainability.py --help", + "returncode": 0, + "timed_out": false, + "passed": true, + "has_help_text": true, + "stdout_excerpt": "usage: render_architecture_maintainability.py [-h] [--output-json OUTPUT_JSON]\n [--output-md OUTPUT_MD]\n [--warn-lines WARN_LINES]\n ", + "stderr_excerpt": "" + }, { "path": "scripts/render_artifact_design_profile.py", "command": "python3 scripts/render_artifact_design_profile.py --help", @@ -11519,7 +11616,7 @@ "timed_out": false, "passed": true, "has_help_text": true, - "stdout_excerpt": "usage: yao.py [-h] [--record-cli-telemetry] [--no-cli-telemetry]\n [--telemetry-events-jsonl TELEMETRY_EVENTS_JSONL]\n {init,quickstart,validate,optimize-description,promote-check,python-compat,review,release-snapsho", + "stdout_excerpt": "usage: yao.py [-h] [--record-cli-telemetry] [--no-cli-telemetry]\n [--telemetry-events-jsonl TELEMETRY_EVENTS_JSONL]\n {init,quickstart,validate,optimize-description,promote-check,python-compat,architecture-audit,rev", "stderr_excerpt": "" } ], @@ -11637,6 +11734,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -11743,7 +11841,7 @@ "root": ".", "summary": { "target_python": "3.11", - "file_count": 140, + "file_count": 142, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -11940,6 +12038,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/render_architecture_maintainability.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/render_artifact_design_profile.py", "ok": true, @@ -12282,6 +12386,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "tests/verify_architecture_maintainability.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "tests/verify_artifact_design_profile.py", "ok": true, @@ -12607,6 +12717,156 @@ "markdown": "reports/python_compatibility.md" } }, + "architecture_maintainability": { + "schema_version": "1.0", + "ok": true, + "generated_at": "2026-06-14", + "skill_dir": ".", + "summary": { + "python_file_count": 139, + "script_file_count": 83, + "test_file_count": 56, + "internal_module_count": 12, + "cli_script_count": 72, + "command_handler_count": 55, + "warn_line_threshold": 900, + "block_line_threshold": 1500, + "largest_file_lines": 1438, + "hotspot_count": 3, + "blocker_count": 0, + "decision": "watch-maintainability-hotspots" + }, + "largest_files": [ + { + "path": "scripts/yao.py", + "lines": 1438, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + }, + { + "path": "scripts/render_review_studio.py", + "lines": 1196, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." + }, + { + "path": "scripts/render_review_viewer.py", + "lines": 983, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Split viewer data assembly from HTML section rendering." + }, + { + "path": "tests/verify_yao_cli.py", + "lines": 833, + "kind": "test", + "severity": "pass", + "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." + }, + { + "path": "scripts/skill_report_model.py", + "lines": 782, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/compile_skill.py", + "lines": 734, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/optimize_description.py", + "lines": 723, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/trust_check.py", + "lines": 714, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/yao_cli_parser.py", + "lines": 691, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/build_skill_atlas.py", + "lines": 674, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/skill_report_layout.py", + "lines": 653, + "kind": "internal-module", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/render_reference_synthesis.py", + "lines": 644, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + } + ], + "hotspots": [ + { + "path": "scripts/yao.py", + "lines": 1438, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + }, + { + "path": "scripts/render_review_studio.py", + "lines": 1196, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." + }, + { + "path": "scripts/render_review_viewer.py", + "lines": 983, + "kind": "cli-script", + "severity": "warn", + "recommendation": "Split viewer data assembly from HTML section rendering." + } + ], + "actions": [ + { + "path": "scripts/yao.py", + "severity": "warn", + "action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + }, + { + "path": "scripts/render_review_studio.py", + "severity": "warn", + "action": "Move data loading and large section renderers into focused review_studio_* modules." + }, + { + "path": "scripts/render_review_viewer.py", + "severity": "warn", + "action": "Split viewer data assembly from HTML section rendering." + } + ], + "artifacts": { + "json": "reports/architecture_maintainability.json", + "markdown": "reports/architecture_maintainability.md" + } + }, "context_budget": { "ok": true, "failures": [], @@ -12615,10 +12875,10 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1073524, + "other_text_tokens": 1081013, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1074275, - "relevant_file_count": 461, + "estimated_total_text_tokens": 1081764, + "relevant_file_count": 465, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 @@ -13462,7 +13722,7 @@ }, "catalog": { "workspace_root": ".", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skills": [ { "name": "yao-meta-skill", @@ -13509,6 +13769,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -13627,8 +13888,8 @@ "report": "reports/adoption_drift_report.json", "risk_band": "low", "event_count": 1, - "adoption_sample_count": 1, - "adoption_rate": 100.0, + "adoption_sample_count": 0, + "adoption_rate": 0, "candidate_count": 0 } }, @@ -14291,7 +14552,7 @@ "name": "incident-command-governor", "path": "examples/governed-incident-command/generated-skill", "reason": "review overdue by cadence monthly", - "age_days": 74, + "age_days": 75, "allowed_days": 31, "actionable": false, "scope": "example" @@ -14459,7 +14720,7 @@ "adoption_drift": { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13T17:32:44Z", + "generated_at": "2026-06-13T17:49:00Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", @@ -14894,7 +15155,7 @@ "summary": { "ledger_ready_to_claim_world_class": false, "ledger_pending_count": 4, - "claim_surface_count": 67, + "claim_surface_count": 68, "violation_count": 0, "overclaim_guard_active": true, "decision": "claim-guard-pass-evidence-pending" @@ -14959,6 +15220,10 @@ "path": "reports/adoption_drift_report.md", "violation_count": 0 }, + { + "path": "reports/architecture_maintainability.md", + "violation_count": 0 + }, { "path": "reports/artifact-design-profile.md", "violation_count": 0 @@ -15229,8 +15494,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723", - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, "compatibility": { "openai": "pass", @@ -15261,7 +15526,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -15286,7 +15551,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" } ] }, @@ -15309,8 +15574,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", - "archive_entry_count": 547, + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_entry_count": 551, "failure_count": 0, "warning_count": 0 }, @@ -15975,7 +16240,7 @@ "installed_skill_dir": "[temporary-install-root]/yao-meta-skill", "summary": { "archive_present": true, - "archive_entry_count": 547, + "archive_entry_count": 551, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -16317,12 +16582,12 @@ { "field": "archive_sha256", "from": "", - "to": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" } ] }, diff --git a/reports/review-viewer.json b/reports/review-viewer.json index fa87d2b2..d87109ec 100644 --- a/reports/review-viewer.json +++ b/reports/review-viewer.json @@ -437,7 +437,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 82 + "file_count": 83 }, { "path": "evals", @@ -449,10 +449,10 @@ "path": "reports", "label": "Generated evidence and overview artifacts", "kind": "folder", - "file_count": 193 + "file_count": 195 } ], - "file_count": 339, + "file_count": 342, "folder_count": 4, "distribution": [ { @@ -477,7 +477,7 @@ }, { "label": "scripts", - "value": 82 + "value": 83 }, { "label": "evals", @@ -485,7 +485,7 @@ }, { "label": "reports", - "value": 193 + "value": 195 } ] }, @@ -606,7 +606,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 82 + "file_count": 83 }, { "path": "evals", @@ -618,7 +618,7 @@ "path": "reports", "label": "Generated evidence and overview artifacts", "kind": "folder", - "file_count": 193 + "file_count": 195 } ], "strengths": [ @@ -906,9 +906,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 35 + "changed_file_count": 44 }, - "commit": "4737358f3c7acb6650d5463793e5f0e8f913aada", + "commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d", "missing_artifacts": [], "limitations": [ "Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.", @@ -983,8 +983,8 @@ "failures": [] }, "trust_security": { - "scanned_files": 166, - "script_count": 82, + "scanned_files": 167, + "script_count": 83, "internal_module_count": 10, "secret_findings": 0, "dependency_files": [ @@ -993,18 +993,18 @@ "network_script_count": 3, "network_policy_covered_count": 3, "network_policy_missing_count": 0, - "file_write_script_count": 59, + "file_write_script_count": 60, "permission_required_count": 3, "permission_approved_count": 3, "permission_missing_count": 0, "permission_invalid_count": 0, "permission_expired_count": 0, - "help_smoke_checked_count": 72, + "help_smoke_checked_count": 73, "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 166, - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "package_hash_file_count": 167, + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" }, "skill_atlas": { "skill_count": 12, @@ -1042,8 +1042,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723", - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, "compatibility": { "openai": "pass", @@ -1074,7 +1074,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -1090,8 +1090,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", - "archive_entry_count": 547, + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_entry_count": 551, "failure_count": 0, "warning_count": 0 }, @@ -1102,7 +1102,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 547, + "archive_entry_count": 551, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1169,12 +1169,12 @@ { "field": "archive_sha256", "from": "", - "to": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" } ] }, diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json index cbe99cdc..b4352db5 100644 --- a/reports/security_trust_report.json +++ b/reports/security_trust_report.json @@ -2,8 +2,8 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 166, - "script_count": 82, + "scanned_files": 167, + "script_count": 83, "internal_module_count": 10, "secret_findings": 0, "dependency_files": [ @@ -12,18 +12,18 @@ "network_script_count": 3, "network_policy_covered_count": 3, "network_policy_missing_count": 0, - "file_write_script_count": 59, + "file_write_script_count": 60, "permission_required_count": 3, "permission_approved_count": 3, "permission_missing_count": 0, "permission_invalid_count": 0, "permission_expired_count": 0, - "help_smoke_checked_count": 72, + "help_smoke_checked_count": 73, "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 166, - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "package_hash_file_count": 167, + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" }, "failures": [], "warnings": [], @@ -420,6 +420,20 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/render_architecture_maintainability.py", + "interface": "cli", + "interface_declared": false, + "interface_reason": "Default CLI classification; add SCRIPT_INTERFACE for internal modules.", + "has_argparse": true, + "has_main_guard": true, + "uses_input": false, + "uses_network": false, + "uses_file_write": true, + "uses_subprocess": false, + "network_urls": [], + "network_hosts": [] + }, { "path": "scripts/render_artifact_design_profile.py", "interface": "cli", @@ -1225,9 +1239,9 @@ "help_smoke": { "enabled": true, "timeout_seconds": 5.0, - "candidate_count": 72, - "checked_count": 72, - "passed_count": 72, + "candidate_count": 73, + "checked_count": 73, + "passed_count": 73, "failed_count": 0, "skipped_count": 10, "failed_scripts": [], @@ -1502,6 +1516,16 @@ "stdout_excerpt": "usage: render_adoption_drift_report.py [-h] [--events-jsonl EVENTS_JSONL]\n [--output-json OUTPUT_JSON]\n [--output-md OUTPUT_MD]\n ", "stderr_excerpt": "" }, + { + "path": "scripts/render_architecture_maintainability.py", + "command": "python3 scripts/render_architecture_maintainability.py --help", + "returncode": 0, + "timed_out": false, + "passed": true, + "has_help_text": true, + "stdout_excerpt": "usage: render_architecture_maintainability.py [-h] [--output-json OUTPUT_JSON]\n [--output-md OUTPUT_MD]\n [--warn-lines WARN_LINES]\n ", + "stderr_excerpt": "" + }, { "path": "scripts/render_artifact_design_profile.py", "command": "python3 scripts/render_artifact_design_profile.py --help", @@ -1949,7 +1973,7 @@ "timed_out": false, "passed": true, "has_help_text": true, - "stdout_excerpt": "usage: yao.py [-h] [--record-cli-telemetry] [--no-cli-telemetry]\n [--telemetry-events-jsonl TELEMETRY_EVENTS_JSONL]\n {init,quickstart,validate,optimize-description,promote-check,python-compat,review,release-snapsho", + "stdout_excerpt": "usage: yao.py [-h] [--record-cli-telemetry] [--no-cli-telemetry]\n [--telemetry-events-jsonl TELEMETRY_EVENTS_JSONL]\n {init,quickstart,validate,optimize-description,promote-check,python-compat,architecture-audit,rev", "stderr_excerpt": "" } ], @@ -2067,6 +2091,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md index a2c31529..09389fdf 100644 --- a/reports/security_trust_report.md +++ b/reports/security_trust_report.md @@ -1,22 +1,22 @@ # Security Trust Report - OK: `True` -- Scanned files: `166` -- Scripts: `82` +- Scanned files: `167` +- Scripts: `83` - Internal script modules: `10` - Secret findings: `0` - Network-capable scripts: `3` - Network policy covered scripts: `3` - Network policy missing scripts: `0` -- File-write scripts: `59` +- File-write scripts: `60` - Permission approvals: `3 / 3` - Permission approval gaps: `0` -- CLI help smoke checked: `72` +- CLI help smoke checked: `73` - CLI help smoke failures: `0` - Interactive scripts: `0` - Package hash scope: `source-contract-without-generated-reports` -- Package hash files: `166` -- Package SHA256: `e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723` +- Package hash files: `167` +- Package SHA256: `1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa` ## Failures @@ -54,8 +54,8 @@ - Enabled: `True` - Timeout seconds: `5.0` -- Checked scripts: `72` -- Passed scripts: `72` +- Checked scripts: `73` +- Passed scripts: `73` - Failed scripts: `none` ## Script Surface @@ -89,6 +89,7 @@ | scripts/python_compat_check.py | cli | True | True | True | False | False | True | False | Checks repository Python source for syntax that can pass locally but fail on the supported CI interpreter. | | scripts/registry_audit.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. | | scripts/render_adoption_drift_report.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. | +| scripts/render_architecture_maintainability.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. | | scripts/render_artifact_design_profile.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. | | scripts/render_baseline_compare.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. | | scripts/render_benchmark_reproducibility.py | cli | True | True | True | False | False | True | True | Renders a release-facing benchmark reproducibility manifest and Markdown report. | diff --git a/reports/skill-overview.html b/reports/skill-overview.html index 1f632173..a044258c 100644 --- a/reports/skill-overview.html +++ b/reports/skill-overview.html @@ -771,7 +771,7 @@

让 reviewer 快速确认关键文件、目录和资产分布。Lets reviewers confirm key files, directories, and asset distribution quickly.

-
资产分布339项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
+
资产分布342项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
diff --git a/reports/skill-overview.json b/reports/skill-overview.json index 286ad479..446abf77 100644 --- a/reports/skill-overview.json +++ b/reports/skill-overview.json @@ -436,7 +436,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 82 + "file_count": 83 }, { "path": "evals", @@ -448,10 +448,10 @@ "path": "reports", "label": "Generated evidence and overview artifacts", "kind": "folder", - "file_count": 193 + "file_count": 195 } ], - "file_count": 339, + "file_count": 342, "folder_count": 4, "distribution": [ { @@ -476,7 +476,7 @@ }, { "label": "scripts", - "value": 82 + "value": 83 }, { "label": "evals", @@ -484,7 +484,7 @@ }, { "label": "reports", - "value": 193 + "value": 195 } ] }, @@ -605,7 +605,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 82 + "file_count": 83 }, { "path": "evals", @@ -617,7 +617,7 @@ "path": "reports", "label": "Generated evidence and overview artifacts", "kind": "folder", - "file_count": 193 + "file_count": 195 } ], "strengths": [ @@ -905,9 +905,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 35 + "changed_file_count": 44 }, - "commit": "4737358f3c7acb6650d5463793e5f0e8f913aada", + "commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d", "missing_artifacts": [], "limitations": [ "Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.", @@ -982,8 +982,8 @@ "failures": [] }, "trust_security": { - "scanned_files": 166, - "script_count": 82, + "scanned_files": 167, + "script_count": 83, "internal_module_count": 10, "secret_findings": 0, "dependency_files": [ @@ -992,18 +992,18 @@ "network_script_count": 3, "network_policy_covered_count": 3, "network_policy_missing_count": 0, - "file_write_script_count": 59, + "file_write_script_count": 60, "permission_required_count": 3, "permission_approved_count": 3, "permission_missing_count": 0, "permission_invalid_count": 0, "permission_expired_count": 0, - "help_smoke_checked_count": 72, + "help_smoke_checked_count": 73, "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 166, - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "package_hash_file_count": 167, + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" }, "skill_atlas": { "skill_count": 12, @@ -1041,8 +1041,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723", - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, "compatibility": { "openai": "pass", @@ -1073,7 +1073,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -1089,8 +1089,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", - "archive_entry_count": 547, + "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_entry_count": 551, "failure_count": 0, "warning_count": 0 }, @@ -1101,7 +1101,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 547, + "archive_entry_count": 551, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1168,12 +1168,12 @@ { "field": "archive_sha256", "from": "", - "to": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" } ] }, diff --git a/reports/skill_atlas.json b/reports/skill_atlas.json index 33bcd0fe..a450c554 100644 --- a/reports/skill_atlas.json +++ b/reports/skill_atlas.json @@ -44,7 +44,7 @@ }, "catalog": { "workspace_root": ".", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skills": [ { "name": "yao-meta-skill", @@ -91,6 +91,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -209,8 +210,8 @@ "report": "reports/adoption_drift_report.json", "risk_band": "low", "event_count": 1, - "adoption_sample_count": 1, - "adoption_rate": 100.0, + "adoption_sample_count": 0, + "adoption_rate": 0, "candidate_count": 0 } }, @@ -873,7 +874,7 @@ "name": "incident-command-governor", "path": "examples/governed-incident-command/generated-skill", "reason": "review overdue by cadence monthly", - "age_days": 74, + "age_days": 75, "allowed_days": 31, "actionable": false, "scope": "example" diff --git a/reports/skill_os2_audit.json b/reports/skill_os2_audit.json index da3dccae..2927c4a5 100644 --- a/reports/skill_os2_audit.json +++ b/reports/skill_os2_audit.json @@ -197,7 +197,7 @@ "key": "trust-security", "label": "Trust Security", "status": "pass", - "current": "secrets 0; scripts 82; help failures 0", + "current": "secrets 0; scripts 83; help failures 0", "target": "Secrets, scripts, dependencies, permissions, and package hash are reviewable", "evidence": [ { @@ -281,7 +281,7 @@ "key": "registry-distribution", "label": "Registry Distribution", "status": "pass", - "current": "zip entries 547; install failures 0; permission failures 0", + "current": "zip entries 551; install failures 0; permission failures 0", "target": "Package metadata, archive checksum, package verification, and install simulation pass", "evidence": [ { @@ -303,7 +303,7 @@ "key": "review-studio", "label": "Review Studio", "status": "pass", - "current": "decision review; warnings 3; score 90", + "current": "decision review; warnings 4; score 89", "target": "One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations", "evidence": [ { diff --git a/reports/skill_os2_audit.md b/reports/skill_os2_audit.md index b07ddbae..7ba2fbf5 100644 --- a/reports/skill_os2_audit.md +++ b/reports/skill_os2_audit.md @@ -23,12 +23,12 @@ Generated at: `2026-06-14` | Human Adjudication | human-required | 0/5 decisions; pending 5 | Real reviewer decisions recorded before claiming output review completion | Record real A/B choices in the decision template, then regenerate adjudication. | | Benchmark Reproducibility | pass | artifacts 20; missing 0; failures 3 | Public methodology, reproducible commands, required artifacts, and failure disclosure are machine-checkable | Keep the manifest current with every benchmark, package, and release evidence change. | | Runtime Conformance | pass | 5/5 targets pass | Target package structure, metadata, relative paths, and degradation notes pass | Keep target conformance fixtures updated as platform contracts change. | -| Trust Security | pass | secrets 0; scripts 82; help failures 0 | Secrets, scripts, dependencies, permissions, and package hash are reviewable | Keep high-permission approvals scoped, expiring, and target-mapped. | +| Trust Security | pass | secrets 0; scripts 83; help failures 0 | Secrets, scripts, dependencies, permissions, and package hash are reviewable | Keep high-permission approvals scoped, expiring, and target-mapped. | | Permission Metadata | pass | 4/4 target probes pass; metadata fallback 4 | Packaged adapters expose explicit permission metadata and residual risks | Preserve residual-risk notes until real native enforcement exists. | | Native Permission Enforcement | external-required | native-enforced targets 0 | At least one target/client enforces approved permissions at runtime | Integrate a real client or installer runtime guard before claiming native permission enforcement. | | Skill Atlas | pass | 12 skills; actionable collisions 0 | Workspace catalog, route overlap, stale/owner gaps, drift, and no-route opportunities | Feed real drift data into Atlas once client telemetry is installed. | -| Registry Distribution | pass | zip entries 547; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | -| Review Studio | pass | decision review; warnings 3; score 90 | One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations | Resolve human/external warning gates before claiming full release readiness. | +| Registry Distribution | pass | zip entries 551; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | +| Review Studio | pass | decision review; warnings 4; score 89 | One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations | Resolve human/external warning gates before claiming full release readiness. | | Telemetry Drift | pass | events 1; risk low; recipes 5 | Local-first metadata-only event contract, aggregate drift report, hook recipes, and import path | Keep raw JSONL out of distributed packages and use aggregate reports for Atlas. | | Native Client Telemetry | external-required | external source events 0; adoption samples 0 | A real Browser/Chrome/provider client sends production metadata events | Install a real client against the native host and import production metadata-only events. | diff --git a/reports/skill_os2_coverage.json b/reports/skill_os2_coverage.json index d7ca42a7..a5e747bd 100644 --- a/reports/skill_os2_coverage.json +++ b/reports/skill_os2_coverage.json @@ -122,7 +122,7 @@ "label": "Trust Security", "status": "pass", "objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.", - "current": "82 scripts; secrets 0; help failures 0", + "current": "83 scripts; secrets 0; help failures 0", "command": "python3 scripts/yao.py trust .", "test": "python3 tests/verify_trust_check.py", "evidence": [ @@ -196,7 +196,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 547; install failures 0", + "current": "archive entries 551; install failures 0", "command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .", "test": "python3 tests/verify_registry_audit.py", "evidence": [ @@ -237,7 +237,7 @@ "label": "Review Studio", "status": "pass", "objective": "One HTML page supports first-pass production review across trigger, output, runtime, trust, release, and evidence actions.", - "current": "15 gates; decision review; warnings 3", + "current": "16 gates; decision review; warnings 4", "command": "python3 scripts/yao.py review-studio .", "test": "python3 tests/verify_review_studio.py", "evidence": [ @@ -555,7 +555,7 @@ "label": "Review Studio 2.0", "status": "pass", "objective": "Recommended Skill OS 2.0 implementation PR from the upgrade plan.", - "current": "15 review gates", + "current": "16 review gates", "command": "make ci-test", "test": "tests/verify_review_studio.py", "evidence": [ diff --git a/reports/skill_os2_coverage.md b/reports/skill_os2_coverage.md index a322992d..a0e9b179 100644 --- a/reports/skill_os2_coverage.md +++ b/reports/skill_os2_coverage.md @@ -21,10 +21,10 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts, | Skill IR | `pass` | schema 2.0.0; targets 5 | `python3 scripts/yao.py skill-ir .` | `python3 tests/verify_skill_ir.py` | | Output Eval Lab | `pass` | 5 cases; delta 100.0; execution 10 | `python3 scripts/yao.py output-exec . && python3 scripts/yao.py output-review .` | `python3 tests/verify_output_eval_lab.py` | | Runtime Conformance | `pass` | 5/5 targets pass | `python3 scripts/yao.py conformance .` | `python3 tests/verify_conformance_suite.py` | -| Trust Security | `pass` | 82 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` | +| Trust Security | `pass` | 83 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` | | Skill Atlas | `pass` | 12 scanned skills; actionable collisions 0 | `python3 scripts/yao.py skill-atlas --workspace-root .` | `python3 tests/verify_skill_atlas.py` | -| Registry Distribution | `pass` | archive entries 547; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | -| Review Studio | `pass` | 15 gates; decision review; warnings 3 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` | +| Registry Distribution | `pass` | archive entries 551; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | +| Review Studio | `pass` | 16 gates; decision review; warnings 4 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` | | Telemetry Drift | `pass` | events 1; recipes 5; risk low | `python3 scripts/yao.py telemetry-hooks . && python3 scripts/yao.py adoption-drift .` | `python3 tests/verify_telemetry_hooks.py` | ## Recommended PR Coverage @@ -41,7 +41,7 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts, | Trust Check | `pass` | secret findings 0 | `make ci-test` | `tests/verify_trust_check.py` | | Skill Atlas Generator | `pass` | 12 scanned skills | `make ci-test` | `tests/verify_skill_atlas.py` | | Registry Package Format | `pass` | registry ok True | `make ci-test` | `tests/verify_registry_audit.py` | -| Review Studio 2.0 | `pass` | 15 review gates | `make ci-test` | `tests/verify_review_studio.py` | +| Review Studio 2.0 | `pass` | 16 review gates | `make ci-test` | `tests/verify_review_studio.py` | | Migration V2 Docs | `pass` | migration guide present | `make ci-test` | `docs review` | ## Next Highest-Leverage Moves diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json index 53530144..62e314ed 100644 --- a/reports/upgrade_check.json +++ b/reports/upgrade_check.json @@ -70,12 +70,12 @@ { "field": "archive_sha256", "from": "", - "to": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" } ] }, diff --git a/reports/world_class_claim_guard.json b/reports/world_class_claim_guard.json index b8314b82..68d837f6 100644 --- a/reports/world_class_claim_guard.json +++ b/reports/world_class_claim_guard.json @@ -6,7 +6,7 @@ "summary": { "ledger_ready_to_claim_world_class": false, "ledger_pending_count": 4, - "claim_surface_count": 67, + "claim_surface_count": 68, "violation_count": 0, "overclaim_guard_active": true, "decision": "claim-guard-pass-evidence-pending" @@ -71,6 +71,10 @@ "path": "reports/adoption_drift_report.md", "violation_count": 0 }, + { + "path": "reports/architecture_maintainability.md", + "violation_count": 0 + }, { "path": "reports/artifact-design-profile.md", "violation_count": 0 diff --git a/reports/world_class_claim_guard.md b/reports/world_class_claim_guard.md index d86a1795..35462189 100644 --- a/reports/world_class_claim_guard.md +++ b/reports/world_class_claim_guard.md @@ -7,7 +7,7 @@ Generated at: `2026-06-14` - decision: `claim-guard-pass-evidence-pending` - ledger ready to claim world-class: `false` - ledger pending evidence: `4` -- claim surfaces scanned: `67` +- claim surfaces scanned: `68` - violations: `0` - overclaim guard active: `true` diff --git a/scripts/ci_test.py b/scripts/ci_test.py index f5024024..241c9ac0 100644 --- a/scripts/ci_test.py +++ b/scripts/ci_test.py @@ -30,6 +30,7 @@ DEFAULT_TARGETS = [ "description-optimization-check", "promotion-check", "python-compat-check", + "architecture-maintainability-check", "yao-cli-check", "skill-overview-check", "skill-report-metrics-check", diff --git a/scripts/render_architecture_maintainability.py b/scripts/render_architecture_maintainability.py new file mode 100644 index 00000000..c39804d3 --- /dev/null +++ b/scripts/render_architecture_maintainability.py @@ -0,0 +1,231 @@ +#!/usr/bin/env python3 +"""Render a maintainability audit for the skill code surface.""" + +import argparse +import json +from datetime import date +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parent.parent + + +EXCLUDED_PARTS = { + ".git", + ".mypy_cache", + ".pytest_cache", + "__pycache__", + "dist", + ".previews", +} + + +def iter_python_files(skill_dir: Path) -> list[Path]: + roots = [skill_dir / "scripts", skill_dir / "tests"] + files: list[Path] = [] + for root in roots: + if not root.exists(): + continue + for path in root.rglob("*.py"): + rel_parts = path.relative_to(skill_dir).parts + if any(part in EXCLUDED_PARTS for part in rel_parts): + continue + if len(rel_parts) >= 2 and rel_parts[0] == "tests" and rel_parts[1].startswith("tmp"): + continue + files.append(path) + return sorted(files) + + +def rel(skill_dir: Path, path: Path) -> str: + try: + return str(path.resolve().relative_to(skill_dir.resolve())) + except ValueError: + return str(path) + + +def classify_python_file(path: Path, text: str) -> str: + if 'SCRIPT_INTERFACE = "internal-module"' in text or "SCRIPT_INTERFACE = 'internal-module'" in text: + return "internal-module" + if "argparse.ArgumentParser" in text or ".add_argument(" in text or "argparse" in text: + return "cli-script" + if path.parts[-2:-1] == ("tests",) or "/tests/" in path.as_posix(): + return "test" + return "module" + + +def recommendation_for(path: str) -> str: + if path == "scripts/yao.py": + return "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + if path == "scripts/render_review_studio.py": + return "Move data loading and large section renderers into focused review_studio_* modules." + if path == "scripts/render_review_viewer.py": + return "Split viewer data assembly from HTML section rendering." + if path.startswith("tests/"): + return "Break broad integration assertions into focused verifier helpers when the next behavior change lands." + return "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + + +def count_command_handlers(skill_dir: Path) -> int: + path = skill_dir / "scripts" / "yao.py" + if not path.exists(): + return 0 + count = 0 + for line in path.read_text(encoding="utf-8", errors="replace").splitlines(): + if line.startswith("def command_"): + count += 1 + return count + + +def build_report(skill_dir: Path, warn_lines: int, block_lines: int, generated_at: str) -> dict[str, Any]: + files = iter_python_files(skill_dir) + records: list[dict[str, Any]] = [] + internal_count = 0 + cli_count = 0 + test_count = 0 + script_count = 0 + for path in files: + text = path.read_text(encoding="utf-8", errors="replace") + line_count = len(text.splitlines()) + kind = classify_python_file(path, text) + rel_path = rel(skill_dir, path) + if kind == "internal-module": + internal_count += 1 + if kind == "cli-script": + cli_count += 1 + if rel_path.startswith("tests/"): + test_count += 1 + if rel_path.startswith("scripts/"): + script_count += 1 + severity = "pass" + if line_count >= block_lines: + severity = "block" + elif line_count >= warn_lines: + severity = "warn" + records.append( + { + "path": rel_path, + "lines": line_count, + "kind": kind, + "severity": severity, + "recommendation": recommendation_for(rel_path), + } + ) + records.sort(key=lambda item: (-int(item["lines"]), str(item["path"]))) + hotspots = [item for item in records if item["severity"] in {"warn", "block"}] + blockers = [item for item in records if item["severity"] == "block"] + summary = { + "python_file_count": len(records), + "script_file_count": script_count, + "test_file_count": test_count, + "internal_module_count": internal_count, + "cli_script_count": cli_count, + "command_handler_count": count_command_handlers(skill_dir), + "warn_line_threshold": warn_lines, + "block_line_threshold": block_lines, + "largest_file_lines": records[0]["lines"] if records else 0, + "hotspot_count": len(hotspots), + "blocker_count": len(blockers), + "decision": "block-maintainability" if blockers else ("watch-maintainability-hotspots" if hotspots else "pass"), + } + return { + "schema_version": "1.0", + "ok": not blockers, + "generated_at": generated_at, + "skill_dir": ".", + "summary": summary, + "largest_files": records[:12], + "hotspots": hotspots, + "actions": [ + { + "path": item["path"], + "severity": item["severity"], + "action": item["recommendation"], + } + for item in hotspots[:8] + ], + "artifacts": { + "json": "reports/architecture_maintainability.json", + "markdown": "reports/architecture_maintainability.md", + }, + } + + +def render_markdown(report: dict[str, Any]) -> str: + summary = report["summary"] + lines = [ + "# Architecture Maintainability", + "", + f"Generated at: `{report['generated_at']}`", + "", + "## Summary", + "", + f"- decision: `{summary['decision']}`", + f"- python files: `{summary['python_file_count']}`", + f"- scripts: `{summary['script_file_count']}`", + f"- tests: `{summary['test_file_count']}`", + f"- internal modules: `{summary['internal_module_count']}`", + f"- CLI scripts: `{summary['cli_script_count']}`", + f"- Yao CLI command handlers: `{summary['command_handler_count']}`", + f"- largest file lines: `{summary['largest_file_lines']}`", + f"- hotspots: `{summary['hotspot_count']}`", + f"- blockers: `{summary['blocker_count']}`", + "", + "This report keeps maintainability risk visible before the Meta Skill grows more gates, renderers, and CLI commands.", + "", + "## Hotspots", + "", + ] + hotspots = report.get("hotspots", []) + if hotspots: + lines.extend(["| File | Lines | Kind | Severity | Recommended action |", "| --- | ---: | --- | --- | --- |"]) + for item in hotspots: + lines.append( + f"| `{item['path']}` | `{item['lines']}` | `{item['kind']}` | `{item['severity']}` | {item['recommendation']} |" + ) + else: + lines.append("No file-size hotspots found.") + lines.extend(["", "## Largest Files", ""]) + if report.get("largest_files"): + lines.extend(["| File | Lines | Kind | Severity |", "| --- | ---: | --- | --- |"]) + for item in report["largest_files"]: + lines.append(f"| `{item['path']}` | `{item['lines']}` | `{item['kind']}` | `{item['severity']}` |") + else: + lines.append("No Python files found under scripts/ or tests/.") + lines.extend( + [ + "", + "## Release Rule", + "", + "- `block` hotspots should be split before governed release.", + "- `warn` hotspots can ship only when Review Studio keeps them visible and a reviewer accepts the modularization plan.", + "- Do not split a file only for line count; split when a stable responsibility boundary is clear.", + ] + ) + return "\n".join(lines) + "\n" + + +def main() -> None: + parser = argparse.ArgumentParser(description="Render architecture maintainability evidence for a skill package.") + parser.add_argument("skill_dir", nargs="?", default=".") + parser.add_argument("--output-json") + parser.add_argument("--output-md") + parser.add_argument("--warn-lines", type=int, default=900) + parser.add_argument("--block-lines", type=int, default=1500) + parser.add_argument("--generated-at", default=date.today().isoformat()) + args = parser.parse_args() + + skill_dir = Path(args.skill_dir).resolve() + report = build_report(skill_dir, args.warn_lines, args.block_lines, args.generated_at) + output_json = Path(args.output_json) if args.output_json else skill_dir / "reports" / "architecture_maintainability.json" + output_md = Path(args.output_md) if args.output_md else skill_dir / "reports" / "architecture_maintainability.md" + output_json.parent.mkdir(parents=True, exist_ok=True) + output_md.parent.mkdir(parents=True, exist_ok=True) + output_json.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + output_md.write_text(render_markdown(report), encoding="utf-8") + print(json.dumps(report, ensure_ascii=False, indent=2)) + raise SystemExit(0 if report["ok"] else 2) + + +if __name__ == "__main__": + main() diff --git a/scripts/render_review_annotations.py b/scripts/render_review_annotations.py index 58dbe681..19bc6cf5 100644 --- a/scripts/render_review_annotations.py +++ b/scripts/render_review_annotations.py @@ -18,11 +18,14 @@ VALID_GATES = { "context-budget", "runtime-matrix", "trust-report", + "python-compat", + "architecture-maintainability", "permission-gates", "permission-runtime", "skill-atlas", "operations-loop", "review-waivers", + "world-class-evidence", "registry-audit", "release-notes", } diff --git a/scripts/render_review_studio.py b/scripts/render_review_studio.py index f906558c..39a24d58 100644 --- a/scripts/render_review_studio.py +++ b/scripts/render_review_studio.py @@ -129,6 +129,7 @@ def evidence_paths(skill_dir: Path) -> dict[str, str]: "runtime_conformance": "reports/conformance_matrix.md", "trust_report": "reports/security_trust_report.md", "python_compatibility": "reports/python_compatibility.md", + "architecture_maintainability": "reports/architecture_maintainability.md", "permission_policy": "security/permission_policy.md", "runtime_permissions": "reports/runtime_permission_probes.md", "skill_atlas": "reports/skill_atlas.html", @@ -167,6 +168,7 @@ def load_review_data(skill_dir: Path) -> dict[str, dict[str, Any]]: "runtime_permissions": load_json(reports / "runtime_permission_probes.json"), "trust": load_json(reports / "security_trust_report.json"), "python_compatibility": load_json(reports / "python_compatibility.json"), + "architecture_maintainability": load_json(reports / "architecture_maintainability.json"), "context_budget": load_json(reports / "context_budget.json"), "promotion": load_json(reports / "promotion_decisions.json"), "atlas": load_json(reports / "skill_atlas.json"), @@ -198,6 +200,7 @@ def insight_cards(data: dict[str, dict[str, Any]]) -> list[dict[str, str]]: runtime_permissions = data["runtime_permissions"].get("summary", {}) trust = data["trust"].get("summary", {}) python_compat = data["python_compatibility"].get("summary", {}) + architecture = data["architecture_maintainability"].get("summary", {}) atlas = data["atlas"].get("summary", {}) adoption = data["adoption_drift"].get("summary", {}) waivers = data["review_waivers"].get("summary", {}) @@ -268,6 +271,14 @@ def insight_cards(data: dict[str, dict[str, Any]]) -> list[dict[str, str]]: "value": str(python_compat.get("issue_count", 0)), "detail": f"{python_compat.get('file_count', 0)} files scanned for Python {python_compat.get('target_python', '3.11')}", }, + { + "label": "Arch Debt", + "value": str(architecture.get("hotspot_count", 0)), + "detail": ( + f"{architecture.get('largest_file_lines', 0)} largest lines; " + f"{architecture.get('command_handler_count', 0)} CLI handlers" + ), + }, { "label": "Atlas", "value": str(atlas.get("route_collision_count", 0)), @@ -451,6 +462,18 @@ ACTION_GUIDANCE: dict[str, dict[str, str]] = { ], "verification": "python3 scripts/yao.py python-compat .", }, + "architecture-maintainability": { + "summary": "处理大文件和 CLI command surface 的维护性热点,优先拆分稳定职责边界。", + "why": "Meta Skill 的门禁、报告和 CLI 会持续增长;如果不把架构债纳入审查,后续能力会越来越难验证和迁移。", + "source_fix": "reports/architecture_maintainability.md + scripts/yao.py + scripts/render_review_studio.py", + "source_paths": [ + {"path": "reports/architecture_maintainability.md", "label": "architecture maintainability", "kind": "report", "patterns": ["# Architecture"]}, + {"path": "scripts/yao.py", "label": "Yao CLI orchestrator", "kind": "source", "patterns": ["def command_"]}, + {"path": "scripts/render_review_studio.py", "label": "Review Studio renderer", "kind": "source", "patterns": ["ACTION_GUIDANCE"]}, + {"path": "scripts/render_review_viewer.py", "label": "review viewer renderer", "kind": "source", "patterns": ["def "]}, + ], + "verification": "python3 scripts/yao.py architecture-audit .", + }, "permission-gates": { "summary": "补齐高权限能力的 reviewer、scope、reason、expires_at 和目标端 enforcement 说明。", "why": "权限契约只有在批准人、有效期和目标端处置方式明确时,才能支撑 governed release。", diff --git a/scripts/review_studio_gates.py b/scripts/review_studio_gates.py index 23e9c0e2..81c797cf 100644 --- a/scripts/review_studio_gates.py +++ b/scripts/review_studio_gates.py @@ -291,6 +291,37 @@ def build_gates(skill_dir: Path, output_html: Path, data: dict[str, dict[str, An ) ) + architecture = data["architecture_maintainability"] + architecture_summary = architecture.get("summary", {}) + if not architecture: + if maturity in {"library", "governed"}: + architecture_status = "warn" + architecture_detail = "architecture maintainability report is missing for a reusable package" + else: + architecture_status = "pass" + architecture_detail = "architecture maintainability report is optional until code surface grows" + else: + hotspot_count = int(architecture_summary.get("hotspot_count", 0) or 0) + blocker_count = int(architecture_summary.get("blocker_count", 0) or 0) + architecture_status = "block" if not architecture.get("ok", True) or blocker_count else ("warn" if hotspot_count else "pass") + architecture_detail = ( + f"{architecture_summary.get('python_file_count', 0)} Python files; " + f"{hotspot_count} hotspots; " + f"{blocker_count} blockers; " + f"largest {architecture_summary.get('largest_file_lines', 0)} lines; " + f"{architecture_summary.get('command_handler_count', 0)} CLI handlers" + ) + gates.append( + gate( + "architecture-maintainability", + "架构维护", + architecture_status, + architecture_detail, + "reports/architecture_maintainability.json", + _report_link(output_html, skill_dir, "reports/architecture_maintainability.md"), + ) + ) + permission_governance = trust.get("permission_governance", {}) if isinstance(trust.get("permission_governance", {}), dict) else {} if trust and not permission_governance: permission_governance = fallback_permission_governance(skill_dir) @@ -566,6 +597,7 @@ def weighted_score(gates: list[dict[str, str]]) -> int: "runtime-matrix": 10, "trust-report": 10, "python-compat": 10, + "architecture-maintainability": 10, "permission-gates": 10, "permission-runtime": 10, "skill-atlas": 10, diff --git a/scripts/yao.py b/scripts/yao.py index d42ae2fe..1fc2e567 100644 --- a/scripts/yao.py +++ b/scripts/yao.py @@ -455,6 +455,24 @@ def command_python_compat(args: argparse.Namespace) -> int: return 0 if result["ok"] else 2 +def command_architecture_audit(args: argparse.Namespace) -> int: + skill_dir = str(Path(args.skill_dir).resolve()) + cmd = [skill_dir] + if args.output_json: + cmd.extend(["--output-json", args.output_json]) + if args.output_md: + cmd.extend(["--output-md", args.output_md]) + if args.warn_lines is not None: + cmd.extend(["--warn-lines", str(args.warn_lines)]) + if args.block_lines is not None: + cmd.extend(["--block-lines", str(args.block_lines)]) + if args.generated_at: + cmd.extend(["--generated-at", args.generated_at]) + result = run_script("render_architecture_maintainability.py", cmd) + print(json.dumps(result["payload"] if result["payload"] is not None else result, ensure_ascii=False, indent=2)) + return 0 if result["ok"] else 2 + + def command_report(args: argparse.Namespace) -> int: steps = [] if args.refresh_optimization: @@ -472,6 +490,7 @@ def command_report(args: argparse.Namespace) -> int: run_script("render_context_reports.py", []), run_script("render_portability_report.py", []), run_script("python_compat_check.py", [str(ROOT)]), + run_script("render_architecture_maintainability.py", [str(ROOT)]), run_script("render_reference_synthesis.py", [str(ROOT)]), run_script("render_artifact_design_profile.py", [str(ROOT)]), run_script("render_prompt_quality_profile.py", [str(ROOT)]), @@ -506,6 +525,7 @@ def command_report(args: argparse.Namespace) -> int: "context_budget": "reports/context_budget.json", "portability_score": "reports/portability_score.json", "python_compatibility": "reports/python_compatibility.json", + "architecture_maintainability": "reports/architecture_maintainability.json", "reference_synthesis": "reports/reference-synthesis.json", "artifact_design_profile": "reports/artifact-design-profile.json", "prompt_quality_profile": "reports/prompt-quality-profile.json", @@ -1283,6 +1303,7 @@ def command_workspace_flow(args: argparse.Namespace) -> int: {"phase": "report-refresh", "result": run_script("render_context_reports.py", [])}, {"phase": "report-refresh", "result": run_script("render_portability_report.py", [])}, {"phase": "report-refresh", "result": run_script("python_compat_check.py", [str(ROOT)])}, + {"phase": "report-refresh", "result": run_script("render_architecture_maintainability.py", [str(ROOT)])}, {"phase": "report-refresh", "result": run_script("compile_skill.py", [str(ROOT)])}, {"phase": "report-refresh", "result": run_script("render_adoption_drift_report.py", [str(ROOT)])}, {"phase": "report-refresh", "result": run_script("render_telemetry_hook_recipes.py", [str(ROOT)])}, diff --git a/scripts/yao_cli_parser.py b/scripts/yao_cli_parser.py index 23bbc48c..8bd74a20 100644 --- a/scripts/yao_cli_parser.py +++ b/scripts/yao_cli_parser.py @@ -93,6 +93,18 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int] python_compat_cmd.add_argument("--generated-at") python_compat_cmd.set_defaults(func=_handler(command_handlers, "command_python_compat")) + architecture_audit_cmd = subparsers.add_parser( + "architecture-audit", + help="Render maintainability evidence for large Python files and CLI command surface.", + ) + architecture_audit_cmd.add_argument("skill_dir", nargs="?", default=".") + architecture_audit_cmd.add_argument("--output-json") + architecture_audit_cmd.add_argument("--output-md") + architecture_audit_cmd.add_argument("--warn-lines", type=int, default=900) + architecture_audit_cmd.add_argument("--block-lines", type=int, default=1500) + architecture_audit_cmd.add_argument("--generated-at") + architecture_audit_cmd.set_defaults(func=_handler(command_handlers, "command_architecture_audit")) + review_cmd = subparsers.add_parser("review", help="Locate the current bundle and human review stub for a target.") review_cmd.add_argument( "--target", @@ -448,10 +460,12 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int] review_waivers_cmd.add_argument( "--gate-key", choices=[ + "architecture-maintainability", "context-budget", "intent-canvas", "operations-loop", "output-lab", + "python-compat", "registry-audit", "release-notes", "runtime-matrix", @@ -489,10 +503,12 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int] review_annotations_cmd.add_argument( "--gate-key", choices=[ + "architecture-maintainability", "context-budget", "intent-canvas", "operations-loop", "output-lab", + "python-compat", "registry-audit", "release-notes", "review-waivers", @@ -500,6 +516,7 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int] "skill-atlas", "trigger-lab", "trust-report", + "world-class-evidence", "permission-gates", "permission-runtime", ], diff --git a/skill-ir/examples/yao-meta-skill.json b/skill-ir/examples/yao-meta-skill.json index 6281aa9f..1e331dcb 100644 --- a/skill-ir/examples/yao-meta-skill.json +++ b/skill-ir/examples/yao-meta-skill.json @@ -135,6 +135,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -186,8 +187,7 @@ "scripts/upgrade_check.py", "scripts/validate_skill.py", "scripts/verify_package.py", - "scripts/yao.py", - "scripts/yao_cli_config.py" + "scripts/yao.py" ], "assets": [ "templates/basic_skill.md.j2", diff --git a/skill_atlas/catalog.json b/skill_atlas/catalog.json index 89055cfc..2bcae1de 100644 --- a/skill_atlas/catalog.json +++ b/skill_atlas/catalog.json @@ -1,6 +1,6 @@ { "workspace_root": ".", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skills": [ { "name": "yao-meta-skill", @@ -47,6 +47,7 @@ "scripts/python_compat_check.py", "scripts/registry_audit.py", "scripts/render_adoption_drift_report.py", + "scripts/render_architecture_maintainability.py", "scripts/render_artifact_design_profile.py", "scripts/render_baseline_compare.py", "scripts/render_benchmark_reproducibility.py", @@ -165,8 +166,8 @@ "report": "reports/adoption_drift_report.json", "risk_band": "low", "event_count": 1, - "adoption_sample_count": 1, - "adoption_rate": 100.0, + "adoption_sample_count": 0, + "adoption_rate": 0, "candidate_count": 0 } }, diff --git a/skill_atlas/stale_skills.json b/skill_atlas/stale_skills.json index 6602e829..a3919831 100644 --- a/skill_atlas/stale_skills.json +++ b/skill_atlas/stale_skills.json @@ -24,7 +24,7 @@ "name": "incident-command-governor", "path": "examples/governed-incident-command/generated-skill", "reason": "review overdue by cadence monthly", - "age_days": 74, + "age_days": 75, "allowed_days": 31, "actionable": false, "scope": "example" diff --git a/tests/verify_architecture_maintainability.py b/tests/verify_architecture_maintainability.py new file mode 100644 index 00000000..297ed64d --- /dev/null +++ b/tests/verify_architecture_maintainability.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +import json +import shutil +import subprocess +import sys +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent.parent +SCRIPT = ROOT / "scripts" / "render_architecture_maintainability.py" + + +def main() -> None: + tmp = ROOT / "tests" / "tmp_architecture_maintainability" + if tmp.exists(): + shutil.rmtree(tmp) + tmp.mkdir(parents=True, exist_ok=True) + + output_json = tmp / "architecture_maintainability.json" + output_md = tmp / "architecture_maintainability.md" + proc = subprocess.run( + [ + sys.executable, + str(SCRIPT), + str(ROOT), + "--output-json", + str(output_json), + "--output-md", + str(output_md), + "--generated-at", + "2026-06-14", + ], + cwd=ROOT, + capture_output=True, + text=True, + check=True, + ) + payload = json.loads(proc.stdout) + assert payload["ok"], payload + assert payload["summary"]["decision"] == "watch-maintainability-hotspots", payload["summary"] + assert payload["summary"]["hotspot_count"] >= 3, payload["summary"] + assert payload["summary"]["blocker_count"] == 0, payload["summary"] + assert payload["summary"]["command_handler_count"] >= 50, payload["summary"] + assert payload["summary"]["largest_file_lines"] >= 900, payload["summary"] + assert payload["largest_files"][0]["path"] == "scripts/yao.py", payload["largest_files"][0] + assert payload["largest_files"][0]["severity"] == "warn", payload["largest_files"][0] + hotspot_paths = {item["path"] for item in payload["hotspots"]} + assert {"scripts/yao.py", "scripts/render_review_studio.py"} <= hotspot_paths, hotspot_paths + assert output_json.exists(), output_json + markdown = output_md.read_text(encoding="utf-8") + assert "# Architecture Maintainability" in markdown, markdown + assert "Split command handlers by domain" in markdown, markdown + assert "Do not split a file only for line count" in markdown, markdown + + blocker_proc = subprocess.run( + [ + sys.executable, + str(SCRIPT), + str(ROOT), + "--output-json", + str(tmp / "architecture_blocker.json"), + "--output-md", + str(tmp / "architecture_blocker.md"), + "--warn-lines", + "10", + "--block-lines", + "100", + "--generated-at", + "2026-06-14", + ], + cwd=ROOT, + capture_output=True, + text=True, + ) + assert blocker_proc.returncode == 2, blocker_proc.stdout + blocker_payload = json.loads(blocker_proc.stdout) + assert blocker_payload["ok"] is False, blocker_payload + assert blocker_payload["summary"]["blocker_count"] > 0, blocker_payload["summary"] + print(json.dumps({"ok": True}, ensure_ascii=False, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/tests/verify_review_studio.py b/tests/verify_review_studio.py index 7fa7d7d6..446bba09 100644 --- a/tests/verify_review_studio.py +++ b/tests/verify_review_studio.py @@ -225,6 +225,19 @@ def main() -> None: capture_output=True, text=True, ) + subprocess.run( + [ + sys.executable, + str(ROOT / "scripts" / "render_architecture_maintainability.py"), + str(ROOT), + "--generated-at", + "2026-06-13", + ], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ) for script_name in [ "render_skill_os2_audit.py", "render_world_class_evidence_plan.py", @@ -262,17 +275,22 @@ def main() -> None: assert payload["ok"], payload assert payload["schema_version"] == "2.0", payload assert payload["summary"]["decision"] == "review", payload - assert payload["summary"]["gate_count"] == 15, payload - assert payload["summary"]["world_class_score"] == 90, payload - assert payload["summary"]["warning_count"] == 3, payload + assert payload["summary"]["gate_count"] == 16, payload + assert payload["summary"]["world_class_score"] == 89, payload + assert payload["summary"]["warning_count"] == 4, payload assert payload["summary"]["blocker_count"] == 0, payload - assert payload["summary"]["action_count"] == 3, payload + assert payload["summary"]["action_count"] == 4, payload assert payload["summary"]["annotation_count"] == 0, payload assert payload["summary"]["open_annotation_blocker_count"] == 0, payload assert payload["summary"]["action_count"] == payload["summary"]["warning_count"] + payload["summary"]["blocker_count"], payload - assert {item["gate_key"] for item in payload["review_actions"]} == {"output-lab", "review-waivers", "world-class-evidence"}, payload + assert {item["gate_key"] for item in payload["review_actions"]} == { + "output-lab", + "architecture-maintainability", + "review-waivers", + "world-class-evidence", + }, payload gate_keys = {item["key"] for item in payload["gates"]} - assert {"intent-canvas", "trigger-lab", "output-lab", "runtime-matrix", "trust-report", "python-compat", "permission-gates", "permission-runtime", "skill-atlas", "operations-loop", "review-waivers", "world-class-evidence", "registry-audit", "release-notes"} <= gate_keys, payload + assert {"intent-canvas", "trigger-lab", "output-lab", "runtime-matrix", "trust-report", "python-compat", "architecture-maintainability", "permission-gates", "permission-runtime", "skill-atlas", "operations-loop", "review-waivers", "world-class-evidence", "registry-audit", "release-notes"} <= gate_keys, payload output_gate = next(item for item in payload["gates"] if item["key"] == "output-lab") assert output_gate["status"] == "warn", output_gate assert "5/5 cases" in output_gate["detail"], output_gate @@ -299,6 +317,12 @@ def main() -> None: assert "0 compatibility issues" in python_compat_gate["detail"], python_compat_gate assert "0 f-string 3.11 hazards" in python_compat_gate["detail"], python_compat_gate assert python_compat_gate["evidence"] == "reports/python_compatibility.json", python_compat_gate + architecture_gate = next(item for item in payload["gates"] if item["key"] == "architecture-maintainability") + assert architecture_gate["status"] == "warn", architecture_gate + assert "3 hotspots" in architecture_gate["detail"], architecture_gate + assert "0 blockers" in architecture_gate["detail"], architecture_gate + assert "CLI handlers" in architecture_gate["detail"], architecture_gate + assert architecture_gate["evidence"] == "reports/architecture_maintainability.json", architecture_gate permission_gate = next(item for item in payload["gates"] if item["key"] == "permission-gates") assert permission_gate["status"] == "pass", permission_gate assert "permissions approved" in permission_gate["detail"], permission_gate @@ -321,7 +345,7 @@ def main() -> None: assert "reports/adoption_drift_report.json" in operations_gate["evidence"], operations_gate waivers_gate = next(item for item in payload["gates"] if item["key"] == "review-waivers") assert waivers_gate["status"] == "warn", waivers_gate - assert "warning gates still need reviewer decision" in waivers_gate["detail"], waivers_gate + assert "2 warning gates still need reviewer decision" in waivers_gate["detail"], waivers_gate assert "reports/review_waivers.json" in waivers_gate["evidence"], waivers_gate world_class_gate = next(item for item in payload["gates"] if item["key"] == "world-class-evidence") assert world_class_gate["status"] == "warn", world_class_gate @@ -339,6 +363,7 @@ def main() -> None: assert full_payload["evidence_paths"]["output_review_decisions"] == "reports/output_review_decisions.json", full_payload["evidence_paths"] assert full_payload["evidence_paths"]["output_review_adjudication"] == "reports/output_review_adjudication.md", full_payload["evidence_paths"] assert full_payload["evidence_paths"]["python_compatibility"] == "reports/python_compatibility.md", full_payload["evidence_paths"] + assert full_payload["evidence_paths"]["architecture_maintainability"] == "reports/architecture_maintainability.md", full_payload["evidence_paths"] if (ROOT / "reports" / "benchmark_reproducibility.md").exists(): assert full_payload["evidence_paths"]["benchmark_reproducibility"] == "reports/benchmark_reproducibility.md", full_payload["evidence_paths"] if (ROOT / "reports" / "skill_os2_coverage.md").exists(): @@ -367,8 +392,18 @@ def main() -> None: assert full_payload["evidence_paths"]["runtime_permissions"] == "reports/runtime_permission_probes.md", full_payload["evidence_paths"] assert full_payload["data"]["python_compatibility"]["summary"]["target_python"] == "3.11", full_payload["data"]["python_compatibility"] assert full_payload["data"]["python_compatibility"]["summary"]["issue_count"] == 0, full_payload["data"]["python_compatibility"] + assert full_payload["data"]["architecture_maintainability"]["summary"]["hotspot_count"] >= 3, full_payload["data"]["architecture_maintainability"] + assert full_payload["data"]["architecture_maintainability"]["summary"]["blocker_count"] == 0, full_payload["data"]["architecture_maintainability"] action_keys = {item["gate_key"] for item in full_payload["review_actions"]} - assert action_keys == {"output-lab", "review-waivers", "world-class-evidence"}, full_payload["review_actions"] + assert action_keys == {"output-lab", "architecture-maintainability", "review-waivers", "world-class-evidence"}, full_payload["review_actions"] + architecture_action = next(item for item in full_payload["review_actions"] if item["gate_key"] == "architecture-maintainability") + assert {item["path"] for item in architecture_action["source_refs"]} >= { + "reports/architecture_maintainability.md", + "scripts/yao.py", + "scripts/render_review_studio.py", + "scripts/render_review_viewer.py", + }, architecture_action + assert all(item["exists"] for item in architecture_action["source_refs"]), architecture_action world_class_action = next(item for item in full_payload["review_actions"] if item["gate_key"] == "world-class-evidence") assert {item["path"] for item in world_class_action["source_refs"]} >= { "reports/world_class_evidence_ledger.md", @@ -489,6 +524,10 @@ def main() -> None: assert "Python 兼容" in html, html[:10000] assert "解释器边界" in html, html[:10000] assert "reports/python_compatibility.md" in html, html + assert "架构维护" in html, html + assert "Arch Debt" in html, html + assert "reports/architecture_maintainability.md" in html, html + assert "处理大文件和 CLI command surface 的维护性热点" in html, html assert "kv-grid" in html, html assert "案例数" in html, html assert "命令执行" in html, html diff --git a/tests/verify_yao_cli.py b/tests/verify_yao_cli.py index 953281a0..8b2aee11 100644 --- a/tests/verify_yao_cli.py +++ b/tests/verify_yao_cli.py @@ -74,6 +74,7 @@ def main() -> None: assert "quickstart" in parser_help, parser_help assert "review-studio" in parser_help, parser_help assert "python-compat" in parser_help, parser_help + assert "architecture-audit" in parser_help, parser_help assert "skill-os2-audit" in parser_help, parser_help assert "skill-os2-coverage" in parser_help, parser_help assert "world-class-evidence" in parser_help, parser_help @@ -200,6 +201,21 @@ def main() -> None: assert python_compat_result["payload"]["summary"]["issue_count"] == 0, python_compat_result assert python_compat_result["payload"]["summary"]["file_count"] >= 50, python_compat_result + architecture_result = run( + "architecture-audit", + str(ROOT), + "--output-json", + str(tmp_root / "architecture_maintainability.json"), + "--output-md", + str(tmp_root / "architecture_maintainability.md"), + "--generated-at", + "2026-06-14", + ) + assert architecture_result["ok"], architecture_result + assert architecture_result["payload"]["summary"]["hotspot_count"] >= 3, architecture_result + assert architecture_result["payload"]["summary"]["blocker_count"] == 0, architecture_result + assert architecture_result["payload"]["summary"]["command_handler_count"] >= 50, architecture_result + world_class_evidence_result = run( "world-class-evidence", str(ROOT), @@ -382,10 +398,15 @@ def main() -> None: review_studio_result = run("review-studio", str(created)) assert review_studio_result["ok"], review_studio_result assert review_studio_result["payload"]["artifacts"]["html"].endswith("reports/review-studio.html"), review_studio_result - assert review_studio_result["payload"]["summary"]["gate_count"] == 15, review_studio_result + assert review_studio_result["payload"]["summary"]["gate_count"] == 16, review_studio_result created_world_class_gate = next(item for item in review_studio_result["payload"]["gates"] if item["key"] == "world-class-evidence") assert created_world_class_gate["status"] == "pass", created_world_class_gate assert "optional" in created_world_class_gate["detail"], created_world_class_gate + created_architecture_gate = next( + item for item in review_studio_result["payload"]["gates"] if item["key"] == "architecture-maintainability" + ) + assert created_architecture_gate["status"] == "pass", created_architecture_gate + assert "optional" in created_architecture_gate["detail"], created_architecture_gate review_waivers_result = run( "review-waivers", @@ -673,6 +694,7 @@ def main() -> None: assert "iteration_ledger" in report_result["payload"]["artifacts"], report_result assert "portability_score" in report_result["payload"]["artifacts"], report_result assert "python_compatibility" in report_result["payload"]["artifacts"], report_result + assert "architecture_maintainability" in report_result["payload"]["artifacts"], report_result assert "artifact_design_profile" in report_result["payload"]["artifacts"], report_result assert "prompt_quality_profile" in report_result["payload"]["artifacts"], report_result assert "compiled_targets" in report_result["payload"]["artifacts"], report_result
路径Path作用Role类型Type
SKILL.mdSkill 入口文件Skill entrypoint文件file
README.md人类可读使用说明Human-readable usage guide文件file
agents/interface.yaml跨平台接口元数据Neutral interface metadata文件file
manifest.json生命周期与打包元数据Lifecycle and portability metadata文件file
references扩展指导与复用资料Extended guidance and reusable notes目录folder
scripts确定性脚本或本地工具Deterministic helpers or local tooling目录folder
evals触发与质量检查Trigger and quality checks目录folder
reports生成的证据与总结报告Generated evidence and overview artifacts目录folder