refactor: split review studio action guidance
This commit is contained in:
+2
-2
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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": [],
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 |
|
||||
|
||||
|
||||
@@ -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."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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`
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -434,17 +434,17 @@
|
||||
|
||||
<section>
|
||||
<h2>核心指标</h2>
|
||||
<div class="metrics"><article class='metric'><span>Skill IR</span><strong>2.0.0</strong><p>5 targets in platform-neutral contract</p></article><article class='metric'><span>Compiler</span><strong>5/5</strong><p>target contracts compiled from Skill IR</p></article><article class='metric'><span>Output Delta</span><strong>100.0</strong><p>5 cases; 1 file-backed</p></article><article class='metric'><span>Exec Runs</span><strong>10</strong><p>command 10; model 0; recorded 0</p></article><article class='metric'><span>Blind A/B</span><strong>5</strong><p>review pairs hide baseline vs with-skill labels</p></article><article class='metric'><span>Review Kit</span><strong>0/5</strong><p>pending 5; answer key hidden</p></article><article class='metric'><span>Review A/B</span><strong>0/5</strong><p>adjudication decisions; pending 5</p></article><article class='metric'><span>Blueprint</span><strong>20/20</strong><p>2.0 coverage; evidence pending 4</p></article><article class='metric'><span>Runtime</span><strong>5/5</strong><p>target conformance pass rate</p></article><article class='metric'><span>Perm Probe</span><strong>4/4</strong><p>0 native; 4 installer-enforced</p></article><article class='metric'><span>Trust</span><strong>0</strong><p>95 scripts scanned; secrets found</p></article><article class='metric'><span>Py Compat</span><strong>0</strong><p>157 files scanned for Python 3.11</p></article><article class='metric'><span>Arch Debt</span><strong>0</strong><p>899 largest lines; 34 CLI handlers</p></article><article class='metric'><span>Atlas</span><strong>5</strong><p>12 scanned skills; route collisions</p></article><article class='metric'><span>Drift</span><strong>low</strong><p>1 metadata events; 0 missed triggers</p></article><article class='metric'><span>Waivers</span><strong>0</strong><p>0 gates covered; human risk decisions</p></article><article class='metric'><span>Intake</span><strong>4/4</strong><p>0 valid submissions; 0 invalid</p></article><article class='metric'><span>Claim Guard</span><strong>0</strong><p>73 public surfaces scanned</p></article><article class='metric'><span>Notes</span><strong>0/0</strong><p>0 open blocker annotations</p></article><article class='metric'><span>Registry</span><strong>1.1.0</strong><p>5 targets; MIT license</p></article><article class='metric'><span>Archive</span><strong>pass</strong><p>574 zip entries; package verification</p></article><article class='metric'><span>Install</span><strong>pass</strong><p>4 adapters; 12 permissions enforced; 0 permission failures</p></article><article class='metric'><span>Upgrade</span><strong>minor</strong><p>declared minor; 0 breaking changes</p></article></div>
|
||||
<div class="metrics"><article class='metric'><span>Skill IR</span><strong>2.0.0</strong><p>5 targets in platform-neutral contract</p></article><article class='metric'><span>Compiler</span><strong>5/5</strong><p>target contracts compiled from Skill IR</p></article><article class='metric'><span>Output Delta</span><strong>100.0</strong><p>5 cases; 1 file-backed</p></article><article class='metric'><span>Exec Runs</span><strong>10</strong><p>command 10; model 0; recorded 0</p></article><article class='metric'><span>Blind A/B</span><strong>5</strong><p>review pairs hide baseline vs with-skill labels</p></article><article class='metric'><span>Review Kit</span><strong>0/5</strong><p>pending 5; answer key hidden</p></article><article class='metric'><span>Review A/B</span><strong>0/5</strong><p>adjudication decisions; pending 5</p></article><article class='metric'><span>Blueprint</span><strong>20/20</strong><p>2.0 coverage; evidence pending 4</p></article><article class='metric'><span>Runtime</span><strong>5/5</strong><p>target conformance pass rate</p></article><article class='metric'><span>Perm Probe</span><strong>4/4</strong><p>0 native; 4 installer-enforced</p></article><article class='metric'><span>Trust</span><strong>0</strong><p>96 scripts scanned; secrets found</p></article><article class='metric'><span>Py Compat</span><strong>0</strong><p>158 files scanned for Python 3.11</p></article><article class='metric'><span>Arch Debt</span><strong>0</strong><p>888 largest lines; 34 CLI handlers</p></article><article class='metric'><span>Atlas</span><strong>5</strong><p>12 scanned skills; route collisions</p></article><article class='metric'><span>Drift</span><strong>low</strong><p>1 metadata events; 0 missed triggers</p></article><article class='metric'><span>Waivers</span><strong>0</strong><p>0 gates covered; human risk decisions</p></article><article class='metric'><span>Intake</span><strong>4/4</strong><p>0 valid submissions; 0 invalid</p></article><article class='metric'><span>Claim Guard</span><strong>0</strong><p>73 public surfaces scanned</p></article><article class='metric'><span>Notes</span><strong>0/0</strong><p>0 open blocker annotations</p></article><article class='metric'><span>Registry</span><strong>1.1.0</strong><p>5 targets; MIT license</p></article><article class='metric'><span>Archive</span><strong>pass</strong><p>575 zip entries; package verification</p></article><article class='metric'><span>Install</span><strong>pass</strong><p>4 adapters; 12 permissions enforced; 0 permission failures</p></article><article class='metric'><span>Upgrade</span><strong>minor</strong><p>declared minor; 0 breaking changes</p></article></div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>审查闸门</h2>
|
||||
<div class="gates"><article class='gate pass'><div><span>通过</span><h3>意图画布</h3></div><p>intent confidence 100/100; Intent is clear enough to package the first routeable version.</p><footer>reports/intent-confidence.json <a href='intent-confidence.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>触发实验</h3></div><p>13 trigger cases; 0 misroutes; 0 ambiguous</p><footer>reports/route_scorecard.json <a href='route_scorecard.md'>证据</a></footer></article><article class='gate warn'><div><span>关注</span><h3>输出实验</h3></div><p>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</p><footer>reports/output_quality_scorecard.json <a href='output_quality_scorecard.md'>证据</a></footer></article><article class='gate warn'><div><span>关注</span><h3>上下文</h3></div><p>initial load 944/1000; deferred 381942/120000; top deferred scripts 334459; quality density 137.7</p><footer>reports/context_budget.json <a href='context_budget.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>运行矩阵</h3></div><p>5 / 5 targets pass</p><footer>reports/conformance_matrix.json <a href='conformance_matrix.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>信任报告</h3></div><p>0 secrets; 95 scripts; 3 network-capable scripts; 0 help smoke failures</p><footer>reports/security_trust_report.json <a href='security_trust_report.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>Python 兼容</h3></div><p>Python 3.11; 157 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards</p><footer>reports/python_compatibility.json <a href='python_compatibility.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>架构维护</h3></div><p>154 Python files; 0 hotspots; 0 blockers; largest 899 lines; 34 CLI handlers</p><footer>reports/architecture_maintainability.json <a href='architecture_maintainability.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>权限批准</h3></div><p>3/3 permissions approved; gaps 0; required file_write, network, subprocess</p><footer>reports/security_trust_report.json + security/permission_policy.json <a href='../security/permission_policy.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>权限探针</h3></div><p>4/4 targets probed; native 0; metadata fallback 4; installer 4; residual risks 4</p><footer>reports/runtime_permission_probes.json <a href='runtime_permission_probes.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>组合治理</h3></div><p>12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues</p><footer>reports/skill_atlas.json <a href='skill_atlas.html'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>运营回路</h3></div><p>1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low</p><footer>reports/adoption_drift_report.json <a href='adoption_drift_report.md'>证据</a></footer></article><article class='gate warn'><div><span>关注</span><h3>人工批准</h3></div><p>0 active waivers; 2 warning gates still need reviewer decision</p><footer>reports/review_waivers.json <a href='review_waivers.md'>证据</a></footer></article><article class='gate warn'><div><span>关注</span><h3>世界证据</h3></div><p>4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true</p><footer>reports/world_class_evidence_ledger.json <a href='world_class_evidence_ledger.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>注册审计</h3></div><p>yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures</p><footer>reports/registry_audit.json + reports/install_simulation.json <a href='registry_audit.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>发布路线</h3></div><p>0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended</p><footer>reports/promotion_decisions.json + reports/upgrade_check.json + docs/migration-v2.md <a href='promotion_decisions.md'>证据</a></footer></article></div>
|
||||
<div class="gates"><article class='gate pass'><div><span>通过</span><h3>意图画布</h3></div><p>intent confidence 100/100; Intent is clear enough to package the first routeable version.</p><footer>reports/intent-confidence.json <a href='intent-confidence.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>触发实验</h3></div><p>13 trigger cases; 0 misroutes; 0 ambiguous</p><footer>reports/route_scorecard.json <a href='route_scorecard.md'>证据</a></footer></article><article class='gate warn'><div><span>关注</span><h3>输出实验</h3></div><p>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</p><footer>reports/output_quality_scorecard.json <a href='output_quality_scorecard.md'>证据</a></footer></article><article class='gate warn'><div><span>关注</span><h3>上下文</h3></div><p>initial load 944/1000; deferred 382073/120000; top deferred scripts 334590; quality density 137.7</p><footer>reports/context_budget.json <a href='context_budget.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>运行矩阵</h3></div><p>5 / 5 targets pass</p><footer>reports/conformance_matrix.json <a href='conformance_matrix.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>信任报告</h3></div><p>0 secrets; 96 scripts; 3 network-capable scripts; 0 help smoke failures</p><footer>reports/security_trust_report.json <a href='security_trust_report.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>Python 兼容</h3></div><p>Python 3.11; 158 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards</p><footer>reports/python_compatibility.json <a href='python_compatibility.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>架构维护</h3></div><p>155 Python files; 0 hotspots; 0 blockers; largest 888 lines; 34 CLI handlers</p><footer>reports/architecture_maintainability.json <a href='architecture_maintainability.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>权限批准</h3></div><p>3/3 permissions approved; gaps 0; required file_write, network, subprocess</p><footer>reports/security_trust_report.json + security/permission_policy.json <a href='../security/permission_policy.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>权限探针</h3></div><p>4/4 targets probed; native 0; metadata fallback 4; installer 4; residual risks 4</p><footer>reports/runtime_permission_probes.json <a href='runtime_permission_probes.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>组合治理</h3></div><p>12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues</p><footer>reports/skill_atlas.json <a href='skill_atlas.html'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>运营回路</h3></div><p>1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low</p><footer>reports/adoption_drift_report.json <a href='adoption_drift_report.md'>证据</a></footer></article><article class='gate warn'><div><span>关注</span><h3>人工批准</h3></div><p>0 active waivers; 2 warning gates still need reviewer decision</p><footer>reports/review_waivers.json <a href='review_waivers.md'>证据</a></footer></article><article class='gate warn'><div><span>关注</span><h3>世界证据</h3></div><p>4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true</p><footer>reports/world_class_evidence_ledger.json <a href='world_class_evidence_ledger.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>注册审计</h3></div><p>yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures</p><footer>reports/registry_audit.json + reports/install_simulation.json <a href='registry_audit.md'>证据</a></footer></article><article class='gate pass'><div><span>通过</span><h3>发布路线</h3></div><p>0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended</p><footer>reports/promotion_decisions.json + reports/upgrade_check.json + docs/migration-v2.md <a href='promotion_decisions.md'>证据</a></footer></article></div>
|
||||
</section>
|
||||
|
||||
<div class="twocol">
|
||||
<section><h2>阻断事项</h2><p class='muted'>无。</p></section>
|
||||
<section><h2>关注事项</h2><ul class='issues'><li><strong>输出实验</strong><span>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</span></li><li><strong>上下文</strong><span>initial load 944/1000; deferred 381942/120000; top deferred scripts 334459; quality density 137.7</span></li><li><strong>人工批准</strong><span>0 active waivers; 2 warning gates still need reviewer decision</span></li><li><strong>世界证据</strong><span>4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true</span></li></ul></section>
|
||||
<section><h2>关注事项</h2><ul class='issues'><li><strong>输出实验</strong><span>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</span></li><li><strong>上下文</strong><span>initial load 944/1000; deferred 382073/120000; top deferred scripts 334590; quality density 137.7</span></li><li><strong>人工批准</strong><span>0 active waivers; 2 warning gates still need reviewer decision</span></li><li><strong>世界证据</strong><span>4 pending world-class evidence entries; 1 human pending; 3 external pending; overclaim guard true</span></li></ul></section>
|
||||
</div>
|
||||
|
||||
<section id="actions">
|
||||
@@ -501,17 +501,17 @@
|
||||
</section>
|
||||
|
||||
<section class="twocol">
|
||||
<div class="panel"><h2>上下文</h2><p>initial load 944/1000; deferred 381942/120000; top deferred scripts 334459; quality density 137.7</p></div>
|
||||
<div class="panel"><h2>上下文</h2><p>initial load 944/1000; deferred 382073/120000; top deferred scripts 334590; quality density 137.7</p></div>
|
||||
<div class="panel"><h2>编译证据</h2><p>Review reports/compiled_targets.md before packaging to inspect target adapter modes, generated files, preserved semantics, warnings, and unsupported features.</p></div>
|
||||
</section>
|
||||
|
||||
<section id="trust" class="twocol">
|
||||
<div class="panel"><h2>信任报告</h2><dl class='kv-grid'><div><dt>Secret</dt><dd>0</dd></div><div><dt>脚本数</dt><dd>95</dd></div><div><dt>网络脚本</dt><dd>3</dd></div><div><dt>Help 失败</dt><dd>0</dd></div><div><dt>包体哈希</dt><dd><code>2d237fe645ef197282d514782f3bd37025c00e4d7efda725145aa5c3af180ba5</code></dd></div></dl></div>
|
||||
<div class="panel"><h2>信任报告</h2><dl class='kv-grid'><div><dt>Secret</dt><dd>0</dd></div><div><dt>脚本数</dt><dd>96</dd></div><div><dt>网络脚本</dt><dd>3</dd></div><div><dt>Help 失败</dt><dd>0</dd></div><div><dt>包体哈希</dt><dd><code>0bfa15bdf8bc3feff98ee0e66dcdac3f0bc9565aede9c6c0ca139e6a07a9d102</code></dd></div></dl></div>
|
||||
<div class="panel"><h2>安全边界</h2><p>高风险 secret、远程 inline execution、缺失依赖策略或无法解释的脚本接口应阻断 governed release。</p></div>
|
||||
</section>
|
||||
|
||||
<section class="twocol">
|
||||
<div class="panel"><h2>Python 兼容</h2><dl class='kv-grid'><div><dt>目标 Python</dt><dd>3.11</dd></div><div><dt>文件数</dt><dd>157</dd></div><div><dt>问题数</dt><dd>0</dd></div><div><dt>语法错误</dt><dd>0</dd></div><div><dt>F-string 3.11</dt><dd>0</dd></div></dl></div>
|
||||
<div class="panel"><h2>Python 兼容</h2><dl class='kv-grid'><div><dt>目标 Python</dt><dd>3.11</dd></div><div><dt>文件数</dt><dd>158</dd></div><div><dt>问题数</dt><dd>0</dd></div><div><dt>语法错误</dt><dd>0</dd></div><div><dt>F-string 3.11</dt><dd>0</dd></div></dl></div>
|
||||
<div class="panel"><h2>解释器边界</h2><p>CI 和发布审查以 Python 3.11 兼容为底线;本地更高版本允许的新语法不能绕过兼容门禁。</p></div>
|
||||
</section>
|
||||
|
||||
@@ -574,12 +574,12 @@
|
||||
|
||||
<section id="registry" class="twocol">
|
||||
<div class="panel"><h2>注册审计</h2><p>yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures</p></div>
|
||||
<div class="panel"><h2>包体元数据</h2><dl class='kv-grid'><div><dt>名称</dt><dd>yao-meta-skill</dd></div><div><dt>版本</dt><dd>1.1.0</dd></div><div><dt>Maturity</dt><dd>governed</dd></div><div><dt>Owner</dt><dd>Yao Team</dd></div><div><dt>License</dt><dd>MIT</dd></div><div><dt>信任级别</dt><dd>local</dd></div><div><dt>目标平台</dt><dd>openai, claude, generic, agent-skills-compatible, vscode</dd></div><div><dt>兼容通过</dt><dd>6/6</dd></div><div><dt>归档哈希</dt><dd><code>76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe</code></dd></div></dl></div>
|
||||
<div class="panel"><h2>包体元数据</h2><dl class='kv-grid'><div><dt>名称</dt><dd>yao-meta-skill</dd></div><div><dt>版本</dt><dd>1.1.0</dd></div><div><dt>Maturity</dt><dd>governed</dd></div><div><dt>Owner</dt><dd>Yao Team</dd></div><div><dt>License</dt><dd>MIT</dd></div><div><dt>信任级别</dt><dd>local</dd></div><div><dt>目标平台</dt><dd>openai, claude, generic, agent-skills-compatible, vscode</dd></div><div><dt>兼容通过</dt><dd>6/6</dd></div><div><dt>归档哈希</dt><dd><code>05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7</code></dd></div></dl></div>
|
||||
</section>
|
||||
|
||||
<section id="release" class="twocol">
|
||||
<div class="panel"><h2>发布路线</h2><p>0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended</p></div>
|
||||
<div class="panel"><h2>包体验证</h2><dl class='kv-grid'><div><dt>目标数</dt><dd>4</dd></div><div><dt>Adapter</dt><dd>4</dd></div><div><dt>归档存在</dt><dd>是</dd></div><div><dt>Zip 条目</dt><dd>574</dd></div><div><dt>失败数</dt><dd>0</dd></div><div><dt>警告数</dt><dd>0</dd></div><div><dt>归档哈希</dt><dd><code>76793bd367e9aaf6c25e6b11ac1139156950827bd87ba3dd8a1bdc883f7d70fe</code></dd></div></dl></div>
|
||||
<div class="panel"><h2>包体验证</h2><dl class='kv-grid'><div><dt>目标数</dt><dd>4</dd></div><div><dt>Adapter</dt><dd>4</dd></div><div><dt>归档存在</dt><dd>是</dd></div><div><dt>Zip 条目</dt><dd>575</dd></div><div><dt>失败数</dt><dd>0</dd></div><div><dt>警告数</dt><dd>0</dd></div><div><dt>归档哈希</dt><dd><code>05019e918bf5d80388fc5be41e68b91f492ceeb64c96b9f0974a2de160b0bbf7</code></dd></div></dl></div>
|
||||
</section>
|
||||
|
||||
<section class="twocol">
|
||||
|
||||
+114
-89
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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. |
|
||||
|
||||
@@ -771,7 +771,7 @@
|
||||
<p><span data-lang="zh-CN">让 reviewer 快速确认关键文件、目录和资产分布。</span><span data-lang="en">Lets reviewers confirm key files, directories, and asset distribution quickly.</span></p>
|
||||
</div>
|
||||
<div class="two-col">
|
||||
<figure class="chart-figure" data-chart="asset_donut"><svg viewBox="0 0 430 270" role="img" aria-label="资产分布"><text x="20" y="30" class="chart-title">资产分布</text><circle cx="130" cy="130" r="70" fill="none" stroke="#1B365D" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="0.0" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#2D5A8A" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-0.8" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#D0DCE9" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-1.5" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#E4ECF5" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-2.3" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#e8e6dc" stroke-width="24" stroke-dasharray="24.4 75.6" stroke-dashoffset="-3.1" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#504e49" stroke-width="24" stroke-dasharray="72.5 27.5" stroke-dashoffset="-27.5" pathLength="100" transform="rotate(-90 130 130)"/><text x="130" y="136" text-anchor="middle">362项</text><text x="235" y="78">SKILL.md</text><text x="235" y="100">README.md</text><text x="235" y="122">agents/interface.yaml</text><text x="235" y="144">manifest.json</text><text x="235" y="166">references</text><text x="235" y="188">scripts</text></svg><figcaption>资产分布图展示当前包体的文件和目录重心。</figcaption></figure>
|
||||
<figure class="chart-figure" data-chart="asset_donut"><svg viewBox="0 0 430 270" role="img" aria-label="资产分布"><text x="20" y="30" class="chart-title">资产分布</text><circle cx="130" cy="130" r="70" fill="none" stroke="#1B365D" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="0.0" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#2D5A8A" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-0.8" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#D0DCE9" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-1.5" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#E4ECF5" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-2.3" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#e8e6dc" stroke-width="24" stroke-dasharray="24.2 75.8" stroke-dashoffset="-3.0" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#504e49" stroke-width="24" stroke-dasharray="72.7 27.3" stroke-dashoffset="-27.3" pathLength="100" transform="rotate(-90 130 130)"/><text x="130" y="136" text-anchor="middle">363项</text><text x="235" y="78">SKILL.md</text><text x="235" y="100">README.md</text><text x="235" y="122">agents/interface.yaml</text><text x="235" y="144">manifest.json</text><text x="235" y="166">references</text><text x="235" y="188">scripts</text></svg><figcaption>资产分布图展示当前包体的文件和目录重心。</figcaption></figure>
|
||||
<table>
|
||||
<thead><tr><th><span data-lang="zh-CN">路径</span><span data-lang="en">Path</span></th><th><span data-lang="zh-CN">作用</span><span data-lang="en">Role</span></th><th><span data-lang="zh-CN">类型</span><span data-lang="en">Type</span></th></tr></thead>
|
||||
<tbody><tr><td>SKILL.md</td><td><span data-lang="zh-CN">Skill 入口文件</span><span data-lang="en">Skill entrypoint</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>README.md</td><td><span data-lang="zh-CN">人类可读使用说明</span><span data-lang="en">Human-readable usage guide</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>agents/interface.yaml</td><td><span data-lang="zh-CN">跨平台接口元数据</span><span data-lang="en">Neutral interface metadata</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>manifest.json</td><td><span data-lang="zh-CN">生命周期与打包元数据</span><span data-lang="en">Lifecycle and portability metadata</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>references</td><td><span data-lang="zh-CN">扩展指导与复用资料</span><span data-lang="en">Extended guidance and reusable notes</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>scripts</td><td><span data-lang="zh-CN">确定性脚本或本地工具</span><span data-lang="en">Deterministic helpers or local tooling</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>evals</td><td><span data-lang="zh-CN">触发与质量检查</span><span data-lang="en">Trigger and quality checks</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>reports</td><td><span data-lang="zh-CN">生成的证据与总结报告</span><span data-lang="en">Generated evidence and overview artifacts</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr></tbody>
|
||||
|
||||
+18
-18
@@ -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"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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": [
|
||||
{
|
||||
|
||||
@@ -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. |
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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` |
|
||||
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"<section><h2>{html.escape(title)}</h2><ul class='issues'>{body}</ul></section>"
|
||||
|
||||
|
||||
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 "<p class='muted'>暂无结构化 source refs;请先打开证据报告。</p>"
|
||||
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"<a href='{html.escape(ref['link'])}'>{html.escape(label)}</a>"
|
||||
else:
|
||||
path_html = f"<span>{html.escape(label)} · missing</span>"
|
||||
items.append(
|
||||
"<li>"
|
||||
f"{path_html}"
|
||||
f"<small>{html.escape(ref.get('label', 'source'))} · {html.escape(ref.get('kind', 'source'))}</small>"
|
||||
"</li>"
|
||||
)
|
||||
return "<ul class='source-ref-list'>" + "".join(items) + "</ul>"
|
||||
|
||||
|
||||
def render_review_actions(actions: list[dict[str, Any]]) -> str:
|
||||
if not actions:
|
||||
return "<p class='muted'>当前没有 blocker 或 warning。保持现有证据链即可。</p>"
|
||||
cards = []
|
||||
for item in actions:
|
||||
link_html = f"<a href='{html.escape(item['evidence_link'])}'>打开证据</a>" if item.get("evidence_link") else ""
|
||||
source_refs_html = render_action_source_refs(item.get("source_refs", []))
|
||||
cards.append(
|
||||
"<article class='action-card "
|
||||
+ html.escape(item["status"])
|
||||
+ "'>"
|
||||
f"<div><span>{html.escape(status_label(item['status']))}</span><h3>{html.escape(item['label'])}</h3></div>"
|
||||
f"<p>{html.escape(item['summary'])}</p>"
|
||||
f"<small>{html.escape(item['why'])}</small>"
|
||||
f"<dl><dt>修复位置</dt><dd>{html.escape(item['source_fix'])}</dd>"
|
||||
f"<dt>验证命令</dt><dd><code>{html.escape(item['verification_command'])}</code></dd></dl>"
|
||||
f"{source_refs_html}"
|
||||
f"<footer>{html.escape(item['evidence'])} {link_html}</footer>"
|
||||
"</article>"
|
||||
)
|
||||
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:
|
||||
|
||||
@@ -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 "<p class='muted'>暂无结构化 source refs;请先打开证据报告。</p>"
|
||||
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"<a href='{html.escape(ref['link'])}'>{html.escape(label)}</a>"
|
||||
else:
|
||||
path_html = f"<span>{html.escape(label)} · missing</span>"
|
||||
items.append(
|
||||
"<li>"
|
||||
f"{path_html}"
|
||||
f"<small>{html.escape(ref.get('label', 'source'))} · {html.escape(ref.get('kind', 'source'))}</small>"
|
||||
"</li>"
|
||||
)
|
||||
return "<ul class='source-ref-list'>" + "".join(items) + "</ul>"
|
||||
|
||||
|
||||
def render_review_actions(actions: list[dict[str, Any]]) -> str:
|
||||
if not actions:
|
||||
return "<p class='muted'>当前没有 blocker 或 warning。保持现有证据链即可。</p>"
|
||||
cards = []
|
||||
for item in actions:
|
||||
link_html = f"<a href='{html.escape(item['evidence_link'])}'>打开证据</a>" if item.get("evidence_link") else ""
|
||||
source_refs_html = render_action_source_refs(item.get("source_refs", []))
|
||||
cards.append(
|
||||
"<article class='action-card "
|
||||
+ html.escape(item["status"])
|
||||
+ "'>"
|
||||
f"<div><span>{html.escape(status_label(item['status']))}</span><h3>{html.escape(item['label'])}</h3></div>"
|
||||
f"<p>{html.escape(item['summary'])}</p>"
|
||||
f"<small>{html.escape(item['why'])}</small>"
|
||||
f"<dl><dt>修复位置</dt><dd>{html.escape(item['source_fix'])}</dd>"
|
||||
f"<dt>验证命令</dt><dd><code>{html.escape(item['verification_command'])}</code></dd></dl>"
|
||||
f"{source_refs_html}"
|
||||
f"<footer>{html.escape(item['evidence'])} {link_html}</footer>"
|
||||
"</article>"
|
||||
)
|
||||
return "".join(cards)
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user