diff --git a/registry/index.json b/registry/index.json index 22796dce..6f49834e 100644 --- a/registry/index.json +++ b/registry/index.json @@ -1,6 +1,6 @@ { "schema_version": "2.0", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "package_count": 1, "packages": [ { @@ -16,7 +16,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" } ] } diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json index de4e8670..859eff15 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": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5", - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, "compatibility": { "openai": "pass", @@ -48,10 +48,10 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" }, - "generated_at": "2026-06-13" + "generated_at": "2026-06-14" } diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json index dfcdabf5..4fd85714 100644 --- a/reports/architecture_maintainability.json +++ b/reports/architecture_maintainability.json @@ -1,30 +1,23 @@ { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skill_dir": ".", "summary": { - "python_file_count": 154, - "script_file_count": 95, + "python_file_count": 155, + "script_file_count": 96, "test_file_count": 59, - "internal_module_count": 20, + "internal_module_count": 22, "cli_script_count": 76, "command_handler_count": 34, "warn_line_threshold": 900, "block_line_threshold": 1500, - "largest_file_lines": 899, + "largest_file_lines": 888, "hotspot_count": 0, "blocker_count": 0, "decision": "pass" }, "largest_files": [ - { - "path": "scripts/render_review_studio.py", - "lines": 899, - "kind": "cli-script", - "severity": "pass", - "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." - }, { "path": "tests/verify_yao_cli.py", "lines": 888, @@ -101,6 +94,13 @@ "kind": "cli-script", "severity": "pass", "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/cross_packager.py", + "lines": 641, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." } ], "hotspots": [], diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md index 8396d083..dcfcfcfc 100644 --- a/reports/architecture_maintainability.md +++ b/reports/architecture_maintainability.md @@ -1,17 +1,17 @@ # Architecture Maintainability -Generated at: `2026-06-13` +Generated at: `2026-06-14` ## Summary - decision: `pass` -- python files: `154` -- scripts: `95` +- python files: `155` +- scripts: `96` - tests: `59` -- internal modules: `20` +- internal modules: `22` - CLI scripts: `76` - Yao CLI command handlers: `34` -- largest file lines: `899` +- largest file lines: `888` - hotspots: `0` - blockers: `0` @@ -25,7 +25,6 @@ No file-size hotspots found. | File | Lines | Kind | Severity | | --- | ---: | --- | --- | -| `scripts/render_review_studio.py` | `899` | `cli-script` | `pass` | | `tests/verify_yao_cli.py` | `888` | `test` | `pass` | | `scripts/yao.py` | `874` | `cli-script` | `pass` | | `scripts/skill_report_model.py` | `792` | `internal-module` | `pass` | @@ -37,6 +36,7 @@ No file-size hotspots found. | `scripts/build_skill_atlas.py` | `674` | `cli-script` | `pass` | | `scripts/skill_report_layout.py` | `653` | `internal-module` | `pass` | | `scripts/render_reference_synthesis.py` | `644` | `cli-script` | `pass` | +| `scripts/cross_packager.py` | `641` | `cli-script` | `pass` | ## Release Rule diff --git a/reports/compiled_targets.json b/reports/compiled_targets.json index bf18763e..fddc3890 100644 --- a/reports/compiled_targets.json +++ b/reports/compiled_targets.json @@ -208,6 +208,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -223,8 +224,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -1057,6 +1057,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -1072,8 +1073,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -1906,6 +1906,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -1921,8 +1922,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -2739,6 +2739,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -2754,8 +2755,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -3572,6 +3572,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -3587,8 +3588,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", diff --git a/reports/context_budget.json b/reports/context_budget.json index 056e08af..b7533ab1 100644 --- a/reports/context_budget.json +++ b/reports/context_budget.json @@ -2,22 +2,22 @@ "ok": true, "failures": [], "warnings": [ - "Deferred resource footprint is high: 381942 estimated tokens across references/scripts/evals. Keep Review Studio warnings visible until the largest resource dirs are split, archived, or justified." + "Deferred resource footprint is high: 382073 estimated tokens across references/scripts/evals. Keep Review Studio warnings visible until the largest resource dirs are split, archived, or justified." ], "stats": { "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1187833, + "other_text_tokens": 1188506, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1188584, - "deferred_resource_tokens": 381942, + "estimated_total_text_tokens": 1189257, + "deferred_resource_tokens": 382073, "deferred_resource_warn_threshold": 120000, "deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 334459, - "file_count": 95 + "estimated_tokens": 334590, + "file_count": 96 }, { "path": "references", @@ -33,11 +33,11 @@ "large_deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 334459, - "file_count": 95 + "estimated_tokens": 334590, + "file_count": 96 } ], - "relevant_file_count": 500, + "relevant_file_count": 502, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 diff --git a/reports/context_budget.md b/reports/context_budget.md index f219ab03..97f82ffd 100644 --- a/reports/context_budget.md +++ b/reports/context_budget.md @@ -2,7 +2,7 @@ | Target | Path | Tier | Limit | Initial | SKILL | Deferred | Large Deferred Dirs | Quality Density | Unused Dirs | Status | | --- | --- | --- | ---: | ---: | ---: | ---: | --- | ---: | --- | --- | -| root | `.` | `production` | 1000 | 944 | 751 | 381942 | scripts:334459 | 137.7 | - | ok | +| root | `.` | `production` | 1000 | 944 | 751 | 382073 | scripts:334590 | 137.7 | - | ok | | complex-release-orchestrator | `examples/complex-release-orchestrator/generated-skill` | `production` | 1000 | 790 | 718 | 1657 | - | 164.6 | - | ok | | governed-incident-command | `examples/governed-incident-command/generated-skill` | `production` | 1000 | 760 | 658 | 1030 | - | 171.1 | - | ok | diff --git a/reports/context_budget_summary.json b/reports/context_budget_summary.json index b3110b36..2ac20b8a 100644 --- a/reports/context_budget_summary.json +++ b/reports/context_budget_summary.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-03-31", + "generated_at": "2026-06-14", "targets": [ { "label": "root", @@ -8,19 +8,19 @@ "budget_limit": 1000, "initial_tokens": 944, "skill_body_tokens": 751, - "deferred_resource_tokens": 381942, + "deferred_resource_tokens": 382073, "large_deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 334459, - "file_count": 95 + "estimated_tokens": 334590, + "file_count": 96 } ], "quality_density": 137.7, "unused_resource_dirs": [], "ok": true, "warnings": [ - "Deferred resource footprint is high: 381942 estimated tokens across references/scripts/evals. Keep Review Studio warnings visible until the largest resource dirs are split, archived, or justified." + "Deferred resource footprint is high: 382073 estimated tokens across references/scripts/evals. Keep Review Studio warnings visible until the largest resource dirs are split, archived, or justified." ] }, { diff --git a/reports/install_simulation.json b/reports/install_simulation.json index 38051603..be32b237 100644 --- a/reports/install_simulation.json +++ b/reports/install_simulation.json @@ -1,14 +1,14 @@ { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skill_dir": ".", - "package_dir": "tests/tmp_review_studio/dist", - "install_root": "tests/tmp_review_studio/install-root/simulate-yao-meta-skill", - "installed_skill_dir": "tests/tmp_review_studio/install-root/simulate-yao-meta-skill/yao-meta-skill", + "package_dir": "dist", + "install_root": "dist/install-simulation/simulate-yao-meta-skill", + "installed_skill_dir": "dist/install-simulation/simulate-yao-meta-skill/yao-meta-skill", "summary": { "archive_present": true, - "archive_entry_count": 574, + "archive_entry_count": 575, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -26,7 +26,7 @@ { "id": "archive-present", "status": "pass", - "detail": "Package archive exists: tests/tmp_review_studio/dist/yao-meta-skill.zip" + "detail": "Package archive exists: dist/yao-meta-skill.zip" }, { "id": "archive-safe-paths", @@ -272,9 +272,9 @@ "failures": [], "warnings": [], "artifacts": { - "archive": "tests/tmp_review_studio/dist/yao-meta-skill.zip", - "package_manifest": "tests/tmp_review_studio/dist/manifest.json", - "json": "tests/tmp_review_studio/install_simulation.json", - "markdown": "tests/tmp_review_studio/install_simulation.md" + "archive": "dist/yao-meta-skill.zip", + "package_manifest": "dist/manifest.json", + "json": "reports/install_simulation.json", + "markdown": "reports/install_simulation.md" } } diff --git a/reports/install_simulation.md b/reports/install_simulation.md index b0d16dae..6750e007 100644 --- a/reports/install_simulation.md +++ b/reports/install_simulation.md @@ -1,7 +1,7 @@ # Install Simulation - OK: `True` -- Package directory: `tests/tmp_review_studio/dist` +- Package directory: `dist` - Archive extracted: `True` - Entrypoint loaded: `True` - Manifest loaded: `True` @@ -16,7 +16,7 @@ | Check | Status | Detail | | --- | --- | --- | -| `archive-present` | `pass` | Package archive exists: tests/tmp_review_studio/dist/yao-meta-skill.zip | +| `archive-present` | `pass` | Package archive exists: dist/yao-meta-skill.zip | | `archive-safe-paths` | `pass` | Archive has no absolute or parent-traversal entries | | `single-top-level` | `pass` | Archive top-level directory is yao-meta-skill | | `entrypoint-load` | `pass` | Installed SKILL.md frontmatter is readable | diff --git a/reports/package_verification.json b/reports/package_verification.json index 01c17c20..fa823857 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": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", - "archive_entry_count": 574, + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", + "archive_entry_count": 575, "failure_count": 0, "warning_count": 0 }, diff --git a/reports/package_verification.md b/reports/package_verification.md index bc468a28..7a1cf8f9 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: `76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe` +- Archive SHA256: `05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7` - Failures: `0` - Warnings: `0` diff --git a/reports/python_compatibility.json b/reports/python_compatibility.json index 0b4f6d3b..dedac11f 100644 --- a/reports/python_compatibility.json +++ b/reports/python_compatibility.json @@ -1,11 +1,11 @@ { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "root": ".", "summary": { "target_python": "3.11", - "file_count": 157, + "file_count": 158, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -418,6 +418,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/review_studio_actions.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/review_studio_data.py", "ok": true, diff --git a/reports/python_compatibility.md b/reports/python_compatibility.md index cef6ad7d..a63fbd60 100644 --- a/reports/python_compatibility.md +++ b/reports/python_compatibility.md @@ -1,12 +1,12 @@ # Python Compatibility -Generated at: `2026-06-13` +Generated at: `2026-06-14` ## Summary - decision: `pass` - target python: `3.11` -- files scanned: `157` +- files scanned: `158` - issues: `0` - syntax errors: `0` - f-string 3.11 violations: `0` diff --git a/reports/registry_audit.json b/reports/registry_audit.json index c94cfeae..b2eca025 100644 --- a/reports/registry_audit.json +++ b/reports/registry_audit.json @@ -21,8 +21,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5", - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, "compatibility": { "openai": "pass", @@ -53,16 +53,16 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" }, - "generated_at": "2026-06-13" + "generated_at": "2026-06-14" }, "index": { "schema_version": "2.0", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "package_count": 1, "packages": [ { @@ -78,7 +78,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" } ] }, diff --git a/reports/registry_audit.md b/reports/registry_audit.md index 4998b710..dcfe94c9 100644 --- a/reports/registry_audit.md +++ b/reports/registry_audit.md @@ -6,8 +6,8 @@ - Maturity: `governed` - Owner: `Yao Team` - License: `MIT` -- Package SHA256: `2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5` -- Archive SHA256: `76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe` +- Package SHA256: `0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102` +- Archive SHA256: `05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7` - Install simulated: `True` ## Compatibility diff --git a/reports/review-studio.html b/reports/review-studio.html index e48daa56..9a6b664a 100644 --- a/reports/review-studio.html +++ b/reports/review-studio.html @@ -434,17 +434,17 @@

