From 9e0022ebd41cf05663186f263922674f1b6c0f9f Mon Sep 17 00:00:00 2001 From: yaojingang Date: Tue, 16 Jun 2026 05:35:24 +0800 Subject: [PATCH] Extract Review Studio SkillOps panels --- registry/index.json | 2 +- registry/packages/yao-meta-skill.json | 6 +-- reports/architecture_maintainability.json | 6 +-- reports/architecture_maintainability.md | 6 +-- reports/install_simulation.json | 2 +- reports/package_verification.json | 4 +- reports/package_verification.md | 2 +- reports/python_compatibility.json | 8 +++- reports/python_compatibility.md | 2 +- reports/registry_audit.json | 8 ++-- reports/registry_audit.md | 4 +- reports/security_trust_report.json | 30 +++++++++++--- reports/security_trust_report.md | 11 +++--- reports/skill-os-2-review.md | 6 +-- reports/skill_atlas.json | 1 + reports/skill_os2_audit.json | 4 +- reports/skill_os2_audit.md | 4 +- reports/skill_os2_coverage.json | 4 +- reports/skill_os2_coverage.md | 4 +- reports/upgrade_check.json | 4 +- scripts/render_review_studio.py | 39 ++---------------- scripts/review_studio_skillops.py | 48 +++++++++++++++++++++++ skill_atlas/catalog.json | 1 + 23 files changed, 124 insertions(+), 82 deletions(-) create mode 100644 scripts/review_studio_skillops.py diff --git a/registry/index.json b/registry/index.json index 7b796b4..f7781ca 100644 --- a/registry/index.json +++ b/registry/index.json @@ -16,7 +16,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "eccfa7712df8fbf24eaf9f678b9a611da305f5c98e0f7d12738469377853d6aa" + "package_sha256": "dc875f356573a393c274e3dbee59dc85c78687add384e1e4a193957a57233183" } ] } diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json index fa41e6d..da5592c 100644 --- a/registry/packages/yao-meta-skill.json +++ b/registry/packages/yao-meta-skill.json @@ -16,8 +16,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "eccfa7712df8fbf24eaf9f678b9a611da305f5c98e0f7d12738469377853d6aa", - "archive_sha256": "97caaa2c79ef6128500d2b5026f5d93fa96dab0c83e6d6594ad10b9f7d602af7" + "package_sha256": "dc875f356573a393c274e3dbee59dc85c78687add384e1e4a193957a57233183", + "archive_sha256": "7d597e2b1385e312d344995cb934549731a7378d0f146d77a93f08d68101b9e4" }, "compatibility": { "openai": "pass", @@ -48,7 +48,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "97caaa2c79ef6128500d2b5026f5d93fa96dab0c83e6d6594ad10b9f7d602af7", + "archive_sha256": "7d597e2b1385e312d344995cb934549731a7378d0f146d77a93f08d68101b9e4", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json index 6bbadb0..80c0c51 100644 --- a/reports/architecture_maintainability.json +++ b/reports/architecture_maintainability.json @@ -4,10 +4,10 @@ "generated_at": "2026-06-16", "skill_dir": ".", "summary": { - "python_file_count": 186, - "script_file_count": 117, + "python_file_count": 187, + "script_file_count": 118, "test_file_count": 69, - "internal_module_count": 35, + "internal_module_count": 36, "cli_script_count": 84, "command_handler_count": 67, "entrypoint_command_handler_count": 18, diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md index 705be93..55ce5cc 100644 --- a/reports/architecture_maintainability.md +++ b/reports/architecture_maintainability.md @@ -5,10 +5,10 @@ Generated at: `2026-06-16` ## Summary - decision: `pass` -- python files: `186` -- scripts: `117` +- python files: `187` +- scripts: `118` - tests: `69` -- internal modules: `35` +- internal modules: `36` - CLI scripts: `84` - Yao CLI command handlers: `67` - entrypoint command handlers: `18` diff --git a/reports/install_simulation.json b/reports/install_simulation.json index f46e867..d6b1fef 100644 --- a/reports/install_simulation.json +++ b/reports/install_simulation.json @@ -8,7 +8,7 @@ "installed_skill_dir": "dist/install-simulation/simulate-yao-meta-skill/yao-meta-skill", "summary": { "archive_present": true, - "archive_entry_count": 639, + "archive_entry_count": 640, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, diff --git a/reports/package_verification.json b/reports/package_verification.json index 20cc3aa..12d697c 100644 --- a/reports/package_verification.json +++ b/reports/package_verification.json @@ -8,8 +8,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "97caaa2c79ef6128500d2b5026f5d93fa96dab0c83e6d6594ad10b9f7d602af7", - "archive_entry_count": 639, + "archive_sha256": "7d597e2b1385e312d344995cb934549731a7378d0f146d77a93f08d68101b9e4", + "archive_entry_count": 640, "failure_count": 0, "warning_count": 0 }, diff --git a/reports/package_verification.md b/reports/package_verification.md index c6e74c3..4fd0f4c 100644 --- a/reports/package_verification.md +++ b/reports/package_verification.md @@ -4,7 +4,7 @@ - Package directory: `dist` - Targets: `4 / 4` adapters present - Archive present: `True` -- Archive SHA256: `97caaa2c79ef6128500d2b5026f5d93fa96dab0c83e6d6594ad10b9f7d602af7` +- Archive SHA256: `7d597e2b1385e312d344995cb934549731a7378d0f146d77a93f08d68101b9e4` - Failures: `0` - Warnings: `0` diff --git a/reports/python_compatibility.json b/reports/python_compatibility.json index 1520fd1..8c76469 100644 --- a/reports/python_compatibility.json +++ b/reports/python_compatibility.json @@ -5,7 +5,7 @@ "root": ".", "summary": { "target_python": "3.11", - "file_count": 189, + "file_count": 190, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -520,6 +520,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/review_studio_skillops.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/review_studio_waivers.py", "ok": true, diff --git a/reports/python_compatibility.md b/reports/python_compatibility.md index 32831e9..8f94f6b 100644 --- a/reports/python_compatibility.md +++ b/reports/python_compatibility.md @@ -6,7 +6,7 @@ Generated at: `2026-06-16` - decision: `pass` - target python: `3.11` -- files scanned: `189` +- files scanned: `190` - issues: `0` - syntax errors: `0` - f-string 3.11 violations: `0` diff --git a/reports/registry_audit.json b/reports/registry_audit.json index 8654aa0..223a872 100644 --- a/reports/registry_audit.json +++ b/reports/registry_audit.json @@ -21,8 +21,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "eccfa7712df8fbf24eaf9f678b9a611da305f5c98e0f7d12738469377853d6aa", - "archive_sha256": "97caaa2c79ef6128500d2b5026f5d93fa96dab0c83e6d6594ad10b9f7d602af7" + "package_sha256": "dc875f356573a393c274e3dbee59dc85c78687add384e1e4a193957a57233183", + "archive_sha256": "7d597e2b1385e312d344995cb934549731a7378d0f146d77a93f08d68101b9e4" }, "compatibility": { "openai": "pass", @@ -53,7 +53,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "97caaa2c79ef6128500d2b5026f5d93fa96dab0c83e6d6594ad10b9f7d602af7", + "archive_sha256": "7d597e2b1385e312d344995cb934549731a7378d0f146d77a93f08d68101b9e4", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -78,7 +78,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "eccfa7712df8fbf24eaf9f678b9a611da305f5c98e0f7d12738469377853d6aa" + "package_sha256": "dc875f356573a393c274e3dbee59dc85c78687add384e1e4a193957a57233183" } ] }, diff --git a/reports/registry_audit.md b/reports/registry_audit.md index 00e5543..02633d0 100644 --- a/reports/registry_audit.md +++ b/reports/registry_audit.md @@ -6,8 +6,8 @@ - Maturity: `governed` - Owner: `Yao Team` - License: `MIT` -- Package SHA256: `eccfa7712df8fbf24eaf9f678b9a611da305f5c98e0f7d12738469377853d6aa` -- Archive SHA256: `97caaa2c79ef6128500d2b5026f5d93fa96dab0c83e6d6594ad10b9f7d602af7` +- Package SHA256: `dc875f356573a393c274e3dbee59dc85c78687add384e1e4a193957a57233183` +- Archive SHA256: `7d597e2b1385e312d344995cb934549731a7378d0f146d77a93f08d68101b9e4` - Install simulated: `True` ## Compatibility diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json index 0120aea..7e3ab73 100644 --- a/reports/security_trust_report.json +++ b/reports/security_trust_report.json @@ -2,9 +2,9 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 205, - "script_count": 117, - "internal_module_count": 32, + "scanned_files": 206, + "script_count": 118, + "internal_module_count": 33, "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": 205, - "package_sha256": "eccfa7712df8fbf24eaf9f678b9a611da305f5c98e0f7d12738469377853d6aa" + "package_hash_file_count": 206, + "package_sha256": "dc875f356573a393c274e3dbee59dc85c78687add384e1e4a193957a57233183" }, "failures": [], "warnings": [], @@ -1166,6 +1166,20 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/review_studio_skillops.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by render_review_studio.py to keep SkillOps summary panels out of the main HTML renderer.", + "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_waivers.py", "interface": "internal-module", @@ -1719,7 +1733,7 @@ "checked_count": 85, "passed_count": 85, "failed_count": 0, - "skipped_count": 32, + "skipped_count": 33, "failed_scripts": [], "results": [ { @@ -2614,6 +2628,10 @@ "path": "scripts/review_studio_output_review.py", "reason": "internal module" }, + { + "path": "scripts/review_studio_skillops.py", + "reason": "internal module" + }, { "path": "scripts/review_studio_waivers.py", "reason": "internal module" diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md index 023c733..255a819 100644 --- a/reports/security_trust_report.md +++ b/reports/security_trust_report.md @@ -1,9 +1,9 @@ # Security Trust Report - OK: `True` -- Scanned files: `205` -- Scripts: `117` -- Internal script modules: `32` +- Scanned files: `206` +- Scripts: `118` +- Internal script modules: `33` - 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: `205` -- Package SHA256: `eccfa7712df8fbf24eaf9f678b9a611da305f5c98e0f7d12738469377853d6aa` +- Package hash files: `206` +- Package SHA256: `dc875f356573a393c274e3dbee59dc85c78687add384e1e4a193957a57233183` ## Failures @@ -142,6 +142,7 @@ | 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. | | scripts/review_studio_layout.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to keep Review Studio layout and CSS out of gate logic. | | scripts/review_studio_output_review.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to render output review checklist cards. | +| scripts/review_studio_skillops.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to keep SkillOps summary panels out of the main HTML renderer. | | scripts/review_studio_waivers.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to keep waiver candidate layout out of the main renderer. | | scripts/review_studio_world_class.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to render world-class evidence cards. | | scripts/review_viewer_data.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_viewer.py to assemble Review Viewer data before HTML rendering. | diff --git a/reports/skill-os-2-review.md b/reports/skill-os-2-review.md index 4d62880..4b4d72d 100644 --- a/reports/skill-os-2-review.md +++ b/reports/skill-os-2-review.md @@ -116,13 +116,13 @@ Next move: add real client or installer permission enforcement integration. | Output Eval | `5` cases, with-skill pass rate `100`, baseline pass rate `0`, with file-backed, near-neighbor, boundary coverage, `10` local command-runner execution runs, `0` recorded fixture runs, `0` provider model-executed runs in root release evidence, `10` estimated token counts, provider runner v0 available, `5` blind A/B review pairs, a generated `reports/output_review_decisions.json` template, `0 / 5` reviewer decisions pending, `0` answer keys revealed, and `5` pending answers hidden | | Runtime Conformance | `5 / 5` targets passing | | Target Compiler | `5 / 5` compiled target contracts generated for OpenAI, Claude, generic, Agent Skills compatible, and VS Code / Copilot outputs, including target permission contracts and target-native behavior contracts | -| Trust | `0` secret findings, `1` pinned dependency file, `32` declared internal modules, `3 / 3` network-capable scripts covered by bounded host policy, `85 / 85` CLI help smoke checks passing across `117` scripts, source-contract hash scope explicit | +| Trust | `0` secret findings, `1` pinned dependency file, `33` declared internal modules, `3 / 3` network-capable scripts covered by bounded host policy, `85 / 85` CLI help smoke checks passing across `118` scripts, source-contract hash scope explicit | | Permission Governance | `3 / 3` required high-permission capabilities approved, `0` missing, `0` invalid, `0` expired | | Runtime Permission Probes | `4 / 4` target adapters probed, `0` native-enforcement adapters, `4` explicit metadata fallbacks, `4` residual risks retained for reviewer visibility | | Skill Atlas | `12` scanned skills, `1` actionable root skill, `1` telemetry report, `0` actionable route collisions, `0` actionable owner gaps, `0` actionable stale skills, `0` actionable drift signals, `24` scoped non-actionable issue signals retained for visibility | | Registry Audit | package metadata generated with version, owner, license, source checksum, archive checksum, Skill IR provenance, and compatibility matrix | -| Package Verification | `4 / 4` target adapters present, archive verified, `639` zip entries, `0` failures, `0` warnings | -| Install Simulation | archive with `639` entries extracted into a local verification root, entrypoint/manifest/interface loaded, reports present, `4` adapters readable, `12` installer permission checks enforced, `0` permission failures, `0` failures, `0` warnings | +| Package Verification | `4 / 4` target adapters present, archive verified, `640` zip entries, `0` failures, `0` warnings | +| Install Simulation | archive with `640` entries extracted into a local verification root, entrypoint/manifest/interface loaded, reports present, `4` adapters readable, `12` installer permission checks enforced, `0` permission failures, `0` failures, `0` warnings | | Local Install Sync Preflight | `make sync-local-install` and `make sync-active-install` rebuild the package first, then sync only after install simulation passes with `12` enforced installer permission checks and `0` permission failures | | Upgrade Check | current package declares `minor` over the 1.0.0 baseline, recommended bump is `minor`, and release notes include added targets plus checksum changes | | Adoption Drift | `1` metadata-only review event, `1` adoption sample, adoption `100`, risk band `low`; optional `yao.py` CLI capture, external client `telemetry-emit`, `5` `telemetry-hooks` recipes, Browser/Chrome native messaging host, and validated external JSONL import are available but off by default for reproducible release evidence; raw `reports/telemetry_events.jsonl` is gitignored and blocked from zip packages | diff --git a/reports/skill_atlas.json b/reports/skill_atlas.json index ce7f462..63e7fa9 100644 --- a/reports/skill_atlas.json +++ b/reports/skill_atlas.json @@ -144,6 +144,7 @@ "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", "scripts/review_studio_output_review.py", + "scripts/review_studio_skillops.py", "scripts/review_studio_waivers.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", diff --git a/reports/skill_os2_audit.json b/reports/skill_os2_audit.json index 3545b19..d96b4d6 100644 --- a/reports/skill_os2_audit.json +++ b/reports/skill_os2_audit.json @@ -197,7 +197,7 @@ "key": "trust-security", "label": "Trust Security", "status": "pass", - "current": "secrets 0; scripts 117; help failures 0", + "current": "secrets 0; scripts 118; 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 639; install failures 0; permission failures 0", + "current": "zip entries 640; install failures 0; permission failures 0", "target": "Package metadata, archive checksum, package verification, and install simulation pass", "evidence": [ { diff --git a/reports/skill_os2_audit.md b/reports/skill_os2_audit.md index eedb999..e91fd44 100644 --- a/reports/skill_os2_audit.md +++ b/reports/skill_os2_audit.md @@ -23,11 +23,11 @@ Generated at: `2026-06-16` | 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 25; 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 117; 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 118; 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 639; 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 640; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | | Review Studio | pass | decision review; warnings 3; score 91 | One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations | Resolve human/external warning gates before claiming full release readiness. | | Telemetry Drift | pass | events 1; risk low; recipes 5 | Local-first metadata-only event contract, aggregate drift report, hook recipes, and import path | Keep raw JSONL out of distributed packages and use aggregate reports for Atlas. | | Native Client Telemetry | external-required | external source events 0; adoption samples 0 | A real Browser/Chrome/provider client sends production metadata events | Install a real client against the native host and import production metadata-only events. | diff --git a/reports/skill_os2_coverage.json b/reports/skill_os2_coverage.json index 7ebadab..94ee2a0 100644 --- a/reports/skill_os2_coverage.json +++ b/reports/skill_os2_coverage.json @@ -130,7 +130,7 @@ "label": "Trust Security", "status": "pass", "objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.", - "current": "117 scripts; secrets 0; help failures 0", + "current": "118 scripts; secrets 0; help failures 0", "command": "python3 scripts/yao.py trust .", "test": "python3 tests/verify_trust_check.py", "evidence": [ @@ -204,7 +204,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 639; install failures 0", + "current": "archive entries 640; install failures 0", "command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .", "test": "python3 tests/verify_registry_audit.py", "evidence": [ diff --git a/reports/skill_os2_coverage.md b/reports/skill_os2_coverage.md index 3ec611e..39f0d6e 100644 --- a/reports/skill_os2_coverage.md +++ b/reports/skill_os2_coverage.md @@ -26,9 +26,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` | 117 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` | +| Trust Security | `pass` | 118 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 639; 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 640; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | | Review Studio | `pass` | 16 gates; decision review; warnings 3 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` | | Telemetry Drift | `pass` | events 1; recipes 5; risk low | `python3 scripts/yao.py telemetry-hooks . && python3 scripts/yao.py adoption-drift .` | `python3 tests/verify_telemetry_hooks.py` | diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json index 0157e68..cd3920b 100644 --- a/reports/upgrade_check.json +++ b/reports/upgrade_check.json @@ -70,12 +70,12 @@ { "field": "archive_sha256", "from": "", - "to": "97caaa2c79ef6128500d2b5026f5d93fa96dab0c83e6d6594ad10b9f7d602af7" + "to": "7d597e2b1385e312d344995cb934549731a7378d0f146d77a93f08d68101b9e4" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "eccfa7712df8fbf24eaf9f678b9a611da305f5c98e0f7d12738469377853d6aa" + "to": "dc875f356573a393c274e3dbee59dc85c78687add384e1e4a193957a57233183" } ] }, diff --git a/scripts/render_review_studio.py b/scripts/render_review_studio.py index 3cdcc93..1e78932 100644 --- a/scripts/render_review_studio.py +++ b/scripts/render_review_studio.py @@ -11,6 +11,7 @@ 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 from review_studio_layout import render_review_nav, review_studio_css from review_studio_output_review import render_output_review_section +from review_studio_skillops import render_skillops_section from review_studio_waivers import render_waiver_candidates_panel from review_studio_world_class import render_world_class_evidence_entries, render_world_class_intake_checklist @@ -142,8 +143,6 @@ def render_html(report: dict[str, Any]) -> str: runtime_permissions_summary = report["data"]["runtime_permissions"].get("summary", {}) atlas_summary = report["data"]["atlas"].get("summary", {}) adoption_summary = report["data"]["adoption_drift"].get("summary", {}) - daily_skillops_summary = report["data"]["daily_skillops"].get("summary", {}) - weekly_curator_summary = report["data"]["weekly_curator"].get("summary", {}) waiver_summary = report["data"]["review_waivers"].get("summary", {}) world_class_ledger = report["data"].get("world_class_evidence_ledger", {}) world_class_summary = world_class_ledger.get("summary", {}) @@ -293,36 +292,7 @@ def render_html(report: dict[str, Any]) -> str: ["event_count", "adoption_rate", "missed_trigger_count", "bad_output_count", "risk_band"], "no adoption drift summary", ) - daily_skillops_panel = render_kv_grid( - daily_skillops_summary, - [ - "decision", - "proposal_count", - "approval_count", - "pending_review_count", - "release_lock_ready", - "public_world_class_ready", - "writes_source_files", - "auto_patch_enabled", - ], - "no daily SkillOps summary", - ) - weekly_curator_panel = render_kv_grid( - weekly_curator_summary, - [ - "decision", - "week_id", - "daily_report_count", - "unique_opportunity_count", - "ready_for_approval_review_count", - "proposal_review_count", - "top_score", - "release_lock_ready", - "writes_source_files", - "auto_patch_enabled", - ], - "no weekly curator summary", - ) + skillops_section_html = render_skillops_section(report["data"]) waiver_panel = render_kv_grid( waiver_summary, ["waiver_count", "active_count", "expired_count", "invalid_count", "covered_gate_count"], @@ -536,10 +506,7 @@ def render_html(report: dict[str, Any]) -> str:

漂移信号

{adoption_panel}
-
-

日常运维

{daily_skillops_panel}
-

周度队列

{weekly_curator_panel}
-
+ {skillops_section_html}

人工批准

diff --git a/scripts/review_studio_skillops.py b/scripts/review_studio_skillops.py new file mode 100644 index 0000000..4ebdc22 --- /dev/null +++ b/scripts/review_studio_skillops.py @@ -0,0 +1,48 @@ +from typing import Any + +from review_studio_formatting import render_kv_grid + + +SCRIPT_INTERFACE = "internal-module" +SCRIPT_INTERFACE_REASON = "Imported by render_review_studio.py to keep SkillOps summary panels out of the main HTML renderer." + + +def render_skillops_section(data: dict[str, Any]) -> str: + daily_summary = data["daily_skillops"].get("summary", {}) + weekly_summary = data["weekly_curator"].get("summary", {}) + daily_panel = render_kv_grid( + daily_summary, + [ + "decision", + "proposal_count", + "approval_count", + "pending_review_count", + "release_lock_ready", + "public_world_class_ready", + "writes_source_files", + "auto_patch_enabled", + ], + "no daily SkillOps summary", + ) + weekly_panel = render_kv_grid( + weekly_summary, + [ + "decision", + "week_id", + "daily_report_count", + "unique_opportunity_count", + "ready_for_approval_review_count", + "proposal_review_count", + "top_score", + "release_lock_ready", + "writes_source_files", + "auto_patch_enabled", + ], + "no weekly curator summary", + ) + return f""" +
+

日常运维

{daily_panel}
+

周度队列

{weekly_panel}
+
+""" diff --git a/skill_atlas/catalog.json b/skill_atlas/catalog.json index 4715627..de2a16e 100644 --- a/skill_atlas/catalog.json +++ b/skill_atlas/catalog.json @@ -100,6 +100,7 @@ "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", "scripts/review_studio_output_review.py", + "scripts/review_studio_skillops.py", "scripts/review_studio_waivers.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py",