From cd71fd61e4d1c8db758ac0d2e9d1873a5a4ef547 Mon Sep 17 00:00:00 2001 From: yaojingang Date: Wed, 17 Jun 2026 05:17:41 +0800 Subject: [PATCH] Mirror review actions into gates --- registry/index.json | 2 +- registry/packages/yao-meta-skill.json | 2 +- reports/adaptation_proposals.json | 2 +- reports/adaptation_proposals.md | 2 +- reports/adoption_drift_report.json | 2 +- reports/architecture_maintainability.json | 32 ++- reports/architecture_maintainability.md | 11 +- reports/benchmark_reproducibility.json | 81 +++--- reports/benchmark_reproducibility.md | 31 ++- reports/context_budget.json | 12 +- reports/context_budget.md | 2 +- reports/context_budget_summary.json | 6 +- reports/evidence_consistency.json | 321 ++++++++++++++-------- reports/evidence_consistency.md | 5 +- reports/output_execution_runs.json | 20 +- reports/output_execution_runs.md | 20 +- reports/registry_audit.json | 4 +- reports/registry_audit.md | 2 +- reports/review-studio.html | 16 +- reports/review-studio.json | 314 +++++++++++++-------- reports/review-viewer.json | 24 +- reports/security_trust_report.json | 2 +- reports/security_trust_report.md | 2 +- reports/skill-interpretation.json | 24 +- reports/skill-overview.json | 24 +- reports/skill_os2_coverage.json | 2 +- reports/skill_os2_coverage.md | 2 +- reports/skillops/daily/2026-06-16.json | 2 +- reports/skillops/daily/2026-06-16.md | 2 +- reports/skillops/weekly/2026-W25.json | 8 +- reports/skillops/weekly/2026-W25.md | 4 +- reports/upgrade_check.json | 2 +- scripts/render_evidence_consistency.py | 67 +++++ scripts/render_review_studio.py | 7 + scripts/review_studio_actions.py | 1 + tests/verify_evidence_consistency.py | 46 ++++ tests/verify_review_studio.py | 12 + 37 files changed, 732 insertions(+), 386 deletions(-) diff --git a/registry/index.json b/registry/index.json index b2a05b72..0c1f75bb 100644 --- a/registry/index.json +++ b/registry/index.json @@ -16,7 +16,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] } diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json index 4b49c1dc..1bd53521 100644 --- a/registry/packages/yao-meta-skill.json +++ b/registry/packages/yao-meta-skill.json @@ -16,7 +16,7 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2" }, "compatibility": { diff --git a/reports/adaptation_proposals.json b/reports/adaptation_proposals.json index 594c30d5..36c406c8 100644 --- a/reports/adaptation_proposals.json +++ b/reports/adaptation_proposals.json @@ -1,7 +1,7 @@ { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-17", + "generated_at": "2026-06-16T21:16:12Z", "skill_dir": ".", "source_patterns": "reports/user_patterns.json", "pattern_count": 5, diff --git a/reports/adaptation_proposals.md b/reports/adaptation_proposals.md index 974c14dc..5f24466c 100644 --- a/reports/adaptation_proposals.md +++ b/reports/adaptation_proposals.md @@ -1,6 +1,6 @@ # Adaptation Proposals -- Generated at: `2026-06-17` +- Generated at: `2026-06-16T21:16:12Z` - Pattern report: `reports/user_patterns.json` - Proposal only: `true` - Writes repository files: `false` diff --git a/reports/adoption_drift_report.json b/reports/adoption_drift_report.json index 74c4c471..dea2e3c3 100644 --- a/reports/adoption_drift_report.json +++ b/reports/adoption_drift_report.json @@ -1,7 +1,7 @@ { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-16T21:09:51Z", + "generated_at": "2026-06-16T21:16:41Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json index ee9d7e09..cb436dde 100644 --- a/reports/architecture_maintainability.json +++ b/reports/architecture_maintainability.json @@ -18,7 +18,7 @@ "block_line_threshold": 1500, "largest_file_lines": 696, "watchlist_count": 0, - "early_watchlist_count": 3, + "early_watchlist_count": 4, "hotspot_count": 0, "blocker_count": 0, "decision": "pass" @@ -42,12 +42,20 @@ }, { "path": "tests/verify_evidence_consistency.py", - "lines": 625, + "lines": 671, "kind": "test", "severity": "pass", "early_watch": true, "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." }, + { + "path": "scripts/render_evidence_consistency.py", + "lines": 647, + "kind": "cli-script", + "severity": "pass", + "early_watch": true, + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, { "path": "tests/verify_output_review_adjudication.py", "lines": 599, @@ -88,14 +96,6 @@ "early_watch": false, "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." }, - { - "path": "scripts/render_evidence_consistency.py", - "lines": 580, - "kind": "cli-script", - "severity": "pass", - "early_watch": false, - "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." - }, { "path": "tests/verify_world_class_evidence_ledger.py", "lines": 579, @@ -114,7 +114,7 @@ }, { "path": "scripts/render_review_studio.py", - "lines": 568, + "lines": 575, "kind": "cli-script", "severity": "pass", "early_watch": false, @@ -141,11 +141,19 @@ }, { "path": "tests/verify_evidence_consistency.py", - "lines": 625, + "lines": 671, "kind": "test", "severity": "pass", "early_watch": true, "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." + }, + { + "path": "scripts/render_evidence_consistency.py", + "lines": 647, + "kind": "cli-script", + "severity": "pass", + "early_watch": true, + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." } ], "hotspots": [], diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md index 0f897b36..3d556db8 100644 --- a/reports/architecture_maintainability.md +++ b/reports/architecture_maintainability.md @@ -15,7 +15,7 @@ Generated at: `2026-06-13` - command modules: `6` - largest file lines: `696` - early watch threshold lines: `600` -- early watchlist: `3` +- early watchlist: `4` - watch threshold lines: `720` - watchlist: `0` - hotspots: `0` @@ -37,7 +37,8 @@ No near-threshold files found. | --- | ---: | --- | --- | | `tests/verify_yao_cli.py` | `696` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. | | `tests/verify_world_class_evidence_intake.py` | `690` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. | -| `tests/verify_evidence_consistency.py` | `625` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. | +| `tests/verify_evidence_consistency.py` | `671` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. | +| `scripts/render_evidence_consistency.py` | `647` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. | ## Largest Files @@ -45,16 +46,16 @@ No near-threshold files found. | --- | ---: | --- | --- | | `tests/verify_yao_cli.py` | `696` | `test` | `pass` | | `tests/verify_world_class_evidence_intake.py` | `690` | `test` | `pass` | -| `tests/verify_evidence_consistency.py` | `625` | `test` | `pass` | +| `tests/verify_evidence_consistency.py` | `671` | `test` | `pass` | +| `scripts/render_evidence_consistency.py` | `647` | `cli-script` | `pass` | | `tests/verify_output_review_adjudication.py` | `599` | `test` | `pass` | | `scripts/render_skill_overview.py` | `588` | `cli-script` | `pass` | | `scripts/build_skill_atlas.py` | `586` | `cli-script` | `pass` | | `scripts/optimize_description.py` | `585` | `cli-script` | `pass` | | `scripts/trust_check.py` | `582` | `cli-script` | `pass` | -| `scripts/render_evidence_consistency.py` | `580` | `cli-script` | `pass` | | `tests/verify_world_class_evidence_ledger.py` | `579` | `test` | `pass` | | `scripts/world_class_submission_kit_rendering.py` | `576` | `internal-module` | `pass` | -| `scripts/render_review_studio.py` | `568` | `cli-script` | `pass` | +| `scripts/render_review_studio.py` | `575` | `cli-script` | `pass` | ## Release Rule diff --git a/reports/benchmark_reproducibility.json b/reports/benchmark_reproducibility.json index 4d5b29be..2879b3e9 100644 --- a/reports/benchmark_reproducibility.json +++ b/reports/benchmark_reproducibility.json @@ -3,43 +3,49 @@ "ok": true, "generated_at": "2026-06-17", "skill_dir": ".", - "commit": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "commit": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "git_status": { "available": true, "dirty": true, - "changed_file_count": 13, + "changed_file_count": 39, "generated_dirty": true, - "generated_changed_file_count": 13, - "source_dirty": false, - "source_changed_file_count": 0, + "generated_changed_file_count": 34, + "source_dirty": true, + "source_changed_file_count": 5, "sample": [ + " M registry/index.json", + " M registry/packages/yao-meta-skill.json", " M reports/adaptation_proposals.json", " M reports/adaptation_proposals.md", + " M reports/adoption_drift_report.json", + " M reports/architecture_maintainability.json", + " M reports/architecture_maintainability.md", " M reports/benchmark_reproducibility.json", " M reports/benchmark_reproducibility.md", " M reports/context_budget.json", - " M reports/evidence_consistency.json", - " M reports/review-studio.html", - " M reports/review-studio.json", - " M reports/review-viewer.json", - " M reports/skill-interpretation.json", - " M reports/skill-overview.json", - " M reports/skillops/weekly/2026-W25.json" + " M reports/context_budget.md", + " M reports/context_budget_summary.json" + ], + "source_sample": [ + " M scripts/render_evidence_consistency.py", + " M scripts/render_review_studio.py", + " M scripts/review_studio_actions.py", + " M tests/verify_evidence_consistency.py", + " M tests/verify_review_studio.py" ], - "source_sample": [], "generated_sample": [ + " M registry/index.json", + " M registry/packages/yao-meta-skill.json", " M reports/adaptation_proposals.json", " M reports/adaptation_proposals.md", + " M reports/adoption_drift_report.json", + " M reports/architecture_maintainability.json", + " M reports/architecture_maintainability.md", " M reports/benchmark_reproducibility.json", " M reports/benchmark_reproducibility.md", " M reports/context_budget.json", - " M reports/evidence_consistency.json", - " M reports/review-studio.html", - " M reports/review-studio.json", - " M reports/review-viewer.json", - " M reports/skill-interpretation.json", - " M reports/skill-overview.json", - " M reports/skillops/weekly/2026-W25.json" + " M reports/context_budget.md", + " M reports/context_budget_summary.json" ], "generated_dirty_prefixes": [ "dist/", @@ -53,12 +59,12 @@ }, "summary": { "reproducibility_ready": true, - "release_lock_ready": true, + "release_lock_ready": false, "methodology_complete": true, "required_artifact_count": 25, "missing_artifact_count": 0, - "evidence_bundle_sha256": "48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb", - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "evidence_bundle_sha256": "c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "output_case_count": 5, "failure_disclosure_count": 3, @@ -77,18 +83,19 @@ "world_class_source_pass_count": 10, "world_class_source_blocked_count": 9, "public_claim_ready": false, - "public_claim_blocker_count": 4, + "public_claim_blocker_count": 5, "working_tree_dirty": true, - "changed_file_count": 13, - "source_tree_dirty": false, - "source_changed_file_count": 0, + "changed_file_count": 39, + "source_tree_dirty": true, + "source_changed_file_count": 5, "generated_tree_dirty": true, - "generated_changed_file_count": 13 + "generated_changed_file_count": 34 }, "public_claim": { "ready": false, "scope": "public benchmark or world-class readiness claim", "blockers": [ + "release lock is not clean or commit is unavailable", "provider-backed model holdout evidence is incomplete", "human blind-review adjudication is incomplete", "world-class evidence is not accepted yet (4 open gaps, 4 ledger pending)", @@ -97,12 +104,12 @@ "policy": "Local reproducibility can pass before public claims; public claims require provider evidence, human adjudication, clean release lock, accepted world-class evidence, and complete source checks." }, "release_lock": { - "ready": true, - "commit": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "ready": false, + "commit": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "status_scope": "generation-time status before this report is written", - "source_changed_file_count": 0, - "generated_changed_file_count": 13, - "reason": "only generated evidence artifacts were dirty at generation time" + "source_changed_file_count": 5, + "generated_changed_file_count": 34, + "reason": "source files were dirty at generation time" }, "evidence_bundle": { "algorithm": "sha256(path,label,exists,artifact_sha256)", @@ -110,7 +117,7 @@ "existing_count": 25, "missing_count": 0, "missing_paths": [], - "sha256": "48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb" + "sha256": "c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce" }, "methodology": { "path": "reports/benchmark_methodology.md", @@ -184,7 +191,7 @@ "path": "reports/output_execution_runs.json", "exists": true, "bytes": 7966, - "sha256": "7795806f55493c49185de218e3a40ef065be44aee0674ffe397c3debf41a278d" + "sha256": "9d1dbd75c98b75a63c4c7e3ae4175274a9d54e33fd1ca73561deb4dbc0b315ed" }, { "label": "blind_review", @@ -219,7 +226,7 @@ "path": "reports/security_trust_report.json", "exists": true, "bytes": 136999, - "sha256": "e3bee7ca1d834b40432038b803311412613762086f35baa82a7fcf8545837213" + "sha256": "079165fefd9fb3e5c25c1c486738e21bff2a59ca52b03dae9d505d6896341bf1" }, { "label": "python_compatibility", @@ -233,7 +240,7 @@ "path": "reports/registry_audit.json", "exists": true, "bytes": 3183, - "sha256": "b4ecfad8408c2b1a00fe855cdebd71678bb5efbd5493d06fd01a64f6c4eb0800" + "sha256": "db05339565be76ece69a89ba4b84dc3af44c711dc68860cbf319b86766d44541" }, { "label": "package_verification", diff --git a/reports/benchmark_reproducibility.md b/reports/benchmark_reproducibility.md index b9a7433c..f90784e3 100644 --- a/reports/benchmark_reproducibility.md +++ b/reports/benchmark_reproducibility.md @@ -1,20 +1,20 @@ # Benchmark Reproducibility Generated at: `2026-06-17` -Commit: `4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f` +Commit: `7050664b482a8ed9ff8d763f08800902fdf1f02d` Working tree dirty at generation: `true` -Source tree dirty at generation: `false` +Source tree dirty at generation: `true` Generated evidence dirty at generation: `true` -Evidence bundle SHA256: `48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb` +Evidence bundle SHA256: `c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce` ## Summary - reproducibility ready: `true` -- release lock ready: `true` +- release lock ready: `false` - methodology complete: `true` - required artifacts: `25` - missing artifacts: `0` -- source contract sha256: `f57c75f37b2b` +- source contract sha256: `a7c24fc193a5` - archive sha256: `7db44f059844` - output cases: `5` - disclosed failure cases: `3` @@ -24,10 +24,10 @@ Evidence bundle SHA256: `48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb7930 - world-class ready: `false` - world-class source checks: `10` pass / `19` total; `9` blocked - public claim ready: `false` -- public claim blockers: `4` -- changed files at generation: `13` -- source changed files at generation: `0` -- generated changed files at generation: `13` +- public claim blockers: `5` +- changed files at generation: `39` +- source changed files at generation: `5` +- generated changed files at generation: `34` This report proves local benchmark reproducibility only. It keeps external provider and human-review gaps visible instead of counting them as complete. The git commit and dirty samples are generation-time context; the evidence bundle SHA is the durable anchor for the artifacts listed below. @@ -39,6 +39,7 @@ This report proves local benchmark reproducibility only. It keeps external provi | Blocker | | --- | +| release lock is not clean or commit is unavailable | | provider-backed model holdout evidence is incomplete | | human blind-review adjudication is incomplete | | world-class evidence is not accepted yet (4 open gaps, 4 ledger pending) | @@ -46,15 +47,15 @@ This report proves local benchmark reproducibility only. It keeps external provi ## Release Lock -- ready: `true` -- reason: only generated evidence artifacts were dirty at generation time +- ready: `false` +- reason: source files were dirty at generation time - status scope: generation-time status before this report is written ## Evidence Bundle - algorithm: `sha256(path,label,exists,artifact_sha256)` - artifacts: `25` / `25` -- sha256: `48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb` +- sha256: `c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce` ## Methodology Sections @@ -76,14 +77,14 @@ This report proves local benchmark reproducibility only. It keeps external provi | output_cases | `evals/output/cases.jsonl` | present | `a6ae96857116` | | output_schema | `evals/output/schema.json` | present | `8ee340c95064` | | output_scorecard | `reports/output_quality_scorecard.json` | present | `0806258a8e08` | -| output_execution | `reports/output_execution_runs.json` | present | `7795806f5549` | +| output_execution | `reports/output_execution_runs.json` | present | `9d1dbd75c98b` | | blind_review | `reports/output_blind_review_pack.json` | present | `bbe2db8ec277` | | review_adjudication | `reports/output_review_adjudication.json` | present | `91fd88dd9b0f` | | trigger_scorecard | `reports/route_scorecard.json` | present | `c164e83e36d0` | | runtime_conformance | `reports/conformance_matrix.json` | present | `97f9ba949c23` | -| trust_report | `reports/security_trust_report.json` | present | `e3bee7ca1d83` | +| trust_report | `reports/security_trust_report.json` | present | `079165fefd9f` | | python_compatibility | `reports/python_compatibility.json` | present | `cb95afb7d7cc` | -| registry_audit | `reports/registry_audit.json` | present | `b4ecfad8408c` | +| registry_audit | `reports/registry_audit.json` | present | `db05339565be` | | package_verification | `reports/package_verification.json` | present | `7aa6c25e8154` | | install_simulation | `reports/install_simulation.json` | present | `d2bea19ea46f` | | skill_os2_audit | `reports/skill_os2_audit.json` | present | `ad57230481ed` | diff --git a/reports/context_budget.json b/reports/context_budget.json index 05d20664..72a41466 100644 --- a/reports/context_budget.json +++ b/reports/context_budget.json @@ -6,15 +6,15 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 797, - "other_text_tokens": 1137373, + "other_text_tokens": 1139278, "estimated_initial_load_tokens": 990, - "estimated_total_text_tokens": 1138170, - "deferred_resource_tokens": 514654, + "estimated_total_text_tokens": 1140075, + "deferred_resource_tokens": 515669, "deferred_resource_warn_threshold": 120000, "deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 453351, + "estimated_tokens": 454366, "file_count": 152 }, { @@ -36,7 +36,7 @@ "large_deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 453351, + "estimated_tokens": 454366, "file_count": 152 } ], @@ -59,7 +59,7 @@ ], "missing": [], "path": "scripts", - "estimated_tokens": 453351, + "estimated_tokens": 454366, "file_count": 152, "rationale": "Script resources are deterministic deferred tools, not initial-load prompt context." } diff --git a/reports/context_budget.md b/reports/context_budget.md index bc27ffba..203fbc58 100644 --- a/reports/context_budget.md +++ b/reports/context_budget.md @@ -2,7 +2,7 @@ | Target | Path | Tier | Limit | Initial | SKILL | Deferred | Resource Governance | Large Deferred Dirs | Quality Density | Unused Dirs | Status | | --- | --- | --- | ---: | ---: | ---: | ---: | --- | --- | ---: | --- | --- | -| root | `.` | `production` | 1000 | 990 | 797 | 514654 | `governed` | scripts:453351 | 131.3 | - | ok | +| root | `.` | `production` | 1000 | 990 | 797 | 515669 | `governed` | scripts:454366 | 131.3 | - | ok | | complex-release-orchestrator | `examples/complex-release-orchestrator/generated-skill` | `production` | 1000 | 790 | 718 | 1657 | `not-required` | - | 164.6 | - | ok | | governed-incident-command | `examples/governed-incident-command/generated-skill` | `production` | 1000 | 760 | 658 | 1030 | `not-required` | - | 171.1 | - | ok | diff --git a/reports/context_budget_summary.json b/reports/context_budget_summary.json index 7b65ade6..ae7fb694 100644 --- a/reports/context_budget_summary.json +++ b/reports/context_budget_summary.json @@ -8,11 +8,11 @@ "budget_limit": 1000, "initial_tokens": 990, "skill_body_tokens": 797, - "deferred_resource_tokens": 514654, + "deferred_resource_tokens": 515669, "large_deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 453351, + "estimated_tokens": 454366, "file_count": 152 } ], @@ -35,7 +35,7 @@ ], "missing": [], "path": "scripts", - "estimated_tokens": 453351, + "estimated_tokens": 454366, "file_count": 152, "rationale": "Script resources are deterministic deferred tools, not initial-load prompt context." } diff --git a/reports/evidence_consistency.json b/reports/evidence_consistency.json index b3c2aacb..772c7a7a 100644 --- a/reports/evidence_consistency.json +++ b/reports/evidence_consistency.json @@ -4,14 +4,14 @@ "generated_at": "2026-06-17", "skill_dir": ".", "summary": { - "check_count": 37, - "pass_count": 37, + "check_count": 38, + "pass_count": 38, "warn_count": 0, "fail_count": 0, "decision": "consistent" }, "status_counts": { - "pass": 37, + "pass": 38, "warn": 0, "fail": 0 }, @@ -183,18 +183,117 @@ ], "detail": "Release refresh and clean-lock instructions must regenerate every first-class report before evidence consistency can be trusted." }, + { + "key": "review-studio-gate-action-mirror", + "label": "Review Studio gates mirror review actions", + "status": "pass", + "expected": { + "non_pass_gate_keys": [ + "output-lab", + "review-waivers", + "world-class-evidence" + ], + "action_gate_keys": [ + "output-lab", + "review-waivers", + "world-class-evidence" + ], + "pass_gate_action_ids_empty": true, + "gate_action_mirrors": { + "output-lab": { + "review_action_id": "review-action-output-lab", + "review_action_status": "warn", + "source_ref_present": true, + "verification_command_present": true, + "top_level_action_id": "review-action-output-lab", + "top_level_action_status": "warn", + "top_level_source_ref_present": true, + "top_level_verification_command_present": true + }, + "review-waivers": { + "review_action_id": "review-action-review-waivers", + "review_action_status": "warn", + "source_ref_present": true, + "verification_command_present": true, + "top_level_action_id": "review-action-review-waivers", + "top_level_action_status": "warn", + "top_level_source_ref_present": true, + "top_level_verification_command_present": true + }, + "world-class-evidence": { + "review_action_id": "review-action-world-class-evidence", + "review_action_status": "warn", + "source_ref_present": true, + "verification_command_present": true, + "top_level_action_id": "review-action-world-class-evidence", + "top_level_action_status": "warn", + "top_level_source_ref_present": true, + "top_level_verification_command_present": true + } + } + }, + "actual": { + "non_pass_gate_keys": [ + "output-lab", + "review-waivers", + "world-class-evidence" + ], + "action_gate_keys": [ + "output-lab", + "review-waivers", + "world-class-evidence" + ], + "pass_gate_action_ids_empty": true, + "gate_action_mirrors": { + "output-lab": { + "review_action_id": "review-action-output-lab", + "review_action_status": "warn", + "source_ref_present": true, + "verification_command_present": true, + "top_level_action_id": "review-action-output-lab", + "top_level_action_status": "warn", + "top_level_source_ref_present": true, + "top_level_verification_command_present": true + }, + "review-waivers": { + "review_action_id": "review-action-review-waivers", + "review_action_status": "warn", + "source_ref_present": true, + "verification_command_present": true, + "top_level_action_id": "review-action-review-waivers", + "top_level_action_status": "warn", + "top_level_source_ref_present": true, + "top_level_verification_command_present": true + }, + "world-class-evidence": { + "review_action_id": "review-action-world-class-evidence", + "review_action_status": "warn", + "source_ref_present": true, + "verification_command_present": true, + "top_level_action_id": "review-action-world-class-evidence", + "top_level_action_status": "warn", + "top_level_source_ref_present": true, + "top_level_verification_command_present": true + } + } + }, + "paths": [ + "reports/review-studio.json" + ], + "detail": "Every non-pass Review Studio gate must have exactly one top-level review action and a gate-local action summary with source refs and a verification command." + }, { "key": "review-studio-context-budget-mirror", "label": "Review Studio mirrors context budget governance", "status": "pass", "expected": { "status": "pass", - "detail": "initial load 990/1000; deferred 514654/120000; top deferred scripts 453351; resource governance governed; quality density 131.3", + "detail": "initial load 990/1000; deferred 515669/120000; top deferred scripts 454366; resource governance governed; quality density 131.3", "evidence": "reports/context_budget.json" }, "actual": { "status": "pass", - "detail": "initial load 990/1000; deferred 514654/120000; top deferred scripts 453351; resource governance governed; quality density 131.3", + "detail": "initial load 990/1000; deferred 515669/120000; top deferred scripts 454366; resource governance governed; quality density 131.3", "evidence": "reports/context_budget.json" }, "paths": [ @@ -207,8 +306,8 @@ "key": "benchmark-release-lock-self-consistency", "label": "Benchmark release lock matches source dirty state", "status": "pass", - "expected": true, - "actual": true, + "expected": false, + "actual": false, "paths": [ "reports/benchmark_reproducibility.json" ], @@ -222,7 +321,7 @@ "actual": { "available": true, "clean": false, - "changed_file_count": 12 + "changed_file_count": 56 }, "paths": [ "reports/benchmark_reproducibility.json" @@ -263,8 +362,8 @@ "key": "overview-benchmark-commit", "label": "overview embeds the benchmark commit", "status": "pass", - "expected": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", - "actual": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "expected": "7050664b482a8ed9ff8d763f08800902fdf1f02d", + "actual": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "paths": [ "reports/benchmark_reproducibility.json", "reports/skill-overview.json" @@ -276,30 +375,30 @@ "label": "overview embeds benchmark summary fields", "status": "pass", "expected": { - "release_lock_ready": true, + "release_lock_ready": false, "required_artifact_count": 25, "missing_artifact_count": 0, - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "world_class_ledger_pending_count": 4, "world_class_source_check_count": 19, - "world_class_source_pass_count": 10, - "world_class_source_blocked_count": 9, + "world_class_source_pass_count": 9, + "world_class_source_blocked_count": 10, "public_claim_ready": false, - "public_claim_blocker_count": 4 + "public_claim_blocker_count": 5 }, "actual": { - "release_lock_ready": true, + "release_lock_ready": false, "required_artifact_count": 25, "missing_artifact_count": 0, - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "world_class_ledger_pending_count": 4, "world_class_source_check_count": 19, - "world_class_source_pass_count": 10, - "world_class_source_blocked_count": 9, + "world_class_source_pass_count": 9, + "world_class_source_blocked_count": 10, "public_claim_ready": false, - "public_claim_blocker_count": 4 + "public_claim_blocker_count": 5 }, "paths": [ "reports/benchmark_reproducibility.json", @@ -313,13 +412,13 @@ "status": "pass", "expected": { "event_count": 1, - "adoption_sample_count": 1, - "activation_count": 1, - "accepted_count": 1, - "adoption_rate": 100.0, + "adoption_sample_count": 0, + "activation_count": 0, + "accepted_count": 0, + "adoption_rate": 0, "risk_band": "low", "event_types": { - "skill_activation": 1 + "review_event": 1 }, "source_types": { "manual": 1 @@ -327,13 +426,13 @@ }, "actual": { "event_count": 1, - "adoption_sample_count": 1, - "activation_count": 1, - "accepted_count": 1, - "adoption_rate": 100.0, + "adoption_sample_count": 0, + "activation_count": 0, + "accepted_count": 0, + "adoption_rate": 0, "risk_band": "low", "event_types": { - "skill_activation": 1 + "review_event": 1 }, "source_types": { "manual": 1 @@ -356,8 +455,8 @@ "human_pending_count": 1, "external_pending_count": 3, "source_check_count": 19, - "source_pass_count": 10, - "source_blocked_count": 9, + "source_pass_count": 9, + "source_blocked_count": 10, "ready_to_claim_world_class": false, "decision": "evidence-pending" }, @@ -368,8 +467,8 @@ "human_pending_count": 1, "external_pending_count": 3, "source_check_count": 19, - "source_pass_count": 10, - "source_blocked_count": 9, + "source_pass_count": 9, + "source_blocked_count": 10, "ready_to_claim_world_class": false, "decision": "evidence-pending" }, @@ -389,7 +488,7 @@ "pending_count": 4, "accepted_count": 0, "source_check_count": 19, - "source_pass_count": 10 + "source_pass_count": 9 }, "actual": { "ready": false, @@ -397,7 +496,7 @@ "pending_count": 4, "accepted_count": 0, "source_check_count": 19, - "source_pass_count": 10 + "source_pass_count": 9 }, "paths": [ "reports/world_class_evidence_ledger.json", @@ -409,8 +508,8 @@ "key": "interpretation-benchmark-commit", "label": "interpretation embeds the benchmark commit", "status": "pass", - "expected": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", - "actual": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "expected": "7050664b482a8ed9ff8d763f08800902fdf1f02d", + "actual": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "paths": [ "reports/benchmark_reproducibility.json", "reports/skill-interpretation.json" @@ -422,30 +521,30 @@ "label": "interpretation embeds benchmark summary fields", "status": "pass", "expected": { - "release_lock_ready": true, + "release_lock_ready": false, "required_artifact_count": 25, "missing_artifact_count": 0, - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "world_class_ledger_pending_count": 4, "world_class_source_check_count": 19, - "world_class_source_pass_count": 10, - "world_class_source_blocked_count": 9, + "world_class_source_pass_count": 9, + "world_class_source_blocked_count": 10, "public_claim_ready": false, - "public_claim_blocker_count": 4 + "public_claim_blocker_count": 5 }, "actual": { - "release_lock_ready": true, + "release_lock_ready": false, "required_artifact_count": 25, "missing_artifact_count": 0, - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "world_class_ledger_pending_count": 4, "world_class_source_check_count": 19, - "world_class_source_pass_count": 10, - "world_class_source_blocked_count": 9, + "world_class_source_pass_count": 9, + "world_class_source_blocked_count": 10, "public_claim_ready": false, - "public_claim_blocker_count": 4 + "public_claim_blocker_count": 5 }, "paths": [ "reports/benchmark_reproducibility.json", @@ -459,13 +558,13 @@ "status": "pass", "expected": { "event_count": 1, - "adoption_sample_count": 1, - "activation_count": 1, - "accepted_count": 1, - "adoption_rate": 100.0, + "adoption_sample_count": 0, + "activation_count": 0, + "accepted_count": 0, + "adoption_rate": 0, "risk_band": "low", "event_types": { - "skill_activation": 1 + "review_event": 1 }, "source_types": { "manual": 1 @@ -473,13 +572,13 @@ }, "actual": { "event_count": 1, - "adoption_sample_count": 1, - "activation_count": 1, - "accepted_count": 1, - "adoption_rate": 100.0, + "adoption_sample_count": 0, + "activation_count": 0, + "accepted_count": 0, + "adoption_rate": 0, "risk_band": "low", "event_types": { - "skill_activation": 1 + "review_event": 1 }, "source_types": { "manual": 1 @@ -502,8 +601,8 @@ "human_pending_count": 1, "external_pending_count": 3, "source_check_count": 19, - "source_pass_count": 10, - "source_blocked_count": 9, + "source_pass_count": 9, + "source_blocked_count": 10, "ready_to_claim_world_class": false, "decision": "evidence-pending" }, @@ -514,8 +613,8 @@ "human_pending_count": 1, "external_pending_count": 3, "source_check_count": 19, - "source_pass_count": 10, - "source_blocked_count": 9, + "source_pass_count": 9, + "source_blocked_count": 10, "ready_to_claim_world_class": false, "decision": "evidence-pending" }, @@ -535,7 +634,7 @@ "pending_count": 4, "accepted_count": 0, "source_check_count": 19, - "source_pass_count": 10 + "source_pass_count": 9 }, "actual": { "ready": false, @@ -543,7 +642,7 @@ "pending_count": 4, "accepted_count": 0, "source_check_count": 19, - "source_pass_count": 10 + "source_pass_count": 9 }, "paths": [ "reports/world_class_evidence_ledger.json", @@ -1342,7 +1441,7 @@ "external_pending_count": 3, "human_pending_count": 1, "source_check_count": 19, - "source_pass_count": 10, + "source_pass_count": 9, "conclusion_zh": "世界级证据尚未完成:4 项待补,0 项已接受。", "conclusion_en": "World-class evidence is not complete: 4 pending, 0 accepted.", "entries": [ @@ -1402,7 +1501,8 @@ "summary_zh": "真实外部客户端 metadata-only 事件仍未导入。", "summary_en": "Real external-client metadata-only events have not been imported yet.", "blocked_checks": [ - "External events" + "External events", + "Adoption sample" ] } ] @@ -1416,7 +1516,7 @@ "external_pending_count": 3, "human_pending_count": 1, "source_check_count": 19, - "source_pass_count": 10, + "source_pass_count": 9, "conclusion_zh": "世界级证据尚未完成:4 项待补,0 项已接受。", "conclusion_en": "World-class evidence is not complete: 4 pending, 0 accepted.", "entries": [ @@ -1476,7 +1576,8 @@ "summary_zh": "真实外部客户端 metadata-only 事件仍未导入。", "summary_en": "Real external-client metadata-only events have not been imported yet.", "blocked_checks": [ - "External events" + "External events", + "Adoption sample" ] } ] @@ -1826,15 +1927,15 @@ "expected": { "world_class_ledger_pending_count": 4, "world_class_source_check_count": 19, - "world_class_source_pass_count": 10, - "world_class_source_blocked_count": 9, + "world_class_source_pass_count": 9, + "world_class_source_blocked_count": 10, "public_claim_ready": false }, "actual": { "world_class_ledger_pending_count": 4, "world_class_source_check_count": 19, - "world_class_source_pass_count": 10, - "world_class_source_blocked_count": 9, + "world_class_source_pass_count": 9, + "world_class_source_blocked_count": 10, "public_claim_ready": false }, "paths": [ @@ -1850,8 +1951,8 @@ "expected": { "pending_count": 4, "source_check_count": 19, - "source_pass_count": 10, - "source_blocked_count": 9, + "source_pass_count": 9, + "source_blocked_count": 10, "ready_to_claim_world_class": false, "preflight_counts_as_evidence": false, "credential_value_exposed": false @@ -1859,8 +1960,8 @@ "actual": { "pending_count": 4, "source_check_count": 19, - "source_pass_count": 10, - "source_blocked_count": 9, + "source_pass_count": 9, + "source_blocked_count": 10, "ready_to_claim_world_class": false, "preflight_counts_as_evidence": false, "credential_value_exposed": false @@ -2037,7 +2138,7 @@ "summary": { "phase_queue_count": 2, "phase_queue_blocked_count": 2, - "phase_queue_row_count": 13, + "phase_queue_row_count": 14, "phase_queue_next_phase": "unblock-access", "phase_queue_next_action_id": "human-adjudication-precheck-human-reviewer", "phase_queue_next_command": "python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", @@ -2070,8 +2171,8 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 9, - "row_count": 9, + "blocked_count": 10, + "row_count": 10, "owners": [ "Browser/Chrome/IDE/provider client integrator", "human reviewer", @@ -2213,15 +2314,15 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 1, - "row_count": 1, + "blocked_count": 2, + "row_count": 2, "owners": [ "Browser/Chrome/IDE/provider client integrator" ], "evidence_keys": [ "native-client-telemetry" ], - "next_action_id": "native-client-telemetry-source-check-external_source_events", + "next_action_id": "native-client-telemetry-source-check-adoption_sample_count", "verification_command": "python3 scripts/yao.py telemetry-import . --input-jsonl .yao/telemetry_spool/external_events.jsonl && python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", "counts_as_completion": false } @@ -2231,7 +2332,7 @@ "operator_runbook_summary": { "phase_queue_count": 2, "phase_queue_blocked_count": 2, - "phase_queue_row_count": 13, + "phase_queue_row_count": 14, "phase_queue_next_phase": "unblock-access", "phase_queue_next_action_id": "human-adjudication-precheck-human-reviewer", "phase_queue_next_command": "python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", @@ -2264,8 +2365,8 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 9, - "row_count": 9, + "blocked_count": 10, + "row_count": 10, "owners": [ "Browser/Chrome/IDE/provider client integrator", "human reviewer", @@ -2407,15 +2508,15 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 1, - "row_count": 1, + "blocked_count": 2, + "row_count": 2, "owners": [ "Browser/Chrome/IDE/provider client integrator" ], "evidence_keys": [ "native-client-telemetry" ], - "next_action_id": "native-client-telemetry-source-check-external_source_events", + "next_action_id": "native-client-telemetry-source-check-adoption_sample_count", "verification_command": "python3 scripts/yao.py telemetry-import . --input-jsonl .yao/telemetry_spool/external_events.jsonl && python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", "counts_as_completion": false } @@ -2545,15 +2646,15 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 1, - "row_count": 1, + "blocked_count": 2, + "row_count": 2, "owners": [ "Browser/Chrome/IDE/provider client integrator" ], "evidence_keys": [ "native-client-telemetry" ], - "next_action_id": "native-client-telemetry-source-check-external_source_events", + "next_action_id": "native-client-telemetry-source-check-adoption_sample_count", "verification_command": "python3 scripts/yao.py telemetry-import . --input-jsonl .yao/telemetry_spool/external_events.jsonl && python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", "counts_as_completion": false } @@ -2564,7 +2665,7 @@ "summary": { "phase_queue_count": 2, "phase_queue_blocked_count": 2, - "phase_queue_row_count": 13, + "phase_queue_row_count": 14, "phase_queue_next_phase": "unblock-access", "phase_queue_next_action_id": "human-adjudication-precheck-human-reviewer", "phase_queue_next_command": "python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", @@ -2597,8 +2698,8 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 9, - "row_count": 9, + "blocked_count": 10, + "row_count": 10, "owners": [ "Browser/Chrome/IDE/provider client integrator", "human reviewer", @@ -2619,7 +2720,7 @@ "operator_runbook_summary": { "phase_queue_count": 2, "phase_queue_blocked_count": 2, - "phase_queue_row_count": 13, + "phase_queue_row_count": 14, "phase_queue_next_phase": "unblock-access", "phase_queue_next_action_id": "human-adjudication-precheck-human-reviewer", "phase_queue_next_command": "python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", @@ -2652,8 +2753,8 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 9, - "row_count": 9, + "blocked_count": 10, + "row_count": 10, "owners": [ "Browser/Chrome/IDE/provider client integrator", "human reviewer", @@ -2795,15 +2896,15 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 1, - "row_count": 1, + "blocked_count": 2, + "row_count": 2, "owners": [ "Browser/Chrome/IDE/provider client integrator" ], "evidence_keys": [ "native-client-telemetry" ], - "next_action_id": "native-client-telemetry-source-check-external_source_events", + "next_action_id": "native-client-telemetry-source-check-adoption_sample_count", "verification_command": "python3 scripts/yao.py telemetry-import . --input-jsonl .yao/telemetry_spool/external_events.jsonl && python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", "counts_as_completion": false } @@ -2933,15 +3034,15 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 1, - "row_count": 1, + "blocked_count": 2, + "row_count": 2, "owners": [ "Browser/Chrome/IDE/provider client integrator" ], "evidence_keys": [ "native-client-telemetry" ], - "next_action_id": "native-client-telemetry-source-check-external_source_events", + "next_action_id": "native-client-telemetry-source-check-adoption_sample_count", "verification_command": "python3 scripts/yao.py telemetry-import . --input-jsonl .yao/telemetry_spool/external_events.jsonl && python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", "counts_as_completion": false } @@ -3071,15 +3172,15 @@ "phase": "collect-source", "priority": 40, "status": "blocked", - "blocked_count": 1, - "row_count": 1, + "blocked_count": 2, + "row_count": 2, "owners": [ "Browser/Chrome/IDE/provider client integrator" ], "evidence_keys": [ "native-client-telemetry" ], - "next_action_id": "native-client-telemetry-source-check-external_source_events", + "next_action_id": "native-client-telemetry-source-check-adoption_sample_count", "verification_command": "python3 scripts/yao.py telemetry-import . --input-jsonl .yao/telemetry_spool/external_events.jsonl && python3 scripts/yao.py world-class-preflight . --submissions-dir evidence/world_class/submissions", "counts_as_completion": false } @@ -3179,8 +3280,8 @@ "human_pending_count": 1, "external_pending_count": 3, "source_check_count": 19, - "source_pass_count": 10, - "source_blocked_count": 9, + "source_pass_count": 9, + "source_blocked_count": 10, "plan_keys": [ "human-adjudication", "native-client-telemetry", @@ -3328,8 +3429,8 @@ "human_pending_count": 1, "external_pending_count": 3, "source_check_count": 19, - "source_pass_count": 10, - "source_blocked_count": 9, + "source_pass_count": 9, + "source_blocked_count": 10, "plan_keys": [ "human-adjudication", "native-client-telemetry", diff --git a/reports/evidence_consistency.md b/reports/evidence_consistency.md index f0d30409..808d0cb5 100644 --- a/reports/evidence_consistency.md +++ b/reports/evidence_consistency.md @@ -5,8 +5,8 @@ Generated at: `2026-06-17` ## Summary - decision: `consistent` -- checks: `37` -- pass: `37` +- checks: `38` +- pass: `38` - warn: `0` - fail: `0` @@ -18,6 +18,7 @@ This gate compares generated evidence reports against each other. It does not cr | --- | --- | --- | --- | | Required report artifacts are readable | `pass` | The consistency gate can only be trusted when every source JSON report parses and every source Markdown report is readable. | `reports/benchmark_reproducibility.json`, `reports/skill-overview.json`, `reports/skill-interpretation.json`, `reports/adoption_drift_report.json`, `reports/world_class_evidence_ledger.json`, `reports/world_class_evidence_plan.json`, `reports/world_class_evidence_intake.json`, `reports/world_class_evidence_preflight.json`, `reports/world_class_submission_review.json`, `reports/world_class_operator_runbook.json`, `reports/skill_os2_coverage.json`, `reports/review-studio.json`, `reports/package_verification.json`, `reports/install_simulation.json`, `reports/security_trust_report.json`, `reports/context_budget.json`, `reports/world_class_claim_guard.json`, `reports/skill-os-2-review.md` | | Release evidence flow covers first-class reports | `pass` | Release refresh and clean-lock instructions must regenerate every first-class report before evidence consistency can be trusted. | `AGENTS.md`, `reports/output_execution_runs.json`, `reports/install_simulation.json`, `reports/security_trust_report.json`, `reports/registry_audit.json`, `reports/package_verification.json`, `reports/upgrade_check.json`, `reports/adoption_drift_report.json`, `reports/architecture_maintainability.json`, `reports/python_compatibility.json`, `reports/runtime_permission_probes.json`, `reports/review_waivers.json`, `reports/review_annotations.json`, `reports/skill_atlas.json`, `reports/skill_os2_audit.json`, `reports/skill_os2_coverage.json`, `reports/context_budget.json`, `reports/context_budget_summary.json`, `reports/benchmark_reproducibility.json`, `reports/skill-overview.json`, `reports/skill-interpretation.json`, `reports/review-viewer.json`, `reports/world_class_evidence_preflight.json`, `reports/skillops/daily`, `reports/skillops/weekly`, `reports/review-studio.json`, `reports/evidence_consistency.json` | +| Review Studio gates mirror review actions | `pass` | Every non-pass Review Studio gate must have exactly one top-level review action and a gate-local action summary with source refs and a verification command. | `reports/review-studio.json` | | Review Studio mirrors context budget governance | `pass` | Review Studio must not keep stale context warnings after context reports prove large deferred resources are governed. | `reports/context_budget.json`, `reports/review-studio.json` | | Benchmark release lock matches source dirty state | `pass` | The benchmark release lock must be blocked by source changes, while generated evidence artifacts are tracked as generation context. | `reports/benchmark_reproducibility.json` | | Clean worktree keeps a clean benchmark release lock | `pass` | Dirty or non-git worktrees cannot prove final release-lock freshness, so this check is advisory until the final clean-lock pass. | `reports/benchmark_reproducibility.json` | diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json index dd64b27d..5847be5e 100644 --- a/reports/output_execution_runs.json +++ b/reports/output_execution_runs.json @@ -34,7 +34,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 31.59, + "duration_ms": 32.49, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -62,7 +62,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.83, + "duration_ms": 28.38, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -85,7 +85,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.22, + "duration_ms": 28.39, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -113,7 +113,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.41, + "duration_ms": 28.18, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -136,7 +136,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.5, + "duration_ms": 28.12, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -164,7 +164,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.37, + "duration_ms": 28.24, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -187,7 +187,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.23, + "duration_ms": 29.02, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -214,7 +214,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.25, + "duration_ms": 30.75, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -237,7 +237,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.97, + "duration_ms": 35.6, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -266,7 +266,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.02, + "duration_ms": 31.44, "provider": "local-output-eval-runner", "model": "", "usage": { diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md index 6823b6d8..0d0a19a2 100644 --- a/reports/output_execution_runs.md +++ b/reports/output_execution_runs.md @@ -23,16 +23,16 @@ Command runner evidence is present. This proves the eval harness executed an ext | Case | Variant | Mode | Model | Duration ms | Tokens | Score | Status | | --- | --- | --- | --- | ---: | ---: | ---: | --- | -| skill-package-contract | baseline | command | local-output-eval-runner | 31.59 | 33 | 0.0 | pass | -| skill-package-contract | with_skill | command | local-output-eval-runner | 28.83 | 73 | 100.0 | pass | -| output-eval-expectation | baseline | command | local-output-eval-runner | 28.22 | 36 | 0.0 | pass | -| output-eval-expectation | with_skill | command | local-output-eval-runner | 28.41 | 80 | 100.0 | pass | -| ir-before-packaging | baseline | command | local-output-eval-runner | 28.5 | 33 | 0.0 | pass | -| ir-before-packaging | with_skill | command | local-output-eval-runner | 28.37 | 80 | 100.0 | pass | -| near-neighbor-boundary | baseline | command | local-output-eval-runner | 29.23 | 36 | 0.0 | pass | -| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 28.25 | 65 | 100.0 | pass | -| file-backed-governed-package | baseline | command | local-output-eval-runner | 27.97 | 37 | 0.0 | pass | -| file-backed-governed-package | with_skill | command | local-output-eval-runner | 28.02 | 98 | 100.0 | pass | +| skill-package-contract | baseline | command | local-output-eval-runner | 32.49 | 33 | 0.0 | pass | +| skill-package-contract | with_skill | command | local-output-eval-runner | 28.38 | 73 | 100.0 | pass | +| output-eval-expectation | baseline | command | local-output-eval-runner | 28.39 | 36 | 0.0 | pass | +| output-eval-expectation | with_skill | command | local-output-eval-runner | 28.18 | 80 | 100.0 | pass | +| ir-before-packaging | baseline | command | local-output-eval-runner | 28.12 | 33 | 0.0 | pass | +| ir-before-packaging | with_skill | command | local-output-eval-runner | 28.24 | 80 | 100.0 | pass | +| near-neighbor-boundary | baseline | command | local-output-eval-runner | 29.02 | 36 | 0.0 | pass | +| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 30.75 | 65 | 100.0 | pass | +| file-backed-governed-package | baseline | command | local-output-eval-runner | 35.6 | 37 | 0.0 | pass | +| file-backed-governed-package | with_skill | command | local-output-eval-runner | 31.44 | 98 | 100.0 | pass | ## Next Fixes diff --git a/reports/registry_audit.json b/reports/registry_audit.json index 22eb47cf..e989b551 100644 --- a/reports/registry_audit.json +++ b/reports/registry_audit.json @@ -21,7 +21,7 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2" }, "compatibility": { @@ -78,7 +78,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] }, diff --git a/reports/registry_audit.md b/reports/registry_audit.md index de1d5cc1..3e4971ef 100644 --- a/reports/registry_audit.md +++ b/reports/registry_audit.md @@ -6,7 +6,7 @@ - Maturity: `governed` - Owner: `Yao Team` - License: `MIT` -- Package SHA256: `f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f` +- Package SHA256: `a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba` - Archive SHA256: `7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2` - Install simulated: `True` diff --git a/reports/review-studio.html b/reports/review-studio.html index c4f1156b..a59dfd51 100644 --- a/reports/review-studio.html +++ b/reports/review-studio.html @@ -772,12 +772,12 @@