核心指标

-
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 Kit0/5

pending 5; answer key hidden

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; 4 installer-enforced

Trust0

95 scripts scanned; secrets found

Py Compat0

157 files scanned for Python 3.11

Arch Debt0

899 largest lines; 34 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

73 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

574 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 Kit0/5

pending 5; answer key hidden

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; 4 installer-enforced

Trust0

96 scripts scanned; secrets found

Py Compat0

158 files scanned for Python 3.11

Arch Debt0

888 largest lines; 34 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

73 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

575 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; deferred 381942/120000; top deferred scripts 334459; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

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

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
通过

架构维护

154 Python files; 0 hotspots; 0 blockers; largest 899 lines; 34 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; installer 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 100.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; deferred 382073/120000; top deferred scripts 334590; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

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

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
通过

架构维护

155 Python files; 0 hotspots; 0 blockers; largest 888 lines; 34 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; installer 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 100.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

阻断事项

无。

-

关注事项

+

关注事项

@@ -501,17 +501,17 @@
-

上下文

initial load 944/1000; deferred 381942/120000; top deferred scripts 334459; quality density 137.7

+

上下文

initial load 944/1000; deferred 382073/120000; top deferred scripts 334590; quality density 137.7

编译证据

Review reports/compiled_targets.md before packaging to inspect target adapter modes, generated files, preserved semantics, warnings, and unsupported features.

-

信任报告

Secret
0
脚本数
95
网络脚本
3
Help 失败
0
包体哈希
2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5
+

信任报告

Secret
0
脚本数
96
网络脚本
3
Help 失败
0
包体哈希
0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102

安全边界

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

-

Python 兼容

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

Python 兼容

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

解释器边界

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

@@ -574,12 +574,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
归档哈希
76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe
+

包体元数据

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

发布路线

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

