diff --git a/registry/index.json b/registry/index.json
index 116c2ed..56b1ac6 100644
--- a/registry/index.json
+++ b/registry/index.json
@@ -16,7 +16,7 @@
"vscode"
],
"package_metadata": "registry/packages/yao-meta-skill.json",
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
}
]
}
diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json
index cbf7cda..d39e92e 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": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc",
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
"compatibility": {
"openai": "pass",
@@ -48,7 +48,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
"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 e4f5188..79a8134 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-13T18:27:31Z",
+ "generated_at": "2026-06-13T21:15:27Z",
"skill_dir": ".",
"privacy_contract": {
"storage": "local-first",
diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json
index 3bee2b4..ab12b24 100644
--- a/reports/architecture_maintainability.json
+++ b/reports/architecture_maintainability.json
@@ -4,27 +4,20 @@
"generated_at": "2026-06-14",
"skill_dir": ".",
"summary": {
- "python_file_count": 144,
- "script_file_count": 88,
+ "python_file_count": 145,
+ "script_file_count": 89,
"test_file_count": 56,
- "internal_module_count": 17,
+ "internal_module_count": 18,
"cli_script_count": 72,
- "command_handler_count": 35,
+ "command_handler_count": 33,
"warn_line_threshold": 900,
"block_line_threshold": 1500,
- "largest_file_lines": 1159,
- "hotspot_count": 1,
+ "largest_file_lines": 887,
+ "hotspot_count": 0,
"blocker_count": 0,
- "decision": "watch-maintainability-hotspots"
+ "decision": "pass"
},
"largest_files": [
- {
- "path": "scripts/yao.py",
- "lines": 1159,
- "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": 887,
@@ -32,6 +25,13 @@
"severity": "pass",
"recommendation": "Move data loading and large section renderers into focused review_studio_* modules."
},
+ {
+ "path": "scripts/yao.py",
+ "lines": 839,
+ "kind": "cli-script",
+ "severity": "pass",
+ "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
+ },
{
"path": "tests/verify_yao_cli.py",
"lines": 838,
@@ -103,22 +103,8 @@
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
}
],
- "hotspots": [
- {
- "path": "scripts/yao.py",
- "lines": 1159,
- "kind": "cli-script",
- "severity": "warn",
- "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
- }
- ],
- "actions": [
- {
- "path": "scripts/yao.py",
- "severity": "warn",
- "action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
- }
- ],
+ "hotspots": [],
+ "actions": [],
"artifacts": {
"json": "reports/architecture_maintainability.json",
"markdown": "reports/architecture_maintainability.md"
diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md
index bca50ca..f6f3263 100644
--- a/reports/architecture_maintainability.md
+++ b/reports/architecture_maintainability.md
@@ -4,31 +4,29 @@ Generated at: `2026-06-14`
## Summary
-- decision: `watch-maintainability-hotspots`
-- python files: `144`
-- scripts: `88`
+- decision: `pass`
+- python files: `145`
+- scripts: `89`
- tests: `56`
-- internal modules: `17`
+- internal modules: `18`
- CLI scripts: `72`
-- Yao CLI command handlers: `35`
-- largest file lines: `1159`
-- hotspots: `1`
+- Yao CLI command handlers: `33`
+- largest file lines: `887`
+- hotspots: `0`
- 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` | `1159` | `cli-script` | `warn` | Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator. |
+No file-size hotspots found.
## Largest Files
| File | Lines | Kind | Severity |
| --- | ---: | --- | --- |
-| `scripts/yao.py` | `1159` | `cli-script` | `warn` |
| `scripts/render_review_studio.py` | `887` | `cli-script` | `pass` |
+| `scripts/yao.py` | `839` | `cli-script` | `pass` |
| `tests/verify_yao_cli.py` | `838` | `test` | `pass` |
| `scripts/skill_report_model.py` | `782` | `internal-module` | `pass` |
| `scripts/compile_skill.py` | `734` | `cli-script` | `pass` |
diff --git a/reports/benchmark_reproducibility.json b/reports/benchmark_reproducibility.json
index 6fd9dad..fcde446 100644
--- a/reports/benchmark_reproducibility.json
+++ b/reports/benchmark_reproducibility.json
@@ -3,11 +3,11 @@
"ok": true,
"generated_at": "2026-06-14",
"skill_dir": ".",
- "commit": "479b098ccfe8756b15cbde1c8b97048ed53e9807",
+ "commit": "628acc5c35a9cf4cd0d3d684be50ee27724150ba",
"git_status": {
"available": true,
"dirty": true,
- "changed_file_count": 40,
+ "changed_file_count": 36,
"sample": [
"MM registry/index.json",
"MM registry/packages/yao-meta-skill.json",
@@ -16,11 +16,11 @@
"M reports/architecture_maintainability.md",
"MM reports/benchmark_reproducibility.json",
"MM reports/benchmark_reproducibility.md",
- "M reports/compiled_targets.json",
- "M reports/context_budget.json",
+ "MM reports/context_budget.json",
"M reports/install_simulation.json",
"MM reports/output_execution_runs.json",
- "MM reports/output_execution_runs.md"
+ "MM reports/output_execution_runs.md",
+ "MM 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": 40
+ "changed_file_count": 36
},
"methodology": {
"path": "reports/benchmark_methodology.md",
@@ -115,8 +115,8 @@
"label": "output_execution",
"path": "reports/output_execution_runs.json",
"exists": true,
- "bytes": 7966,
- "sha256": "d0eedcbfe9c349e51a3b99619a61fbcdb63dfbb91c6fc33d9826ba2f35aee653"
+ "bytes": 7964,
+ "sha256": "5d8dd9775201caadbb68d4514261bd17459cc580eea3d0b273c0034d4103f41a"
},
{
"label": "blind_review",
@@ -150,43 +150,43 @@
"label": "trust_report",
"path": "reports/security_trust_report.json",
"exists": true,
- "bytes": 91352,
- "sha256": "029777a16cc11e5b21f85c14e999f0d51f1a8f249803a9f601f13f0abe7b0e27"
+ "bytes": 91959,
+ "sha256": "e64df7a7d3a9f30dadc0133b96d2473dcdce458be6c3b7c1feaa3778bca3a864"
},
{
"label": "python_compatibility",
"path": "reports/python_compatibility.json",
"exists": true,
- "bytes": 19171,
- "sha256": "8c3be56386b732d17891fe596131c926b2f9caae4da5212596c54606f407480f"
+ "bytes": 19297,
+ "sha256": "f65de3392609ef1e9e2b9dde7991ba0d84b3803b128bd0a1277b2453eb05b41c"
},
{
"label": "registry_audit",
"path": "reports/registry_audit.json",
"exists": true,
"bytes": 3183,
- "sha256": "87a5c389da2bc79ce7e17de455afab0478533efea07b41957d9438f6d5aa4ce8"
+ "sha256": "1aeda726a6302c6b37a36d179a34d17c93277d7c798b3fb15044ce1c6632494d"
},
{
"label": "package_verification",
"path": "reports/package_verification.json",
"exists": true,
"bytes": 19325,
- "sha256": "583dc48f80f27ec6400bf754c949a1bd2245a84c94ff7916d7ca08be7a54c35c"
+ "sha256": "9e12aa80888c3c2508ff0681bc1bddb5fcd308657f87695c02ced23dc214ff3f"
},
{
"label": "install_simulation",
"path": "reports/install_simulation.json",
"exists": true,
"bytes": 8557,
- "sha256": "efbddb4eb6c7dd1749c1499002da0d9890f9404b3dad204b02970f44a0bd2899"
+ "sha256": "11985a19c3bcbe02fbe0146f57eb11992b3f298e99bad77149f0039787a96f18"
},
{
"label": "skill_os2_audit",
"path": "reports/skill_os2_audit.json",
"exists": true,
"bytes": 13946,
- "sha256": "3066a5a9f46200667e2bc2e986bad281922d7546194f908594301930a0eeeac4"
+ "sha256": "0fcd7f82c65f1fd85323919e573e3b4910738684440acaf29ed2c6ebe26bd611"
},
{
"label": "world_class_evidence_plan",
diff --git a/reports/benchmark_reproducibility.md b/reports/benchmark_reproducibility.md
index 6598032..2e95676 100644
--- a/reports/benchmark_reproducibility.md
+++ b/reports/benchmark_reproducibility.md
@@ -1,7 +1,7 @@
# Benchmark Reproducibility
Generated at: `2026-06-14`
-Commit: `479b098ccfe8756b15cbde1c8b97048ed53e9807`
+Commit: `628acc5c35a9cf4cd0d3d684be50ee27724150ba`
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: `40`
+- changed files at generation: `36`
This report proves local benchmark reproducibility only. It keeps external provider and human-review gaps visible instead of counting them as complete.
@@ -40,17 +40,17 @@ 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 | `d0eedcbfe9c3` |
+| output_execution | `reports/output_execution_runs.json` | present | `5d8dd9775201` |
| 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 | `029777a16cc1` |
-| python_compatibility | `reports/python_compatibility.json` | present | `8c3be56386b7` |
-| registry_audit | `reports/registry_audit.json` | present | `87a5c389da2b` |
-| package_verification | `reports/package_verification.json` | present | `583dc48f80f2` |
-| install_simulation | `reports/install_simulation.json` | present | `efbddb4eb6c7` |
-| skill_os2_audit | `reports/skill_os2_audit.json` | present | `3066a5a9f462` |
+| trust_report | `reports/security_trust_report.json` | present | `e64df7a7d3a9` |
+| python_compatibility | `reports/python_compatibility.json` | present | `f65de3392609` |
+| registry_audit | `reports/registry_audit.json` | present | `1aeda726a630` |
+| package_verification | `reports/package_verification.json` | present | `9e12aa80888c` |
+| install_simulation | `reports/install_simulation.json` | present | `11985a19c3bc` |
+| skill_os2_audit | `reports/skill_os2_audit.json` | present | `0fcd7f82c65f` |
| 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` |
diff --git a/reports/context_budget.json b/reports/context_budget.json
index 83db2dd..edfbd7e 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": 1084834,
+ "other_text_tokens": 1084478,
"estimated_initial_load_tokens": 944,
- "estimated_total_text_tokens": 1085585,
- "relevant_file_count": 475,
+ "estimated_total_text_tokens": 1085229,
+ "relevant_file_count": 477,
"unused_resource_dirs": [],
"quality_signal_points": 130,
"quality_density": 137.7
diff --git a/reports/install_simulation.json b/reports/install_simulation.json
index d59ad17..30cde14 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": 556,
+ "archive_entry_count": 557,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json
index 72e7fdd..f059d17 100644
--- a/reports/output_execution_runs.json
+++ b/reports/output_execution_runs.json
@@ -34,7 +34,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.77,
+ "duration_ms": 31.86,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -62,7 +62,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 26.06,
+ "duration_ms": 31.95,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -85,7 +85,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.36,
+ "duration_ms": 32.1,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -113,7 +113,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.91,
+ "duration_ms": 31.57,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -136,7 +136,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.66,
+ "duration_ms": 31.44,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -164,7 +164,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.45,
+ "duration_ms": 30.59,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -187,7 +187,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 26.13,
+ "duration_ms": 28.84,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -214,7 +214,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.42,
+ "duration_ms": 28.9,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -237,7 +237,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.7,
+ "duration_ms": 28.78,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -266,7 +266,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.71,
+ "duration_ms": 28.9,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md
index 4bdbfc3..e93da56 100644
--- a/reports/output_execution_runs.md
+++ b/reports/output_execution_runs.md
@@ -23,16 +23,16 @@ 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.77 | 33 | 0.0 | pass |
-| skill-package-contract | with_skill | command | local-output-eval-runner | 26.06 | 73 | 100.0 | pass |
-| output-eval-expectation | baseline | command | local-output-eval-runner | 25.36 | 36 | 0.0 | pass |
-| output-eval-expectation | with_skill | command | local-output-eval-runner | 25.91 | 80 | 100.0 | pass |
-| ir-before-packaging | baseline | command | local-output-eval-runner | 25.66 | 33 | 0.0 | pass |
-| ir-before-packaging | with_skill | command | local-output-eval-runner | 25.45 | 80 | 100.0 | pass |
-| near-neighbor-boundary | baseline | command | local-output-eval-runner | 26.13 | 36 | 0.0 | pass |
-| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 25.42 | 65 | 100.0 | pass |
-| file-backed-governed-package | baseline | command | local-output-eval-runner | 25.7 | 37 | 0.0 | pass |
-| file-backed-governed-package | with_skill | command | local-output-eval-runner | 25.71 | 98 | 100.0 | pass |
+| skill-package-contract | baseline | command | local-output-eval-runner | 31.86 | 33 | 0.0 | pass |
+| skill-package-contract | with_skill | command | local-output-eval-runner | 31.95 | 73 | 100.0 | pass |
+| output-eval-expectation | baseline | command | local-output-eval-runner | 32.1 | 36 | 0.0 | pass |
+| output-eval-expectation | with_skill | command | local-output-eval-runner | 31.57 | 80 | 100.0 | pass |
+| ir-before-packaging | baseline | command | local-output-eval-runner | 31.44 | 33 | 0.0 | pass |
+| ir-before-packaging | with_skill | command | local-output-eval-runner | 30.59 | 80 | 100.0 | pass |
+| near-neighbor-boundary | baseline | command | local-output-eval-runner | 28.84 | 36 | 0.0 | pass |
+| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 28.9 | 65 | 100.0 | pass |
+| file-backed-governed-package | baseline | command | local-output-eval-runner | 28.78 | 37 | 0.0 | pass |
+| file-backed-governed-package | with_skill | command | local-output-eval-runner | 28.9 | 98 | 100.0 | pass |
## Next Fixes
diff --git a/reports/package_verification.json b/reports/package_verification.json
index 23d4396..b418d11 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": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
- "archive_entry_count": 556,
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
+ "archive_entry_count": 557,
"failure_count": 0,
"warning_count": 0
},
diff --git a/reports/package_verification.md b/reports/package_verification.md
index a1120ac..0965c98 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: `43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f`
+- Archive SHA256: `a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653`
- Failures: `0`
- Warnings: `0`
diff --git a/reports/python_compatibility.json b/reports/python_compatibility.json
index 2b3a638..e235bf3 100644
--- a/reports/python_compatibility.json
+++ b/reports/python_compatibility.json
@@ -5,7 +5,7 @@
"root": ".",
"summary": {
"target_python": "3.11",
- "file_count": 147,
+ "file_count": 148,
"issue_count": 0,
"syntax_error_count": 0,
"fstring_311_violation_count": 0,
@@ -544,6 +544,12 @@
"issue_count": 0,
"issues": []
},
+ {
+ "path": "scripts/yao_cli_create_commands.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
{
"path": "scripts/yao_cli_parser.py",
"ok": true,
diff --git a/reports/python_compatibility.md b/reports/python_compatibility.md
index baac3d3..3df4d50 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: `147`
+- files scanned: `148`
- issues: `0`
- syntax errors: `0`
- f-string 3.11 violations: `0`
diff --git a/reports/registry_audit.json b/reports/registry_audit.json
index 986f6e3..326615e 100644
--- a/reports/registry_audit.json
+++ b/reports/registry_audit.json
@@ -21,8 +21,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc",
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
"compatibility": {
"openai": "pass",
@@ -53,7 +53,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
"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": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
}
]
},
diff --git a/reports/registry_audit.md b/reports/registry_audit.md
index 3e39ce1..f0f248b 100644
--- a/reports/registry_audit.md
+++ b/reports/registry_audit.md
@@ -6,8 +6,8 @@
- Maturity: `governed`
- Owner: `Yao Team`
- License: `MIT`
-- Package SHA256: `38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc`
-- Archive SHA256: `43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f`
+- Package SHA256: `ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c`
+- Archive SHA256: `a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653`
- Install simulated: `True`
## Compatibility
diff --git a/reports/review-studio.html b/reports/review-studio.html
index 4ad91ea..343b4e1 100644
--- a/reports/review-studio.html
+++ b/reports/review-studio.html
@@ -286,28 +286,28 @@
审查结论
review
- Score 89/100
+ Score 91/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
Trust088 scripts scanned; secrets found
Py Compat0147 files scanned for Python 3.11
Arch Debt11159 largest lines; 35 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
Archivepass556 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
Trust089 scripts scanned; secrets found
Py Compat0148 files scanned for Python 3.11
Arch Debt0887 largest lines; 33 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
Archivepass557 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; 88 scripts; 3 network-capable scripts; 0 help smoke failures
通过
Python 兼容
Python 3.11; 147 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards
关注
架构维护
144 Python files; 1 hotspot; 0 blockers; largest 1159 lines; 35 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
+ 通过
意图画布
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; 89 scripts; 3 network-capable scripts; 0 help smoke failures
通过
Python 兼容
Python 3.11; 148 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards
通过
架构维护
145 Python files; 0 hotspots; 0 blockers; largest 887 lines; 33 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; 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
-
关注事项
- 输出实验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
- 架构维护144 Python files; 1 hotspot; 0 blockers; largest 1159 lines; 35 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
+
关注事项
- 输出实验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
修复动作
- 关注
输出实验
补足 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_viewer.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 .
+ 关注
输出实验
补足 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 .
- 信任报告
- Secret
- 0
- 脚本数
- 88
- 网络脚本
- 3
- Help 失败
- 0
- 包体哈希
38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc
+ 信任报告
- Secret
- 0
- 脚本数
- 89
- 网络脚本
- 3
- Help 失败
- 0
- 包体哈希
ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c
安全边界
高风险 secret、远程 inline execution、缺失依赖策略或无法解释的脚本接口应阻断 governed release。
- Python 兼容
- 目标 Python
- 3.11
- 文件数
- 147
- 问题数
- 0
- 语法错误
- 0
- F-string 3.11
- 0
+ Python 兼容
- 目标 Python
- 3.11
- 文件数
- 148
- 问题数
- 0
- 语法错误
- 0
- F-string 3.11
- 0
解释器边界
CI 和发布审查以 Python 3.11 兼容为底线;本地更高版本允许的新语法不能绕过兼容门禁。
@@ -393,7 +393,7 @@
- 人工批准
0 active waivers; 2 warning gates still need reviewer decision
+ 人工批准
0 active waivers; 1 warning gates still need reviewer decision
批准台账
- Waiver Count
- 0
- Active Count
- 0
- Expired Count
- 0
- Invalid Count
- 0
- 覆盖 Gate
- 0
@@ -425,12 +425,12 @@
注册审计
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
- 归档哈希
43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f
+ 包体元数据
- 名称
- yao-meta-skill
- 版本
- 1.1.0
- Maturity
- governed
- Owner
- Yao Team
- License
- MIT
- 信任级别
- local
- 目标平台
- openai, claude, generic, agent-skills-compatible, vscode
- 兼容通过
- 6/6
- 归档哈希
a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653
发布路线
0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
- 包体验证
- 目标数
- 4
- Adapter
- 4
- 归档存在
- 是
- Zip 条目
- 556
- 失败数
- 0
- 警告数
- 0
- 归档哈希
43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f
+ 包体验证
- 目标数
- 4
- Adapter
- 4
- 归档存在
- 是
- Zip 条目
- 557
- 失败数
- 0
- 警告数
- 0
- 归档哈希
a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653
diff --git a/reports/review-studio.json b/reports/review-studio.json
index 048ce02..f6b5cd0 100644
--- a/reports/review-studio.json
+++ b/reports/review-studio.json
@@ -4,11 +4,11 @@
"skill_dir": ".",
"summary": {
"decision": "review",
- "world_class_score": 89,
+ "world_class_score": 91,
"gate_count": 16,
"blocker_count": 0,
- "warning_count": 4,
- "action_count": 4,
+ "warning_count": 3,
+ "action_count": 3,
"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; 88 scripts; 3 network-capable scripts; 0 help smoke failures",
+ "detail": "0 secrets; 89 scripts; 3 network-capable scripts; 0 help smoke failures",
"evidence": "reports/security_trust_report.json",
"link": "security_trust_report.md"
},
@@ -67,15 +67,15 @@
"key": "python-compat",
"label": "Python 兼容",
"status": "pass",
- "detail": "Python 3.11; 147 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards",
+ "detail": "Python 3.11; 148 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": "144 Python files; 1 hotspot; 0 blockers; largest 1159 lines; 35 CLI handlers",
+ "status": "pass",
+ "detail": "145 Python files; 0 hotspots; 0 blockers; largest 887 lines; 33 CLI handlers",
"evidence": "reports/architecture_maintainability.json",
"link": "architecture_maintainability.md"
},
@@ -115,7 +115,7 @@
"key": "review-waivers",
"label": "人工批准",
"status": "warn",
- "detail": "0 active waivers; 2 warning gates still need reviewer decision",
+ "detail": "0 active waivers; 1 warning gates still need reviewer decision",
"evidence": "reports/review_waivers.json",
"link": "review_waivers.md"
},
@@ -154,19 +154,11 @@
"evidence": "reports/output_quality_scorecard.json",
"link": "output_quality_scorecard.md"
},
- {
- "key": "architecture-maintainability",
- "label": "架构维护",
- "status": "warn",
- "detail": "144 Python files; 1 hotspot; 0 blockers; largest 1159 lines; 35 CLI handlers",
- "evidence": "reports/architecture_maintainability.json",
- "link": "architecture_maintainability.md"
- },
{
"key": "review-waivers",
"label": "人工批准",
"status": "warn",
- "detail": "0 active waivers; 2 warning gates still need reviewer decision",
+ "detail": "0 active waivers; 1 warning gates still need reviewer decision",
"evidence": "reports/review_waivers.json",
"link": "review_waivers.md"
},
@@ -242,52 +234,6 @@
"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_viewer.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": 111,
- "exists": true,
- "link": "../scripts/yao.py"
- },
- {
- "path": "scripts/render_review_studio.py",
- "label": "Review Studio renderer",
- "kind": "source",
- "line": 121,
- "exists": true,
- "link": "../scripts/render_review_studio.py"
- },
- {
- "path": "scripts/render_review_viewer.py",
- "label": "review viewer renderer",
- "kind": "source",
- "line": 18,
- "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": "人工批准",
@@ -891,7 +837,7 @@
"path": "scripts",
"label": "Deterministic helpers or local tooling",
"kind": "folder",
- "file_count": 88
+ "file_count": 89
},
{
"path": "evals",
@@ -906,7 +852,7 @@
"file_count": 195
}
],
- "file_count": 347,
+ "file_count": 348,
"folder_count": 4,
"distribution": [
{
@@ -931,7 +877,7 @@
},
{
"label": "scripts",
- "value": 88
+ "value": 89
},
{
"label": "evals",
@@ -1060,7 +1006,7 @@
"path": "scripts",
"label": "Deterministic helpers or local tooling",
"kind": "folder",
- "file_count": 88
+ "file_count": 89
},
{
"path": "evals",
@@ -1360,9 +1306,9 @@
"world_class_task_count": 4,
"world_class_ledger_pending_count": 4,
"working_tree_dirty": true,
- "changed_file_count": 40
+ "changed_file_count": 36
},
- "commit": "479b098ccfe8756b15cbde1c8b97048ed53e9807",
+ "commit": "628acc5c35a9cf4cd0d3d684be50ee27724150ba",
"missing_artifacts": [],
"limitations": [
"Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.",
@@ -1437,9 +1383,9 @@
"failures": []
},
"trust_security": {
- "scanned_files": 172,
- "script_count": 88,
- "internal_module_count": 15,
+ "scanned_files": 173,
+ "script_count": 89,
+ "internal_module_count": 16,
"secret_findings": 0,
"dependency_files": [
"requirements-ci.txt"
@@ -1457,8 +1403,8 @@
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 172,
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "package_hash_file_count": 173,
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
},
"skill_atlas": {
"skill_count": 12,
@@ -1496,8 +1442,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc",
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
"compatibility": {
"openai": "pass",
@@ -1528,7 +1474,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
"package_verification": "reports/package_verification.json",
"install_simulated": true,
"install_simulation": "reports/install_simulation.json"
@@ -1544,8 +1490,8 @@
"target_count": 4,
"adapter_count": 4,
"archive_present": true,
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
- "archive_entry_count": 556,
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
+ "archive_entry_count": 557,
"failure_count": 0,
"warning_count": 0
},
@@ -1556,7 +1502,7 @@
"ok": true,
"summary": {
"archive_present": true,
- "archive_entry_count": 556,
+ "archive_entry_count": 557,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
@@ -1623,12 +1569,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "to": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "to": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
}
]
},
@@ -3745,7 +3691,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.77,
+ "duration_ms": 31.86,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3773,7 +3719,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 26.06,
+ "duration_ms": 31.95,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3796,7 +3742,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.36,
+ "duration_ms": 32.1,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3824,7 +3770,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.91,
+ "duration_ms": 31.57,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3847,7 +3793,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.66,
+ "duration_ms": 31.44,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3875,7 +3821,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.45,
+ "duration_ms": 30.59,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3898,7 +3844,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 26.13,
+ "duration_ms": 28.84,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3925,7 +3871,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.42,
+ "duration_ms": 28.9,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3948,7 +3894,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.7,
+ "duration_ms": 28.78,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -3977,7 +3923,7 @@
"execution_mode": "command",
"model_executed": false,
"command_executed": true,
- "duration_ms": 25.71,
+ "duration_ms": 28.9,
"provider": "local-output-eval-runner",
"model": "",
"usage": {
@@ -4408,7 +4354,7 @@
"label": "Trust Security",
"status": "pass",
"objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.",
- "current": "88 scripts; secrets 0; help failures 0",
+ "current": "89 scripts; secrets 0; help failures 0",
"command": "python3 scripts/yao.py trust .",
"test": "python3 tests/verify_trust_check.py",
"evidence": [
@@ -4482,7 +4428,7 @@
"label": "Registry Distribution",
"status": "pass",
"objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.",
- "current": "archive entries 556; install failures 0",
+ "current": "archive entries 557; 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": [
@@ -4523,7 +4469,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": "16 gates; decision review; warnings 4",
+ "current": "16 gates; decision review; warnings 3",
"command": "python3 scripts/yao.py review-studio .",
"test": "python3 tests/verify_review_studio.py",
"evidence": [
@@ -9655,9 +9601,9 @@
"ok": true,
"skill_dir": ".",
"summary": {
- "scanned_files": 172,
- "script_count": 88,
- "internal_module_count": 15,
+ "scanned_files": 173,
+ "script_count": 89,
+ "internal_module_count": 16,
"secret_findings": 0,
"dependency_files": [
"requirements-ci.txt"
@@ -9675,8 +9621,8 @@
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 172,
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "package_hash_file_count": 173,
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
},
"failures": [],
"warnings": [],
@@ -10875,6 +10821,20 @@
"network_urls": [],
"network_hosts": []
},
+ {
+ "path": "scripts/yao_cli_create_commands.py",
+ "interface": "internal-module",
+ "interface_declared": true,
+ "interface_reason": "Imported by yao.py to keep skill creation and quickstart command handlers out of the CLI orchestrator.",
+ "has_argparse": true,
+ "has_main_guard": false,
+ "uses_input": false,
+ "uses_network": false,
+ "uses_file_write": false,
+ "uses_subprocess": false,
+ "network_urls": [],
+ "network_hosts": []
+ },
{
"path": "scripts/yao_cli_parser.py",
"interface": "internal-module",
@@ -10966,7 +10926,7 @@
"checked_count": 73,
"passed_count": 73,
"failed_count": 0,
- "skipped_count": 15,
+ "skipped_count": 16,
"failed_scripts": [],
"results": [
{
@@ -11745,6 +11705,10 @@
"path": "scripts/yao_cli_config.py",
"reason": "internal module"
},
+ {
+ "path": "scripts/yao_cli_create_commands.py",
+ "reason": "internal module"
+ },
{
"path": "scripts/yao_cli_parser.py",
"reason": "internal module"
@@ -11942,7 +11906,7 @@
"root": ".",
"summary": {
"target_python": "3.11",
- "file_count": 147,
+ "file_count": 148,
"issue_count": 0,
"syntax_error_count": 0,
"fstring_311_violation_count": 0,
@@ -12481,6 +12445,12 @@
"issue_count": 0,
"issues": []
},
+ {
+ "path": "scripts/yao_cli_create_commands.py",
+ "ok": true,
+ "issue_count": 0,
+ "issues": []
+ },
{
"path": "scripts/yao_cli_parser.py",
"ok": true,
@@ -12854,27 +12824,20 @@
"generated_at": "2026-06-14",
"skill_dir": ".",
"summary": {
- "python_file_count": 144,
- "script_file_count": 88,
+ "python_file_count": 145,
+ "script_file_count": 89,
"test_file_count": 56,
- "internal_module_count": 17,
+ "internal_module_count": 18,
"cli_script_count": 72,
- "command_handler_count": 35,
+ "command_handler_count": 33,
"warn_line_threshold": 900,
"block_line_threshold": 1500,
- "largest_file_lines": 1159,
- "hotspot_count": 1,
+ "largest_file_lines": 887,
+ "hotspot_count": 0,
"blocker_count": 0,
- "decision": "watch-maintainability-hotspots"
+ "decision": "pass"
},
"largest_files": [
- {
- "path": "scripts/yao.py",
- "lines": 1159,
- "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": 887,
@@ -12882,6 +12845,13 @@
"severity": "pass",
"recommendation": "Move data loading and large section renderers into focused review_studio_* modules."
},
+ {
+ "path": "scripts/yao.py",
+ "lines": 839,
+ "kind": "cli-script",
+ "severity": "pass",
+ "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
+ },
{
"path": "tests/verify_yao_cli.py",
"lines": 838,
@@ -12953,22 +12923,8 @@
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
}
],
- "hotspots": [
- {
- "path": "scripts/yao.py",
- "lines": 1159,
- "kind": "cli-script",
- "severity": "warn",
- "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
- }
- ],
- "actions": [
- {
- "path": "scripts/yao.py",
- "severity": "warn",
- "action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
- }
- ],
+ "hotspots": [],
+ "actions": [],
"artifacts": {
"json": "reports/architecture_maintainability.json",
"markdown": "reports/architecture_maintainability.md"
@@ -12982,10 +12938,10 @@
"context_budget_tier": "production",
"context_budget_limit": 1000,
"skill_body_tokens": 751,
- "other_text_tokens": 1084834,
+ "other_text_tokens": 1084478,
"estimated_initial_load_tokens": 944,
- "estimated_total_text_tokens": 1085585,
- "relevant_file_count": 475,
+ "estimated_total_text_tokens": 1085229,
+ "relevant_file_count": 477,
"unused_resource_dirs": [],
"quality_signal_points": 130,
"quality_density": 137.7
@@ -13933,6 +13889,7 @@
"scripts/verify_package.py",
"scripts/yao.py",
"scripts/yao_cli_config.py",
+ "scripts/yao_cli_create_commands.py",
"scripts/yao_cli_parser.py",
"scripts/yao_cli_report_commands.py",
"scripts/yao_cli_runtime.py",
@@ -14832,7 +14789,7 @@
"adoption_drift": {
"ok": true,
"schema_version": "2.0",
- "generated_at": "2026-06-13T18:27:31Z",
+ "generated_at": "2026-06-13T21:15:27Z",
"skill_dir": ".",
"privacy_contract": {
"storage": "local-first",
@@ -15606,8 +15563,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc",
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
"compatibility": {
"openai": "pass",
@@ -15638,7 +15595,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
"package_verification": "reports/package_verification.json",
"install_simulated": true,
"install_simulation": "reports/install_simulation.json"
@@ -15663,7 +15620,7 @@
"vscode"
],
"package_metadata": "registry/packages/yao-meta-skill.json",
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
}
]
},
@@ -15686,8 +15643,8 @@
"target_count": 4,
"adapter_count": 4,
"archive_present": true,
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
- "archive_entry_count": 556,
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
+ "archive_entry_count": 557,
"failure_count": 0,
"warning_count": 0
},
@@ -16352,7 +16309,7 @@
"installed_skill_dir": "[temporary-install-root]/yao-meta-skill",
"summary": {
"archive_present": true,
- "archive_entry_count": 556,
+ "archive_entry_count": 557,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
@@ -16694,12 +16651,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "to": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "to": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
}
]
},
diff --git a/reports/review-viewer.json b/reports/review-viewer.json
index afda420..96aa70a 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": 88
+ "file_count": 89
},
{
"path": "evals",
@@ -452,7 +452,7 @@
"file_count": 195
}
],
- "file_count": 347,
+ "file_count": 348,
"folder_count": 4,
"distribution": [
{
@@ -477,7 +477,7 @@
},
{
"label": "scripts",
- "value": 88
+ "value": 89
},
{
"label": "evals",
@@ -606,7 +606,7 @@
"path": "scripts",
"label": "Deterministic helpers or local tooling",
"kind": "folder",
- "file_count": 88
+ "file_count": 89
},
{
"path": "evals",
@@ -906,9 +906,9 @@
"world_class_task_count": 4,
"world_class_ledger_pending_count": 4,
"working_tree_dirty": true,
- "changed_file_count": 40
+ "changed_file_count": 36
},
- "commit": "479b098ccfe8756b15cbde1c8b97048ed53e9807",
+ "commit": "628acc5c35a9cf4cd0d3d684be50ee27724150ba",
"missing_artifacts": [],
"limitations": [
"Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.",
@@ -983,9 +983,9 @@
"failures": []
},
"trust_security": {
- "scanned_files": 172,
- "script_count": 88,
- "internal_module_count": 15,
+ "scanned_files": 173,
+ "script_count": 89,
+ "internal_module_count": 16,
"secret_findings": 0,
"dependency_files": [
"requirements-ci.txt"
@@ -1003,8 +1003,8 @@
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 172,
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "package_hash_file_count": 173,
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
},
"skill_atlas": {
"skill_count": 12,
@@ -1042,8 +1042,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc",
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
"compatibility": {
"openai": "pass",
@@ -1074,7 +1074,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
"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": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
- "archive_entry_count": 556,
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
+ "archive_entry_count": 557,
"failure_count": 0,
"warning_count": 0
},
@@ -1102,7 +1102,7 @@
"ok": true,
"summary": {
"archive_present": true,
- "archive_entry_count": 556,
+ "archive_entry_count": 557,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
@@ -1169,12 +1169,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "to": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "to": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
}
]
},
diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json
index 8d7a9b1..c64f871 100644
--- a/reports/security_trust_report.json
+++ b/reports/security_trust_report.json
@@ -2,9 +2,9 @@
"ok": true,
"skill_dir": ".",
"summary": {
- "scanned_files": 172,
- "script_count": 88,
- "internal_module_count": 15,
+ "scanned_files": 173,
+ "script_count": 89,
+ "internal_module_count": 16,
"secret_findings": 0,
"dependency_files": [
"requirements-ci.txt"
@@ -22,8 +22,8 @@
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 172,
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "package_hash_file_count": 173,
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
},
"failures": [],
"warnings": [],
@@ -1222,6 +1222,20 @@
"network_urls": [],
"network_hosts": []
},
+ {
+ "path": "scripts/yao_cli_create_commands.py",
+ "interface": "internal-module",
+ "interface_declared": true,
+ "interface_reason": "Imported by yao.py to keep skill creation and quickstart command handlers out of the CLI orchestrator.",
+ "has_argparse": true,
+ "has_main_guard": false,
+ "uses_input": false,
+ "uses_network": false,
+ "uses_file_write": false,
+ "uses_subprocess": false,
+ "network_urls": [],
+ "network_hosts": []
+ },
{
"path": "scripts/yao_cli_parser.py",
"interface": "internal-module",
@@ -1313,7 +1327,7 @@
"checked_count": 73,
"passed_count": 73,
"failed_count": 0,
- "skipped_count": 15,
+ "skipped_count": 16,
"failed_scripts": [],
"results": [
{
@@ -2092,6 +2106,10 @@
"path": "scripts/yao_cli_config.py",
"reason": "internal module"
},
+ {
+ "path": "scripts/yao_cli_create_commands.py",
+ "reason": "internal module"
+ },
{
"path": "scripts/yao_cli_parser.py",
"reason": "internal module"
diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md
index abcc5d3..14b1171 100644
--- a/reports/security_trust_report.md
+++ b/reports/security_trust_report.md
@@ -1,9 +1,9 @@
# Security Trust Report
- OK: `True`
-- Scanned files: `172`
-- Scripts: `88`
-- Internal script modules: `15`
+- Scanned files: `173`
+- Scripts: `89`
+- Internal script modules: `16`
- Secret findings: `0`
- Network-capable scripts: `3`
- Network policy covered scripts: `3`
@@ -15,8 +15,8 @@
- CLI help smoke failures: `0`
- Interactive scripts: `0`
- Package hash scope: `source-contract-without-generated-reports`
-- Package hash files: `172`
-- Package SHA256: `38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc`
+- Package hash files: `173`
+- Package SHA256: `ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c`
## Failures
@@ -146,6 +146,7 @@
| scripts/verify_package.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
| scripts/yao.py | cli | False | True | True | False | False | False | True | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
| scripts/yao_cli_config.py | internal-module | True | False | False | False | False | False | False | Imported by yao.py for CLI target maps and side-effect-free shaping helpers. |
+| scripts/yao_cli_create_commands.py | internal-module | True | True | False | False | False | False | False | Imported by yao.py to keep skill creation and quickstart command handlers out of the CLI orchestrator. |
| scripts/yao_cli_parser.py | internal-module | True | True | False | False | False | False | False | Imported by yao.py to keep CLI parser declarations separate from command orchestration. |
| scripts/yao_cli_report_commands.py | internal-module | True | True | False | False | False | False | False | Imported by yao.py to keep report and evidence command handlers out of the CLI orchestrator. |
| scripts/yao_cli_runtime.py | internal-module | True | False | False | False | False | False | True | Imported by yao.py and command modules for shared subprocess execution and JSON payload parsing. |
diff --git a/reports/skill-overview.html b/reports/skill-overview.html
index 16c90cf..4d386a1 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 06bf487..a16fd41 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": 88
+ "file_count": 89
},
{
"path": "evals",
@@ -451,7 +451,7 @@
"file_count": 195
}
],
- "file_count": 347,
+ "file_count": 348,
"folder_count": 4,
"distribution": [
{
@@ -476,7 +476,7 @@
},
{
"label": "scripts",
- "value": 88
+ "value": 89
},
{
"label": "evals",
@@ -605,7 +605,7 @@
"path": "scripts",
"label": "Deterministic helpers or local tooling",
"kind": "folder",
- "file_count": 88
+ "file_count": 89
},
{
"path": "evals",
@@ -905,9 +905,9 @@
"world_class_task_count": 4,
"world_class_ledger_pending_count": 4,
"working_tree_dirty": true,
- "changed_file_count": 40
+ "changed_file_count": 36
},
- "commit": "479b098ccfe8756b15cbde1c8b97048ed53e9807",
+ "commit": "628acc5c35a9cf4cd0d3d684be50ee27724150ba",
"missing_artifacts": [],
"limitations": [
"Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.",
@@ -982,9 +982,9 @@
"failures": []
},
"trust_security": {
- "scanned_files": 172,
- "script_count": 88,
- "internal_module_count": 15,
+ "scanned_files": 173,
+ "script_count": 89,
+ "internal_module_count": 16,
"secret_findings": 0,
"dependency_files": [
"requirements-ci.txt"
@@ -1002,8 +1002,8 @@
"help_smoke_failed_count": 0,
"interactive_script_count": 0,
"package_hash_scope": "source-contract-without-generated-reports",
- "package_hash_file_count": 172,
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "package_hash_file_count": 173,
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
},
"skill_atlas": {
"skill_count": 12,
@@ -1041,8 +1041,8 @@
"trust_level": "local",
"license": "MIT",
"checksums": {
- "package_sha256": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc",
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "package_sha256": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
"compatibility": {
"openai": "pass",
@@ -1073,7 +1073,7 @@
},
"distribution": {
"archive_verified": true,
- "archive_sha256": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
"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": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f",
- "archive_entry_count": 556,
+ "archive_sha256": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653",
+ "archive_entry_count": 557,
"failure_count": 0,
"warning_count": 0
},
@@ -1101,7 +1101,7 @@
"ok": true,
"summary": {
"archive_present": true,
- "archive_entry_count": 556,
+ "archive_entry_count": 557,
"archive_extracted": true,
"entrypoint_loaded": true,
"manifest_loaded": true,
@@ -1168,12 +1168,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "to": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "to": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
}
]
},
diff --git a/reports/skill_atlas.json b/reports/skill_atlas.json
index 99fd421..b7688da 100644
--- a/reports/skill_atlas.json
+++ b/reports/skill_atlas.json
@@ -148,6 +148,7 @@
"scripts/verify_package.py",
"scripts/yao.py",
"scripts/yao_cli_config.py",
+ "scripts/yao_cli_create_commands.py",
"scripts/yao_cli_parser.py",
"scripts/yao_cli_report_commands.py",
"scripts/yao_cli_runtime.py",
diff --git a/reports/skill_os2_audit.json b/reports/skill_os2_audit.json
index dcd02ba..4e888c1 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 88; help failures 0",
+ "current": "secrets 0; scripts 89; 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 556; install failures 0; permission failures 0",
+ "current": "zip entries 557; 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 4; score 89",
+ "current": "decision review; warnings 3; score 91",
"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 7ab84c1..4d63f0f 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 88; 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 89; 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 556; 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. |
+| Registry Distribution | pass | zip entries 557; 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 91 | 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 4b7c0b4..5cae860 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": "88 scripts; secrets 0; help failures 0",
+ "current": "89 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 556; install failures 0",
+ "current": "archive entries 557; 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": "16 gates; decision review; warnings 4",
+ "current": "16 gates; decision review; warnings 3",
"command": "python3 scripts/yao.py review-studio .",
"test": "python3 tests/verify_review_studio.py",
"evidence": [
diff --git a/reports/skill_os2_coverage.md b/reports/skill_os2_coverage.md
index fb81cf6..73d5d6b 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` | 88 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` |
+| Trust Security | `pass` | 89 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 556; 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` |
+| Registry Distribution | `pass` | archive entries 557; 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 3 | `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
diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json
index 48fdcbc..5a8c664 100644
--- a/reports/upgrade_check.json
+++ b/reports/upgrade_check.json
@@ -70,12 +70,12 @@
{
"field": "archive_sha256",
"from": "",
- "to": "43e1251fe70c406ed6d0e5ec135bc2294492add1b5176427894f7df4dae8e14f"
+ "to": "a35cc5a6ebbbb278f826506ff52274ec65c8c5ffbdaa9dee2ef477d9dc409653"
},
{
"field": "package_sha256",
"from": "0000000000000000000000000000000000000000000000000000000000000000",
- "to": "38e25604b3d11793a45c37b0680dc50e8233c5d0aecf982879109022fbed0cfc"
+ "to": "ac773f9145981816dd82890dd769bb608245fb14a5f6605db7e606d377ffcd9c"
}
]
},
diff --git a/scripts/yao.py b/scripts/yao.py
index 0066d60..322b4b9 100644
--- a/scripts/yao.py
+++ b/scripts/yao.py
@@ -2,26 +2,16 @@
import argparse
import json
import subprocess
-import sys
from pathlib import Path
-from github_benchmark_scan import build_query
-from render_intent_confidence import assess_intent_confidence
from yao_cli_config import (
- ARCHETYPE_MODE,
- archetype_guidance,
baseline_compare_args,
- diagnose_skill_candidates,
- diagnosis_note,
- discovery_summary,
- infer_archetype,
local_output_runner_command,
provider_output_runner_command,
- recommendation_from_synthesis,
- reference_visibility,
resolve_promotion_target,
resolve_target,
)
+from yao_cli_create_commands import command_init, command_quickstart
from yao_cli_parser import build_parser as build_cli_parser
from yao_cli_report_commands import (
command_artifact_design_profile,
@@ -49,316 +39,6 @@ from yao_cli_runtime import ROOT, run_script
from yao_cli_telemetry import add_telemetry_args, maybe_record_cli_event
-def prompt_with_default(label: str, default: str) -> str:
- sys.stderr.write(f"{label} [{default}]: ")
- sys.stderr.flush()
- value = sys.stdin.readline().strip()
- return value or default
-
-
-def prompt_optional(label: str, default: str = "skip") -> str:
- sys.stderr.write(f"{label} [{default}]: ")
- sys.stderr.flush()
- value = sys.stdin.readline().strip()
- return value or default
-
-
-def prompt_optional_entries(label: str) -> list[str]:
- sys.stderr.write(f"{label} [none]: ")
- sys.stderr.flush()
- value = sys.stdin.readline().strip()
- if not value or value.lower() in {"none", "no", "n"}:
- return []
- return [item.strip() for item in value.split(",") if item.strip()]
-
-
-def update_context_slot(context: dict, slot: str, answer: str, list_mode: bool) -> None:
- value = answer.strip()
- if not value or value.lower() in {"skip", "none", "no", "n"}:
- return
- if list_mode:
- context[slot] = [item.strip() for item in value.split(",") if item.strip()]
- else:
- context[slot] = value
-
-
-def intent_confidence_note(summary: dict) -> str:
- lines = [
- f"\nIntent confidence: {summary['score']}/100 ({summary['band']}).",
- f"- Recommended action: {summary['recommended_action']}",
- ]
- if summary.get("gaps"):
- top_gap = summary["gaps"][0]
- lines.append(f"- Biggest gap: {top_gap['label']} — {top_gap['reason']}")
- return "\n".join(lines) + "\n"
-
-
-def maybe_emit_update_notice(args: argparse.Namespace) -> None:
- if getattr(args, "no_update_check", False):
- return
- result = run_script("check_update.py", [])
- payload = result["payload"] if result["payload"] is not None else {}
- if not result["ok"] and not payload:
- return
- if payload.get("update_available"):
- sys.stderr.write(
- "\nUpdate available for yao-meta-skill: "
- f"{payload.get('local_version')} -> {payload.get('remote_version')}.\n"
- f"Run: {payload.get('install_hint')}\n"
- )
-
-
-def command_init(args: argparse.Namespace) -> int:
- cmd = [
- args.name,
- "--description",
- args.description,
- "--output-dir",
- args.output_dir,
- "--mode",
- args.mode,
- "--archetype",
- args.archetype,
- *(["--title", args.title] if args.title else []),
- ]
- for reference in args.external_reference:
- cmd.extend(["--external-reference", reference])
- for reference in args.user_reference:
- cmd.extend(["--user-reference", reference])
- for constraint in args.local_constraint:
- cmd.extend(["--local-constraint", constraint])
- if args.github_query:
- cmd.extend(["--github-query", args.github_query])
- cmd.extend(["--github-top-n", str(args.github_top_n)])
- if args.github_fixture_dir:
- cmd.extend(["--github-fixture-dir", args.github_fixture_dir])
- if args.intent_job:
- cmd.extend(["--intent-job", args.intent_job])
- for item in args.intent_real_input:
- cmd.extend(["--intent-real-input", item])
- if args.intent_primary_output:
- cmd.extend(["--intent-primary-output", args.intent_primary_output])
- for item in args.intent_exclusion:
- cmd.extend(["--intent-exclusion", item])
- for item in args.intent_constraint:
- cmd.extend(["--intent-constraint", item])
- for item in args.intent_standard:
- cmd.extend(["--intent-standard", item])
- if args.intent_correction:
- cmd.extend(["--intent-correction", args.intent_correction])
- result = run_script("init_skill.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_quickstart(args: argparse.Namespace) -> int:
- maybe_emit_update_notice(args)
- sys.stderr.write("Let's start gently. You do not need a polished brief here.\n")
- sys.stderr.write("Give me the real work in your own words, and I will help turn it into a clean first-pass skill.\n")
- sys.stderr.write("While we shape the first pass, I will quietly check a few strong public patterns in the background and only surface them if there is real uncertainty or a design conflict.\n")
- name = args.name or prompt_with_default("Skill name", "my-skill")
- job = args.job or prompt_with_default(
- "In your own words, what repeated work do you most want this skill to reliably handle",
- "Turn a repeated workflow into a reusable skill.",
- )
- real_inputs = args.real_input or prompt_optional_entries(
- "What material will people actually hand to this skill in practice (comma-separated)"
- )
- primary_output = args.primary_output or prompt_with_default(
- "If it works beautifully, what should it hand back so you or the next person can keep moving",
- "A reusable skill package.",
- )
- description = args.description or f"{job.rstrip('.')} Primary output: {primary_output.rstrip('.')}."
- intent_context = {
- "job": job,
- "real_inputs": real_inputs,
- "primary_output": primary_output,
- "description": description,
- "exclusions": [],
- "constraints": [],
- "standards": [],
- "correction": "",
- "user_references": [],
- }
- inferred_archetype, archetype_reason = infer_archetype(job, description)
- guidance = archetype_guidance(inferred_archetype)
- sys.stderr.write(discovery_summary(job, primary_output, inferred_archetype, guidance))
- correction = prompt_optional(
- "If I am off, what is the first thing I should correct before I package this idea",
- "looks right",
- )
- if correction.lower() not in {"looks right", "skip", "none", "no"}:
- description = f"{description.rstrip('.')} Keep this correction in scope: {correction.rstrip('.')}."
- intent_context["description"] = description
- intent_context["correction"] = correction
- inferred_archetype, archetype_reason = infer_archetype(job, description)
- guidance = archetype_guidance(inferred_archetype)
- sys.stderr.write("\nThanks. I tightened the frame before moving on.\n")
- sys.stderr.write(discovery_summary(job, primary_output, inferred_archetype, guidance))
- confidence = assess_intent_confidence(intent_context)
- sys.stderr.write(intent_confidence_note(confidence))
- diagnosis = diagnose_skill_candidates(job, primary_output, inferred_archetype, confidence)
- if diagnosis["fuzzy"]:
- sys.stderr.write(diagnosis_note(diagnosis))
- if not confidence["gate_passed"]:
- sys.stderr.write("Before I package this idea, I want to close the highest-leverage gaps instead of guessing.\n")
- for follow_up in confidence.get("follow_up_questions", [])[:2]:
- answer = prompt_optional(follow_up["question"], "skip")
- update_context_slot(intent_context, follow_up["slot"], answer, follow_up["list"])
- confidence = assess_intent_confidence(intent_context)
- sys.stderr.write("\nI tightened the intent frame once more before moving on.\n")
- sys.stderr.write(intent_confidence_note(confidence))
- diagnosis = diagnose_skill_candidates(job, primary_output, inferred_archetype, confidence)
- if diagnosis["fuzzy"]:
- sys.stderr.write(diagnosis_note(diagnosis))
- archetype = args.archetype or prompt_with_default("I would start with this archetype (scaffold/production/library/governed)", inferred_archetype)
- archetype = archetype if archetype in ARCHETYPE_MODE else inferred_archetype
- default_mode = ARCHETYPE_MODE[archetype]
- mode = args.mode or prompt_with_default("For the first pass, I would keep the mode here (scaffold/production/library/governed)", default_mode)
- mode = mode if mode in ARCHETYPE_MODE.values() else default_mode
- diagnosis = diagnose_skill_candidates(job, primary_output, archetype, confidence)
- guidance = archetype_guidance(archetype)
- sys.stderr.write(
- f"\nGood. I will treat this as `{archetype}` in `{mode}` mode, so the first pass stays focused on {guidance['focus']}.\n"
- )
- user_references = args.user_reference or prompt_optional_entries(
- "If there is anything you admire and want me to learn from as pattern hints, send it here (repo, product, page, workflow; comma-separated)"
- )
- external_references = args.external_reference or []
- prompted_constraints = args.constraint if getattr(args, "constraint", None) else ([] if args.local_constraint else prompt_optional_entries(
- "Tell me any local constraints I must keep in view (privacy, naming, compatibility; comma-separated)"
- ))
- local_constraints = args.local_constraint or prompted_constraints or intent_context.get("constraints", [])
- intent_context["user_references"] = user_references
- intent_context["constraints"] = local_constraints
- confidence = assess_intent_confidence(intent_context)
- github_query = args.github_query or build_query(" ".join(filter(None, [job, primary_output, description])))
- title = args.title or name.replace("-", " ").title()
- guidance = archetype_guidance(archetype)
- cmd = [
- name,
- "--description",
- description,
- "--title",
- title,
- "--output-dir",
- args.output_dir,
- "--mode",
- mode,
- "--archetype",
- archetype,
- "--github-query",
- github_query,
- "--github-top-n",
- str(args.github_top_n),
- "--intent-job",
- job,
- "--intent-primary-output",
- primary_output,
- ]
- for item in real_inputs:
- cmd.extend(["--intent-real-input", item])
- for item in intent_context.get("exclusions", []):
- cmd.extend(["--intent-exclusion", item])
- for item in intent_context.get("constraints", []):
- cmd.extend(["--intent-constraint", item])
- for item in intent_context.get("standards", []):
- cmd.extend(["--intent-standard", item])
- if intent_context.get("correction"):
- cmd.extend(["--intent-correction", intent_context["correction"]])
- if args.github_fixture_dir:
- cmd.extend(["--github-fixture-dir", args.github_fixture_dir])
- for reference in external_references:
- cmd.extend(["--external-reference", reference])
- for reference in user_references:
- cmd.extend(["--user-reference", reference])
- for constraint in local_constraints:
- cmd.extend(["--local-constraint", constraint])
- result = run_script("init_skill.py", cmd)
- payload = result["payload"] if result["payload"] is not None else result
- reference_synthesis = payload.get("reference_synthesis") or {}
- visibility = reference_visibility(reference_synthesis)
- recommendation = recommendation_from_synthesis(reference_synthesis, visibility)
- sys.stderr.write(f"\nRecommendation: {recommendation['summary']}\n")
- if visibility["user_decision_required"]:
- if visibility["conflicts"]:
- sys.stderr.write(f"I am surfacing this because there is a real design conflict: {visibility['conflicts'][0]['summary']}\n")
- else:
- sys.stderr.write("I am surfacing this because intent is still settling and the package should not deepen on guesswork.\n")
- else:
- sys.stderr.write("I will keep the underlying benchmark evidence in the reviewer reports and move ahead with this recommendation.\n")
- if payload.get("report_view", {}).get("html_report"):
- sys.stderr.write(f"Skill report: {payload['report_view']['html_report']}\n")
-
- next_steps = [
- "Open reports/skill-overview.html to review the generated Skill audit report.",
- "Open reports/intent-dialogue.md and tighten the real job, outputs, and exclusions.",
- "Open reports/review-studio.html to inspect the Review Studio 2.0 gate view before release.",
- "Open reports/review-viewer.html to explain the package to a first-time reviewer.",
- "Use reports/iteration-directions.md to choose only one high-value next move before adding more files.",
- ]
- if visibility["user_decision_required"]:
- next_steps.insert(
- 1,
- "Open reports/reference-synthesis.md if you want to inspect why the recommendation was surfaced and which tradeoff needs a call.",
- )
- report = {
- "ok": result["ok"],
- "root": payload.get("root"),
- "mode": mode,
- "archetype": archetype,
- "artifacts": payload.get("artifacts", {}),
- "report_view": payload.get("report_view", {}),
- "intent_confidence": {
- "score": confidence["score"],
- "band": confidence["band"],
- "gate_passed": confidence["gate_passed"],
- "recommended_action": confidence["recommended_action"],
- },
- "recommendation": recommendation,
- "reference_mode": {
- "mode": visibility["mode"],
- "user_decision_required": visibility["user_decision_required"],
- },
- "reviewer_evidence": {
- "visibility": "full evidence in reports and review-viewer",
- "artifacts": {
- "benchmark_scan": payload.get("artifacts", {}).get("github_benchmark_scan_md"),
- "reference_synthesis": payload.get("artifacts", {}).get("reference_synthesis_md"),
- "artifact_design_profile": payload.get("artifacts", {}).get("artifact_design_profile_md"),
- "prompt_quality_profile": payload.get("artifacts", {}).get("prompt_quality_profile_md"),
- "system_model": payload.get("artifacts", {}).get("system_model_md"),
- "review_studio": payload.get("artifacts", {}).get("review_studio_html"),
- "review_viewer": payload.get("artifacts", {}).get("review_viewer_html"),
- },
- },
- "guidance": {
- "archetype_reason": archetype_reason,
- "problem_diagnosis": diagnosis,
- "why_this_mode": (
- "Scaffold mode keeps the first package light and lets you postpone governance-heavy work until reuse becomes real."
- if mode == "scaffold"
- else "This mode expects stronger lifecycle metadata, validation, and review discipline."
- ),
- "first_gate": guidance["first_gate"],
- "focus": guidance["focus"],
- "next_steps": next_steps,
- "experience_note": (
- "The first pass should feel more like guided co-creation than a worksheet. "
- "The system should make benchmark and pattern calls quietly unless there is a real reason to ask you to choose."
- ),
- },
- }
- if visibility["user_decision_required"]:
- report["uncertainty_or_conflict"] = {
- "reasons": visibility["reasons"],
- "conflicts": visibility["conflicts"],
- "note": "A design decision still needs your input before the package should be deepened.",
- }
- print(json.dumps(report, ensure_ascii=False, indent=2))
- return 0 if result["ok"] else 2
-
-
def command_validate(args: argparse.Namespace) -> int:
skill_dir = str(Path(args.skill_dir).resolve())
runs = [
diff --git a/scripts/yao_cli_create_commands.py b/scripts/yao_cli_create_commands.py
new file mode 100644
index 0000000..deea4cb
--- /dev/null
+++ b/scripts/yao_cli_create_commands.py
@@ -0,0 +1,334 @@
+#!/usr/bin/env python3
+"""Creation command handlers for the Yao CLI."""
+
+import argparse
+import json
+import sys
+
+from github_benchmark_scan import build_query
+from render_intent_confidence import assess_intent_confidence
+from yao_cli_config import (
+ ARCHETYPE_MODE,
+ archetype_guidance,
+ diagnose_skill_candidates,
+ diagnosis_note,
+ discovery_summary,
+ infer_archetype,
+ recommendation_from_synthesis,
+ reference_visibility,
+)
+from yao_cli_runtime import run_script
+
+
+SCRIPT_INTERFACE = "internal-module"
+SCRIPT_INTERFACE_REASON = "Imported by yao.py to keep skill creation and quickstart command handlers out of the CLI orchestrator."
+
+
+def prompt_with_default(label: str, default: str) -> str:
+ sys.stderr.write(f"{label} [{default}]: ")
+ sys.stderr.flush()
+ value = sys.stdin.readline().strip()
+ return value or default
+
+
+def prompt_optional(label: str, default: str = "skip") -> str:
+ sys.stderr.write(f"{label} [{default}]: ")
+ sys.stderr.flush()
+ value = sys.stdin.readline().strip()
+ return value or default
+
+
+def prompt_optional_entries(label: str) -> list[str]:
+ sys.stderr.write(f"{label} [none]: ")
+ sys.stderr.flush()
+ value = sys.stdin.readline().strip()
+ if not value or value.lower() in {"none", "no", "n"}:
+ return []
+ return [item.strip() for item in value.split(",") if item.strip()]
+
+
+def update_context_slot(context: dict, slot: str, answer: str, list_mode: bool) -> None:
+ value = answer.strip()
+ if not value or value.lower() in {"skip", "none", "no", "n"}:
+ return
+ if list_mode:
+ context[slot] = [item.strip() for item in value.split(",") if item.strip()]
+ else:
+ context[slot] = value
+
+
+def intent_confidence_note(summary: dict) -> str:
+ lines = [
+ f"\nIntent confidence: {summary['score']}/100 ({summary['band']}).",
+ f"- Recommended action: {summary['recommended_action']}",
+ ]
+ if summary.get("gaps"):
+ top_gap = summary["gaps"][0]
+ lines.append(f"- Biggest gap: {top_gap['label']} — {top_gap['reason']}")
+ return "\n".join(lines) + "\n"
+
+
+def maybe_emit_update_notice(args: argparse.Namespace) -> None:
+ if getattr(args, "no_update_check", False):
+ return
+ result = run_script("check_update.py", [])
+ payload = result["payload"] if result["payload"] is not None else {}
+ if not result["ok"] and not payload:
+ return
+ if payload.get("update_available"):
+ sys.stderr.write(
+ "\nUpdate available for yao-meta-skill: "
+ f"{payload.get('local_version')} -> {payload.get('remote_version')}.\n"
+ f"Run: {payload.get('install_hint')}\n"
+ )
+
+
+def command_init(args: argparse.Namespace) -> int:
+ cmd = [
+ args.name,
+ "--description",
+ args.description,
+ "--output-dir",
+ args.output_dir,
+ "--mode",
+ args.mode,
+ "--archetype",
+ args.archetype,
+ *(["--title", args.title] if args.title else []),
+ ]
+ for reference in args.external_reference:
+ cmd.extend(["--external-reference", reference])
+ for reference in args.user_reference:
+ cmd.extend(["--user-reference", reference])
+ for constraint in args.local_constraint:
+ cmd.extend(["--local-constraint", constraint])
+ if args.github_query:
+ cmd.extend(["--github-query", args.github_query])
+ cmd.extend(["--github-top-n", str(args.github_top_n)])
+ if args.github_fixture_dir:
+ cmd.extend(["--github-fixture-dir", args.github_fixture_dir])
+ if args.intent_job:
+ cmd.extend(["--intent-job", args.intent_job])
+ for item in args.intent_real_input:
+ cmd.extend(["--intent-real-input", item])
+ if args.intent_primary_output:
+ cmd.extend(["--intent-primary-output", args.intent_primary_output])
+ for item in args.intent_exclusion:
+ cmd.extend(["--intent-exclusion", item])
+ for item in args.intent_constraint:
+ cmd.extend(["--intent-constraint", item])
+ for item in args.intent_standard:
+ cmd.extend(["--intent-standard", item])
+ if args.intent_correction:
+ cmd.extend(["--intent-correction", args.intent_correction])
+ result = run_script("init_skill.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_quickstart(args: argparse.Namespace) -> int:
+ maybe_emit_update_notice(args)
+ sys.stderr.write("Let's start gently. You do not need a polished brief here.\n")
+ sys.stderr.write("Give me the real work in your own words, and I will help turn it into a clean first-pass skill.\n")
+ sys.stderr.write("While we shape the first pass, I will quietly check a few strong public patterns in the background and only surface them if there is real uncertainty or a design conflict.\n")
+ name = args.name or prompt_with_default("Skill name", "my-skill")
+ job = args.job or prompt_with_default(
+ "In your own words, what repeated work do you most want this skill to reliably handle",
+ "Turn a repeated workflow into a reusable skill.",
+ )
+ real_inputs = args.real_input or prompt_optional_entries(
+ "What material will people actually hand to this skill in practice (comma-separated)"
+ )
+ primary_output = args.primary_output or prompt_with_default(
+ "If it works beautifully, what should it hand back so you or the next person can keep moving",
+ "A reusable skill package.",
+ )
+ description = args.description or f"{job.rstrip('.')} Primary output: {primary_output.rstrip('.')}."
+ intent_context = {
+ "job": job,
+ "real_inputs": real_inputs,
+ "primary_output": primary_output,
+ "description": description,
+ "exclusions": [],
+ "constraints": [],
+ "standards": [],
+ "correction": "",
+ "user_references": [],
+ }
+ inferred_archetype, archetype_reason = infer_archetype(job, description)
+ guidance = archetype_guidance(inferred_archetype)
+ sys.stderr.write(discovery_summary(job, primary_output, inferred_archetype, guidance))
+ correction = prompt_optional(
+ "If I am off, what is the first thing I should correct before I package this idea",
+ "looks right",
+ )
+ if correction.lower() not in {"looks right", "skip", "none", "no"}:
+ description = f"{description.rstrip('.')} Keep this correction in scope: {correction.rstrip('.')}."
+ intent_context["description"] = description
+ intent_context["correction"] = correction
+ inferred_archetype, archetype_reason = infer_archetype(job, description)
+ guidance = archetype_guidance(inferred_archetype)
+ sys.stderr.write("\nThanks. I tightened the frame before moving on.\n")
+ sys.stderr.write(discovery_summary(job, primary_output, inferred_archetype, guidance))
+ confidence = assess_intent_confidence(intent_context)
+ sys.stderr.write(intent_confidence_note(confidence))
+ diagnosis = diagnose_skill_candidates(job, primary_output, inferred_archetype, confidence)
+ if diagnosis["fuzzy"]:
+ sys.stderr.write(diagnosis_note(diagnosis))
+ if not confidence["gate_passed"]:
+ sys.stderr.write("Before I package this idea, I want to close the highest-leverage gaps instead of guessing.\n")
+ for follow_up in confidence.get("follow_up_questions", [])[:2]:
+ answer = prompt_optional(follow_up["question"], "skip")
+ update_context_slot(intent_context, follow_up["slot"], answer, follow_up["list"])
+ confidence = assess_intent_confidence(intent_context)
+ sys.stderr.write("\nI tightened the intent frame once more before moving on.\n")
+ sys.stderr.write(intent_confidence_note(confidence))
+ diagnosis = diagnose_skill_candidates(job, primary_output, inferred_archetype, confidence)
+ if diagnosis["fuzzy"]:
+ sys.stderr.write(diagnosis_note(diagnosis))
+ archetype = args.archetype or prompt_with_default("I would start with this archetype (scaffold/production/library/governed)", inferred_archetype)
+ archetype = archetype if archetype in ARCHETYPE_MODE else inferred_archetype
+ default_mode = ARCHETYPE_MODE[archetype]
+ mode = args.mode or prompt_with_default("For the first pass, I would keep the mode here (scaffold/production/library/governed)", default_mode)
+ mode = mode if mode in ARCHETYPE_MODE.values() else default_mode
+ diagnosis = diagnose_skill_candidates(job, primary_output, archetype, confidence)
+ guidance = archetype_guidance(archetype)
+ sys.stderr.write(
+ f"\nGood. I will treat this as `{archetype}` in `{mode}` mode, so the first pass stays focused on {guidance['focus']}.\n"
+ )
+ user_references = args.user_reference or prompt_optional_entries(
+ "If there is anything you admire and want me to learn from as pattern hints, send it here (repo, product, page, workflow; comma-separated)"
+ )
+ external_references = args.external_reference or []
+ prompted_constraints = args.constraint if getattr(args, "constraint", None) else ([] if args.local_constraint else prompt_optional_entries(
+ "Tell me any local constraints I must keep in view (privacy, naming, compatibility; comma-separated)"
+ ))
+ local_constraints = args.local_constraint or prompted_constraints or intent_context.get("constraints", [])
+ intent_context["user_references"] = user_references
+ intent_context["constraints"] = local_constraints
+ confidence = assess_intent_confidence(intent_context)
+ github_query = args.github_query or build_query(" ".join(filter(None, [job, primary_output, description])))
+ title = args.title or name.replace("-", " ").title()
+ guidance = archetype_guidance(archetype)
+ cmd = [
+ name,
+ "--description",
+ description,
+ "--title",
+ title,
+ "--output-dir",
+ args.output_dir,
+ "--mode",
+ mode,
+ "--archetype",
+ archetype,
+ "--github-query",
+ github_query,
+ "--github-top-n",
+ str(args.github_top_n),
+ "--intent-job",
+ job,
+ "--intent-primary-output",
+ primary_output,
+ ]
+ for item in real_inputs:
+ cmd.extend(["--intent-real-input", item])
+ for item in intent_context.get("exclusions", []):
+ cmd.extend(["--intent-exclusion", item])
+ for item in intent_context.get("constraints", []):
+ cmd.extend(["--intent-constraint", item])
+ for item in intent_context.get("standards", []):
+ cmd.extend(["--intent-standard", item])
+ if intent_context.get("correction"):
+ cmd.extend(["--intent-correction", intent_context["correction"]])
+ if args.github_fixture_dir:
+ cmd.extend(["--github-fixture-dir", args.github_fixture_dir])
+ for reference in external_references:
+ cmd.extend(["--external-reference", reference])
+ for reference in user_references:
+ cmd.extend(["--user-reference", reference])
+ for constraint in local_constraints:
+ cmd.extend(["--local-constraint", constraint])
+ result = run_script("init_skill.py", cmd)
+ payload = result["payload"] if result["payload"] is not None else result
+ reference_synthesis = payload.get("reference_synthesis") or {}
+ visibility = reference_visibility(reference_synthesis)
+ recommendation = recommendation_from_synthesis(reference_synthesis, visibility)
+ sys.stderr.write(f"\nRecommendation: {recommendation['summary']}\n")
+ if visibility["user_decision_required"]:
+ if visibility["conflicts"]:
+ sys.stderr.write(f"I am surfacing this because there is a real design conflict: {visibility['conflicts'][0]['summary']}\n")
+ else:
+ sys.stderr.write("I am surfacing this because intent is still settling and the package should not deepen on guesswork.\n")
+ else:
+ sys.stderr.write("I will keep the underlying benchmark evidence in the reviewer reports and move ahead with this recommendation.\n")
+ if payload.get("report_view", {}).get("html_report"):
+ sys.stderr.write(f"Skill report: {payload['report_view']['html_report']}\n")
+
+ next_steps = [
+ "Open reports/skill-overview.html to review the generated Skill audit report.",
+ "Open reports/intent-dialogue.md and tighten the real job, outputs, and exclusions.",
+ "Open reports/review-studio.html to inspect the Review Studio 2.0 gate view before release.",
+ "Open reports/review-viewer.html to explain the package to a first-time reviewer.",
+ "Use reports/iteration-directions.md to choose only one high-value next move before adding more files.",
+ ]
+ if visibility["user_decision_required"]:
+ next_steps.insert(
+ 1,
+ "Open reports/reference-synthesis.md if you want to inspect why the recommendation was surfaced and which tradeoff needs a call.",
+ )
+ report = {
+ "ok": result["ok"],
+ "root": payload.get("root"),
+ "mode": mode,
+ "archetype": archetype,
+ "artifacts": payload.get("artifacts", {}),
+ "report_view": payload.get("report_view", {}),
+ "intent_confidence": {
+ "score": confidence["score"],
+ "band": confidence["band"],
+ "gate_passed": confidence["gate_passed"],
+ "recommended_action": confidence["recommended_action"],
+ },
+ "recommendation": recommendation,
+ "reference_mode": {
+ "mode": visibility["mode"],
+ "user_decision_required": visibility["user_decision_required"],
+ },
+ "reviewer_evidence": {
+ "visibility": "full evidence in reports and review-viewer",
+ "artifacts": {
+ "benchmark_scan": payload.get("artifacts", {}).get("github_benchmark_scan_md"),
+ "reference_synthesis": payload.get("artifacts", {}).get("reference_synthesis_md"),
+ "artifact_design_profile": payload.get("artifacts", {}).get("artifact_design_profile_md"),
+ "prompt_quality_profile": payload.get("artifacts", {}).get("prompt_quality_profile_md"),
+ "system_model": payload.get("artifacts", {}).get("system_model_md"),
+ "review_studio": payload.get("artifacts", {}).get("review_studio_html"),
+ "review_viewer": payload.get("artifacts", {}).get("review_viewer_html"),
+ },
+ },
+ "guidance": {
+ "archetype_reason": archetype_reason,
+ "problem_diagnosis": diagnosis,
+ "why_this_mode": (
+ "Scaffold mode keeps the first package light and lets you postpone governance-heavy work until reuse becomes real."
+ if mode == "scaffold"
+ else "This mode expects stronger lifecycle metadata, validation, and review discipline."
+ ),
+ "first_gate": guidance["first_gate"],
+ "focus": guidance["focus"],
+ "next_steps": next_steps,
+ "experience_note": (
+ "The first pass should feel more like guided co-creation than a worksheet. "
+ "The system should make benchmark and pattern calls quietly unless there is a real reason to ask you to choose."
+ ),
+ },
+ }
+ if visibility["user_decision_required"]:
+ report["uncertainty_or_conflict"] = {
+ "reasons": visibility["reasons"],
+ "conflicts": visibility["conflicts"],
+ "note": "A design decision still needs your input before the package should be deepened.",
+ }
+ print(json.dumps(report, ensure_ascii=False, indent=2))
+ return 0 if result["ok"] else 2
diff --git a/skill_atlas/catalog.json b/skill_atlas/catalog.json
index 845d458..d0f2529 100644
--- a/skill_atlas/catalog.json
+++ b/skill_atlas/catalog.json
@@ -104,6 +104,7 @@
"scripts/verify_package.py",
"scripts/yao.py",
"scripts/yao_cli_config.py",
+ "scripts/yao_cli_create_commands.py",
"scripts/yao_cli_parser.py",
"scripts/yao_cli_report_commands.py",
"scripts/yao_cli_runtime.py",
diff --git a/tests/verify_architecture_maintainability.py b/tests/verify_architecture_maintainability.py
index e21398a..1eb9e58 100644
--- a/tests/verify_architecture_maintainability.py
+++ b/tests/verify_architecture_maintainability.py
@@ -37,21 +37,21 @@ def main() -> None:
)
payload = json.loads(proc.stdout)
assert payload["ok"], payload
- assert payload["summary"]["decision"] == "watch-maintainability-hotspots", payload["summary"]
- assert payload["summary"]["hotspot_count"] == 1, payload["summary"]
+ assert payload["summary"]["decision"] == "pass", payload["summary"]
+ assert payload["summary"]["hotspot_count"] == 0, payload["summary"]
assert payload["summary"]["blocker_count"] == 0, payload["summary"]
assert 30 <= 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]
+ assert payload["summary"]["largest_file_lines"] < 900, payload["summary"]
+ assert payload["largest_files"][0]["path"] == "scripts/render_review_studio.py", payload["largest_files"][0]
+ assert payload["largest_files"][0]["severity"] == "pass", payload["largest_files"][0]
hotspot_paths = {item["path"] for item in payload["hotspots"]}
- assert {"scripts/yao.py"} <= hotspot_paths, hotspot_paths
+ assert "scripts/yao.py" not in hotspot_paths, hotspot_paths
assert "scripts/render_review_studio.py" not in hotspot_paths, hotspot_paths
assert "scripts/render_review_viewer.py" not in 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 "No file-size hotspots found." in markdown, markdown
assert "Do not split a file only for line count" in markdown, markdown
blocker_proc = subprocess.run(
diff --git a/tests/verify_review_studio.py b/tests/verify_review_studio.py
index 1565ca2..36357e5 100644
--- a/tests/verify_review_studio.py
+++ b/tests/verify_review_studio.py
@@ -276,16 +276,15 @@ def main() -> None:
assert payload["schema_version"] == "2.0", payload
assert payload["summary"]["decision"] == "review", 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"]["world_class_score"] == 91, payload
+ assert payload["summary"]["warning_count"] == 3, payload
assert payload["summary"]["blocker_count"] == 0, payload
- assert payload["summary"]["action_count"] == 4, payload
+ assert payload["summary"]["action_count"] == 3, 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",
- "architecture-maintainability",
"review-waivers",
"world-class-evidence",
}, payload
@@ -318,8 +317,8 @@ def main() -> None:
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 "1 hotspot" in architecture_gate["detail"], architecture_gate
+ assert architecture_gate["status"] == "pass", architecture_gate
+ assert "0 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
@@ -345,7 +344,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 "2 warning gates still need reviewer decision" in waivers_gate["detail"], waivers_gate
+ assert "1 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
@@ -392,18 +391,10 @@ 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"] == 1, full_payload["data"]["architecture_maintainability"]
+ assert full_payload["data"]["architecture_maintainability"]["summary"]["hotspot_count"] == 0, 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", "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
+ assert action_keys == {"output-lab", "review-waivers", "world-class-evidence"}, full_payload["review_actions"]
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",
@@ -527,7 +518,7 @@ def main() -> None:
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 "0 hotspots" 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 f24bb07..c5002cd 100644
--- a/tests/verify_yao_cli.py
+++ b/tests/verify_yao_cli.py
@@ -217,7 +217,7 @@ def main() -> None:
"2026-06-14",
)
assert architecture_result["ok"], architecture_result
- assert architecture_result["payload"]["summary"]["hotspot_count"] == 1, architecture_result
+ assert architecture_result["payload"]["summary"]["hotspot_count"] == 0, architecture_result
assert architecture_result["payload"]["summary"]["blocker_count"] == 0, architecture_result
assert 30 <= architecture_result["payload"]["summary"]["command_handler_count"] < 50, architecture_result