核心指标

-
Skill IR2.0.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review Kit0/5

pending 5; answer key hidden

Review A/B0/5

adjudication decisions; pending 5

Public Claimblocked

4 blockers; local reproducible true

Blueprint21/21

2.0 coverage; extensions partial 0, planned 0; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native; 4 installer-enforced

Trust0

152 scripts scanned; secrets found

Py Compat0

231 files scanned for Python 3.11

Arch Debt0

696 largest lines; 0 watchlist; 3 early; 68 CLI handlers; 18 in entrypoint

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Daily Ops5

proposal-review; approval 0; release lock true

Weekly Queue5

curator-review; ready 1; top score 88

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

182 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

689 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

+
Skill IR2.0.0

5 targets in platform-neutral contract

Compiler5/5

target contracts compiled from Skill IR

Output Delta100.0

5 cases; 1 file-backed

Exec Runs10

command 10; model 0; recorded 0

Blind A/B5

review pairs hide baseline vs with-skill labels

Review Kit0/5

pending 5; answer key hidden

Review A/B0/5

adjudication decisions; pending 5

Public Claimblocked

5 blockers; local reproducible true

Blueprint21/21

2.0 coverage; extensions partial 0, planned 0; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native; 4 installer-enforced

Trust0

152 scripts scanned; secrets found