-

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
574
失败数
0
警告数
0
归档哈希
76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe
+

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
575
失败数
0
警告数
0
归档哈希
05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7
diff --git a/reports/review-studio.json b/reports/review-studio.json index 9b46e717..2b68d6d5 100644 --- a/reports/review-studio.json +++ b/reports/review-studio.json @@ -43,7 +43,7 @@ "key": "context-budget", "label": "上下文", "status": "warn", - "detail": "initial load 944/1000; deferred 381942/120000; top deferred scripts 334459; quality density 137.7", + "detail": "initial load 944/1000; deferred 382073/120000; top deferred scripts 334590; quality density 137.7", "evidence": "reports/context_budget.json", "link": "context_budget.md" }, @@ -59,7 +59,7 @@ "key": "trust-report", "label": "信任报告", "status": "pass", - "detail": "0 secrets; 95 scripts; 3 network-capable scripts; 0 help smoke failures", + "detail": "0 secrets; 96 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; 157 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards", + "detail": "Python 3.11; 158 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": "pass", - "detail": "154 Python files; 0 hotspots; 0 blockers; largest 899 lines; 34 CLI handlers", + "detail": "155 Python files; 0 hotspots; 0 blockers; largest 888 lines; 34 CLI handlers", "evidence": "reports/architecture_maintainability.json", "link": "architecture_maintainability.md" }, @@ -158,7 +158,7 @@ "key": "context-budget", "label": "上下文", "status": "warn", - "detail": "initial load 944/1000; deferred 381942/120000; top deferred scripts 334459; quality density 137.7", + "detail": "initial load 944/1000; deferred 382073/120000; top deferred scripts 334590; quality density 137.7", "evidence": "reports/context_budget.json", "link": "context_budget.md" }, @@ -905,7 +905,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 95 + "file_count": 96 }, { "path": "evals", @@ -920,7 +920,7 @@ "file_count": 203 } ], - "file_count": 362, + "file_count": 363, "folder_count": 4, "distribution": [ { @@ -945,7 +945,7 @@ }, { "label": "scripts", - "value": 95 + "value": 96 }, { "label": "evals", @@ -1074,7 +1074,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 95 + "file_count": 96 }, { "path": "evals", @@ -1493,9 +1493,9 @@ "failures": [] }, "trust_security": { - "scanned_files": 179, - "script_count": 95, - "internal_module_count": 18, + "scanned_files": 180, + "script_count": 96, + "internal_module_count": 19, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -1513,8 +1513,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 179, - "package_sha256": "c42643ea854dd90bb03ca607595f6a6b2c00118da64a78e8bdbb4392d7f204fb" + "package_hash_file_count": 180, + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" }, "skill_atlas": { "skill_count": 12, @@ -1552,8 +1552,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "c42643ea854dd90bb03ca607595f6a6b2c00118da64a78e8bdbb4392d7f204fb", - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, "compatibility": { "openai": "pass", @@ -1584,12 +1584,12 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" }, - "generated_at": "2026-06-13" + "generated_at": "2026-06-14" }, "failures": [], "warnings": [] @@ -1600,8 +1600,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", - "archive_entry_count": 574, + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", + "archive_entry_count": 575, "failure_count": 0, "warning_count": 0 }, @@ -1612,7 +1612,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 574, + "archive_entry_count": 575, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1679,12 +1679,12 @@ { "field": "archive_sha256", "from": "", - "to": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "to": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "c42643ea854dd90bb03ca607595f6a6b2c00118da64a78e8bdbb4392d7f204fb" + "to": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" } ] }, @@ -4814,7 +4814,7 @@ "skill_os2_coverage": { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skill_dir": ".", "summary": { "item_count": 20, @@ -4935,7 +4935,7 @@ "label": "Trust Security", "status": "pass", "objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.", - "current": "95 scripts; secrets 0; help failures 0", + "current": "96 scripts; secrets 0; help failures 0", "command": "python3 scripts/yao.py trust .", "test": "python3 tests/verify_trust_check.py", "evidence": [ @@ -5009,7 +5009,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 574; install failures 0", + "current": "archive entries 575; 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": [ @@ -5637,6 +5637,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -5652,8 +5653,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -6486,6 +6486,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -6501,8 +6502,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -7335,6 +7335,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -7350,8 +7351,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -8168,6 +8168,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -8183,8 +8184,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -9001,6 +9001,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -9016,8 +9017,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -10290,9 +10290,9 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 179, - "script_count": 95, - "internal_module_count": 18, + "scanned_files": 180, + "script_count": 96, + "internal_module_count": 19, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -10310,8 +10310,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 179, - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "package_hash_file_count": 180, + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" }, "failures": [], "warnings": [], @@ -11216,6 +11216,20 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/review_studio_actions.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by render_review_studio.py to keep Review Studio action guidance and source refs out of HTML rendering.", + "has_argparse": false, + "has_main_guard": false, + "uses_input": false, + "uses_network": false, + "uses_file_write": false, + "uses_subprocess": false, + "network_urls": [], + "network_hosts": [] + }, { "path": "scripts/review_studio_data.py", "interface": "internal-module", @@ -11699,7 +11713,7 @@ "checked_count": 77, "passed_count": 77, "failed_count": 0, - "skipped_count": 18, + "skipped_count": 19, "failed_scripts": [], "results": [ { @@ -12474,6 +12488,10 @@ } ], "skipped": [ + { + "path": "scripts/review_studio_actions.py", + "reason": "internal module" + }, { "path": "scripts/review_studio_data.py", "reason": "internal module" @@ -12727,11 +12745,11 @@ "python_compatibility": { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "root": ".", "summary": { "target_python": "3.11", - "file_count": 157, + "file_count": 158, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -13144,6 +13162,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/review_studio_actions.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/review_studio_data.py", "ok": true, @@ -13703,27 +13727,20 @@ "generated_at": "2026-06-14", "skill_dir": ".", "summary": { - "python_file_count": 154, - "script_file_count": 95, + "python_file_count": 155, + "script_file_count": 96, "test_file_count": 59, - "internal_module_count": 20, + "internal_module_count": 22, "cli_script_count": 76, "command_handler_count": 34, "warn_line_threshold": 900, "block_line_threshold": 1500, - "largest_file_lines": 899, + "largest_file_lines": 888, "hotspot_count": 0, "blocker_count": 0, "decision": "pass" }, "largest_files": [ - { - "path": "scripts/render_review_studio.py", - "lines": 899, - "kind": "cli-script", - "severity": "pass", - "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." - }, { "path": "tests/verify_yao_cli.py", "lines": 888, @@ -13800,6 +13817,13 @@ "kind": "cli-script", "severity": "pass", "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, + { + "path": "scripts/cross_packager.py", + "lines": 641, + "kind": "cli-script", + "severity": "pass", + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." } ], "hotspots": [], @@ -13813,22 +13837,22 @@ "ok": true, "failures": [], "warnings": [ - "Deferred resource footprint is high: 381942 estimated tokens across references/scripts/evals. Keep Review Studio warnings visible until the largest resource dirs are split, archived, or justified." + "Deferred resource footprint is high: 382073 estimated tokens across references/scripts/evals. Keep Review Studio warnings visible until the largest resource dirs are split, archived, or justified." ], "stats": { "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1187832, + "other_text_tokens": 1188506, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1188583, - "deferred_resource_tokens": 381942, + "estimated_total_text_tokens": 1189257, + "deferred_resource_tokens": 382073, "deferred_resource_warn_threshold": 120000, "deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 334459, - "file_count": 95 + "estimated_tokens": 334590, + "file_count": 96 }, { "path": "references", @@ -13844,11 +13868,11 @@ "large_deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 334459, - "file_count": 95 + "estimated_tokens": 334590, + "file_count": 96 } ], - "relevant_file_count": 500, + "relevant_file_count": 502, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 @@ -14692,7 +14716,7 @@ }, "catalog": { "workspace_root": ".", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skills": [ { "name": "yao-meta-skill", @@ -14775,6 +14799,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -15534,7 +15559,7 @@ "name": "incident-command-governor", "path": "examples/governed-incident-command/generated-skill", "reason": "review overdue by cadence monthly", - "age_days": 74, + "age_days": 75, "allowed_days": 31, "actionable": false, "scope": "example" @@ -17319,8 +17344,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5", - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, "compatibility": { "openai": "pass", @@ -17351,16 +17376,16 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" }, - "generated_at": "2026-06-13" + "generated_at": "2026-06-14" }, "index": { "schema_version": "2.0", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "package_count": 1, "packages": [ { @@ -17376,7 +17401,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" } ] }, @@ -17399,8 +17424,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", - "archive_entry_count": 574, + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", + "archive_entry_count": 575, "failure_count": 0, "warning_count": 0 }, @@ -18058,14 +18083,14 @@ "install_simulation": { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skill_dir": ".", - "package_dir": "tests/tmp_review_studio/dist", - "install_root": "tests/tmp_review_studio/install-root/simulate-yao-meta-skill", - "installed_skill_dir": "tests/tmp_review_studio/install-root/simulate-yao-meta-skill/yao-meta-skill", + "package_dir": "dist", + "install_root": "dist/install-simulation/simulate-yao-meta-skill", + "installed_skill_dir": "dist/install-simulation/simulate-yao-meta-skill/yao-meta-skill", "summary": { "archive_present": true, - "archive_entry_count": 574, + "archive_entry_count": 575, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -18083,7 +18108,7 @@ { "id": "archive-present", "status": "pass", - "detail": "Package archive exists: tests/tmp_review_studio/dist/yao-meta-skill.zip" + "detail": "Package archive exists: dist/yao-meta-skill.zip" }, { "id": "archive-safe-paths", @@ -18329,16 +18354,16 @@ "failures": [], "warnings": [], "artifacts": { - "archive": "tests/tmp_review_studio/dist/yao-meta-skill.zip", - "package_manifest": "tests/tmp_review_studio/dist/manifest.json", - "json": "tests/tmp_review_studio/install_simulation.json", - "markdown": "tests/tmp_review_studio/install_simulation.md" + "archive": "dist/yao-meta-skill.zip", + "package_manifest": "dist/manifest.json", + "json": "reports/install_simulation.json", + "markdown": "reports/install_simulation.md" } }, "upgrade_check": { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "previous": { "name": "yao-meta-skill", "version": "1.0.0", @@ -18407,12 +18432,12 @@ { "field": "archive_sha256", "from": "", - "to": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "to": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "to": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" } ] }, @@ -18427,8 +18452,8 @@ "artifacts": { "previous_package": "registry/examples/yao-meta-skill-1.0.0.json", "current_package": "reports/registry_audit.json", - "json": "tests/tmp_review_studio/upgrade_check.json", - "markdown": "tests/tmp_review_studio/upgrade_check.md" + "json": "reports/upgrade_check.json", + "markdown": "reports/upgrade_check.md" } }, "manifest": { diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json index 1fe51943..44022bdb 100644 --- a/reports/security_trust_report.json +++ b/reports/security_trust_report.json @@ -2,9 +2,9 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 179, - "script_count": 95, - "internal_module_count": 18, + "scanned_files": 180, + "script_count": 96, + "internal_module_count": 19, "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": 179, - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "package_hash_file_count": 180, + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" }, "failures": [], "warnings": [], @@ -928,6 +928,20 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/review_studio_actions.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by render_review_studio.py to keep Review Studio action guidance and source refs out of HTML rendering.", + "has_argparse": false, + "has_main_guard": false, + "uses_input": false, + "uses_network": false, + "uses_file_write": false, + "uses_subprocess": false, + "network_urls": [], + "network_hosts": [] + }, { "path": "scripts/review_studio_data.py", "interface": "internal-module", @@ -1411,7 +1425,7 @@ "checked_count": 77, "passed_count": 77, "failed_count": 0, - "skipped_count": 18, + "skipped_count": 19, "failed_scripts": [], "results": [ { @@ -2186,6 +2200,10 @@ } ], "skipped": [ + { + "path": "scripts/review_studio_actions.py", + "reason": "internal module" + }, { "path": "scripts/review_studio_data.py", "reason": "internal module" diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md index cfdecac1..b94e1dfb 100644 --- a/reports/security_trust_report.md +++ b/reports/security_trust_report.md @@ -1,9 +1,9 @@ # Security Trust Report - OK: `True` -- Scanned files: `179` -- Scripts: `95` -- Internal script modules: `18` +- Scanned files: `180` +- Scripts: `96` +- Internal script modules: `19` - 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: `179` -- Package SHA256: `2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5` +- Package hash files: `180` +- Package SHA256: `0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102` ## Failures @@ -125,6 +125,7 @@ | scripts/render_world_class_operator_runbook.py | cli | True | True | True | False | False | True | False | Renders an operator runbook for collecting pending world-class evidence without accepting evidence. | | scripts/render_world_class_submission_review.py | cli | True | True | True | False | False | True | False | Renders a read-only review queue for world-class evidence submissions before ledger acceptance. | | scripts/resource_boundary_check.py | cli | False | True | True | False | False | False | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. | +| scripts/review_studio_actions.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to keep Review Studio action guidance and source refs out of HTML rendering. | | scripts/review_studio_data.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to load Review Studio source reports and metric cards. | | scripts/review_studio_formatting.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to format report dictionaries as audit UI panels. | | scripts/review_studio_gates.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to keep Review Studio gate evaluation separate from HTML rendering. | diff --git a/reports/skill-overview.html b/reports/skill-overview.html index 68891621..494540f1 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.

-
资产分布362项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
+
资产分布363项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
diff --git a/reports/skill-overview.json b/reports/skill-overview.json index 996b7acf..e156afd3 100644 --- a/reports/skill-overview.json +++ b/reports/skill-overview.json @@ -437,7 +437,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 95 + "file_count": 96 }, { "path": "evals", @@ -452,7 +452,7 @@ "file_count": 203 } ], - "file_count": 362, + "file_count": 363, "folder_count": 4, "distribution": [ { @@ -477,7 +477,7 @@ }, { "label": "scripts", - "value": 95 + "value": 96 }, { "label": "evals", @@ -606,7 +606,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 95 + "file_count": 96 }, { "path": "evals", @@ -1025,9 +1025,9 @@ "failures": [] }, "trust_security": { - "scanned_files": 179, - "script_count": 95, - "internal_module_count": 18, + "scanned_files": 180, + "script_count": 96, + "internal_module_count": 19, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -1045,8 +1045,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 179, - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "package_hash_file_count": 180, + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" }, "skill_atlas": { "skill_count": 12, @@ -1084,8 +1084,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5", - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "package_sha256": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, "compatibility": { "openai": "pass", @@ -1116,12 +1116,12 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" }, - "generated_at": "2026-06-13" + "generated_at": "2026-06-14" }, "failures": [], "warnings": [] @@ -1132,8 +1132,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe", - "archive_entry_count": 574, + "archive_sha256": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7", + "archive_entry_count": 575, "failure_count": 0, "warning_count": 0 }, @@ -1144,7 +1144,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 574, + "archive_entry_count": 575, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1211,12 +1211,12 @@ { "field": "archive_sha256", "from": "", - "to": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "to": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "to": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" } ] }, diff --git a/reports/skill_atlas.json b/reports/skill_atlas.json index d7f86aec..b81ae76a 100644 --- a/reports/skill_atlas.json +++ b/reports/skill_atlas.json @@ -44,7 +44,7 @@ }, "catalog": { "workspace_root": ".", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skills": [ { "name": "yao-meta-skill", @@ -127,6 +127,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -886,7 +887,7 @@ "name": "incident-command-governor", "path": "examples/governed-incident-command/generated-skill", "reason": "review overdue by cadence monthly", - "age_days": 74, + "age_days": 75, "allowed_days": 31, "actionable": false, "scope": "example" diff --git a/reports/skill_os2_audit.json b/reports/skill_os2_audit.json index a5610102..f5a33cb2 100644 --- a/reports/skill_os2_audit.json +++ b/reports/skill_os2_audit.json @@ -1,7 +1,7 @@ { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skill_dir": ".", "summary": { "item_count": 15, @@ -197,7 +197,7 @@ "key": "trust-security", "label": "Trust Security", "status": "pass", - "current": "secrets 0; scripts 95; help failures 0", + "current": "secrets 0; scripts 96; help failures 0", "target": "Secrets, scripts, dependencies, permissions, and package hash are reviewable", "evidence": [ { @@ -285,7 +285,7 @@ "key": "registry-distribution", "label": "Registry Distribution", "status": "pass", - "current": "zip entries 574; install failures 0; permission failures 0", + "current": "zip entries 575; 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 564bbdc0..b7cefd67 100644 --- a/reports/skill_os2_audit.md +++ b/reports/skill_os2_audit.md @@ -1,6 +1,6 @@ # Skill OS 2.0 Audit -Generated at: `2026-06-13` +Generated at: `2026-06-14` ## Summary @@ -23,11 +23,11 @@ Generated at: `2026-06-13` | 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 24; 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 95; 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 96; 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; installer enforcement 4 | Packaged adapters expose explicit permission metadata, residual risks, and installer enforcement evidence when available | Preserve residual-risk notes until real native enforcement exists. | | Native Permission Enforcement | external-required | native-enforced targets 0; installer-enforced targets 4 | At least one target/client enforces approved permissions at runtime | Integrate a real target-client or external 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 574; 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 575; 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 1 | 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 8f28c020..fe47a516 100644 --- a/reports/skill_os2_coverage.json +++ b/reports/skill_os2_coverage.json @@ -1,7 +1,7 @@ { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skill_dir": ".", "summary": { "item_count": 20, @@ -122,7 +122,7 @@ "label": "Trust Security", "status": "pass", "objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.", - "current": "95 scripts; secrets 0; help failures 0", + "current": "96 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 574; install failures 0", + "current": "archive entries 575; 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 72c03792..4b2d1832 100644 --- a/reports/skill_os2_coverage.md +++ b/reports/skill_os2_coverage.md @@ -1,6 +1,6 @@ # Skill OS 2.0 Blueprint Coverage -Generated at: `2026-06-13` +Generated at: `2026-06-14` ## Summary @@ -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` | 95 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` | +| Trust Security | `pass` | 96 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 574; 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 575; 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 ef6354a5..9eec3533 100644 --- a/reports/upgrade_check.json +++ b/reports/upgrade_check.json @@ -1,7 +1,7 @@ { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "previous": { "name": "yao-meta-skill", "version": "1.0.0", @@ -70,12 +70,12 @@ { "field": "archive_sha256", "from": "", - "to": "76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe" + "to": "05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5" + "to": "0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102" } ] }, @@ -90,7 +90,7 @@ "artifacts": { "previous_package": "registry/examples/yao-meta-skill-1.0.0.json", "current_package": "reports/registry_audit.json", - "json": "tests/tmp_review_studio/upgrade_check.json", - "markdown": "tests/tmp_review_studio/upgrade_check.md" + "json": "reports/upgrade_check.json", + "markdown": "reports/upgrade_check.md" } } diff --git a/scripts/render_review_studio.py b/scripts/render_review_studio.py index 5148d1bd..fb9e554c 100644 --- a/scripts/render_review_studio.py +++ b/scripts/render_review_studio.py @@ -2,10 +2,10 @@ import argparse import html import json -import os from pathlib import Path from typing import Any +from review_studio_actions import build_review_actions, render_review_actions from review_studio_data import evidence_paths, insight_cards, load_review_data from review_studio_formatting import registry_package_summary, render_kv_grid from review_studio_gates import add_blockers_from_gate, build_gates, status_label, weighted_score @@ -27,52 +27,6 @@ def display_path(skill_dir: Path, path: Path) -> str: return str(path.resolve()) -def link_from(output_html: Path, target: Path) -> str: - return os.path.relpath(target.resolve(), output_html.parent.resolve()) - - -def find_line(path: Path, patterns: list[str] | None = None) -> int | None: - if not path.exists(): - return None - if not patterns: - return 1 - try: - lines = path.read_text(encoding="utf-8", errors="replace").splitlines() - except OSError: - return 1 - for pattern in patterns: - for index, line in enumerate(lines, start=1): - if pattern in line: - return index - return 1 - - -def source_refs( - skill_dir: Path, - output_html: Path, - specs: list[dict[str, Any]], -) -> list[dict[str, Any]]: - refs: list[dict[str, Any]] = [] - for spec in specs: - rel_path = str(spec.get("path", "")).strip() - if not rel_path: - continue - path = skill_dir / rel_path - exists = path.exists() - line = find_line(path, spec.get("patterns", [])) - refs.append( - { - "path": rel_path, - "label": str(spec.get("label", rel_path)), - "kind": str(spec.get("kind", "source")), - "line": line, - "exists": exists, - "link": link_from(output_html, path) if exists else "", - } - ) - return refs - - def render_gate_list(gates: list[dict[str, str]]) -> str: items = [] for item in gates: @@ -117,271 +71,6 @@ def render_issue_list(title: str, items: list[dict[str, str]]) -> str: return f"

{html.escape(title)}

    {body}
" -ACTION_GUIDANCE: dict[str, dict[str, str]] = { - "intent-canvas": { - "summary": "收紧真实任务、输入、输出、排除项和成功标准。", - "why": "低 intent confidence 会让后续 Skill IR、输出评测和 Review Studio 结论建立在模糊意图上。", - "source_fix": "reports/intent-dialogue.md + reports/intent-confidence.md", - "source_paths": [ - {"path": "reports/intent-dialogue.md", "label": "intent dialogue", "kind": "report", "patterns": ["# Intent"]}, - {"path": "reports/intent-confidence.md", "label": "intent confidence", "kind": "report", "patterns": ["# Intent"]}, - ], - "verification": "python3 scripts/yao.py intent-confidence .", - }, - "trigger-lab": { - "summary": "修正 route scorecard 中的误触发、漏触发或 ambiguous case。", - "why": "触发错误会让正确 Skill 失活,或让相邻 Skill 被错误调用。", - "source_fix": "SKILL.md frontmatter description + evals/*/trigger_cases.json", - "source_paths": [ - {"path": "SKILL.md", "label": "frontmatter description", "kind": "source", "patterns": ["description:"]}, - {"path": "evals/trigger_cases.json", "label": "trigger eval cases", "kind": "eval", "patterns": ["should_trigger"]}, - {"path": "reports/route_scorecard.md", "label": "route scorecard", "kind": "report", "patterns": ["# Route"]}, - ], - "verification": "python3 scripts/build_confusion_matrix.py", - }, - "output-lab": { - "summary": "补足 output eval 覆盖、execution evidence、blind A/B 和 reviewer adjudication。", - "why": "没有输出质量和人工盲评证据时,Skill 只能证明会触发,不能证明输出真的更好且经得起审查。", - "source_fix": "evals/output/cases.jsonl + reports/output_quality_scorecard.md + reports/output_review_kit.html + reports/output_review_adjudication.md", - "source_paths": [ - {"path": "evals/output/cases.jsonl", "label": "output eval cases", "kind": "eval", "patterns": ["case_id"]}, - {"path": "reports/output_quality_scorecard.md", "label": "output scorecard", "kind": "report", "patterns": ["# Output"]}, - {"path": "reports/output_execution_runs.md", "label": "output execution runs", "kind": "report", "patterns": ["# Output Execution"]}, - {"path": "reports/output_blind_review_pack.md", "label": "blind A/B review pack", "kind": "report", "patterns": ["# Output Blind"]}, - {"path": "reports/output_review_kit.html", "label": "reviewer cockpit", "kind": "report", "patterns": ["Output Review Kit", "Variant A"]}, - {"path": "reports/output_review_adjudication.md", "label": "review adjudication", "kind": "report", "patterns": ["# Output Review"]}, - ], - "verification": "python3 scripts/adjudicate_output_review.py --write-template && python3 scripts/yao.py output-review", - }, - "context-budget": { - "summary": "压缩或拆分高成本 deferred resources,保留最小可路由上下文。", "why": "初始加载可以安全,但后续 references、scripts、evals 体量过大时,reviewer 仍需要看到维护和读取成本。", - "source_fix": "SKILL.md + references/ + scripts/ + evals/", "source_paths": [ - {"path": "SKILL.md", "label": "entrypoint", "kind": "source", "patterns": ["# Yao Meta Skill"]}, - {"path": "reports/context_budget.md", "label": "context budget", "kind": "report", "patterns": ["# Context"]}, - {"path": "scripts/resource_boundary_check.py", "label": "resource boundary checker", "kind": "source", "patterns": ["DEFERRED_RESOURCE"]}, - {"path": "references/skill-engineering-method.md", "label": "skill engineering method", "kind": "method", "patterns": ["Design Principle"]}, - ], - "verification": "python3 scripts/render_context_reports.py", - }, - "runtime-matrix": { - "summary": "修复目标端结构、metadata、相对路径、fallback 或 adapter target 声明。", - "why": "runtime conformance 失败意味着包可能被目标客户端错误加载或静默降级。", - "source_fix": "agents/interface.yaml + reports/conformance_matrix.md", - "source_paths": [ - {"path": "agents/interface.yaml", "label": "portable interface", "kind": "source", "patterns": ["adapter_targets"]}, - {"path": "reports/conformance_matrix.md", "label": "conformance matrix", "kind": "report", "patterns": ["# Runtime"]}, - ], - "verification": "python3 scripts/run_conformance_suite.py .", - }, - "trust-report": { - "summary": "处理脚本 help surface、依赖 pin、network policy、secret 和权限声明。", - "why": "团队分发时,脚本和依赖是主要供应链风险面,warning 必须有明确处置。", - "source_fix": "reports/security_trust_report.md + security/*.md + scripts/", - "source_paths": [ - {"path": "reports/security_trust_report.md", "label": "trust report", "kind": "report", "patterns": ["# Security"]}, - {"path": "security/script_policy.md", "label": "script policy", "kind": "policy", "patterns": ["# Script"]}, - {"path": "security/network_policy.md", "label": "network policy", "kind": "policy", "patterns": ["# Network"]}, - ], - "verification": "python3 scripts/trust_check.py .", - }, - "python-compat": { - "summary": "修复 Python 3.11 语法兼容问题,尤其是 f-string 表达式内的反斜杠转义。", - "why": "目标运行环境可能仍停留在 Python 3.11,语法漂移会让 CLI、报告生成和 CI 在发布后直接失败。", - "source_fix": "reports/python_compatibility.md + scripts/*.py + tests/*.py", - "source_paths": [ - {"path": "reports/python_compatibility.md", "label": "Python compatibility", "kind": "report", "patterns": ["# Python"]}, - {"path": "scripts/python_compat_check.py", "label": "compatibility checker", "kind": "source", "patterns": ["SCRIPT_INTERFACE"]}, - {"path": ".github/workflows/test.yml", "label": "CI test workflow", "kind": "ci", "patterns": ["python"]}, - ], - "verification": "python3 scripts/yao.py python-compat .", - }, - "architecture-maintainability": { - "summary": "处理大文件和 CLI command surface 的维护性热点,优先拆分稳定职责边界。", - "why": "Meta Skill 的门禁、报告和 CLI 会持续增长;如果不把架构债纳入审查,后续能力会越来越难验证和迁移。", - "source_fix": "reports/architecture_maintainability.md + scripts/yao.py + scripts/render_review_viewer.py", - "source_paths": [ - {"path": "reports/architecture_maintainability.md", "label": "architecture maintainability", "kind": "report", "patterns": ["# Architecture"]}, - {"path": "scripts/yao.py", "label": "Yao CLI orchestrator", "kind": "source", "patterns": ["def command_"]}, - {"path": "scripts/render_review_studio.py", "label": "Review Studio renderer", "kind": "source", "patterns": ["ACTION_GUIDANCE"]}, - {"path": "scripts/render_review_viewer.py", "label": "review viewer renderer", "kind": "source", "patterns": ["def "]}, - ], - "verification": "python3 scripts/yao.py architecture-audit .", - }, - "permission-gates": { - "summary": "补齐高权限能力的 reviewer、scope、reason、expires_at 和目标端 enforcement 说明。", - "why": "权限契约只有在批准人、有效期和目标端处置方式明确时,才能支撑 governed release。", - "source_fix": "security/permission_policy.json + security/permission_policy.md", - "source_paths": [ - {"path": "security/permission_policy.json", "label": "permission approvals", "kind": "policy", "patterns": ["approved"]}, - {"path": "security/permission_policy.md", "label": "permission method", "kind": "policy", "patterns": ["# Permission"]}, - ], - "verification": "python3 scripts/trust_check.py .", - }, - "permission-runtime": { - "summary": "生成并修复目标包的 runtime permission probe 报告。", - "why": "目标端即使只能提供 metadata fallback,也必须明确 native enforcement 缺口、表示位置和 operator note。", - "source_fix": "dist/targets/*/adapter.json + reports/runtime_permission_probes.md", - "source_paths": [ - {"path": "reports/runtime_permission_probes.md", "label": "runtime permission probes", "kind": "report", "patterns": ["# Runtime"]}, - {"path": "dist/targets/openai/adapter.json", "label": "OpenAI adapter", "kind": "package", "patterns": ["target_permission_contract"]}, - {"path": "dist/targets/claude/adapter.json", "label": "Claude adapter", "kind": "package", "patterns": ["target_permission_contract"]}, - {"path": "dist/targets/generic/adapter.json", "label": "generic adapter", "kind": "package", "patterns": ["target_permission_contract"]}, - ], - "verification": "python3 scripts/probe_runtime_permissions.py . --package-dir dist", - }, - "skill-atlas": { - "summary": "处理 portfolio 里的路由冲突、owner 缺口、stale skill 和重复能力。", - "why": "单个 Skill 质量很高仍可能在团队 skill library 中被相邻 Skill 冲突削弱。", - "source_fix": "reports/skill_atlas.html + skill_atlas/catalog.json", - "source_paths": [ - {"path": "skill_atlas/catalog.json", "label": "skill atlas catalog", "kind": "atlas", "patterns": ["summary"]}, - {"path": "skill_atlas/policy.json", "label": "atlas scope policy", "kind": "policy", "patterns": ["scope"]}, - {"path": "reports/skill_atlas.html", "label": "skill atlas report", "kind": "report", "patterns": ["Skill Atlas"]}, - ], - "verification": "python3 scripts/build_skill_atlas.py --workspace-root .", - }, - "operations-loop": { - "summary": "记录 metadata-only 使用事件,或明确当前 release 缺少真实使用信号。", - "why": "没有运营回路时,reviewer 无法判断采用率、误触发、坏输出和 review overdue 的真实影响。", - "source_fix": "reports/adoption_drift_report.md", - "source_paths": [ - {"path": "reports/adoption_drift_report.md", "label": "adoption drift report", "kind": "report", "patterns": ["# Adoption"]}, - {"path": "references/telemetry-drift-method.md", "label": "telemetry method", "kind": "method", "patterns": ["# Telemetry"]}, - ], - "verification": "python3 scripts/render_adoption_drift_report.py . --record-event skill_activation --activation-type explicit --outcome accepted", - }, - "review-waivers": { - "summary": "对保留的 warning 写入 reviewer、理由、范围和到期时间,或修掉 warning。", - "why": "warning 可以被接受,但必须可审计、会过期,并且不能掩盖 blocker。", - "source_fix": "reports/review_waivers.md", - "source_paths": [ - {"path": "reports/review_waivers.md", "label": "waiver ledger", "kind": "report", "patterns": ["# Review"]}, - {"path": "references/review-waiver-method.md", "label": "waiver method", "kind": "method", "patterns": ["# Review"]}, - ], - "verification": "python3 scripts/render_review_waivers.py .", - }, - "world-class-evidence": { - "summary": "补齐 provider、真人盲评、原生权限执行和真实客户端遥测证据,或明确本次发布不声明 world-class 完成。", - "why": "世界级结论必须来自已接受的外部/人工证据;计划、metadata fallback、待评审和本地命令都不能替代完成证据。", - "source_fix": "reports/world_class_operator_runbook.html + reports/world_class_evidence_ledger.md + reports/world_class_evidence_intake.md + reports/world_class_submission_review.md", - "source_paths": [ - {"path": "reports/world_class_evidence_ledger.md", "label": "world-class evidence ledger", "kind": "report", "patterns": ["# World-Class Evidence Ledger"]}, - {"path": "reports/world_class_evidence_plan.md", "label": "world-class evidence plan", "kind": "report", "patterns": ["# World-Class Evidence Plan"]}, - {"path": "reports/world_class_evidence_intake.md", "label": "world-class evidence intake", "kind": "report", "patterns": ["# World-Class Evidence Intake"]}, - {"path": "reports/world_class_submission_review.md", "label": "world-class submission review", "kind": "report", "patterns": ["# World-Class Submission Review"]}, - {"path": "reports/world_class_claim_guard.md", "label": "world-class claim guard", "kind": "report", "patterns": ["# World-Class Claim Guard"]}, - {"path": "evidence/world_class/intake.schema.json", "label": "evidence intake schema", "kind": "schema", "patterns": ["Yao World-Class Evidence Intake"]}, - {"path": "evidence/world_class/templates/provider-holdout.intake.json", "label": "provider intake template", "kind": "template", "patterns": ["provider-holdout"]}, - {"path": "evidence/world_class/templates/human-adjudication.intake.json", "label": "human intake template", "kind": "template", "patterns": ["human-adjudication"]}, - {"path": "reports/skill_os2_audit.md", "label": "Skill OS 2.0 audit", "kind": "report", "patterns": ["# Skill OS"]}, - {"path": "reports/output_review_decisions.json", "label": "human review decisions", "kind": "report", "patterns": ["winner_variant"]}, - {"path": "reports/runtime_permission_probes.md", "label": "runtime permission probes", "kind": "report", "patterns": ["# Runtime"]}, - {"path": "reports/adoption_drift_report.md", "label": "adoption drift", "kind": "report", "patterns": ["# Adoption"]}, - ], - "verification": "python3 scripts/yao.py world-class-runbook . && python3 scripts/yao.py world-class-ledger . && python3 scripts/yao.py review-studio .", - }, - "registry-audit": { - "summary": "补齐 registry package metadata、checksum、license、owner、review cadence 和 install evidence。", - "why": "分发元数据不完整时,团队无法安全安装、升级或追溯包体来源。", - "source_fix": "registry/ + reports/registry_audit.md", - "source_paths": [ - {"path": "registry/packages/yao-meta-skill.json", "label": "registry package", "kind": "registry", "patterns": ["version"]}, - {"path": "reports/registry_audit.md", "label": "registry audit", "kind": "report", "patterns": ["# Registry"]}, - {"path": "reports/install_simulation.md", "label": "install simulation", "kind": "report", "patterns": ["# Install"]}, - ], - "verification": "python3 scripts/registry_audit.py .", - }, - "release-notes": { - "summary": "确认 promotion、upgrade diff、breaking changes、migration guide 和 known limitations。", - "why": "发布说明不完整会让使用者无法判断升级风险和迁移动作。", - "source_fix": "reports/upgrade_check.md + docs/migration-v2.md", - "source_paths": [ - {"path": "reports/upgrade_check.md", "label": "upgrade check", "kind": "report", "patterns": ["# Upgrade"]}, - {"path": "docs/migration-v2.md", "label": "migration guide", "kind": "docs", "patterns": ["# Migration"]}, - {"path": "reports/promotion_decisions.md", "label": "promotion decisions", "kind": "report", "patterns": ["# Promotion"]}, - ], - "verification": "python3 scripts/upgrade_check.py . --previous-package-json registry/examples/yao-meta-skill-1.0.0.json", - }, -} - - -def build_review_actions(gates: list[dict[str, str]], skill_dir: Path, output_html: Path) -> list[dict[str, Any]]: - actions: list[dict[str, Any]] = [] - for gate_item in gates: - if gate_item["status"] == "pass": - continue - guidance = ACTION_GUIDANCE.get( - gate_item["key"], - { - "summary": "打开证据报告,修复当前 gate 暴露的问题。", - "why": "该 gate 未通过,release reviewer 需要明确处置动作。", - "source_fix": gate_item.get("evidence", ""), - "source_paths": [], - "verification": "python3 scripts/render_review_studio.py .", - }, - ) - refs = source_refs(skill_dir, output_html, guidance.get("source_paths", [])) - actions.append( - { - "gate_key": gate_item["key"], - "label": gate_item["label"], - "status": gate_item["status"], - "priority": "blocker" if gate_item["status"] == "block" else "warning", - "summary": guidance["summary"], - "why": guidance["why"], - "source_fix": guidance["source_fix"], - "source_refs": refs, - "evidence": gate_item.get("evidence", ""), - "evidence_link": gate_item.get("link", ""), - "verification_command": guidance["verification"], - } - ) - return actions - - -def render_action_source_refs(refs: list[dict[str, Any]]) -> str: - if not refs: - return "

暂无结构化 source refs;请先打开证据报告。

" - items = [] - for ref in refs: - line_suffix = f":{ref['line']}" if ref.get("line") else "" - label = f"{ref['path']}{line_suffix}" - if ref.get("exists") and ref.get("link"): - path_html = f"{html.escape(label)}" - else: - path_html = f"{html.escape(label)} · missing" - items.append( - "
  • " - f"{path_html}" - f"{html.escape(ref.get('label', 'source'))} · {html.escape(ref.get('kind', 'source'))}" - "
  • " - ) - return "" - - -def render_review_actions(actions: list[dict[str, Any]]) -> str: - if not actions: - return "

    当前没有 blocker 或 warning。保持现有证据链即可。

    " - cards = [] - for item in actions: - link_html = f"打开证据" if item.get("evidence_link") else "" - source_refs_html = render_action_source_refs(item.get("source_refs", [])) - cards.append( - "
    " - f"
    {html.escape(status_label(item['status']))}

    {html.escape(item['label'])}

    " - f"

    {html.escape(item['summary'])}

    " - f"{html.escape(item['why'])}" - f"
    修复位置
    {html.escape(item['source_fix'])}
    " - f"
    验证命令
    {html.escape(item['verification_command'])}
    " - f"{source_refs_html}" - f"
    {html.escape(item['evidence'])} {link_html}
    " - "
    " - ) - return "".join(cards) - - def render_review_annotations_panel(annotations_report: dict[str, Any]) -> str: annotations = annotations_report.get("annotations", []) if isinstance(annotations_report, dict) else [] if not annotations: diff --git a/scripts/review_studio_actions.py b/scripts/review_studio_actions.py new file mode 100644 index 00000000..e7aa3ef4 --- /dev/null +++ b/scripts/review_studio_actions.py @@ -0,0 +1,324 @@ +import html +import os +from pathlib import Path +from typing import Any + +from review_studio_gates import status_label + + +SCRIPT_INTERFACE = "internal-module" +SCRIPT_INTERFACE_REASON = "Imported by render_review_studio.py to keep Review Studio action guidance and source refs out of HTML rendering." + + +def link_from(output_html: Path, target: Path) -> str: + return os.path.relpath(target.resolve(), output_html.parent.resolve()) + + +def find_line(path: Path, patterns: list[str] | None = None) -> int | None: + if not path.exists(): + return None + if not patterns: + return 1 + try: + lines = path.read_text(encoding="utf-8", errors="replace").splitlines() + except OSError: + return 1 + for pattern in patterns: + for index, line in enumerate(lines, start=1): + if pattern in line: + return index + return 1 + + +def source_refs( + skill_dir: Path, + output_html: Path, + specs: list[dict[str, Any]], +) -> list[dict[str, Any]]: + refs: list[dict[str, Any]] = [] + for spec in specs: + rel_path = str(spec.get("path", "")).strip() + if not rel_path: + continue + path = skill_dir / rel_path + exists = path.exists() + line = find_line(path, spec.get("patterns", [])) + refs.append( + { + "path": rel_path, + "label": str(spec.get("label", rel_path)), + "kind": str(spec.get("kind", "source")), + "line": line, + "exists": exists, + "link": link_from(output_html, path) if exists else "", + } + ) + return refs + + +ACTION_GUIDANCE: dict[str, dict[str, Any]] = { + "intent-canvas": { + "summary": "收紧真实任务、输入、输出、排除项和成功标准。", + "why": "低 intent confidence 会让后续 Skill IR、输出评测和 Review Studio 结论建立在模糊意图上。", + "source_fix": "reports/intent-dialogue.md + reports/intent-confidence.md", + "source_paths": [ + {"path": "reports/intent-dialogue.md", "label": "intent dialogue", "kind": "report", "patterns": ["# Intent"]}, + {"path": "reports/intent-confidence.md", "label": "intent confidence", "kind": "report", "patterns": ["# Intent"]}, + ], + "verification": "python3 scripts/yao.py intent-confidence .", + }, + "trigger-lab": { + "summary": "修正 route scorecard 中的误触发、漏触发或 ambiguous case。", + "why": "触发错误会让正确 Skill 失活,或让相邻 Skill 被错误调用。", + "source_fix": "SKILL.md frontmatter description + evals/*/trigger_cases.json", + "source_paths": [ + {"path": "SKILL.md", "label": "frontmatter description", "kind": "source", "patterns": ["description:"]}, + {"path": "evals/trigger_cases.json", "label": "trigger eval cases", "kind": "eval", "patterns": ["should_trigger"]}, + {"path": "reports/route_scorecard.md", "label": "route scorecard", "kind": "report", "patterns": ["# Route"]}, + ], + "verification": "python3 scripts/build_confusion_matrix.py", + }, + "output-lab": { + "summary": "补足 output eval 覆盖、execution evidence、blind A/B 和 reviewer adjudication。", + "why": "没有输出质量和人工盲评证据时,Skill 只能证明会触发,不能证明输出真的更好且经得起审查。", + "source_fix": "evals/output/cases.jsonl + reports/output_quality_scorecard.md + reports/output_review_kit.html + reports/output_review_adjudication.md", + "source_paths": [ + {"path": "evals/output/cases.jsonl", "label": "output eval cases", "kind": "eval", "patterns": ["case_id"]}, + {"path": "reports/output_quality_scorecard.md", "label": "output scorecard", "kind": "report", "patterns": ["# Output"]}, + {"path": "reports/output_execution_runs.md", "label": "output execution runs", "kind": "report", "patterns": ["# Output Execution"]}, + {"path": "reports/output_blind_review_pack.md", "label": "blind A/B review pack", "kind": "report", "patterns": ["# Output Blind"]}, + {"path": "reports/output_review_kit.html", "label": "reviewer cockpit", "kind": "report", "patterns": ["Output Review Kit", "Variant A"]}, + {"path": "reports/output_review_adjudication.md", "label": "review adjudication", "kind": "report", "patterns": ["# Output Review"]}, + ], + "verification": "python3 scripts/adjudicate_output_review.py --write-template && python3 scripts/yao.py output-review", + }, + "context-budget": { + "summary": "压缩或拆分高成本 deferred resources,保留最小可路由上下文。", + "why": "初始加载可以安全,但后续 references、scripts、evals 体量过大时,reviewer 仍需要看到维护和读取成本。", + "source_fix": "SKILL.md + references/ + scripts/ + evals/", + "source_paths": [ + {"path": "SKILL.md", "label": "entrypoint", "kind": "source", "patterns": ["# Yao Meta Skill"]}, + {"path": "reports/context_budget.md", "label": "context budget", "kind": "report", "patterns": ["# Context"]}, + {"path": "scripts/resource_boundary_check.py", "label": "resource boundary checker", "kind": "source", "patterns": ["DEFERRED_RESOURCE"]}, + {"path": "references/skill-engineering-method.md", "label": "skill engineering method", "kind": "method", "patterns": ["Design Principle"]}, + ], + "verification": "python3 scripts/render_context_reports.py", + }, + "runtime-matrix": { + "summary": "修复目标端结构、metadata、相对路径、fallback 或 adapter target 声明。", + "why": "runtime conformance 失败意味着包可能被目标客户端错误加载或静默降级。", + "source_fix": "agents/interface.yaml + reports/conformance_matrix.md", + "source_paths": [ + {"path": "agents/interface.yaml", "label": "portable interface", "kind": "source", "patterns": ["adapter_targets"]}, + {"path": "reports/conformance_matrix.md", "label": "conformance matrix", "kind": "report", "patterns": ["# Runtime"]}, + ], + "verification": "python3 scripts/run_conformance_suite.py .", + }, + "trust-report": { + "summary": "处理脚本 help surface、依赖 pin、network policy、secret 和权限声明。", + "why": "团队分发时,脚本和依赖是主要供应链风险面,warning 必须有明确处置。", + "source_fix": "reports/security_trust_report.md + security/*.md + scripts/", + "source_paths": [ + {"path": "reports/security_trust_report.md", "label": "trust report", "kind": "report", "patterns": ["# Security"]}, + {"path": "security/script_policy.md", "label": "script policy", "kind": "policy", "patterns": ["# Script"]}, + {"path": "security/network_policy.md", "label": "network policy", "kind": "policy", "patterns": ["# Network"]}, + ], + "verification": "python3 scripts/trust_check.py .", + }, + "python-compat": { + "summary": "修复 Python 3.11 语法兼容问题,尤其是 f-string 表达式内的反斜杠转义。", + "why": "目标运行环境可能仍停留在 Python 3.11,语法漂移会让 CLI、报告生成和 CI 在发布后直接失败。", + "source_fix": "reports/python_compatibility.md + scripts/*.py + tests/*.py", + "source_paths": [ + {"path": "reports/python_compatibility.md", "label": "Python compatibility", "kind": "report", "patterns": ["# Python"]}, + {"path": "scripts/python_compat_check.py", "label": "compatibility checker", "kind": "source", "patterns": ["SCRIPT_INTERFACE"]}, + {"path": ".github/workflows/test.yml", "label": "CI test workflow", "kind": "ci", "patterns": ["python"]}, + ], + "verification": "python3 scripts/yao.py python-compat .", + }, + "architecture-maintainability": { + "summary": "处理大文件和 CLI command surface 的维护性热点,优先拆分稳定职责边界。", + "why": "Meta Skill 的门禁、报告和 CLI 会持续增长;如果不把架构债纳入审查,后续能力会越来越难验证和迁移。", + "source_fix": "reports/architecture_maintainability.md + scripts/yao.py + scripts/render_review_studio.py", + "source_paths": [ + {"path": "reports/architecture_maintainability.md", "label": "architecture maintainability", "kind": "report", "patterns": ["# Architecture"]}, + {"path": "scripts/yao.py", "label": "Yao CLI orchestrator", "kind": "source", "patterns": ["def command_"]}, + {"path": "scripts/render_review_studio.py", "label": "Review Studio renderer", "kind": "source", "patterns": ["def render_html"]}, + {"path": "scripts/review_studio_actions.py", "label": "Review Studio actions", "kind": "source", "patterns": ["ACTION_GUIDANCE"]}, + {"path": "scripts/render_review_viewer.py", "label": "review viewer renderer", "kind": "source", "patterns": ["def "]}, + ], + "verification": "python3 scripts/yao.py architecture-audit .", + }, + "permission-gates": { + "summary": "补齐高权限能力的 reviewer、scope、reason、expires_at 和目标端 enforcement 说明。", + "why": "权限契约只有在批准人、有效期和目标端处置方式明确时,才能支撑 governed release。", + "source_fix": "security/permission_policy.json + security/permission_policy.md", + "source_paths": [ + {"path": "security/permission_policy.json", "label": "permission approvals", "kind": "policy", "patterns": ["approved"]}, + {"path": "security/permission_policy.md", "label": "permission method", "kind": "policy", "patterns": ["# Permission"]}, + ], + "verification": "python3 scripts/trust_check.py .", + }, + "permission-runtime": { + "summary": "生成并修复目标包的 runtime permission probe 报告。", + "why": "目标端即使只能提供 metadata fallback,也必须明确 native enforcement 缺口、表示位置和 operator note。", + "source_fix": "dist/targets/*/adapter.json + reports/runtime_permission_probes.md", + "source_paths": [ + {"path": "reports/runtime_permission_probes.md", "label": "runtime permission probes", "kind": "report", "patterns": ["# Runtime"]}, + {"path": "dist/targets/openai/adapter.json", "label": "OpenAI adapter", "kind": "package", "patterns": ["target_permission_contract"]}, + {"path": "dist/targets/claude/adapter.json", "label": "Claude adapter", "kind": "package", "patterns": ["target_permission_contract"]}, + {"path": "dist/targets/generic/adapter.json", "label": "generic adapter", "kind": "package", "patterns": ["target_permission_contract"]}, + ], + "verification": "python3 scripts/probe_runtime_permissions.py . --package-dir dist", + }, + "skill-atlas": { + "summary": "处理 portfolio 里的路由冲突、owner 缺口、stale skill 和重复能力。", + "why": "单个 Skill 质量很高仍可能在团队 skill library 中被相邻 Skill 冲突削弱。", + "source_fix": "reports/skill_atlas.html + skill_atlas/catalog.json", + "source_paths": [ + {"path": "skill_atlas/catalog.json", "label": "skill atlas catalog", "kind": "atlas", "patterns": ["summary"]}, + {"path": "skill_atlas/policy.json", "label": "atlas scope policy", "kind": "policy", "patterns": ["scope"]}, + {"path": "reports/skill_atlas.html", "label": "skill atlas report", "kind": "report", "patterns": ["Skill Atlas"]}, + ], + "verification": "python3 scripts/build_skill_atlas.py --workspace-root .", + }, + "operations-loop": { + "summary": "记录 metadata-only 使用事件,或明确当前 release 缺少真实使用信号。", + "why": "没有运营回路时,reviewer 无法判断采用率、误触发、坏输出和 review overdue 的真实影响。", + "source_fix": "reports/adoption_drift_report.md", + "source_paths": [ + {"path": "reports/adoption_drift_report.md", "label": "adoption drift report", "kind": "report", "patterns": ["# Adoption"]}, + {"path": "references/telemetry-drift-method.md", "label": "telemetry method", "kind": "method", "patterns": ["# Telemetry"]}, + ], + "verification": "python3 scripts/render_adoption_drift_report.py . --record-event skill_activation --activation-type explicit --outcome accepted", + }, + "review-waivers": { + "summary": "对保留的 warning 写入 reviewer、理由、范围和到期时间,或修掉 warning。", + "why": "warning 可以被接受,但必须可审计、会过期,并且不能掩盖 blocker。", + "source_fix": "reports/review_waivers.md", + "source_paths": [ + {"path": "reports/review_waivers.md", "label": "waiver ledger", "kind": "report", "patterns": ["# Review"]}, + {"path": "references/review-waiver-method.md", "label": "waiver method", "kind": "method", "patterns": ["# Review"]}, + ], + "verification": "python3 scripts/render_review_waivers.py .", + }, + "world-class-evidence": { + "summary": "补齐 provider、真人盲评、原生权限执行和真实客户端遥测证据,或明确本次发布不声明 world-class 完成。", + "why": "世界级结论必须来自已接受的外部/人工证据;计划、metadata fallback、待评审和本地命令都不能替代完成证据。", + "source_fix": "reports/world_class_operator_runbook.html + reports/world_class_evidence_ledger.md + reports/world_class_evidence_intake.md + reports/world_class_submission_review.md", + "source_paths": [ + {"path": "reports/world_class_evidence_ledger.md", "label": "world-class evidence ledger", "kind": "report", "patterns": ["# World-Class Evidence Ledger"]}, + {"path": "reports/world_class_evidence_plan.md", "label": "world-class evidence plan", "kind": "report", "patterns": ["# World-Class Evidence Plan"]}, + {"path": "reports/world_class_evidence_intake.md", "label": "world-class evidence intake", "kind": "report", "patterns": ["# World-Class Evidence Intake"]}, + {"path": "reports/world_class_submission_review.md", "label": "world-class submission review", "kind": "report", "patterns": ["# World-Class Submission Review"]}, + {"path": "reports/world_class_claim_guard.md", "label": "world-class claim guard", "kind": "report", "patterns": ["# World-Class Claim Guard"]}, + {"path": "evidence/world_class/intake.schema.json", "label": "evidence intake schema", "kind": "schema", "patterns": ["Yao World-Class Evidence Intake"]}, + {"path": "evidence/world_class/templates/provider-holdout.intake.json", "label": "provider intake template", "kind": "template", "patterns": ["provider-holdout"]}, + {"path": "evidence/world_class/templates/human-adjudication.intake.json", "label": "human intake template", "kind": "template", "patterns": ["human-adjudication"]}, + {"path": "reports/skill_os2_audit.md", "label": "Skill OS 2.0 audit", "kind": "report", "patterns": ["# Skill OS"]}, + {"path": "reports/output_review_decisions.json", "label": "human review decisions", "kind": "report", "patterns": ["winner_variant"]}, + {"path": "reports/runtime_permission_probes.md", "label": "runtime permission probes", "kind": "report", "patterns": ["# Runtime"]}, + {"path": "reports/adoption_drift_report.md", "label": "adoption drift", "kind": "report", "patterns": ["# Adoption"]}, + ], + "verification": "python3 scripts/yao.py world-class-runbook . && python3 scripts/yao.py world-class-ledger . && python3 scripts/yao.py review-studio .", + }, + "registry-audit": { + "summary": "补齐 registry package metadata、checksum、license、owner、review cadence 和 install evidence。", + "why": "分发元数据不完整时,团队无法安全安装、升级或追溯包体来源。", + "source_fix": "registry/ + reports/registry_audit.md", + "source_paths": [ + {"path": "registry/packages/yao-meta-skill.json", "label": "registry package", "kind": "registry", "patterns": ["version"]}, + {"path": "reports/registry_audit.md", "label": "registry audit", "kind": "report", "patterns": ["# Registry"]}, + {"path": "reports/install_simulation.md", "label": "install simulation", "kind": "report", "patterns": ["# Install"]}, + ], + "verification": "python3 scripts/registry_audit.py .", + }, + "release-notes": { + "summary": "确认 promotion、upgrade diff、breaking changes、migration guide 和 known limitations。", + "why": "发布说明不完整会让使用者无法判断升级风险和迁移动作。", + "source_fix": "reports/upgrade_check.md + docs/migration-v2.md", + "source_paths": [ + {"path": "reports/upgrade_check.md", "label": "upgrade check", "kind": "report", "patterns": ["# Upgrade"]}, + {"path": "docs/migration-v2.md", "label": "migration guide", "kind": "docs", "patterns": ["# Migration"]}, + {"path": "reports/promotion_decisions.md", "label": "promotion decisions", "kind": "report", "patterns": ["# Promotion"]}, + ], + "verification": "python3 scripts/upgrade_check.py . --previous-package-json registry/examples/yao-meta-skill-1.0.0.json", + }, +} + + +def build_review_actions(gates: list[dict[str, str]], skill_dir: Path, output_html: Path) -> list[dict[str, Any]]: + actions: list[dict[str, Any]] = [] + for gate_item in gates: + if gate_item["status"] == "pass": + continue + guidance = ACTION_GUIDANCE.get( + gate_item["key"], + { + "summary": "打开证据报告,修复当前 gate 暴露的问题。", + "why": "该 gate 未通过,release reviewer 需要明确处置动作。", + "source_fix": gate_item.get("evidence", ""), + "source_paths": [], + "verification": "python3 scripts/render_review_studio.py .", + }, + ) + refs = source_refs(skill_dir, output_html, guidance.get("source_paths", [])) + actions.append( + { + "gate_key": gate_item["key"], + "label": gate_item["label"], + "status": gate_item["status"], + "priority": "blocker" if gate_item["status"] == "block" else "warning", + "summary": guidance["summary"], + "why": guidance["why"], + "source_fix": guidance["source_fix"], + "source_refs": refs, + "evidence": gate_item.get("evidence", ""), + "evidence_link": gate_item.get("link", ""), + "verification_command": guidance["verification"], + } + ) + return actions + + +def render_action_source_refs(refs: list[dict[str, Any]]) -> str: + if not refs: + return "

    暂无结构化 source refs;请先打开证据报告。

    " + items = [] + for ref in refs: + line_suffix = f":{ref['line']}" if ref.get("line") else "" + label = f"{ref['path']}{line_suffix}" + if ref.get("exists") and ref.get("link"): + path_html = f"{html.escape(label)}" + else: + path_html = f"{html.escape(label)} · missing" + items.append( + "
  • " + f"{path_html}" + f"{html.escape(ref.get('label', 'source'))} · {html.escape(ref.get('kind', 'source'))}" + "
  • " + ) + return "" + + +def render_review_actions(actions: list[dict[str, Any]]) -> str: + if not actions: + return "

    当前没有 blocker 或 warning。保持现有证据链即可。

    " + cards = [] + for item in actions: + link_html = f"打开证据" if item.get("evidence_link") else "" + source_refs_html = render_action_source_refs(item.get("source_refs", [])) + cards.append( + "
    " + f"
    {html.escape(status_label(item['status']))}

    {html.escape(item['label'])}

    " + f"

    {html.escape(item['summary'])}

    " + f"{html.escape(item['why'])}" + f"
    修复位置
    {html.escape(item['source_fix'])}
    " + f"
    验证命令
    {html.escape(item['verification_command'])}
    " + f"{source_refs_html}" + f"
    {html.escape(item['evidence'])} {link_html}
    " + "
    " + ) + return "".join(cards) diff --git a/skill-ir/examples/yao-meta-skill.json b/skill-ir/examples/yao-meta-skill.json index 0ad372e9..8ff9b43a 100644 --- a/skill-ir/examples/yao-meta-skill.json +++ b/skill-ir/examples/yao-meta-skill.json @@ -171,6 +171,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", @@ -186,8 +187,7 @@ "scripts/simulate_install.py", "scripts/skill_report_charts.py", "scripts/skill_report_layout.py", - "scripts/skill_report_metrics.py", - "scripts/skill_report_model.py" + "scripts/skill_report_metrics.py" ], "assets": [ "templates/basic_skill.md.j2", diff --git a/skill_atlas/catalog.json b/skill_atlas/catalog.json index b1f21ea5..50324891 100644 --- a/skill_atlas/catalog.json +++ b/skill_atlas/catalog.json @@ -1,6 +1,6 @@ { "workspace_root": ".", - "generated_at": "2026-06-13", + "generated_at": "2026-06-14", "skills": [ { "name": "yao-meta-skill", @@ -83,6 +83,7 @@ "scripts/render_world_class_operator_runbook.py", "scripts/render_world_class_submission_review.py", "scripts/resource_boundary_check.py", + "scripts/review_studio_actions.py", "scripts/review_studio_data.py", "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", diff --git a/skill_atlas/stale_skills.json b/skill_atlas/stale_skills.json index 6602e829..a3919831 100644 --- a/skill_atlas/stale_skills.json +++ b/skill_atlas/stale_skills.json @@ -24,7 +24,7 @@ "name": "incident-command-governor", "path": "examples/governed-incident-command/generated-skill", "reason": "review overdue by cadence monthly", - "age_days": 74, + "age_days": 75, "allowed_days": 31, "actionable": false, "scope": "example" diff --git a/tests/verify_architecture_maintainability.py b/tests/verify_architecture_maintainability.py index 1eb9e582..137cb729 100644 --- a/tests/verify_architecture_maintainability.py +++ b/tests/verify_architecture_maintainability.py @@ -42,11 +42,17 @@ def main() -> None: assert payload["summary"]["blocker_count"] == 0, payload["summary"] assert 30 <= payload["summary"]["command_handler_count"] < 50, payload["summary"] assert payload["summary"]["largest_file_lines"] < 900, payload["summary"] - assert payload["largest_files"][0]["path"] == "scripts/render_review_studio.py", payload["largest_files"][0] - assert payload["largest_files"][0]["severity"] == "pass", payload["largest_files"][0] + assert all(item["severity"] == "pass" for item in payload["largest_files"]), payload["largest_files"] + renderer_lines = len((ROOT / "scripts" / "render_review_studio.py").read_text(encoding="utf-8").splitlines()) + action_module = (ROOT / "scripts" / "review_studio_actions.py").read_text(encoding="utf-8") + action_lines = len(action_module.splitlines()) + assert renderer_lines < 650, renderer_lines + assert action_lines < 450, action_lines + assert 'SCRIPT_INTERFACE = "internal-module"' in action_module, action_module[:400] hotspot_paths = {item["path"] for item in payload["hotspots"]} assert "scripts/yao.py" not in hotspot_paths, hotspot_paths assert "scripts/render_review_studio.py" not in hotspot_paths, hotspot_paths + assert "scripts/review_studio_actions.py" not in hotspot_paths, hotspot_paths assert "scripts/render_review_viewer.py" not in hotspot_paths, hotspot_paths assert output_json.exists(), output_json markdown = output_md.read_text(encoding="utf-8")
    路径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