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.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

88 scripts scanned; secrets found

Py Compat0

147 files scanned for Python 3.11

Arch Debt1

1159 largest lines; 35 CLI handlers

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

68 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

556 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

+
Skill IR2.0.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

89 scripts scanned; secrets found

Py Compat0

148 files scanned for Python 3.11

Arch Debt0

887 largest lines; 33 CLI handlers

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

68 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

557 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

审查闸门

-
通过

意图画布

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

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

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

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 944/1000; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

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

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
关注

架构维护

144 Python files; 1 hotspot; 0 blockers; largest 1159 lines; 35 CLI handlers

reports/architecture_maintainability.json 证据
通过

权限批准

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

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

权限探针

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

reports/runtime_permission_probes.json 证据
通过

组合治理

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

reports/skill_atlas.json 证据
通过

运营回路

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

reports/adoption_drift_report.json 证据
关注

人工批准

0 active waivers; 2 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

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

reports/world_class_evidence_ledger.json 证据
通过

注册审计

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

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

发布路线

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

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

意图画布

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

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

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

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 944/1000; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

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

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
通过

架构维护

145 Python files; 0 hotspots; 0 blockers; largest 887 lines; 33 CLI handlers

reports/architecture_maintainability.json 证据
通过

权限批准

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

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

权限探针

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

reports/runtime_permission_probes.json 证据
通过

组合治理

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

reports/skill_atlas.json 证据
通过

运营回路

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

reports/adoption_drift_report.json 证据
关注

人工批准

0 active waivers; 1 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

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

reports/world_class_evidence_ledger.json 证据
通过

注册审计

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

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

发布路线

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

阻断事项

无。

-

关注事项

+

关注事项

修复动作

-
关注

输出实验

补足 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 .
@@ -363,12 +363,12 @@
-

信任报告

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.

-
资产分布347项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
+
资产分布348项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
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
路径Path作用Role类型Type
SKILL.mdSkill 入口文件Skill entrypoint文件file
README.md人类可读使用说明Human-readable usage guide文件file
agents/interface.yaml跨平台接口元数据Neutral interface metadata文件file
manifest.json生命周期与打包元数据Lifecycle and portability metadata文件file
references扩展指导与复用资料Extended guidance and reusable notes目录folder
scripts确定性脚本或本地工具Deterministic helpers or local tooling目录folder
evals触发与质量检查Trigger and quality checks目录folder
reports生成的证据与总结报告Generated evidence and overview artifacts目录folder