Py Compat0

231 files scanned for Python 3.11

Arch Debt0

696 largest lines; 0 watchlist; 4 early; 68 CLI handlers; 18 in entrypoint

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Daily Ops5

proposal-review; approval 0; release lock true

Weekly Queue5

curator-review; ready 1; top score 88

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

182 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

689 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

审查闸门

-
通过

意图画布

intent confidence 100/100; Intent is clear enough to package the first routeable version.

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 990/1000; deferred 514654/120000; top deferred scripts 453351; resource governance governed; quality density 131.3

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

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

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
通过

架构维护

228 Python files; 0 hotspots; 0 watchlist files; 3 early watch files; 0 blockers; largest 696 lines; 68 CLI handlers; 18 in entrypoint

reports/architecture_maintainability.json 证据
通过

权限批准

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

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

权限探针

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

reports/runtime_permission_probes.json 证据
通过

组合治理

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

reports/skill_atlas.json 证据
通过

运营回路

1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low; daily proposals 5; daily decision proposal-review; daily release lock true; weekly queue 5 unique; weekly ready 1; weekly top 88; weekly release lock true

reports/adoption_drift_report.json + reports/skillops/daily + reports/skillops/weekly 证据
关注

人工批准

0 active waivers; 1 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

4 pending world-class evidence entries; 1 human pending; 3 external pending; source checks 10/19 pass; 9 blocked; overclaim guard true

