From d7018dac5583d8973d8544d5f02906e94e8b1f9b Mon Sep 17 00:00:00 2001 From: yaojingang Date: Sun, 14 Jun 2026 02:05:31 +0800 Subject: [PATCH] refactor: split yao cli report commands --- registry/index.json | 2 +- registry/packages/yao-meta-skill.json | 6 +- reports/adoption_drift_report.json | 2 +- reports/architecture_maintainability.json | 50 +-- reports/architecture_maintainability.md | 16 +- reports/benchmark_reproducibility.json | 32 +- reports/benchmark_reproducibility.md | 18 +- reports/compiled_targets.json | 90 ++--- reports/context_budget.json | 6 +- reports/install_simulation.json | 2 +- reports/output_execution_runs.json | 18 +- reports/output_execution_runs.md | 18 +- reports/package_verification.json | 4 +- reports/package_verification.md | 2 +- reports/python_compatibility.json | 14 +- reports/python_compatibility.md | 2 +- reports/registry_audit.json | 8 +- reports/registry_audit.md | 4 +- reports/review-studio.html | 16 +- reports/review-studio.json | 313 +++++++++++------- reports/review-viewer.json | 38 +-- reports/security_trust_report.json | 51 ++- reports/security_trust_report.md | 12 +- reports/skill-overview.html | 2 +- reports/skill-overview.json | 38 +-- reports/skill_atlas.json | 2 + reports/skill_os2_audit.json | 4 +- reports/skill_os2_audit.md | 4 +- reports/skill_os2_coverage.json | 4 +- reports/skill_os2_coverage.md | 4 +- reports/upgrade_check.json | 4 +- scripts/yao.py | 325 ++----------------- scripts/yao_cli_report_commands.py | 143 ++++++++ scripts/yao_cli_runtime.py | 45 +++ skill_atlas/catalog.json | 2 + tests/verify_architecture_maintainability.py | 6 +- tests/verify_yao_cli.py | 7 +- 37 files changed, 677 insertions(+), 637 deletions(-) create mode 100644 scripts/yao_cli_report_commands.py create mode 100644 scripts/yao_cli_runtime.py diff --git a/registry/index.json b/registry/index.json index b80d90d..901d90b 100644 --- a/registry/index.json +++ b/registry/index.json @@ -16,7 +16,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" } ] } diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json index 2a46fda..7730749 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": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, "compatibility": { "openai": "pass", @@ -48,7 +48,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", "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 d0e6429..3f7b48b 100644 --- a/reports/adoption_drift_report.json +++ b/reports/adoption_drift_report.json @@ -1,7 +1,7 @@ { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13T17:49:00Z", + "generated_at": "2026-06-13T18:04:28Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json index 97c137a..43beae5 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": 139, - "script_file_count": 83, + "python_file_count": 141, + "script_file_count": 85, "test_file_count": 56, - "internal_module_count": 12, + "internal_module_count": 14, "cli_script_count": 72, - "command_handler_count": 55, + "command_handler_count": 35, "warn_line_threshold": 900, "block_line_threshold": 1500, - "largest_file_lines": 1438, + "largest_file_lines": 1196, "hotspot_count": 3, "blocker_count": 0, "decision": "watch-maintainability-hotspots" }, "largest_files": [ - { - "path": "scripts/yao.py", - "lines": 1438, - "kind": "cli-script", - "severity": "warn", - "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." - }, { "path": "scripts/render_review_studio.py", "lines": 1196, @@ -32,6 +25,13 @@ "severity": "warn", "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." }, + { + "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_viewer.py", "lines": 983, @@ -41,7 +41,7 @@ }, { "path": "tests/verify_yao_cli.py", - "lines": 833, + "lines": 838, "kind": "test", "severity": "pass", "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." @@ -104,13 +104,6 @@ } ], "hotspots": [ - { - "path": "scripts/yao.py", - "lines": 1438, - "kind": "cli-script", - "severity": "warn", - "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." - }, { "path": "scripts/render_review_studio.py", "lines": 1196, @@ -118,6 +111,13 @@ "severity": "warn", "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." }, + { + "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_viewer.py", "lines": 983, @@ -127,16 +127,16 @@ } ], "actions": [ - { - "path": "scripts/yao.py", - "severity": "warn", - "action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." - }, { "path": "scripts/render_review_studio.py", "severity": "warn", "action": "Move data loading and large section renderers into focused review_studio_* modules." }, + { + "path": "scripts/yao.py", + "severity": "warn", + "action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + }, { "path": "scripts/render_review_viewer.py", "severity": "warn", diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md index 7484f19..32511bd 100644 --- a/reports/architecture_maintainability.md +++ b/reports/architecture_maintainability.md @@ -5,13 +5,13 @@ Generated at: `2026-06-14` ## Summary - decision: `watch-maintainability-hotspots` -- python files: `139` -- scripts: `83` +- python files: `141` +- scripts: `85` - tests: `56` -- internal modules: `12` +- internal modules: `14` - CLI scripts: `72` -- Yao CLI command handlers: `55` -- largest file lines: `1438` +- Yao CLI command handlers: `35` +- largest file lines: `1196` - hotspots: `3` - blockers: `0` @@ -21,18 +21,18 @@ This report keeps maintainability risk visible before the Meta Skill grows more | File | Lines | Kind | Severity | Recommended action | | --- | ---: | --- | --- | --- | -| `scripts/yao.py` | `1438` | `cli-script` | `warn` | Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator. | | `scripts/render_review_studio.py` | `1196` | `cli-script` | `warn` | Move data loading and large section renderers into focused review_studio_* modules. | +| `scripts/yao.py` | `1159` | `cli-script` | `warn` | Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator. | | `scripts/render_review_viewer.py` | `983` | `cli-script` | `warn` | Split viewer data assembly from HTML section rendering. | ## Largest Files | File | Lines | Kind | Severity | | --- | ---: | --- | --- | -| `scripts/yao.py` | `1438` | `cli-script` | `warn` | | `scripts/render_review_studio.py` | `1196` | `cli-script` | `warn` | +| `scripts/yao.py` | `1159` | `cli-script` | `warn` | | `scripts/render_review_viewer.py` | `983` | `cli-script` | `warn` | -| `tests/verify_yao_cli.py` | `833` | `test` | `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` | | `scripts/optimize_description.py` | `723` | `cli-script` | `pass` | diff --git a/reports/benchmark_reproducibility.json b/reports/benchmark_reproducibility.json index fce6063..ee81d39 100644 --- a/reports/benchmark_reproducibility.json +++ b/reports/benchmark_reproducibility.json @@ -3,24 +3,24 @@ "ok": true, "generated_at": "2026-06-14", "skill_dir": ".", - "commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d", + "commit": "7afde5ebafd5b8cb0b00aaaac4943c037fc9dce4", "git_status": { "available": true, "dirty": true, - "changed_file_count": 44, + "changed_file_count": 36, "sample": [ - " M Makefile", " M registry/index.json", " M registry/packages/yao-meta-skill.json", " M reports/adoption_drift_report.json", + " M reports/architecture_maintainability.json", + " M reports/architecture_maintainability.md", " M reports/benchmark_reproducibility.json", " M reports/benchmark_reproducibility.md", " M reports/compiled_targets.json", " M reports/context_budget.json", " M reports/install_simulation.json", " M reports/output_execution_runs.json", - " M reports/output_execution_runs.md", - " M reports/package_verification.json" + " M reports/output_execution_runs.md" ] }, "summary": { @@ -42,7 +42,7 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 44 + "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": 7967, - "sha256": "1c204ff667b83e4635c792e2ea387865af24dd3191147f24f22f69ceaff968b5" + "bytes": 7966, + "sha256": "ef773cdb0b4b3e6263b58aa52c8473ee5b5613297bae721ea34da2418f4f6c9b" }, { "label": "blind_review", @@ -150,43 +150,43 @@ "label": "trust_report", "path": "reports/security_trust_report.json", "exists": true, - "bytes": 88376, - "sha256": "c846881bdb45e47b6f7c576e9c0e58cc157d7fd2f358ba710fbf92e9564d89fd" + "bytes": 89598, + "sha256": "043f8314a8c2c8ef992d486384cd22dba5a0284af491fd830ddc91fec54f666a" }, { "label": "python_compatibility", "path": "reports/python_compatibility.json", "exists": true, - "bytes": 18557, - "sha256": "29fd6618afda3e74452262ed5c0ebd03d585495bb08aeac08d6341c4aa3be54c" + "bytes": 18801, + "sha256": "3f071172d13c70acd0b16fe84ae011fee39030da61dd5801009fadead64f2a60" }, { "label": "registry_audit", "path": "reports/registry_audit.json", "exists": true, "bytes": 3183, - "sha256": "729094faff9d20fec82ea1a481332389b3104a6e37bfe87b20cd4dfc833c7d80" + "sha256": "a55d0fb1c7d6730d1b8009904b59a18eb61a776368a211385b4a5d21b915edf1" }, { "label": "package_verification", "path": "reports/package_verification.json", "exists": true, "bytes": 19325, - "sha256": "5f45e45cc28c43693f702228587a82a9246a35df09f95046e3d111dd5f48897c" + "sha256": "ff899ad76a6ad8e39a5f15e483135b4a93602ff59984a61f0c807ad627749dad" }, { "label": "install_simulation", "path": "reports/install_simulation.json", "exists": true, "bytes": 8557, - "sha256": "c0ffaaded1898df656415208722157213bb364200d8834d9d21812d574e7b269" + "sha256": "20d6fa71cc492c837a98d383686677c7c2e9cc5885514ab56d5b23819060b746" }, { "label": "skill_os2_audit", "path": "reports/skill_os2_audit.json", "exists": true, "bytes": 13946, - "sha256": "80ef52f1775e85d6b96643cbebe99f21a0f04d86af6e38a4f1901e3b5511a235" + "sha256": "48f2206d4eb7598009740e9d4ab9e1f08b9d039cf661bb39ffbc24b2beb2c099" }, { "label": "world_class_evidence_plan", diff --git a/reports/benchmark_reproducibility.md b/reports/benchmark_reproducibility.md index 5436a56..fd22261 100644 --- a/reports/benchmark_reproducibility.md +++ b/reports/benchmark_reproducibility.md @@ -1,7 +1,7 @@ # Benchmark Reproducibility Generated at: `2026-06-14` -Commit: `ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d` +Commit: `7afde5ebafd5b8cb0b00aaaac4943c037fc9dce4` 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: `44` +- 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 | `1c204ff667b8` | +| output_execution | `reports/output_execution_runs.json` | present | `ef773cdb0b4b` | | 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 | `c846881bdb45` | -| python_compatibility | `reports/python_compatibility.json` | present | `29fd6618afda` | -| registry_audit | `reports/registry_audit.json` | present | `729094faff9d` | -| package_verification | `reports/package_verification.json` | present | `5f45e45cc28c` | -| install_simulation | `reports/install_simulation.json` | present | `c0ffaaded189` | -| skill_os2_audit | `reports/skill_os2_audit.json` | present | `80ef52f1775e` | +| trust_report | `reports/security_trust_report.json` | present | `043f8314a8c2` | +| python_compatibility | `reports/python_compatibility.json` | present | `3f071172d13c` | +| registry_audit | `reports/registry_audit.json` | present | `a55d0fb1c7d6` | +| package_verification | `reports/package_verification.json` | present | `ff899ad76a6a` | +| install_simulation | `reports/install_simulation.json` | present | `20d6fa71cc49` | +| skill_os2_audit | `reports/skill_os2_audit.json` | present | `48f2206d4eb7` | | 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/compiled_targets.json b/reports/compiled_targets.json index c0786f7..5364a2f 100644 --- a/reports/compiled_targets.json +++ b/reports/compiled_targets.json @@ -450,7 +450,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -459,7 +459,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -490,7 +491,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -512,7 +513,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -691,7 +692,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -700,7 +701,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -731,7 +733,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -751,7 +753,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -1289,7 +1291,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -1298,7 +1300,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -1329,7 +1332,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -1351,7 +1354,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -1530,7 +1533,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -1539,7 +1542,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -1570,7 +1574,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -1590,7 +1594,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -2128,7 +2132,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -2137,7 +2141,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -2168,7 +2173,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -2190,7 +2195,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -2362,7 +2367,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -2371,7 +2376,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -2402,7 +2408,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -2422,7 +2428,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -2951,7 +2957,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -2960,7 +2966,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -2991,7 +2998,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -3013,7 +3020,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -3185,7 +3192,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -3194,7 +3201,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -3225,7 +3233,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -3245,7 +3253,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -3774,7 +3782,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -3783,7 +3791,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -3814,7 +3823,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -3836,7 +3845,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -4012,7 +4021,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -4021,7 +4030,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -4052,7 +4062,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -4072,7 +4082,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", diff --git a/reports/context_budget.json b/reports/context_budget.json index 083f328..69f5eec 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": 1081013, + "other_text_tokens": 1083497, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1081764, - "relevant_file_count": 465, + "estimated_total_text_tokens": 1084248, + "relevant_file_count": 469, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 diff --git a/reports/install_simulation.json b/reports/install_simulation.json index ac8329c..f62330d 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": 551, + "archive_entry_count": 553, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json index 79813db..dce7348 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.92, + "duration_ms": 25.82, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -62,7 +62,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.63, + "duration_ms": 25.73, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -113,7 +113,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.26, + "duration_ms": 25.68, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -136,7 +136,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.55, + "duration_ms": 25.92, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -164,7 +164,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.51, + "duration_ms": 25.58, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -187,7 +187,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.52, + "duration_ms": 25.69, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -214,7 +214,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.37, + "duration_ms": 25.4, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -237,7 +237,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.31, + "duration_ms": 25.48, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -266,7 +266,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.01, + "duration_ms": 25.68, "provider": "local-output-eval-runner", "model": "", "usage": { diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md index f75e84f..9fa1095 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.92 | 33 | 0.0 | pass | -| skill-package-contract | with_skill | command | local-output-eval-runner | 25.63 | 73 | 100.0 | pass | +| skill-package-contract | baseline | command | local-output-eval-runner | 25.82 | 33 | 0.0 | pass | +| skill-package-contract | with_skill | command | local-output-eval-runner | 25.73 | 73 | 100.0 | pass | | output-eval-expectation | baseline | command | local-output-eval-runner | 25.52 | 36 | 0.0 | pass | -| output-eval-expectation | with_skill | command | local-output-eval-runner | 27.26 | 80 | 100.0 | pass | -| ir-before-packaging | baseline | command | local-output-eval-runner | 29.55 | 33 | 0.0 | pass | -| ir-before-packaging | with_skill | command | local-output-eval-runner | 29.51 | 80 | 100.0 | pass | -| near-neighbor-boundary | baseline | command | local-output-eval-runner | 29.52 | 36 | 0.0 | pass | -| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 29.37 | 65 | 100.0 | pass | -| file-backed-governed-package | baseline | command | local-output-eval-runner | 29.31 | 37 | 0.0 | pass | -| file-backed-governed-package | with_skill | command | local-output-eval-runner | 29.01 | 98 | 100.0 | pass | +| output-eval-expectation | with_skill | command | local-output-eval-runner | 25.68 | 80 | 100.0 | pass | +| ir-before-packaging | baseline | command | local-output-eval-runner | 25.92 | 33 | 0.0 | pass | +| ir-before-packaging | with_skill | command | local-output-eval-runner | 25.58 | 80 | 100.0 | pass | +| near-neighbor-boundary | baseline | command | local-output-eval-runner | 25.69 | 36 | 0.0 | pass | +| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 25.4 | 65 | 100.0 | pass | +| file-backed-governed-package | baseline | command | local-output-eval-runner | 25.48 | 37 | 0.0 | pass | +| file-backed-governed-package | with_skill | command | local-output-eval-runner | 25.68 | 98 | 100.0 | pass | ## Next Fixes diff --git a/reports/package_verification.json b/reports/package_verification.json index a594079..5a077c9 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": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", - "archive_entry_count": 551, + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", + "archive_entry_count": 553, "failure_count": 0, "warning_count": 0 }, diff --git a/reports/package_verification.md b/reports/package_verification.md index 60dfcf9..1d28f49 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: `b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7` +- Archive SHA256: `26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25` - Failures: `0` - Warnings: `0` diff --git a/reports/python_compatibility.json b/reports/python_compatibility.json index 89b897e..e37bc20 100644 --- a/reports/python_compatibility.json +++ b/reports/python_compatibility.json @@ -5,7 +5,7 @@ "root": ".", "summary": { "target_python": "3.11", - "file_count": 142, + "file_count": 144, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -532,6 +532,18 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/yao_cli_report_commands.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, + { + "path": "scripts/yao_cli_runtime.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/yao_cli_telemetry.py", "ok": true, diff --git a/reports/python_compatibility.md b/reports/python_compatibility.md index 79745b5..182cae6 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: `142` +- files scanned: `144` - issues: `0` - syntax errors: `0` - f-string 3.11 violations: `0` diff --git a/reports/registry_audit.json b/reports/registry_audit.json index f5b8c75..f21daa9 100644 --- a/reports/registry_audit.json +++ b/reports/registry_audit.json @@ -21,8 +21,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, "compatibility": { "openai": "pass", @@ -53,7 +53,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", "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": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" } ] }, diff --git a/reports/registry_audit.md b/reports/registry_audit.md index 2d0bf1a..2aabf71 100644 --- a/reports/registry_audit.md +++ b/reports/registry_audit.md @@ -6,8 +6,8 @@ - Maturity: `governed` - Owner: `Yao Team` - License: `MIT` -- Package SHA256: `1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa` -- Archive SHA256: `b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7` +- Package SHA256: `18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e` +- Archive SHA256: `26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25` - Install simulated: `True` ## Compatibility diff --git a/reports/review-studio.html b/reports/review-studio.html index 1f1177d..c75660e 100644 --- a/reports/review-studio.html +++ b/reports/review-studio.html @@ -292,22 +292,22 @@

核心指标

-
Skill IR2.0.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

83 scripts scanned; secrets found

Py Compat0

142 files scanned for Python 3.11

Arch Debt3

1438 largest lines; 55 CLI handlers

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

68 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

551 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

+
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

85 scripts scanned; secrets found

Py Compat0

144 files scanned for Python 3.11

Arch Debt3

1196 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

553 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; 83 scripts; 3 network-capable scripts; 0 help smoke failures

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
关注

架构维护

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

reports/architecture_maintainability.json 证据
通过

权限批准

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

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

权限探针

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

reports/runtime_permission_probes.json 证据
通过

组合治理

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

reports/skill_atlas.json 证据
通过

运营回路

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

reports/adoption_drift_report.json 证据
关注

人工批准

0 active waivers; 2 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

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

reports/world_class_evidence_ledger.json 证据
通过

注册审计

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

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

发布路线

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

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

意图画布

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; 85 scripts; 3 network-capable scripts; 0 help smoke failures

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
关注

架构维护

141 Python files; 3 hotspots; 0 blockers; largest 1196 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 证据

阻断事项

无。

-

关注事项

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

关注事项

  • 输出实验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
  • 架构维护141 Python files; 3 hotspots; 0 blockers; largest 1196 lines; 35 CLI handlers
  • 人工批准0 active waivers; 2 warning gates still need reviewer decision
  • 世界证据4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true

修复动作

-
关注

输出实验

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

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

架构维护

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

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

人工批准

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

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

世界证据

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

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

输出实验

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

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

架构维护

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

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

人工批准

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

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

世界证据

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

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

信任报告

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

信任报告

Secret
0
脚本数
85
网络脚本
3
Help 失败
0
包体哈希
18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e

安全边界

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

-

Python 兼容

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

Python 兼容

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

解释器边界

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

@@ -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
归档哈希
b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7
+

包体元数据

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

发布路线

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

-

包体验证

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

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
553
失败数
0
警告数
0
归档哈希
26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25
diff --git a/reports/review-studio.json b/reports/review-studio.json index 9829460..37c222d 100644 --- a/reports/review-studio.json +++ b/reports/review-studio.json @@ -59,7 +59,7 @@ "key": "trust-report", "label": "信任报告", "status": "pass", - "detail": "0 secrets; 83 scripts; 3 network-capable scripts; 0 help smoke failures", + "detail": "0 secrets; 85 scripts; 3 network-capable scripts; 0 help smoke failures", "evidence": "reports/security_trust_report.json", "link": "security_trust_report.md" }, @@ -67,7 +67,7 @@ "key": "python-compat", "label": "Python 兼容", "status": "pass", - "detail": "Python 3.11; 142 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards", + "detail": "Python 3.11; 144 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards", "evidence": "reports/python_compatibility.json", "link": "python_compatibility.md" }, @@ -75,7 +75,7 @@ "key": "architecture-maintainability", "label": "架构维护", "status": "warn", - "detail": "139 Python files; 3 hotspots; 0 blockers; largest 1438 lines; 55 CLI handlers", + "detail": "141 Python files; 3 hotspots; 0 blockers; largest 1196 lines; 35 CLI handlers", "evidence": "reports/architecture_maintainability.json", "link": "architecture_maintainability.md" }, @@ -158,7 +158,7 @@ "key": "architecture-maintainability", "label": "架构维护", "status": "warn", - "detail": "139 Python files; 3 hotspots; 0 blockers; largest 1438 lines; 55 CLI handlers", + "detail": "141 Python files; 3 hotspots; 0 blockers; largest 1196 lines; 35 CLI handlers", "evidence": "reports/architecture_maintainability.json", "link": "architecture_maintainability.md" }, @@ -263,7 +263,7 @@ "path": "scripts/yao.py", "label": "Yao CLI orchestrator", "kind": "source", - "line": 124, + "line": 111, "exists": true, "link": "../scripts/yao.py" }, @@ -891,7 +891,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 82 + "file_count": 85 }, { "path": "evals", @@ -903,10 +903,10 @@ "path": "reports", "label": "Generated evidence and overview artifacts", "kind": "folder", - "file_count": 193 + "file_count": 195 } ], - "file_count": 339, + "file_count": 344, "folder_count": 4, "distribution": [ { @@ -931,7 +931,7 @@ }, { "label": "scripts", - "value": 82 + "value": 85 }, { "label": "evals", @@ -939,7 +939,7 @@ }, { "label": "reports", - "value": 193 + "value": 195 } ] }, @@ -1060,7 +1060,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 82 + "file_count": 85 }, { "path": "evals", @@ -1072,7 +1072,7 @@ "path": "reports", "label": "Generated evidence and overview artifacts", "kind": "folder", - "file_count": 193 + "file_count": 195 } ], "strengths": [ @@ -1360,9 +1360,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 35 + "changed_file_count": 36 }, - "commit": "4737358f3c7acb6650d5463793e5f0e8f913aada", + "commit": "7afde5ebafd5b8cb0b00aaaac4943c037fc9dce4", "missing_artifacts": [], "limitations": [ "Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.", @@ -1437,9 +1437,9 @@ "failures": [] }, "trust_security": { - "scanned_files": 166, - "script_count": 82, - "internal_module_count": 10, + "scanned_files": 169, + "script_count": 85, + "internal_module_count": 12, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -1447,18 +1447,18 @@ "network_script_count": 3, "network_policy_covered_count": 3, "network_policy_missing_count": 0, - "file_write_script_count": 59, + "file_write_script_count": 60, "permission_required_count": 3, "permission_approved_count": 3, "permission_missing_count": 0, "permission_invalid_count": 0, "permission_expired_count": 0, - "help_smoke_checked_count": 72, + "help_smoke_checked_count": 73, "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 166, - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "package_hash_file_count": 169, + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" }, "skill_atlas": { "skill_count": 12, @@ -1496,8 +1496,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723", - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, "compatibility": { "openai": "pass", @@ -1528,7 +1528,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -1544,8 +1544,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2", - "archive_entry_count": 547, + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", + "archive_entry_count": 553, "failure_count": 0, "warning_count": 0 }, @@ -1556,7 +1556,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 547, + "archive_entry_count": 553, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1623,12 +1623,12 @@ { "field": "archive_sha256", "from": "", - "to": "d879a6c6c16f91854dae70c114fa6cea05aeb423d8d11918e2a3f87930ed1bf2" + "to": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "e377e8c99c14f87933224d1abebbe9d5d971fd852e1f3fe9b2a4a80861e90723" + "to": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" } ] }, @@ -3745,7 +3745,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.92, + "duration_ms": 25.82, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3773,7 +3773,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.63, + "duration_ms": 25.73, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3824,7 +3824,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.26, + "duration_ms": 25.68, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3847,7 +3847,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.55, + "duration_ms": 25.92, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3875,7 +3875,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.51, + "duration_ms": 25.58, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3898,7 +3898,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.52, + "duration_ms": 25.69, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3925,7 +3925,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.37, + "duration_ms": 25.4, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3948,7 +3948,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.31, + "duration_ms": 25.48, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3977,7 +3977,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.01, + "duration_ms": 25.68, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -4408,7 +4408,7 @@ "label": "Trust Security", "status": "pass", "objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.", - "current": "83 scripts; secrets 0; help failures 0", + "current": "85 scripts; secrets 0; help failures 0", "command": "python3 scripts/yao.py trust .", "test": "python3 tests/verify_trust_check.py", "evidence": [ @@ -4482,7 +4482,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 551; install failures 0", + "current": "archive entries 553; 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": [ @@ -5352,7 +5352,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -5361,7 +5361,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -5392,7 +5393,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -5414,7 +5415,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -5593,7 +5594,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -5602,7 +5603,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -5633,7 +5635,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -5653,7 +5655,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -6191,7 +6193,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -6200,7 +6202,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -6231,7 +6234,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -6253,7 +6256,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -6432,7 +6435,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -6441,7 +6444,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -6472,7 +6476,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -6492,7 +6496,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -7030,7 +7034,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -7039,7 +7043,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -7070,7 +7075,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -7092,7 +7097,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -7264,7 +7269,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -7273,7 +7278,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -7304,7 +7310,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -7324,7 +7330,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -7853,7 +7859,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -7862,7 +7868,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -7893,7 +7900,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -7915,7 +7922,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -8087,7 +8094,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -8096,7 +8103,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -8127,7 +8135,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -8147,7 +8155,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -8676,7 +8684,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -8685,7 +8693,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -8716,7 +8725,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -8738,7 +8747,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -8914,7 +8923,7 @@ }, "subprocess": { "required": true, - "script_count": 8, + "script_count": 9, "scripts": [ "scripts/ci_test.py", "scripts/render_benchmark_reproducibility.py", @@ -8923,7 +8932,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "review_reason": "Scripts spawn local commands and need operator review." }, @@ -8954,7 +8964,7 @@ "secret_findings": 0, "network_script_count": 3, "file_write_script_count": 60, - "subprocess_script_count": 8, + "subprocess_script_count": 9, "interactive_script_count": 0, "help_smoke_failed_count": 0 } @@ -8974,7 +8984,7 @@ "capability_counts": { "network": 3, "file_write": 60, - "subprocess": 8, + "subprocess": 9, "interactive": 0 }, "evidence": "reports/security_trust_report.json", @@ -9645,9 +9655,9 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 167, - "script_count": 83, - "internal_module_count": 10, + "scanned_files": 169, + "script_count": 85, + "internal_module_count": 12, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -9665,8 +9675,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 167, - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "package_hash_file_count": 169, + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" }, "failures": [], "warnings": [], @@ -10837,6 +10847,34 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/yao_cli_report_commands.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by yao.py to keep report and evidence 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_runtime.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by yao.py and command modules for shared subprocess execution and JSON payload parsing.", + "has_argparse": false, + "has_main_guard": false, + "uses_input": false, + "uses_network": false, + "uses_file_write": false, + "uses_subprocess": true, + "network_urls": [], + "network_hosts": [] + }, { "path": "scripts/yao_cli_telemetry.py", "interface": "internal-module", @@ -10886,7 +10924,7 @@ "checked_count": 73, "passed_count": 73, "failed_count": 0, - "skipped_count": 10, + "skipped_count": 12, "failed_scripts": [], "results": [ { @@ -11657,6 +11695,14 @@ "path": "scripts/yao_cli_parser.py", "reason": "internal module" }, + { + "path": "scripts/yao_cli_report_commands.py", + "reason": "internal module" + }, + { + "path": "scripts/yao_cli_runtime.py", + "reason": "internal module" + }, { "path": "scripts/yao_cli_telemetry.py", "reason": "internal module" @@ -11804,7 +11850,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "reviewer": "Yao Team", "scope": "Local deterministic validation, packaging, install simulation, and CI orchestration commands.", @@ -11841,7 +11888,7 @@ "root": ".", "summary": { "target_python": "3.11", - "file_count": 142, + "file_count": 144, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -12368,6 +12415,18 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/yao_cli_report_commands.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, + { + "path": "scripts/yao_cli_runtime.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/yao_cli_telemetry.py", "ok": true, @@ -12723,27 +12782,20 @@ "generated_at": "2026-06-14", "skill_dir": ".", "summary": { - "python_file_count": 139, - "script_file_count": 83, + "python_file_count": 141, + "script_file_count": 85, "test_file_count": 56, - "internal_module_count": 12, + "internal_module_count": 14, "cli_script_count": 72, - "command_handler_count": 55, + "command_handler_count": 35, "warn_line_threshold": 900, "block_line_threshold": 1500, - "largest_file_lines": 1438, + "largest_file_lines": 1196, "hotspot_count": 3, "blocker_count": 0, "decision": "watch-maintainability-hotspots" }, "largest_files": [ - { - "path": "scripts/yao.py", - "lines": 1438, - "kind": "cli-script", - "severity": "warn", - "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." - }, { "path": "scripts/render_review_studio.py", "lines": 1196, @@ -12751,6 +12803,13 @@ "severity": "warn", "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." }, + { + "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_viewer.py", "lines": 983, @@ -12760,7 +12819,7 @@ }, { "path": "tests/verify_yao_cli.py", - "lines": 833, + "lines": 838, "kind": "test", "severity": "pass", "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." @@ -12823,13 +12882,6 @@ } ], "hotspots": [ - { - "path": "scripts/yao.py", - "lines": 1438, - "kind": "cli-script", - "severity": "warn", - "recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." - }, { "path": "scripts/render_review_studio.py", "lines": 1196, @@ -12837,6 +12889,13 @@ "severity": "warn", "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." }, + { + "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_viewer.py", "lines": 983, @@ -12846,16 +12905,16 @@ } ], "actions": [ - { - "path": "scripts/yao.py", - "severity": "warn", - "action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." - }, { "path": "scripts/render_review_studio.py", "severity": "warn", "action": "Move data loading and large section renderers into focused review_studio_* modules." }, + { + "path": "scripts/yao.py", + "severity": "warn", + "action": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator." + }, { "path": "scripts/render_review_viewer.py", "severity": "warn", @@ -12875,10 +12934,10 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1081013, + "other_text_tokens": 1083497, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1081764, - "relevant_file_count": 465, + "estimated_total_text_tokens": 1084248, + "relevant_file_count": 469, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 @@ -13824,6 +13883,8 @@ "scripts/yao.py", "scripts/yao_cli_config.py", "scripts/yao_cli_parser.py", + "scripts/yao_cli_report_commands.py", + "scripts/yao_cli_runtime.py", "scripts/yao_cli_telemetry.py", "references/artifact-design-doctrine.md", "references/authoring-discipline.md", @@ -14720,7 +14781,7 @@ "adoption_drift": { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13T17:49:00Z", + "generated_at": "2026-06-13T18:04:28Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", @@ -15494,8 +15555,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, "compatibility": { "openai": "pass", @@ -15526,7 +15587,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -15551,7 +15612,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" } ] }, @@ -15574,8 +15635,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", - "archive_entry_count": 551, + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", + "archive_entry_count": 553, "failure_count": 0, "warning_count": 0 }, @@ -16240,7 +16301,7 @@ "installed_skill_dir": "[temporary-install-root]/yao-meta-skill", "summary": { "archive_present": true, - "archive_entry_count": 551, + "archive_entry_count": 553, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -16582,12 +16643,12 @@ { "field": "archive_sha256", "from": "", - "to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "to": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "to": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" } ] }, diff --git a/reports/review-viewer.json b/reports/review-viewer.json index d87109e..61ca90f 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": 83 + "file_count": 85 }, { "path": "evals", @@ -452,7 +452,7 @@ "file_count": 195 } ], - "file_count": 342, + "file_count": 344, "folder_count": 4, "distribution": [ { @@ -477,7 +477,7 @@ }, { "label": "scripts", - "value": 83 + "value": 85 }, { "label": "evals", @@ -606,7 +606,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 83 + "file_count": 85 }, { "path": "evals", @@ -906,9 +906,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 44 + "changed_file_count": 36 }, - "commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d", + "commit": "7afde5ebafd5b8cb0b00aaaac4943c037fc9dce4", "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": 167, - "script_count": 83, - "internal_module_count": 10, + "scanned_files": 169, + "script_count": 85, + "internal_module_count": 12, "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": 167, - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "package_hash_file_count": 169, + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" }, "skill_atlas": { "skill_count": 12, @@ -1042,8 +1042,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, "compatibility": { "openai": "pass", @@ -1074,7 +1074,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", "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": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", - "archive_entry_count": 551, + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", + "archive_entry_count": 553, "failure_count": 0, "warning_count": 0 }, @@ -1102,7 +1102,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 551, + "archive_entry_count": 553, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1169,12 +1169,12 @@ { "field": "archive_sha256", "from": "", - "to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "to": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "to": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" } ] }, diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json index b4352db..74fa3b7 100644 --- a/reports/security_trust_report.json +++ b/reports/security_trust_report.json @@ -2,9 +2,9 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 167, - "script_count": 83, - "internal_module_count": 10, + "scanned_files": 169, + "script_count": 85, + "internal_module_count": 12, "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": 167, - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "package_hash_file_count": 169, + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" }, "failures": [], "warnings": [], @@ -1194,6 +1194,34 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/yao_cli_report_commands.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by yao.py to keep report and evidence 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_runtime.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by yao.py and command modules for shared subprocess execution and JSON payload parsing.", + "has_argparse": false, + "has_main_guard": false, + "uses_input": false, + "uses_network": false, + "uses_file_write": false, + "uses_subprocess": true, + "network_urls": [], + "network_hosts": [] + }, { "path": "scripts/yao_cli_telemetry.py", "interface": "internal-module", @@ -1243,7 +1271,7 @@ "checked_count": 73, "passed_count": 73, "failed_count": 0, - "skipped_count": 10, + "skipped_count": 12, "failed_scripts": [], "results": [ { @@ -2014,6 +2042,14 @@ "path": "scripts/yao_cli_parser.py", "reason": "internal module" }, + { + "path": "scripts/yao_cli_report_commands.py", + "reason": "internal module" + }, + { + "path": "scripts/yao_cli_runtime.py", + "reason": "internal module" + }, { "path": "scripts/yao_cli_telemetry.py", "reason": "internal module" @@ -2161,7 +2197,8 @@ "scripts/run_output_execution.py", "scripts/sync_local_install.py", "scripts/trust_check.py", - "scripts/yao.py" + "scripts/yao.py", + "scripts/yao_cli_runtime.py" ], "reviewer": "Yao Team", "scope": "Local deterministic validation, packaging, install simulation, and CI orchestration commands.", diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md index 09389fd..41e9dda 100644 --- a/reports/security_trust_report.md +++ b/reports/security_trust_report.md @@ -1,9 +1,9 @@ # Security Trust Report - OK: `True` -- Scanned files: `167` -- Scripts: `83` -- Internal script modules: `10` +- Scanned files: `169` +- Scripts: `85` +- Internal script modules: `12` - 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: `167` -- Package SHA256: `1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa` +- Package hash files: `169` +- Package SHA256: `18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e` ## Failures @@ -144,4 +144,6 @@ | 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_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. | | scripts/yao_cli_telemetry.py | internal-module | True | True | False | False | False | False | False | Imported by yao.py to record opt-in metadata-only CLI run telemetry. | diff --git a/reports/skill-overview.html b/reports/skill-overview.html index a044258..2487b7b 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.

-
资产分布342项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
+
资产分布344项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
diff --git a/reports/skill-overview.json b/reports/skill-overview.json index 446abf7..7e51eb5 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": 83 + "file_count": 85 }, { "path": "evals", @@ -451,7 +451,7 @@ "file_count": 195 } ], - "file_count": 342, + "file_count": 344, "folder_count": 4, "distribution": [ { @@ -476,7 +476,7 @@ }, { "label": "scripts", - "value": 83 + "value": 85 }, { "label": "evals", @@ -605,7 +605,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 83 + "file_count": 85 }, { "path": "evals", @@ -905,9 +905,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 44 + "changed_file_count": 36 }, - "commit": "ae0f72cccb542d653d6884c38e6f5d1b9a4a2b2d", + "commit": "7afde5ebafd5b8cb0b00aaaac4943c037fc9dce4", "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": 167, - "script_count": 83, - "internal_module_count": 10, + "scanned_files": 169, + "script_count": 85, + "internal_module_count": 12, "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": 167, - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "package_hash_file_count": 169, + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" }, "skill_atlas": { "skill_count": 12, @@ -1041,8 +1041,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa", - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "package_sha256": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, "compatibility": { "openai": "pass", @@ -1073,7 +1073,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", "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": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7", - "archive_entry_count": 551, + "archive_sha256": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25", + "archive_entry_count": 553, "failure_count": 0, "warning_count": 0 }, @@ -1101,7 +1101,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 551, + "archive_entry_count": 553, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1168,12 +1168,12 @@ { "field": "archive_sha256", "from": "", - "to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "to": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "to": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" } ] }, diff --git a/reports/skill_atlas.json b/reports/skill_atlas.json index a450c55..de98d65 100644 --- a/reports/skill_atlas.json +++ b/reports/skill_atlas.json @@ -146,6 +146,8 @@ "scripts/yao.py", "scripts/yao_cli_config.py", "scripts/yao_cli_parser.py", + "scripts/yao_cli_report_commands.py", + "scripts/yao_cli_runtime.py", "scripts/yao_cli_telemetry.py", "references/artifact-design-doctrine.md", "references/authoring-discipline.md", diff --git a/reports/skill_os2_audit.json b/reports/skill_os2_audit.json index 2927c4a..a57b4f5 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 83; help failures 0", + "current": "secrets 0; scripts 85; 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 551; install failures 0; permission failures 0", + "current": "zip entries 553; install failures 0; permission failures 0", "target": "Package metadata, archive checksum, package verification, and install simulation pass", "evidence": [ { diff --git a/reports/skill_os2_audit.md b/reports/skill_os2_audit.md index 7ba2fbf..565b4d8 100644 --- a/reports/skill_os2_audit.md +++ b/reports/skill_os2_audit.md @@ -23,11 +23,11 @@ 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 83; 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 85; 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 551; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | +| Registry Distribution | pass | zip entries 553; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | | Review Studio | pass | decision review; warnings 4; score 89 | One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations | Resolve human/external warning gates before claiming full release readiness. | | Telemetry Drift | pass | events 1; risk low; recipes 5 | Local-first metadata-only event contract, aggregate drift report, hook recipes, and import path | Keep raw JSONL out of distributed packages and use aggregate reports for Atlas. | | Native Client Telemetry | external-required | external source events 0; adoption samples 0 | A real Browser/Chrome/provider client sends production metadata events | Install a real client against the native host and import production metadata-only events. | diff --git a/reports/skill_os2_coverage.json b/reports/skill_os2_coverage.json index a5e747b..415e7f2 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": "83 scripts; secrets 0; help failures 0", + "current": "85 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 551; install failures 0", + "current": "archive entries 553; 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": [ diff --git a/reports/skill_os2_coverage.md b/reports/skill_os2_coverage.md index a0e9b17..ec6b4d7 100644 --- a/reports/skill_os2_coverage.md +++ b/reports/skill_os2_coverage.md @@ -21,9 +21,9 @@ 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` | 83 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` | +| Trust Security | `pass` | 85 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 551; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | +| Registry Distribution | `pass` | archive entries 553; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | | Review Studio | `pass` | 16 gates; decision review; warnings 4 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` | | Telemetry Drift | `pass` | events 1; recipes 5; risk low | `python3 scripts/yao.py telemetry-hooks . && python3 scripts/yao.py adoption-drift .` | `python3 tests/verify_telemetry_hooks.py` | diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json index 62e314e..48f2e40 100644 --- a/reports/upgrade_check.json +++ b/reports/upgrade_check.json @@ -70,12 +70,12 @@ { "field": "archive_sha256", "from": "", - "to": "b258a36c15b68045a4b420c49585ac446de6b013cb43fae25f3ba562ba06fab7" + "to": "26e0362e174968f9eaeabb4f47304f641610791bc215f4e55d675d3367448b25" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "1ce8a87e2393ee03818d16053afb68b2332cacbc2e3b400058b5bbf8c31266fa" + "to": "18e4ec6cd34d80c2fff0ce51a7a107f15c9dbaa5c6d4e54065aee15dbd0fb00e" } ] }, diff --git a/scripts/yao.py b/scripts/yao.py index 1fc2e56..0066d60 100644 --- a/scripts/yao.py +++ b/scripts/yao.py @@ -23,45 +23,32 @@ from yao_cli_config import ( resolve_target, ) from yao_cli_parser import build_parser as build_cli_parser +from yao_cli_report_commands import ( + command_artifact_design_profile, + command_benchmark_reproducibility, + command_github_benchmark_scan, + command_intent_confidence, + command_intent_dialogue, + command_iteration_directions, + command_output_risk_profile, + command_prompt_quality_profile, + command_reference_scan, + command_reference_synthesis, + command_review_studio, + command_review_viewer, + command_skill_os2_audit, + command_skill_os2_coverage, + command_skill_report, + command_system_model, + command_world_class_claim_guard, + command_world_class_evidence, + command_world_class_intake, + command_world_class_ledger, +) +from yao_cli_runtime import ROOT, run_script from yao_cli_telemetry import add_telemetry_args, maybe_record_cli_event -ROOT = Path(__file__).resolve().parent.parent -SCRIPTS = ROOT / "scripts" - - -def script_path(name: str) -> str: - return str(SCRIPTS / name) - - -def load_json_maybe(text: str) -> dict | None: - text = text.strip() - if not text: - return None - try: - return json.loads(text) - except json.JSONDecodeError: - return None - - -def run_script(name: str, args: list[str], cwd: Path | None = None) -> dict: - proc = subprocess.run( - [sys.executable, script_path(name), *args], - cwd=cwd or ROOT, - capture_output=True, - text=True, - ) - payload = load_json_maybe(proc.stdout) - return { - "command": f"{name} {' '.join(args)}".strip(), - "returncode": proc.returncode, - "ok": proc.returncode == 0, - "stdout": proc.stdout, - "stderr": proc.stderr, - "payload": payload, - } - - def prompt_with_default(label: str, default: str) -> str: sys.stderr.write(f"{label} [{default}]: ") sys.stderr.flush() @@ -549,272 +536,6 @@ def command_report(args: argparse.Namespace) -> int: return 0 if report["ok"] else 2 -def command_skill_report(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_html: - cmd.extend(["--output-html", args.output_html]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_skill_overview.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_review_viewer(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_html: - cmd.extend(["--output-html", args.output_html]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_review_viewer.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_review_studio(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_html: - cmd.extend(["--output-html", args.output_html]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_review_studio.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_skill_os2_audit(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.generated_at: - cmd.extend(["--generated-at", args.generated_at]) - result = run_script("render_skill_os2_audit.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_skill_os2_coverage(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.generated_at: - cmd.extend(["--generated-at", args.generated_at]) - result = run_script("render_skill_os2_coverage.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_world_class_evidence(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.generated_at: - cmd.extend(["--generated-at", args.generated_at]) - result = run_script("render_world_class_evidence_plan.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_world_class_ledger(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.generated_at: - cmd.extend(["--generated-at", args.generated_at]) - result = run_script("render_world_class_evidence_ledger.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_world_class_intake(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.submissions_dir: - cmd.extend(["--submissions-dir", args.submissions_dir]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.generated_at: - cmd.extend(["--generated-at", args.generated_at]) - result = run_script("render_world_class_evidence_intake.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_world_class_claim_guard(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - for surface in args.claim_surface: - cmd.extend(["--claim-surface", surface]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.generated_at: - cmd.extend(["--generated-at", args.generated_at]) - result = run_script("render_world_class_claim_guard.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_benchmark_reproducibility(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.generated_at: - cmd.extend(["--generated-at", args.generated_at]) - result = run_script("render_benchmark_reproducibility.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_reference_scan(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - 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]) - for reference in args.reference: - cmd.extend(["--reference", reference]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_reference_scan.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_github_benchmark_scan(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir, "--query", args.query, "--top-n", str(args.top_n)] - if args.fixture_dir: - cmd.extend(["--fixture-dir", args.fixture_dir]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("github_benchmark_scan.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_intent_confidence(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.context_json: - cmd.extend(["--context-json", args.context_json]) - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_intent_confidence.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_intent_dialogue(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_intent_dialogue.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_reference_synthesis(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_reference_synthesis.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_output_risk_profile(args: argparse.Namespace) -> int: - cmd = [str(Path(args.skill_dir).resolve())] - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_output_risk_profile.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_artifact_design_profile(args: argparse.Namespace) -> int: - cmd = [str(Path(args.skill_dir).resolve())] - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_artifact_design_profile.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_prompt_quality_profile(args: argparse.Namespace) -> int: - cmd = [str(Path(args.skill_dir).resolve())] - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_prompt_quality_profile.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_system_model(args: argparse.Namespace) -> int: - cmd = [str(Path(args.skill_dir).resolve())] - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_system_model.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_iteration_directions(args: argparse.Namespace) -> int: - skill_dir = str(Path(args.skill_dir).resolve()) - cmd = [skill_dir] - if args.output_md: - cmd.extend(["--output-md", args.output_md]) - if args.output_json: - cmd.extend(["--output-json", args.output_json]) - result = run_script("render_iteration_directions.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_feedback(args: argparse.Namespace) -> int: skill_dir = str(Path(args.skill_dir).resolve()) cmd = [skill_dir] diff --git a/scripts/yao_cli_report_commands.py b/scripts/yao_cli_report_commands.py new file mode 100644 index 0000000..686b32c --- /dev/null +++ b/scripts/yao_cli_report_commands.py @@ -0,0 +1,143 @@ +"""Report and evidence command handlers for the Yao CLI.""" + +import argparse +import json +from pathlib import Path + +from yao_cli_runtime import run_script + + +SCRIPT_INTERFACE = "internal-module" +SCRIPT_INTERFACE_REASON = "Imported by yao.py to keep report and evidence command handlers out of the CLI orchestrator." + + +def emit_result(result: dict) -> int: + 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 resolved_skill_dir(args: argparse.Namespace) -> str: + return str(Path(args.skill_dir).resolve()) + + +def append_outputs(cmd: list[str], args: argparse.Namespace, *, markdown: bool = True, generated_at: bool = False) -> None: + if getattr(args, "output_html", None): + cmd.extend(["--output-html", args.output_html]) + if getattr(args, "output_json", None): + cmd.extend(["--output-json", args.output_json]) + if markdown and getattr(args, "output_md", None): + cmd.extend(["--output-md", args.output_md]) + if generated_at and getattr(args, "generated_at", None): + cmd.extend(["--generated-at", args.generated_at]) + + +def render_skill_report_command(args: argparse.Namespace, script_name: str, *, markdown: bool = True, generated_at: bool = False) -> int: + cmd = [resolved_skill_dir(args)] + append_outputs(cmd, args, markdown=markdown, generated_at=generated_at) + return emit_result(run_script(script_name, cmd)) + + +def command_skill_report(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_skill_overview.py", markdown=False) + + +def command_review_viewer(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_review_viewer.py", markdown=False) + + +def command_review_studio(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_review_studio.py", markdown=False) + + +def command_skill_os2_audit(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_skill_os2_audit.py", generated_at=True) + + +def command_skill_os2_coverage(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_skill_os2_coverage.py", generated_at=True) + + +def command_world_class_evidence(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_world_class_evidence_plan.py", generated_at=True) + + +def command_world_class_ledger(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_world_class_evidence_ledger.py", generated_at=True) + + +def command_world_class_intake(args: argparse.Namespace) -> int: + cmd = [resolved_skill_dir(args)] + if args.submissions_dir: + cmd.extend(["--submissions-dir", args.submissions_dir]) + append_outputs(cmd, args, generated_at=True) + return emit_result(run_script("render_world_class_evidence_intake.py", cmd)) + + +def command_world_class_claim_guard(args: argparse.Namespace) -> int: + cmd = [resolved_skill_dir(args)] + for surface in args.claim_surface: + cmd.extend(["--claim-surface", surface]) + append_outputs(cmd, args, generated_at=True) + return emit_result(run_script("render_world_class_claim_guard.py", cmd)) + + +def command_benchmark_reproducibility(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_benchmark_reproducibility.py", generated_at=True) + + +def command_reference_scan(args: argparse.Namespace) -> int: + cmd = [resolved_skill_dir(args)] + 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]) + for reference in args.reference: + cmd.extend(["--reference", reference]) + append_outputs(cmd, args) + return emit_result(run_script("render_reference_scan.py", cmd)) + + +def command_github_benchmark_scan(args: argparse.Namespace) -> int: + cmd = [resolved_skill_dir(args), "--query", args.query, "--top-n", str(args.top_n)] + if args.fixture_dir: + cmd.extend(["--fixture-dir", args.fixture_dir]) + append_outputs(cmd, args) + return emit_result(run_script("github_benchmark_scan.py", cmd)) + + +def command_intent_confidence(args: argparse.Namespace) -> int: + cmd = [resolved_skill_dir(args)] + if args.context_json: + cmd.extend(["--context-json", args.context_json]) + append_outputs(cmd, args) + return emit_result(run_script("render_intent_confidence.py", cmd)) + + +def command_intent_dialogue(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_intent_dialogue.py") + + +def command_reference_synthesis(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_reference_synthesis.py") + + +def command_output_risk_profile(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_output_risk_profile.py") + + +def command_artifact_design_profile(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_artifact_design_profile.py") + + +def command_prompt_quality_profile(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_prompt_quality_profile.py") + + +def command_system_model(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_system_model.py") + + +def command_iteration_directions(args: argparse.Namespace) -> int: + return render_skill_report_command(args, "render_iteration_directions.py") diff --git a/scripts/yao_cli_runtime.py b/scripts/yao_cli_runtime.py new file mode 100644 index 0000000..6dfc6bc --- /dev/null +++ b/scripts/yao_cli_runtime.py @@ -0,0 +1,45 @@ +"""Shared runtime helpers for the Yao CLI.""" + +import json +import subprocess +import sys +from pathlib import Path + + +SCRIPT_INTERFACE = "internal-module" +SCRIPT_INTERFACE_REASON = "Imported by yao.py and command modules for shared subprocess execution and JSON payload parsing." + +ROOT = Path(__file__).resolve().parent.parent +SCRIPTS = ROOT / "scripts" + + +def script_path(name: str) -> str: + return str(SCRIPTS / name) + + +def load_json_maybe(text: str) -> dict | None: + text = text.strip() + if not text: + return None + try: + return json.loads(text) + except json.JSONDecodeError: + return None + + +def run_script(name: str, args: list[str], cwd: Path | None = None) -> dict: + proc = subprocess.run( + [sys.executable, script_path(name), *args], + cwd=cwd or ROOT, + capture_output=True, + text=True, + ) + payload = load_json_maybe(proc.stdout) + return { + "command": f"{name} {' '.join(args)}".strip(), + "returncode": proc.returncode, + "ok": proc.returncode == 0, + "stdout": proc.stdout, + "stderr": proc.stderr, + "payload": payload, + } diff --git a/skill_atlas/catalog.json b/skill_atlas/catalog.json index 2bcae1d..81336f1 100644 --- a/skill_atlas/catalog.json +++ b/skill_atlas/catalog.json @@ -102,6 +102,8 @@ "scripts/yao.py", "scripts/yao_cli_config.py", "scripts/yao_cli_parser.py", + "scripts/yao_cli_report_commands.py", + "scripts/yao_cli_runtime.py", "scripts/yao_cli_telemetry.py", "references/artifact-design-doctrine.md", "references/authoring-discipline.md", diff --git a/tests/verify_architecture_maintainability.py b/tests/verify_architecture_maintainability.py index 297ed64..36723c2 100644 --- a/tests/verify_architecture_maintainability.py +++ b/tests/verify_architecture_maintainability.py @@ -40,12 +40,12 @@ def main() -> None: assert payload["summary"]["decision"] == "watch-maintainability-hotspots", payload["summary"] assert payload["summary"]["hotspot_count"] >= 3, payload["summary"] assert payload["summary"]["blocker_count"] == 0, payload["summary"] - assert payload["summary"]["command_handler_count"] >= 50, payload["summary"] + assert 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]["path"] == "scripts/render_review_studio.py", payload["largest_files"][0] assert payload["largest_files"][0]["severity"] == "warn", payload["largest_files"][0] hotspot_paths = {item["path"] for item in payload["hotspots"]} - assert {"scripts/yao.py", "scripts/render_review_studio.py"} <= hotspot_paths, hotspot_paths + assert {"scripts/yao.py", "scripts/render_review_studio.py", "scripts/render_review_viewer.py"} <= hotspot_paths, hotspot_paths assert output_json.exists(), output_json markdown = output_md.read_text(encoding="utf-8") assert "# Architecture Maintainability" in markdown, markdown diff --git a/tests/verify_yao_cli.py b/tests/verify_yao_cli.py index 8b2aee1..b8eb38a 100644 --- a/tests/verify_yao_cli.py +++ b/tests/verify_yao_cli.py @@ -13,6 +13,8 @@ sys.path.insert(0, str(ROOT / "scripts")) import yao as yao_cli_module # noqa: E402 import yao_cli_config # noqa: E402 import yao_cli_parser # noqa: E402 +import yao_cli_report_commands # noqa: E402 +import yao_cli_runtime # noqa: E402 def run(*args: str, input_text: str | None = None) -> dict: @@ -70,6 +72,9 @@ def main() -> None: assert "scripts/provider_output_eval_runner.py" in yao_cli_config.provider_output_runner_command("openai") assert "--allow-custom-base-url" in yao_cli_config.provider_output_runner_command("openai", allow_custom_base_url=True) assert yao_cli_parser.SCRIPT_INTERFACE == "internal-module" + assert yao_cli_runtime.SCRIPT_INTERFACE == "internal-module" + assert yao_cli_report_commands.SCRIPT_INTERFACE == "internal-module" + assert callable(yao_cli_module.command_review_studio) parser_help = yao_cli_module.build_parser().format_help() assert "quickstart" in parser_help, parser_help assert "review-studio" in parser_help, parser_help @@ -214,7 +219,7 @@ def main() -> None: assert architecture_result["ok"], architecture_result assert architecture_result["payload"]["summary"]["hotspot_count"] >= 3, architecture_result assert architecture_result["payload"]["summary"]["blocker_count"] == 0, architecture_result - assert architecture_result["payload"]["summary"]["command_handler_count"] >= 50, architecture_result + assert 30 <= architecture_result["payload"]["summary"]["command_handler_count"] < 50, architecture_result world_class_evidence_result = run( "world-class-evidence",
路径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