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.05 targets in platform-neutral contract
Compiler5/5target contracts compiled from Skill IR
Output Delta100.05 cases; 1 file-backed
Exec Runs10command 10; model 0; recorded 0
Blind A/B5review pairs hide baseline vs with-skill labels
Review A/B0/5adjudication decisions; pending 5
Blueprint20/202.0 coverage; evidence pending 4
Runtime5/5target conformance pass rate
Perm Probe4/40 native enforcement targets
Trust082 scripts scanned; secrets found
Py Compat0140 files scanned for Python 3.11
Atlas512 scanned skills; route collisions
Driftlow1 metadata events; 0 missed triggers
Waivers00 gates covered; human risk decisions
Intake4/40 valid submissions; 0 invalid
Claim Guard067 public surfaces scanned
Notes0/00 open blocker annotations
Registry1.1.05 targets; MIT license
Archivepass547 zip entries; package verification
Installpass4 adapters; 12 permissions enforced; 0 permission failures
Upgrademinordeclared minor; 0 breaking changes
+ Skill IR2.0.05 targets in platform-neutral contract
Compiler5/5target contracts compiled from Skill IR
Output Delta100.05 cases; 1 file-backed
Exec Runs10command 10; model 0; recorded 0
Blind A/B5review pairs hide baseline vs with-skill labels
Review A/B0/5adjudication decisions; pending 5
Blueprint20/202.0 coverage; evidence pending 4
Runtime5/5target conformance pass rate
Perm Probe4/40 native enforcement targets
Trust083 scripts scanned; secrets found
Py Compat0142 files scanned for Python 3.11
Arch Debt31438 largest lines; 55 CLI handlers
Atlas512 scanned skills; route collisions
Driftlow1 metadata events; 0 missed triggers
Waivers00 gates covered; human risk decisions
Intake4/40 valid submissions; 0 invalid
Claim Guard068 public surfaces scanned
Notes0/00 open blocker annotations
Registry1.1.05 targets; MIT license
Archivepass551 zip entries; package verification
Installpass4 adapters; 12 permissions enforced; 0 permission failures
Upgrademinordeclared minor; 0 breaking changes
审查闸门
- 通过
意图画布
intent confidence 100/100; Intent is clear enough to package the first routeable version.
通过
触发实验
13 trigger cases; 0 misroutes; 0 ambiguous
关注
输出实验
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
通过
上下文
initial load 944/1000; quality density 137.7
通过
运行矩阵
5 / 5 targets pass
通过
信任报告
0 secrets; 82 scripts; 3 network-capable scripts; 0 help smoke failures
通过
Python 兼容
Python 3.11; 140 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards
通过
权限批准
3/3 permissions approved; gaps 0; required file_write, network, subprocess
通过
权限探针
4/4 targets probed; native 0; metadata fallback 4; residual risks 4
通过
组合治理
12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues
通过
运营回路
1 metadata events; adoption 0; missed 0; bad-output 0; risk low
关注
人工批准
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
通过
注册审计
yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures
通过
发布路线
0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
+ 通过
意图画布
intent confidence 100/100; Intent is clear enough to package the first routeable version.
通过
触发实验
13 trigger cases; 0 misroutes; 0 ambiguous
关注
输出实验
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
通过
上下文
initial load 944/1000; quality density 137.7
通过
运行矩阵
5 / 5 targets pass
通过
信任报告
0 secrets; 83 scripts; 3 network-capable scripts; 0 help smoke failures
通过
Python 兼容
Python 3.11; 142 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards
关注
架构维护
139 Python files; 3 hotspots; 0 blockers; largest 1438 lines; 55 CLI handlers
通过
权限批准
3/3 permissions approved; gaps 0; required file_write, network, subprocess
通过
权限探针
4/4 targets probed; native 0; metadata fallback 4; residual risks 4
通过
组合治理
12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues
通过
运营回路
1 metadata events; adoption 0; missed 0; bad-output 0; risk low
关注
人工批准
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
通过
注册审计
yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures
通过
发布路线
0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
-
关注事项
- 输出实验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.
-
资产分布图展示当前包体的文件和目录重心。
+
资产分布图展示当前包体的文件和目录重心。
| 路径Path | 作用Role | 类型Type |
| SKILL.md | Skill 入口文件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 |
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