reports/world_class_evidence_ledger.json 证据
通过

注册审计

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

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

发布路线

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

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

意图画布

intent confidence 100/100; Intent is clear enough to package the first routeable version.

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

5/5 cases; with-skill 100.0; baseline 0.0; file-backed 1; near-neighbor 1; blind A/B 5; exec 10; command 10; model 0; recorded 0; reviewed 0/5; review pending 5

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 990/1000; deferred 515669/120000; top deferred scripts 454366; resource governance governed; quality density 131.3

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

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

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
通过

架构维护

228 Python files; 0 hotspots; 0 watchlist files; 4 early watch files; 0 blockers; largest 696 lines; 68 CLI handlers; 18 in entrypoint

reports/architecture_maintainability.json 证据
通过

权限批准

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

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

权限探针

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

reports/runtime_permission_probes.json 证据
通过

组合治理

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

reports/skill_atlas.json 证据
通过

运营回路

1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low; daily proposals 5; daily decision proposal-review; daily release lock true; weekly queue 5 unique; weekly ready 1; weekly top 88; weekly release lock false

reports/adoption_drift_report.json + reports/skillops/daily + reports/skillops/weekly 证据
关注

人工批准

0 active waivers; 1 warning gates still need reviewer decision

reports/review_waivers.json 证据
关注

