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.05 targets in platform-neutral contract
Compiler5/5target contracts compiled from Skill IR
Output Delta100.05 cases; 1 file-backed
Exec Runs10command 10; model 0; recorded 0
Blind A/B5review pairs hide baseline vs with-skill labels
Review Kit0/5pending 5; answer key hidden
Review A/B0/5adjudication decisions; pending 5
Blueprint20/202.0 coverage; evidence pending 4
Runtime5/5target conformance pass rate
Perm Probe4/40 native; 4 installer-enforced
Trust095 scripts scanned; secrets found
Py Compat0157 files scanned for Python 3.11
Arch Debt0899 largest lines; 34 CLI handlers
Atlas512 scanned skills; route collisions
Driftlow1 metadata events; 0 missed triggers
Waivers00 gates covered; human risk decisions
Intake4/40 valid submissions; 0 invalid
Claim Guard073 public surfaces scanned
Notes0/00 open blocker annotations
Registry1.1.05 targets; MIT license
Archivepass574 zip entries; package verification
Installpass4 adapters; 12 permissions enforced; 0 permission failures
Upgrademinordeclared minor; 0 breaking changes
+ Skill IR2.0.05 targets in platform-neutral contract
Compiler5/5target contracts compiled from Skill IR
Output Delta100.05 cases; 1 file-backed
Exec Runs10command 10; model 0; recorded 0
Blind A/B5review pairs hide baseline vs with-skill labels
Review Kit0/5pending 5; answer key hidden
Review A/B0/5adjudication decisions; pending 5
Blueprint20/202.0 coverage; evidence pending 4
Runtime5/5target conformance pass rate
Perm Probe4/40 native; 4 installer-enforced
Trust096 scripts scanned; secrets found
Py Compat0158 files scanned for Python 3.11
Arch Debt0888 largest lines; 34 CLI handlers
Atlas512 scanned skills; route collisions
Driftlow1 metadata events; 0 missed triggers
Waivers00 gates covered; human risk decisions
Intake4/40 valid submissions; 0 invalid
Claim Guard073 public surfaces scanned
Notes0/00 open blocker annotations
Registry1.1.05 targets; MIT license
Archivepass575 zip entries; package verification
Installpass4 adapters; 12 permissions enforced; 0 permission failures
Upgrademinordeclared minor; 0 breaking changes
审查闸门
- 通过
意图画布
intent confidence 100/100; Intent is clear enough to package the first routeable version.
通过
触发实验
13 trigger cases; 0 misroutes; 0 ambiguous
关注
输出实验
5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5
关注
上下文
initial load 944/1000; deferred 381942/120000; top deferred scripts 334459; quality density 137.7
通过
运行矩阵
5 / 5 targets pass
通过
信任报告
0 secrets; 95 scripts; 3 network-capable scripts; 0 help smoke failures
通过
Python 兼容
Python 3.11; 157 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards
通过
架构维护
154 Python files; 0 hotspots; 0 blockers; largest 899 lines; 34 CLI handlers
通过
权限批准
3/3 permissions approved; gaps 0; required file_write, network, subprocess
通过
权限探针
4/4 targets probed; native 0; metadata fallback 4; installer 4; residual risks 4
通过
组合治理
12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues
通过
运营回路
1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low
关注
人工批准
0 active waivers; 2 warning gates still need reviewer decision
关注
世界证据
4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true
通过
注册审计
yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures
通过
发布路线
0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
+ 通过
意图画布
intent confidence 100/100; Intent is clear enough to package the first routeable version.
通过
触发实验
13 trigger cases; 0 misroutes; 0 ambiguous
关注
输出实验
5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5
关注
上下文
initial load 944/1000; deferred 382073/120000; top deferred scripts 334590; quality density 137.7
通过
运行矩阵
5 / 5 targets pass
通过
信任报告
0 secrets; 96 scripts; 3 network-capable scripts; 0 help smoke failures
通过
Python 兼容
Python 3.11; 158 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards
通过
架构维护
155 Python files; 0 hotspots; 0 blockers; largest 888 lines; 34 CLI handlers
通过
权限批准
3/3 permissions approved; gaps 0; required file_write, network, subprocess
通过
权限探针
4/4 targets probed; native 0; metadata fallback 4; installer 4; residual risks 4
通过
组合治理
12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues
通过
运营回路
1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low
关注
人工批准
0 active waivers; 2 warning gates still need reviewer decision
关注
世界证据
4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true
通过
注册审计
yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures
通过
发布路线
0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended
-
关注事项
- 输出实验5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5
- 上下文initial load 944/1000; deferred 381942/120000; top deferred scripts 334459; quality density 137.7
- 人工批准0 active waivers; 2 warning gates still need reviewer decision
- 世界证据4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true
+
关注事项
- 输出实验5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5
- 上下文initial load 944/1000; deferred 382073/120000; top deferred scripts 334590; quality density 137.7
- 人工批准0 active waivers; 2 warning gates still need reviewer decision
- 世界证据4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true
- 上下文
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.
-
资产分布图展示当前包体的文件和目录重心。
+
资产分布图展示当前包体的文件和目录重心。
| 路径Path | 作用Role | 类型Type |
| SKILL.md | Skill 入口文件Skill entrypoint | 文件file |
| README.md | 人类可读使用说明Human-readable usage guide | 文件file |
| agents/interface.yaml | 跨平台接口元数据Neutral interface metadata | 文件file |
| manifest.json | 生命周期与打包元数据Lifecycle and portability metadata | 文件file |
| references | 扩展指导与复用资料Extended guidance and reusable notes | 目录folder |
| scripts | 确定性脚本或本地工具Deterministic helpers or local tooling | 目录folder |
| evals | 触发与质量检查Trigger and quality checks | 目录folder |
| reports | 生成的证据与总结报告Generated evidence and overview artifacts | 目录folder |
diff --git a/reports/skill-overview.json b/reports/skill-overview.json
index 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""
-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""
- ""
- )
- 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""
+ ""
+ )
+ 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")