世界证据

4 pending world-class evidence entries; 1 human pending; 3 external pending; source checks 10/19 pass; 9 blocked; overclaim guard true

reports/world_class_evidence_ledger.json 证据
通过

注册审计

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

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

发布路线

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

reports/promotion_decisions.json + reports/upgrade_check.json + docs/migration-v2.md 证据
@@ -844,12 +844,12 @@
-

上下文

initial load 990/1000; deferred 514654/120000; top deferred scripts 453351; resource governance governed; quality density 131.3

+

上下文

initial load 990/1000; deferred 515669/120000; top deferred scripts 454366; resource governance governed; quality density 131.3

编译证据

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

-

信任报告

Secret
0
脚本数
152
网络脚本
3
Help 失败
0
包体哈希
f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f
+

信任报告

Secret
0
脚本数
152
网络脚本
3
Help 失败
0
包体哈希
a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba

安全边界

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

@@ -874,14 +874,14 @@
-

运营回路

1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low; daily proposals 5; daily decision proposal-review; daily release lock true; weekly queue 5 unique; weekly ready 1; weekly top 88; weekly release lock true

+

运营回路

1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low; daily proposals 5; daily decision proposal-review; daily release lock true; weekly queue 5 unique; weekly ready 1; weekly top 88; weekly release lock false

漂移信号

事件数
1
采用率
100
漏触发
0
Bad Output Count
0
风险带
low

日常运维

决策
proposal-review
提案数
5
Approval Count
0
Pending Review Count
0
发布锁
世界级
Writes Source Files
Auto Patch Enabled
-

周度队列

决策
curator-review
Week Id
2026-W25
日报数
2
唯一机会
5
待批准复核
1
提案复核
4
Top Score
88
发布锁
Writes Source Files
Auto Patch Enabled
+

周度队列

决策
curator-review
Week Id
2026-W25
日报数
2
唯一机会
5
待批准复核
1
提案复核
4
Top Score
88
发布锁
Writes Source Files
Auto Patch Enabled
@@ -914,8 +914,8 @@
-

公开声明

本地复现
发布锁
可公开声明
声明阻断
4
Provider 证据
人审完成
世界级就绪
-

声明阻断

  • 阻断provider-backed model holdout evidence is incomplete
  • 阻断human blind-review adjudication is incomplete
  • 阻断world-class evidence is not accepted yet (4 open gaps, 4 ledger pending)
  • 阻断world-class source checks are not all accepted (10/19 pass, 9 blocked)
+

公开声明

本地复现
发布锁
可公开声明
声明阻断
5
Provider 证据
人审完成
世界级就绪
+

声明阻断

  • 阻断release lock is not clean or commit is unavailable
  • 阻断provider-backed model holdout evidence is incomplete
  • 阻断human blind-review adjudication is incomplete
  • 阻断world-class evidence is not accepted yet (4 open gaps, 4 ledger pending)
  • 阻断world-class source checks are not all accepted (10/19 pass, 9 blocked)
diff --git a/reports/review-studio.json b/reports/review-studio.json index c90f61b8..99d5a380 100644 --- a/reports/review-studio.json +++ b/reports/review-studio.json @@ -22,7 +22,11 @@ "status": "pass", "detail": "intent confidence 100/100; Intent is clear enough to package the first routeable version.", "evidence": "reports/intent-confidence.json", - "link": "intent-confidence.md" + "link": "intent-confidence.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "trigger-lab", @@ -30,7 +34,11 @@ "status": "pass", "detail": "13 trigger cases; 0 misroutes; 0 ambiguous", "evidence": "reports/route_scorecard.json", - "link": "route_scorecard.md" + "link": "route_scorecard.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "output-lab", @@ -38,15 +46,23 @@ "status": "warn", "detail": "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", "evidence": "reports/output_quality_scorecard.json", - "link": "output_quality_scorecard.md" + "link": "output_quality_scorecard.md", + "review_action_id": "review-action-output-lab", + "review_action_status": "warn", + "review_action_source_ref_count": 6, + "review_action_verification_command": "python3 scripts/adjudicate_output_review.py --write-template && python3 scripts/yao.py output-review" }, { "key": "context-budget", "label": "上下文", "status": "pass", - "detail": "initial load 990/1000; deferred 514654/120000; top deferred scripts 453351; resource governance governed; quality density 131.3", + "detail": "initial load 990/1000; deferred 515669/120000; top deferred scripts 454366; resource governance governed; quality density 131.3", "evidence": "reports/context_budget.json", - "link": "context_budget.md" + "link": "context_budget.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "runtime-matrix", @@ -54,7 +70,11 @@ "status": "pass", "detail": "5 / 5 targets pass", "evidence": "reports/conformance_matrix.json", - "link": "conformance_matrix.md" + "link": "conformance_matrix.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "trust-report", @@ -62,7 +82,11 @@ "status": "pass", "detail": "0 secrets; 152 scripts; 3 network-capable scripts; 0 help smoke failures", "evidence": "reports/security_trust_report.json", - "link": "security_trust_report.md" + "link": "security_trust_report.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "python-compat", @@ -70,15 +94,23 @@ "status": "pass", "detail": "Python 3.11; 231 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards", "evidence": "reports/python_compatibility.json", - "link": "python_compatibility.md" + "link": "python_compatibility.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "architecture-maintainability", "label": "架构维护", "status": "pass", - "detail": "228 Python files; 0 hotspots; 0 watchlist files; 3 early watch files; 0 blockers; largest 696 lines; 68 CLI handlers; 18 in entrypoint", + "detail": "228 Python files; 0 hotspots; 0 watchlist files; 4 early watch files; 0 blockers; largest 696 lines; 68 CLI handlers; 18 in entrypoint", "evidence": "reports/architecture_maintainability.json", - "link": "architecture_maintainability.md" + "link": "architecture_maintainability.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "permission-gates", @@ -86,7 +118,11 @@ "status": "pass", "detail": "3/3 permissions approved; gaps 0; required file_write, network, subprocess", "evidence": "reports/security_trust_report.json + security/permission_policy.json", - "link": "../security/permission_policy.md" + "link": "../security/permission_policy.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "permission-runtime", @@ -94,7 +130,11 @@ "status": "pass", "detail": "4/4 targets probed; native 0; metadata fallback 4; installer 4; residual risks 4", "evidence": "reports/runtime_permission_probes.json", - "link": "runtime_permission_probes.md" + "link": "runtime_permission_probes.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "skill-atlas", @@ -102,15 +142,23 @@ "status": "pass", "detail": "12 skills, 1 actionable; 0 actionable route collisions; 0 actionable owner gaps; 0 actionable stale; 0 actionable drift; 24 scoped non-actionable issues", "evidence": "reports/skill_atlas.json", - "link": "skill_atlas.html" + "link": "skill_atlas.html", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "operations-loop", "label": "运营回路", "status": "pass", - "detail": "1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low; daily proposals 5; daily decision proposal-review; daily release lock true; weekly queue 5 unique; weekly ready 1; weekly top 88; weekly release lock true", + "detail": "1 metadata events; adoption 100.0; missed 0; bad-output 0; risk low; daily proposals 5; daily decision proposal-review; daily release lock true; weekly queue 5 unique; weekly ready 1; weekly top 88; weekly release lock false", "evidence": "reports/adoption_drift_report.json + reports/skillops/daily + reports/skillops/weekly", - "link": "adoption_drift_report.md" + "link": "adoption_drift_report.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "review-waivers", @@ -118,7 +166,11 @@ "status": "warn", "detail": "0 active waivers; 1 warning gates still need reviewer decision", "evidence": "reports/review_waivers.json", - "link": "review_waivers.md" + "link": "review_waivers.md", + "review_action_id": "review-action-review-waivers", + "review_action_status": "warn", + "review_action_source_ref_count": 2, + "review_action_verification_command": "python3 scripts/render_review_waivers.py ." }, { "key": "world-class-evidence", @@ -126,7 +178,11 @@ "status": "warn", "detail": "4 pending world-class evidence entries; 1 human pending; 3 external pending; source checks 10/19 pass; 9 blocked; overclaim guard true", "evidence": "reports/world_class_evidence_ledger.json", - "link": "world_class_evidence_ledger.md" + "link": "world_class_evidence_ledger.md", + "review_action_id": "review-action-world-class-evidence", + "review_action_status": "warn", + "review_action_source_ref_count": 16, + "review_action_verification_command": "python3 scripts/yao.py world-class-runbook . --submissions-dir evidence/world_class/submissions && python3 scripts/yao.py world-class-ledger . --submissions-dir evidence/world_class/submissions && python3 scripts/yao.py review-studio ." }, { "key": "registry-audit", @@ -134,7 +190,11 @@ "status": "pass", "detail": "yao-meta-skill 1.1.0; 6/6 compatibility entries pass; install pass with 4 adapters; installer permissions 12 enforced / 0 failures", "evidence": "reports/registry_audit.json + reports/install_simulation.json", - "link": "registry_audit.md" + "link": "registry_audit.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" }, { "key": "release-notes", @@ -142,7 +202,11 @@ "status": "pass", "detail": "0 promote; 3 keep current; 0 blocked; upgrade minor declared / minor recommended", "evidence": "reports/promotion_decisions.json + reports/upgrade_check.json + docs/migration-v2.md", - "link": "promotion_decisions.md" + "link": "promotion_decisions.md", + "review_action_id": "", + "review_action_status": "", + "review_action_source_ref_count": 0, + "review_action_verification_command": "" } ], "gate_contract": { @@ -198,7 +262,11 @@ "status": "warn", "detail": "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", "evidence": "reports/output_quality_scorecard.json", - "link": "output_quality_scorecard.md" + "link": "output_quality_scorecard.md", + "review_action_id": "review-action-output-lab", + "review_action_status": "warn", + "review_action_source_ref_count": 6, + "review_action_verification_command": "python3 scripts/adjudicate_output_review.py --write-template && python3 scripts/yao.py output-review" }, { "key": "review-waivers", @@ -206,7 +274,11 @@ "status": "warn", "detail": "0 active waivers; 1 warning gates still need reviewer decision", "evidence": "reports/review_waivers.json", - "link": "review_waivers.md" + "link": "review_waivers.md", + "review_action_id": "review-action-review-waivers", + "review_action_status": "warn", + "review_action_source_ref_count": 2, + "review_action_verification_command": "python3 scripts/render_review_waivers.py ." }, { "key": "world-class-evidence", @@ -214,11 +286,16 @@ "status": "warn", "detail": "4 pending world-class evidence entries; 1 human pending; 3 external pending; source checks 10/19 pass; 9 blocked; overclaim guard true", "evidence": "reports/world_class_evidence_ledger.json", - "link": "world_class_evidence_ledger.md" + "link": "world_class_evidence_ledger.md", + "review_action_id": "review-action-world-class-evidence", + "review_action_status": "warn", + "review_action_source_ref_count": 16, + "review_action_verification_command": "python3 scripts/yao.py world-class-runbook . --submissions-dir evidence/world_class/submissions && python3 scripts/yao.py world-class-ledger . --submissions-dir evidence/world_class/submissions && python3 scripts/yao.py review-studio ." } ], "review_actions": [ { + "action_id": "review-action-output-lab", "gate_key": "output-lab", "label": "输出实验", "status": "warn", @@ -294,6 +371,7 @@ "evidence_steps": [] }, { + "action_id": "review-action-review-waivers", "gate_key": "review-waivers", "label": "人工批准", "status": "warn", @@ -329,6 +407,7 @@ "evidence_steps": [] }, { + "action_id": "review-action-world-class-evidence", "gate_key": "world-class-evidence", "label": "世界证据", "status": "warn", @@ -2363,12 +2442,12 @@ "ok": true, "summary": { "reproducibility_ready": true, - "release_lock_ready": true, + "release_lock_ready": false, "methodology_complete": true, "required_artifact_count": 25, "missing_artifact_count": 0, - "evidence_bundle_sha256": "48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb", - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "evidence_bundle_sha256": "c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "output_case_count": 5, "failure_disclosure_count": 3, @@ -2387,15 +2466,15 @@ "world_class_source_pass_count": 10, "world_class_source_blocked_count": 9, "public_claim_ready": false, - "public_claim_blocker_count": 4, + "public_claim_blocker_count": 5, "working_tree_dirty": true, - "changed_file_count": 13, - "source_tree_dirty": false, - "source_changed_file_count": 0, + "changed_file_count": 39, + "source_tree_dirty": true, + "source_changed_file_count": 5, "generated_tree_dirty": true, - "generated_changed_file_count": 13 + "generated_changed_file_count": 34 }, - "commit": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "commit": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "missing_artifacts": [], "limitations": [ "The git commit and dirty flags are generation-time context; release lock is blocked by source changes, while generated evidence artifacts are tracked separately.", @@ -2500,7 +2579,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 244, - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" }, "skill_atlas": { "skill_count": 12, @@ -2538,7 +2617,7 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2" }, "compatibility": { @@ -2670,7 +2749,7 @@ { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "to": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] }, @@ -5184,7 +5263,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 31.59, + "duration_ms": 32.49, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5212,7 +5291,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.83, + "duration_ms": 28.38, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5235,7 +5314,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.22, + "duration_ms": 28.39, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5263,7 +5342,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.41, + "duration_ms": 28.18, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5286,7 +5365,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.5, + "duration_ms": 28.12, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5314,7 +5393,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.37, + "duration_ms": 28.24, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5337,7 +5416,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.23, + "duration_ms": 29.02, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5364,7 +5443,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.25, + "duration_ms": 30.75, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5387,7 +5466,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.97, + "duration_ms": 35.6, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -5416,7 +5495,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.02, + "duration_ms": 31.44, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -6197,43 +6276,49 @@ "ok": true, "generated_at": "2026-06-17", "skill_dir": ".", - "commit": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "commit": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "git_status": { "available": true, "dirty": true, - "changed_file_count": 13, + "changed_file_count": 39, "generated_dirty": true, - "generated_changed_file_count": 13, - "source_dirty": false, - "source_changed_file_count": 0, + "generated_changed_file_count": 34, + "source_dirty": true, + "source_changed_file_count": 5, "sample": [ + " M registry/index.json", + " M registry/packages/yao-meta-skill.json", " M reports/adaptation_proposals.json", " M reports/adaptation_proposals.md", + " M reports/adoption_drift_report.json", + " M reports/architecture_maintainability.json", + " M reports/architecture_maintainability.md", " M reports/benchmark_reproducibility.json", " M reports/benchmark_reproducibility.md", " M reports/context_budget.json", - " M reports/evidence_consistency.json", - " M reports/review-studio.html", - " M reports/review-studio.json", - " M reports/review-viewer.json", - " M reports/skill-interpretation.json", - " M reports/skill-overview.json", - " M reports/skillops/weekly/2026-W25.json" + " M reports/context_budget.md", + " M reports/context_budget_summary.json" + ], + "source_sample": [ + " M scripts/render_evidence_consistency.py", + " M scripts/render_review_studio.py", + " M scripts/review_studio_actions.py", + " M tests/verify_evidence_consistency.py", + " M tests/verify_review_studio.py" ], - "source_sample": [], "generated_sample": [ + " M registry/index.json", + " M registry/packages/yao-meta-skill.json", " M reports/adaptation_proposals.json", " M reports/adaptation_proposals.md", + " M reports/adoption_drift_report.json", + " M reports/architecture_maintainability.json", + " M reports/architecture_maintainability.md", " M reports/benchmark_reproducibility.json", " M reports/benchmark_reproducibility.md", " M reports/context_budget.json", - " M reports/evidence_consistency.json", - " M reports/review-studio.html", - " M reports/review-studio.json", - " M reports/review-viewer.json", - " M reports/skill-interpretation.json", - " M reports/skill-overview.json", - " M reports/skillops/weekly/2026-W25.json" + " M reports/context_budget.md", + " M reports/context_budget_summary.json" ], "generated_dirty_prefixes": [ "dist/", @@ -6247,12 +6332,12 @@ }, "summary": { "reproducibility_ready": true, - "release_lock_ready": true, + "release_lock_ready": false, "methodology_complete": true, "required_artifact_count": 25, "missing_artifact_count": 0, - "evidence_bundle_sha256": "48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb", - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "evidence_bundle_sha256": "c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "output_case_count": 5, "failure_disclosure_count": 3, @@ -6271,18 +6356,19 @@ "world_class_source_pass_count": 10, "world_class_source_blocked_count": 9, "public_claim_ready": false, - "public_claim_blocker_count": 4, + "public_claim_blocker_count": 5, "working_tree_dirty": true, - "changed_file_count": 13, - "source_tree_dirty": false, - "source_changed_file_count": 0, + "changed_file_count": 39, + "source_tree_dirty": true, + "source_changed_file_count": 5, "generated_tree_dirty": true, - "generated_changed_file_count": 13 + "generated_changed_file_count": 34 }, "public_claim": { "ready": false, "scope": "public benchmark or world-class readiness claim", "blockers": [ + "release lock is not clean or commit is unavailable", "provider-backed model holdout evidence is incomplete", "human blind-review adjudication is incomplete", "world-class evidence is not accepted yet (4 open gaps, 4 ledger pending)", @@ -6291,12 +6377,12 @@ "policy": "Local reproducibility can pass before public claims; public claims require provider evidence, human adjudication, clean release lock, accepted world-class evidence, and complete source checks." }, "release_lock": { - "ready": true, - "commit": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "ready": false, + "commit": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "status_scope": "generation-time status before this report is written", - "source_changed_file_count": 0, - "generated_changed_file_count": 13, - "reason": "only generated evidence artifacts were dirty at generation time" + "source_changed_file_count": 5, + "generated_changed_file_count": 34, + "reason": "source files were dirty at generation time" }, "evidence_bundle": { "algorithm": "sha256(path,label,exists,artifact_sha256)", @@ -6304,7 +6390,7 @@ "existing_count": 25, "missing_count": 0, "missing_paths": [], - "sha256": "48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb" + "sha256": "c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce" }, "methodology": { "path": "reports/benchmark_methodology.md", @@ -6378,7 +6464,7 @@ "path": "reports/output_execution_runs.json", "exists": true, "bytes": 7966, - "sha256": "7795806f55493c49185de218e3a40ef065be44aee0674ffe397c3debf41a278d" + "sha256": "9d1dbd75c98b75a63c4c7e3ae4175274a9d54e33fd1ca73561deb4dbc0b315ed" }, { "label": "blind_review", @@ -6413,7 +6499,7 @@ "path": "reports/security_trust_report.json", "exists": true, "bytes": 136999, - "sha256": "e3bee7ca1d834b40432038b803311412613762086f35baa82a7fcf8545837213" + "sha256": "079165fefd9fb3e5c25c1c486738e21bff2a59ca52b03dae9d505d6896341bf1" }, { "label": "python_compatibility", @@ -6427,7 +6513,7 @@ "path": "reports/registry_audit.json", "exists": true, "bytes": 3183, - "sha256": "b4ecfad8408c2b1a00fe855cdebd71678bb5efbd5493d06fd01a64f6c4eb0800" + "sha256": "db05339565be76ece69a89ba4b84dc3af44c711dc68860cbf319b86766d44541" }, { "label": "package_verification", @@ -7263,7 +7349,7 @@ "label": "Evidence Consistency", "status": "pass", "objective": "Recommended Skill OS 2.0 implementation PR from the upgrade plan.", - "current": "37 consistency checks", + "current": "38 consistency checks", "command": "make ci-test", "test": "tests/verify_evidence_consistency.py", "evidence": [ @@ -12868,7 +12954,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 244, - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" }, "failures": [], "warnings": [], @@ -17810,7 +17896,7 @@ "block_line_threshold": 1500, "largest_file_lines": 696, "watchlist_count": 0, - "early_watchlist_count": 3, + "early_watchlist_count": 4, "hotspot_count": 0, "blocker_count": 0, "decision": "pass" @@ -17834,12 +17920,20 @@ }, { "path": "tests/verify_evidence_consistency.py", - "lines": 625, + "lines": 671, "kind": "test", "severity": "pass", "early_watch": true, "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." }, + { + "path": "scripts/render_evidence_consistency.py", + "lines": 647, + "kind": "cli-script", + "severity": "pass", + "early_watch": true, + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." + }, { "path": "tests/verify_output_review_adjudication.py", "lines": 599, @@ -17880,14 +17974,6 @@ "early_watch": false, "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." }, - { - "path": "scripts/render_evidence_consistency.py", - "lines": 580, - "kind": "cli-script", - "severity": "pass", - "early_watch": false, - "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." - }, { "path": "tests/verify_world_class_evidence_ledger.py", "lines": 579, @@ -17906,7 +17992,7 @@ }, { "path": "scripts/render_review_studio.py", - "lines": 568, + "lines": 575, "kind": "cli-script", "severity": "pass", "early_watch": false, @@ -17933,11 +18019,19 @@ }, { "path": "tests/verify_evidence_consistency.py", - "lines": 625, + "lines": 671, "kind": "test", "severity": "pass", "early_watch": true, "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." + }, + { + "path": "scripts/render_evidence_consistency.py", + "lines": 647, + "kind": "cli-script", + "severity": "pass", + "early_watch": true, + "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." } ], "hotspots": [], @@ -17955,15 +18049,15 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 797, - "other_text_tokens": 1137373, + "other_text_tokens": 1139278, "estimated_initial_load_tokens": 990, - "estimated_total_text_tokens": 1138170, - "deferred_resource_tokens": 514654, + "estimated_total_text_tokens": 1140075, + "deferred_resource_tokens": 515669, "deferred_resource_warn_threshold": 120000, "deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 453351, + "estimated_tokens": 454366, "file_count": 152 }, { @@ -17985,7 +18079,7 @@ "large_deferred_resource_dirs": [ { "path": "scripts", - "estimated_tokens": 453351, + "estimated_tokens": 454366, "file_count": 152 } ], @@ -18008,7 +18102,7 @@ ], "missing": [], "path": "scripts", - "estimated_tokens": 453351, + "estimated_tokens": 454366, "file_count": 152, "rationale": "Script resources are deterministic deferred tools, not initial-load prompt context." } @@ -19933,7 +20027,7 @@ "adoption_drift": { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-16T21:09:51Z", + "generated_at": "2026-06-16T21:16:41Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", @@ -20531,7 +20625,7 @@ "weekly_curator": { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-17", + "generated_at": "2026-06-16T21:16:12Z", "skill_dir": ".", "decision": "curator-review", "week_id": "2026-W25", @@ -20545,7 +20639,7 @@ "top_score": 88, "skill_count": 12, "actionable_portfolio_issue_count": 0, - "release_lock_ready": true, + "release_lock_ready": false, "evidence_consistency_ok": true, "public_world_class_ready": false, "world_class_pending_count": 4, @@ -20565,7 +20659,7 @@ "top_score": 88, "skill_count": 12, "actionable_portfolio_issue_count": 0, - "release_lock_ready": true, + "release_lock_ready": false, "evidence_consistency_ok": true, "public_world_class_ready": false, "world_class_pending_count": 4, @@ -20818,7 +20912,7 @@ "no_route_opportunity_count": 0 }, "release_state": { - "release_lock_ready": true, + "release_lock_ready": false, "evidence_consistency_ok": true, "public_world_class_ready": false, "world_class_pending_count": 4 @@ -20996,7 +21090,7 @@ "adaptation_proposals": { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-17", + "generated_at": "2026-06-16T21:16:12Z", "skill_dir": ".", "source_patterns": "reports/user_patterns.json", "pattern_count": 5, @@ -27398,7 +27492,7 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2" }, "compatibility": { @@ -27455,7 +27549,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] }, @@ -28491,7 +28585,7 @@ { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "to": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] }, diff --git a/reports/review-viewer.json b/reports/review-viewer.json index 6d04f36a..673852b9 100644 --- a/reports/review-viewer.json +++ b/reports/review-viewer.json @@ -1005,12 +1005,12 @@ "ok": true, "summary": { "reproducibility_ready": true, - "release_lock_ready": true, + "release_lock_ready": false, "methodology_complete": true, "required_artifact_count": 25, "missing_artifact_count": 0, - "evidence_bundle_sha256": "48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb", - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "evidence_bundle_sha256": "c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "output_case_count": 5, "failure_disclosure_count": 3, @@ -1029,15 +1029,15 @@ "world_class_source_pass_count": 10, "world_class_source_blocked_count": 9, "public_claim_ready": false, - "public_claim_blocker_count": 4, + "public_claim_blocker_count": 5, "working_tree_dirty": true, - "changed_file_count": 13, - "source_tree_dirty": false, - "source_changed_file_count": 0, + "changed_file_count": 39, + "source_tree_dirty": true, + "source_changed_file_count": 5, "generated_tree_dirty": true, - "generated_changed_file_count": 13 + "generated_changed_file_count": 34 }, - "commit": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "commit": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "missing_artifacts": [], "limitations": [ "The git commit and dirty flags are generation-time context; release lock is blocked by source changes, while generated evidence artifacts are tracked separately.", @@ -1142,7 +1142,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 244, - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" }, "skill_atlas": { "skill_count": 12, @@ -1180,7 +1180,7 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2" }, "compatibility": { @@ -1312,7 +1312,7 @@ { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "to": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] }, diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json index 0147ce90..e2fe7065 100644 --- a/reports/security_trust_report.json +++ b/reports/security_trust_report.json @@ -23,7 +23,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 244, - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" }, "failures": [], "warnings": [], diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md index 998e49ea..ccce4548 100644 --- a/reports/security_trust_report.md +++ b/reports/security_trust_report.md @@ -16,7 +16,7 @@ - Interactive scripts: `0` - Package hash scope: `source-contract-without-generated-reports` - Package hash files: `244` -- Package SHA256: `f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f` +- Package SHA256: `a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba` ## Failures diff --git a/reports/skill-interpretation.json b/reports/skill-interpretation.json index 1157e767..4e40d4ac 100644 --- a/reports/skill-interpretation.json +++ b/reports/skill-interpretation.json @@ -1009,12 +1009,12 @@ "ok": true, "summary": { "reproducibility_ready": true, - "release_lock_ready": true, + "release_lock_ready": false, "methodology_complete": true, "required_artifact_count": 25, "missing_artifact_count": 0, - "evidence_bundle_sha256": "48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb", - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "evidence_bundle_sha256": "c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "output_case_count": 5, "failure_disclosure_count": 3, @@ -1033,15 +1033,15 @@ "world_class_source_pass_count": 10, "world_class_source_blocked_count": 9, "public_claim_ready": false, - "public_claim_blocker_count": 4, + "public_claim_blocker_count": 5, "working_tree_dirty": true, - "changed_file_count": 13, - "source_tree_dirty": false, - "source_changed_file_count": 0, + "changed_file_count": 39, + "source_tree_dirty": true, + "source_changed_file_count": 5, "generated_tree_dirty": true, - "generated_changed_file_count": 13 + "generated_changed_file_count": 34 }, - "commit": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "commit": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "missing_artifacts": [], "limitations": [ "The git commit and dirty flags are generation-time context; release lock is blocked by source changes, while generated evidence artifacts are tracked separately.", @@ -1146,7 +1146,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 244, - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" }, "skill_atlas": { "skill_count": 12, @@ -1184,7 +1184,7 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2" }, "compatibility": { @@ -1316,7 +1316,7 @@ { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "to": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] }, diff --git a/reports/skill-overview.json b/reports/skill-overview.json index c8c3e4c0..843c6d89 100644 --- a/reports/skill-overview.json +++ b/reports/skill-overview.json @@ -1004,12 +1004,12 @@ "ok": true, "summary": { "reproducibility_ready": true, - "release_lock_ready": true, + "release_lock_ready": false, "methodology_complete": true, "required_artifact_count": 25, "missing_artifact_count": 0, - "evidence_bundle_sha256": "48071ebca4a8bfc9b45e5d4194858870fd0e7f50faff88d4abb79308113126eb", - "source_contract_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "evidence_bundle_sha256": "c31e8bd9e49e60f14344e25ae71dabf911612d9c1ae6aee292ce566c66b88fce", + "source_contract_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2", "output_case_count": 5, "failure_disclosure_count": 3, @@ -1028,15 +1028,15 @@ "world_class_source_pass_count": 10, "world_class_source_blocked_count": 9, "public_claim_ready": false, - "public_claim_blocker_count": 4, + "public_claim_blocker_count": 5, "working_tree_dirty": true, - "changed_file_count": 13, - "source_tree_dirty": false, - "source_changed_file_count": 0, + "changed_file_count": 39, + "source_tree_dirty": true, + "source_changed_file_count": 5, "generated_tree_dirty": true, - "generated_changed_file_count": 13 + "generated_changed_file_count": 34 }, - "commit": "4309d9bbcd21ad8e068cfdad034cd9d5a9e3570f", + "commit": "7050664b482a8ed9ff8d763f08800902fdf1f02d", "missing_artifacts": [], "limitations": [ "The git commit and dirty flags are generation-time context; release lock is blocked by source changes, while generated evidence artifacts are tracked separately.", @@ -1141,7 +1141,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 244, - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" }, "skill_atlas": { "skill_count": 12, @@ -1179,7 +1179,7 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f", + "package_sha256": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba", "archive_sha256": "7db44f059844b71930ea8194a72ba1a316116ca970620de5550d60616e8f23c2" }, "compatibility": { @@ -1311,7 +1311,7 @@ { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "to": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] }, diff --git a/reports/skill_os2_coverage.json b/reports/skill_os2_coverage.json index e85b45d5..d0dc8554 100644 --- a/reports/skill_os2_coverage.json +++ b/reports/skill_os2_coverage.json @@ -613,7 +613,7 @@ "label": "Evidence Consistency", "status": "pass", "objective": "Recommended Skill OS 2.0 implementation PR from the upgrade plan.", - "current": "37 consistency checks", + "current": "38 consistency checks", "command": "make ci-test", "test": "tests/verify_evidence_consistency.py", "evidence": [ diff --git a/reports/skill_os2_coverage.md b/reports/skill_os2_coverage.md index c4952332..502631e8 100644 --- a/reports/skill_os2_coverage.md +++ b/reports/skill_os2_coverage.md @@ -48,7 +48,7 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts, | Registry Package Format | `pass` | registry ok True | `make ci-test` | `tests/verify_registry_audit.py` | | Review Studio 2.0 | `pass` | 16 review gates | `make ci-test` | `tests/verify_review_studio.py` | | Migration V2 Docs | `pass` | migration guide present | `make ci-test` | `docs review` | -| Evidence Consistency | `pass` | 37 consistency checks | `make ci-test` | `tests/verify_evidence_consistency.py` | +| Evidence Consistency | `pass` | 38 consistency checks | `make ci-test` | `tests/verify_evidence_consistency.py` | ## Reference Extension Tracks diff --git a/reports/skillops/daily/2026-06-16.json b/reports/skillops/daily/2026-06-16.json index 9fc34408..673d40e9 100644 --- a/reports/skillops/daily/2026-06-16.json +++ b/reports/skillops/daily/2026-06-16.json @@ -1,7 +1,7 @@ { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-16T21:09:22Z", + "generated_at": "2026-06-16T21:16:12Z", "skill_dir": ".", "decision": "proposal-review", "source_supplied": false, diff --git a/reports/skillops/daily/2026-06-16.md b/reports/skillops/daily/2026-06-16.md index d8dfda0d..e139687d 100644 --- a/reports/skillops/daily/2026-06-16.md +++ b/reports/skillops/daily/2026-06-16.md @@ -1,6 +1,6 @@ # Daily SkillOps Report -Generated at: `2026-06-16T21:09:22Z` +Generated at: `2026-06-16T21:16:12Z` ## Summary diff --git a/reports/skillops/weekly/2026-W25.json b/reports/skillops/weekly/2026-W25.json index 8f21344c..867e7d12 100644 --- a/reports/skillops/weekly/2026-W25.json +++ b/reports/skillops/weekly/2026-W25.json @@ -1,7 +1,7 @@ { "schema_version": "1.0", "ok": true, - "generated_at": "2026-06-17", + "generated_at": "2026-06-16T21:16:12Z", "skill_dir": ".", "decision": "curator-review", "week_id": "2026-W25", @@ -15,7 +15,7 @@ "top_score": 88, "skill_count": 12, "actionable_portfolio_issue_count": 0, - "release_lock_ready": true, + "release_lock_ready": false, "evidence_consistency_ok": true, "public_world_class_ready": false, "world_class_pending_count": 4, @@ -35,7 +35,7 @@ "top_score": 88, "skill_count": 12, "actionable_portfolio_issue_count": 0, - "release_lock_ready": true, + "release_lock_ready": false, "evidence_consistency_ok": true, "public_world_class_ready": false, "world_class_pending_count": 4, @@ -288,7 +288,7 @@ "no_route_opportunity_count": 0 }, "release_state": { - "release_lock_ready": true, + "release_lock_ready": false, "evidence_consistency_ok": true, "public_world_class_ready": false, "world_class_pending_count": 4 diff --git a/reports/skillops/weekly/2026-W25.md b/reports/skillops/weekly/2026-W25.md index a52113b7..30405b95 100644 --- a/reports/skillops/weekly/2026-W25.md +++ b/reports/skillops/weekly/2026-W25.md @@ -1,6 +1,6 @@ # Weekly SkillOps Curator Report -Generated at: `2026-06-17` +Generated at: `2026-06-16T21:16:12Z` Week: `2026-W25` ## Summary @@ -13,7 +13,7 @@ Week: `2026-W25` - top_score: `88` - skill_count: `12` - actionable_portfolio_issue_count: `0` -- release_lock_ready: `True` +- release_lock_ready: `False` - evidence_consistency_ok: `True` - public_world_class_ready: `False` - world_class_pending_count: `4` diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json index 909c6d46..ff6048a2 100644 --- a/reports/upgrade_check.json +++ b/reports/upgrade_check.json @@ -75,7 +75,7 @@ { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f57c75f37b2b029c9b7a42d18d8daa4b5c9bb51defbc8e22774583243473007f" + "to": "a7c24fc193a5b24d2016ac6e6d49120e525f3ef8c266bf66a5894db2c3f99bba" } ] }, diff --git a/scripts/render_evidence_consistency.py b/scripts/render_evidence_consistency.py index 358c7f93..8f2d9719 100644 --- a/scripts/render_evidence_consistency.py +++ b/scripts/render_evidence_consistency.py @@ -55,6 +55,71 @@ def git_worktree_status(skill_dir: Path) -> dict[str, Any]: return {"available": True, "clean": not changes, "changed_file_count": len(changes)} +def build_review_studio_gate_action_mirror_check(review_studio: dict[str, Any]) -> dict[str, Any]: + gates = review_studio.get("gates", []) if isinstance(review_studio.get("gates", []), list) else [] + actions = ( + review_studio.get("review_actions", []) + if isinstance(review_studio.get("review_actions", []), list) + else [] + ) + non_pass_gates = [gate for gate in gates if isinstance(gate, dict) and gate.get("status") != "pass"] + pass_gates = [gate for gate in gates if isinstance(gate, dict) and gate.get("status") == "pass"] + actions_by_gate = { + str(action.get("gate_key", "")): action + for action in actions + if isinstance(action, dict) and str(action.get("gate_key", "")) + } + expected = { + "non_pass_gate_keys": sorted(str(gate.get("key", "")) for gate in non_pass_gates), + "action_gate_keys": sorted(str(gate.get("key", "")) for gate in non_pass_gates), + "pass_gate_action_ids_empty": True, + "gate_action_mirrors": { + str(gate.get("key", "")): { + "review_action_id": f"review-action-{gate.get('key', '')}", + "review_action_status": gate.get("status", ""), + "source_ref_present": True, + "verification_command_present": True, + } + for gate in non_pass_gates + }, + } + actual = { + "non_pass_gate_keys": sorted(str(gate.get("key", "")) for gate in non_pass_gates), + "action_gate_keys": sorted(actions_by_gate), + "pass_gate_action_ids_empty": all(not gate.get("review_action_id") for gate in pass_gates), + "gate_action_mirrors": {}, + } + for gate in non_pass_gates: + key = str(gate.get("key", "")) + action = actions_by_gate.get(key, {}) + actual["gate_action_mirrors"][key] = { + "review_action_id": gate.get("review_action_id", ""), + "review_action_status": gate.get("review_action_status", ""), + "source_ref_present": bool(gate.get("review_action_source_ref_count")), + "verification_command_present": bool(gate.get("review_action_verification_command")), + "top_level_action_id": action.get("action_id", ""), + "top_level_action_status": action.get("status", ""), + "top_level_source_ref_present": bool(action.get("source_refs")), + "top_level_verification_command_present": bool(action.get("verification_command")), + } + expected["gate_action_mirrors"][key]["top_level_action_id"] = f"review-action-{key}" + expected["gate_action_mirrors"][key]["top_level_action_status"] = gate.get("status", "") + expected["gate_action_mirrors"][key]["top_level_source_ref_present"] = True + expected["gate_action_mirrors"][key]["top_level_verification_command_present"] = True + return { + "key": "review-studio-gate-action-mirror", + "label": "Review Studio gates mirror review actions", + "status": "pass" if expected == actual else "fail", + "expected": expected, + "actual": actual, + "paths": [REQUIRED_REPORTS["review_studio"]], + "detail": ( + "Every non-pass Review Studio gate must have exactly one top-level review action and a gate-local " + "action summary with source refs and a verification command." + ), + } + + def build_report(skill_dir: Path, generated_at: str) -> dict[str, Any]: reports: dict[str, dict[str, Any]] = {} text_reports: dict[str, str] = {} @@ -100,6 +165,8 @@ def build_report(skill_dir: Path, generated_at: str) -> dict[str, Any]: context_budget = reports["context_budget"] claim_guard = reports["world_class_claim_guard"] + checks.append(build_review_studio_gate_action_mirror_check(review_studio)) + benchmark_summary = nested(benchmark, ["summary"], {}) adoption_summary = nested(adoption, ["summary"], {}) ledger_summary = nested(ledger, ["summary"], {}) diff --git a/scripts/render_review_studio.py b/scripts/render_review_studio.py index 3dbe5017..f5de668c 100644 --- a/scripts/render_review_studio.py +++ b/scripts/render_review_studio.py @@ -514,6 +514,13 @@ def render_review_studio(skill_dir: Path, output_html: Path | None = None, outpu contract = gate_contract(gates) blockers, warnings = add_blockers_from_gate(gates) review_actions = build_review_actions(gates, skill_dir, output_html, data) + action_by_gate = {str(item.get("gate_key", "")): item for item in review_actions} + for gate in gates: + action = action_by_gate.get(str(gate.get("key", ""))) + gate["review_action_id"] = str(action.get("action_id", "")) if action else "" + gate["review_action_status"] = str(action.get("status", "")) if action else "" + gate["review_action_source_ref_count"] = len(action.get("source_refs", [])) if action else 0 + gate["review_action_verification_command"] = str(action.get("verification_command", "")) if action else "" score = weighted_score(gates) annotation_summary = data["review_annotations"].get("summary", {}) open_annotation_blockers = int(annotation_summary.get("open_blocker_count", 0) or 0) diff --git a/scripts/review_studio_actions.py b/scripts/review_studio_actions.py index 492794c4..771c65bd 100644 --- a/scripts/review_studio_actions.py +++ b/scripts/review_studio_actions.py @@ -297,6 +297,7 @@ def build_review_actions( refs = source_refs(skill_dir, output_html, guidance.get("source_paths", [])) actions.append( { + "action_id": f"review-action-{gate_item['key']}", "gate_key": gate_item["key"], "label": gate_item["label"], "status": gate_item["status"], diff --git a/tests/verify_evidence_consistency.py b/tests/verify_evidence_consistency.py index 4b06826f..7c2f8d89 100644 --- a/tests/verify_evidence_consistency.py +++ b/tests/verify_evidence_consistency.py @@ -165,6 +165,20 @@ def main() -> None: assert checks["skill-ir-evidence-path-contract"]["actual"]["review_studio_evidence_path"] == ( "skill-ir/examples/yao-meta-skill.json" ), checks["skill-ir-evidence-path-contract"] + assert checks["review-studio-gate-action-mirror"]["status"] == "pass", checks[ + "review-studio-gate-action-mirror" + ] + gate_action_mirror = checks["review-studio-gate-action-mirror"]["actual"] + assert gate_action_mirror["non_pass_gate_keys"] == [ + "output-lab", + "review-waivers", + "world-class-evidence", + ], gate_action_mirror + assert gate_action_mirror["action_gate_keys"] == gate_action_mirror["non_pass_gate_keys"], gate_action_mirror + assert gate_action_mirror["pass_gate_action_ids_empty"] is True, gate_action_mirror + assert gate_action_mirror["gate_action_mirrors"]["world-class-evidence"]["source_ref_present"] is True, ( + gate_action_mirror + ) assert checks["overview-benchmark-summary"]["status"] == "pass", checks["overview-benchmark-summary"] assert checks["interpretation-adoption-summary"]["status"] == "pass", checks["interpretation-adoption-summary"] assert checks["coverage-world-class-boundary"]["status"] == "pass", checks["coverage-world-class-boundary"] @@ -397,6 +411,38 @@ def main() -> None: phase_queue_drift_checks["world-class-phase-queue-consistency"] ) + gate_action_drift_root = TMP / "gate-action-drift-skill" + copy_reports(gate_action_drift_root) + gate_action_path = gate_action_drift_root / "reports" / "review-studio.json" + gate_action_payload = json.loads(gate_action_path.read_text(encoding="utf-8")) + for gate in gate_action_payload["gates"]: + if gate["key"] == "world-class-evidence": + gate["review_action_id"] = "" + gate["review_action_source_ref_count"] = 0 + for action in gate_action_payload["review_actions"]: + if action["gate_key"] == "world-class-evidence": + action["source_refs"] = [] + gate_action_path.write_text(json.dumps(gate_action_payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + gate_action_drift_proc = run( + [ + sys.executable, + str(SCRIPT), + str(gate_action_drift_root), + "--output-json", + str(TMP / "gate_action_drift.json"), + "--output-md", + str(TMP / "gate_action_drift.md"), + "--generated-at", + "2026-06-15", + ] + ) + assert gate_action_drift_proc.returncode == 2, gate_action_drift_proc.stdout + gate_action_drift_payload = json.loads(gate_action_drift_proc.stdout) + gate_action_drift_checks = {item["key"]: item for item in gate_action_drift_payload["checks"]} + assert gate_action_drift_checks["review-studio-gate-action-mirror"]["status"] == "fail", ( + gate_action_drift_checks["review-studio-gate-action-mirror"] + ) + release_flow_drift_root = TMP / "release-flow-drift-skill" copy_reports(release_flow_drift_root) agents_path = release_flow_drift_root / "AGENTS.md" diff --git a/tests/verify_review_studio.py b/tests/verify_review_studio.py index 794a45ad..c954ad52 100644 --- a/tests/verify_review_studio.py +++ b/tests/verify_review_studio.py @@ -35,8 +35,20 @@ def main() -> None: "review-waivers", "world-class-evidence", }, payload + action_by_gate = {item["gate_key"]: item for item in payload["review_actions"]} gate_keys = {item["key"] for item in payload["gates"]} assert gate_keys == review_gates.REVIEW_STUDIO_GATE_KEYS, payload + for gate in payload["gates"]: + if gate["status"] == "pass": + assert gate["review_action_id"] == "", gate + assert gate["review_action_source_ref_count"] == 0, gate + assert gate["review_action_verification_command"] == "", gate + continue + action = action_by_gate[gate["key"]] + assert gate["review_action_id"] == action["action_id"] == f"review-action-{gate['key']}", gate + assert gate["review_action_status"] == action["status"] == gate["status"], gate + assert gate["review_action_source_ref_count"] == len(action["source_refs"]) > 0, gate + assert gate["review_action_verification_command"] == action["verification_command"], gate assert set(review_gates.GATE_WEIGHTS) == review_gates.REVIEW_STUDIO_GATE_KEYS, review_gates.GATE_WEIGHTS gate_contract = payload["gate_contract"] assert gate_contract["ok"] is True, gate_contract