diff --git a/registry/index.json b/registry/index.json index cd031c05..ff203d48 100644 --- a/registry/index.json +++ b/registry/index.json @@ -16,7 +16,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" } ] } diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json index e50d5a0a..44be76e1 100644 --- a/registry/packages/yao-meta-skill.json +++ b/registry/packages/yao-meta-skill.json @@ -16,8 +16,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20", - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, "compatibility": { "openai": "pass", @@ -48,7 +48,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" diff --git a/reports/adoption_drift_report.json b/reports/adoption_drift_report.json index 5d2367ca..70cca4a0 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-13T21:28:44Z", + "generated_at": "2026-06-13T21:39:40Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json index a79b471d..aa3c7574 100644 --- a/reports/architecture_maintainability.json +++ b/reports/architecture_maintainability.json @@ -4,15 +4,15 @@ "generated_at": "2026-06-14", "skill_dir": ".", "summary": { - "python_file_count": 145, - "script_file_count": 89, + "python_file_count": 146, + "script_file_count": 90, "test_file_count": 56, - "internal_module_count": 18, + "internal_module_count": 19, "cli_script_count": 72, "command_handler_count": 33, "warn_line_threshold": 900, "block_line_threshold": 1500, - "largest_file_lines": 895, + "largest_file_lines": 899, "hotspot_count": 0, "blocker_count": 0, "decision": "pass" @@ -20,14 +20,14 @@ "largest_files": [ { "path": "scripts/render_review_studio.py", - "lines": 895, + "lines": 899, "kind": "cli-script", "severity": "pass", "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." }, { "path": "tests/verify_yao_cli.py", - "lines": 845, + "lines": 848, "kind": "test", "severity": "pass", "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md index a745a7c4..558b3e36 100644 --- a/reports/architecture_maintainability.md +++ b/reports/architecture_maintainability.md @@ -5,13 +5,13 @@ Generated at: `2026-06-14` ## Summary - decision: `pass` -- python files: `145` -- scripts: `89` +- python files: `146` +- scripts: `90` - tests: `56` -- internal modules: `18` +- internal modules: `19` - CLI scripts: `72` - Yao CLI command handlers: `33` -- largest file lines: `895` +- largest file lines: `899` - hotspots: `0` - blockers: `0` @@ -25,8 +25,8 @@ No file-size hotspots found. | File | Lines | Kind | Severity | | --- | ---: | --- | --- | -| `scripts/render_review_studio.py` | `895` | `cli-script` | `pass` | -| `tests/verify_yao_cli.py` | `845` | `test` | `pass` | +| `scripts/render_review_studio.py` | `899` | `cli-script` | `pass` | +| `tests/verify_yao_cli.py` | `848` | `test` | `pass` | | `scripts/yao.py` | `839` | `cli-script` | `pass` | | `scripts/skill_report_model.py` | `782` | `internal-module` | `pass` | | `scripts/compile_skill.py` | `734` | `cli-script` | `pass` | diff --git a/reports/benchmark_reproducibility.json b/reports/benchmark_reproducibility.json index 0df08e12..bbbed449 100644 --- a/reports/benchmark_reproducibility.json +++ b/reports/benchmark_reproducibility.json @@ -3,13 +3,12 @@ "ok": true, "generated_at": "2026-06-14", "skill_dir": ".", - "commit": "088904f519e04981f30c5c8c225de90a4aee2682", + "commit": "810885d70e6ed0fa6b19cd5a0edf971057215f9d", "git_status": { "available": true, "dirty": true, - "changed_file_count": 31, + "changed_file_count": 42, "sample": [ - " M evidence/world_class/README.md", " M registry/index.json", " M registry/packages/yao-meta-skill.json", " M reports/adoption_drift_report.json", @@ -17,10 +16,11 @@ " M reports/architecture_maintainability.md", " M reports/benchmark_reproducibility.json", " M reports/benchmark_reproducibility.md", + " M reports/compiled_targets.json", " M reports/context_budget.json", + " M reports/install_simulation.json", " M reports/output_execution_runs.json", - " M reports/output_execution_runs.md", - " M reports/package_verification.json" + " M reports/output_execution_runs.md" ] }, "summary": { @@ -42,7 +42,7 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 31 + "changed_file_count": 42 }, "methodology": { "path": "reports/benchmark_methodology.md", @@ -115,8 +115,8 @@ "label": "output_execution", "path": "reports/output_execution_runs.json", "exists": true, - "bytes": 7966, - "sha256": "9bc795936ec9610a8a6f81e692c8839b9dcac917c9839e1b99c5460ba8919061" + "bytes": 7967, + "sha256": "c85fa48112afba2e022d3cf25f57e3062299b273bfa378777aaef11b1c84dc5d" }, { "label": "blind_review", @@ -129,8 +129,8 @@ "label": "review_adjudication", "path": "reports/output_review_adjudication.json", "exists": true, - "bytes": 2431, - "sha256": "ddd9af90d42e2858d629ebe3f1d7505a675f7d95517fcd9a965c80102a63158d" + "bytes": 9125, + "sha256": "5765254c430947c7e2b05883831d7db0b886d607b59f9a8a2602dcfa925f400b" }, { "label": "trigger_scorecard", @@ -150,43 +150,43 @@ "label": "trust_report", "path": "reports/security_trust_report.json", "exists": true, - "bytes": 91959, - "sha256": "29451ca6127d5d049f04978928110e97935e100a0e12f125ef7b4d4aae129271" + "bytes": 92549, + "sha256": "408b3a7c09218f486a29059a28a0aec12016299453ab256d61874e986389cf09" }, { "label": "python_compatibility", "path": "reports/python_compatibility.json", "exists": true, - "bytes": 19297, - "sha256": "f65de3392609ef1e9e2b9dde7991ba0d84b3803b128bd0a1277b2453eb05b41c" + "bytes": 19427, + "sha256": "809d07d66de33719b160b1a20d3bc86c546b3a69051cc662c840e5d16e10f5b8" }, { "label": "registry_audit", "path": "reports/registry_audit.json", "exists": true, "bytes": 3183, - "sha256": "6f2179a1a51a05a1e4455ed113fa2499e62d643a046aab2735fb516d6f2fad35" + "sha256": "2a086d4698852ccd6f99e954f5aebd0fea6e4aad1b5428d5c21fee3a222a56bc" }, { "label": "package_verification", "path": "reports/package_verification.json", "exists": true, "bytes": 19325, - "sha256": "69864577d09542dc4b20c4976516c7a6f20bdb95d76dd38e8fcc4f88691bceba" + "sha256": "9a48d94965ccaffd9021c0d58f6cdb1542dd0e3472adcc5e8495d3535b75c1a5" }, { "label": "install_simulation", "path": "reports/install_simulation.json", "exists": true, "bytes": 8557, - "sha256": "11985a19c3bcbe02fbe0146f57eb11992b3f298e99bad77149f0039787a96f18" + "sha256": "5e6e501706588c0eb431d71af38c4789c40991acca4531f667acb6a0610a70c3" }, { "label": "skill_os2_audit", "path": "reports/skill_os2_audit.json", "exists": true, "bytes": 13946, - "sha256": "0fcd7f82c65f1fd85323919e573e3b4910738684440acaf29ed2c6ebe26bd611" + "sha256": "ed1be043898a5550be37c93b3d8723dbaf2d537af3005a8a6476ec6d0d266318" }, { "label": "world_class_evidence_plan", diff --git a/reports/benchmark_reproducibility.md b/reports/benchmark_reproducibility.md index 4cb7041b..840bbe39 100644 --- a/reports/benchmark_reproducibility.md +++ b/reports/benchmark_reproducibility.md @@ -1,7 +1,7 @@ # Benchmark Reproducibility Generated at: `2026-06-14` -Commit: `088904f519e04981f30c5c8c225de90a4aee2682` +Commit: `810885d70e6ed0fa6b19cd5a0edf971057215f9d` Working tree dirty at generation: `true` ## Summary @@ -16,7 +16,7 @@ Working tree dirty at generation: `true` - provider evidence complete: `false` - human review complete: `false` - world-class ready: `false` -- changed files at generation: `31` +- changed files at generation: `42` This report proves local benchmark reproducibility only. It keeps external provider and human-review gaps visible instead of counting them as complete. @@ -40,17 +40,17 @@ 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 | `9bc795936ec9` | +| output_execution | `reports/output_execution_runs.json` | present | `c85fa48112af` | | blind_review | `reports/output_blind_review_pack.json` | present | `bbe2db8ec277` | -| review_adjudication | `reports/output_review_adjudication.json` | present | `ddd9af90d42e` | +| review_adjudication | `reports/output_review_adjudication.json` | present | `5765254c4309` | | trigger_scorecard | `reports/route_scorecard.json` | present | `c164e83e36d0` | | runtime_conformance | `reports/conformance_matrix.json` | present | `8251329e663d` | -| trust_report | `reports/security_trust_report.json` | present | `29451ca6127d` | -| python_compatibility | `reports/python_compatibility.json` | present | `f65de3392609` | -| registry_audit | `reports/registry_audit.json` | present | `6f2179a1a51a` | -| package_verification | `reports/package_verification.json` | present | `69864577d095` | -| install_simulation | `reports/install_simulation.json` | present | `11985a19c3bc` | -| skill_os2_audit | `reports/skill_os2_audit.json` | present | `0fcd7f82c65f` | +| trust_report | `reports/security_trust_report.json` | present | `408b3a7c0921` | +| python_compatibility | `reports/python_compatibility.json` | present | `809d07d66de3` | +| registry_audit | `reports/registry_audit.json` | present | `2a086d469885` | +| package_verification | `reports/package_verification.json` | present | `9a48d94965cc` | +| install_simulation | `reports/install_simulation.json` | present | `5e6e50170658` | +| skill_os2_audit | `reports/skill_os2_audit.json` | present | `ed1be043898a` | | world_class_evidence_plan | `reports/world_class_evidence_plan.json` | present | `ed1274b7c18c` | | world_class_evidence_ledger | `reports/world_class_evidence_ledger.json` | present | `5ed043491c3d` | | world_class_evidence_intake | `reports/world_class_evidence_intake.json` | present | `6eae947a6e2f` | diff --git a/reports/compiled_targets.json b/reports/compiled_targets.json index bbc29e28..5d67f6ff 100644 --- a/reports/compiled_targets.json +++ b/reports/compiled_targets.json @@ -208,6 +208,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -223,8 +224,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -1049,6 +1049,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -1064,8 +1065,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -1890,6 +1890,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -1905,8 +1906,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -2715,6 +2715,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -2730,8 +2731,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -3540,6 +3540,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -3555,8 +3556,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", diff --git a/reports/context_budget.json b/reports/context_budget.json index 8f37cc08..6c68778e 100644 --- a/reports/context_budget.json +++ b/reports/context_budget.json @@ -6,10 +6,10 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1096197, + "other_text_tokens": 1105224, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1096948, - "relevant_file_count": 477, + "estimated_total_text_tokens": 1105975, + "relevant_file_count": 479, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 diff --git a/reports/install_simulation.json b/reports/install_simulation.json index 30cde14b..67ca2c32 100644 --- a/reports/install_simulation.json +++ b/reports/install_simulation.json @@ -8,7 +8,7 @@ "installed_skill_dir": "[temporary-install-root]/yao-meta-skill", "summary": { "archive_present": true, - "archive_entry_count": 557, + "archive_entry_count": 558, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json index 7c0f15d7..d883d398 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": 27.65, + "duration_ms": 29.36, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -62,7 +62,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.96, + "duration_ms": 28.61, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -85,7 +85,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.98, + "duration_ms": 28.44, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -113,7 +113,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.3, + "duration_ms": 28.46, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -136,7 +136,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.47, + "duration_ms": 28.04, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -164,7 +164,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.72, + "duration_ms": 28.85, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -187,7 +187,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.11, + "duration_ms": 28.63, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -214,7 +214,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.16, + "duration_ms": 28.65, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -237,7 +237,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.95, + "duration_ms": 28.69, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -266,7 +266,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.03, + "duration_ms": 29.97, "provider": "local-output-eval-runner", "model": "", "usage": { diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md index 8e551415..c0d7adf2 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 | 27.65 | 33 | 0.0 | pass | -| skill-package-contract | with_skill | command | local-output-eval-runner | 27.96 | 73 | 100.0 | pass | -| output-eval-expectation | baseline | command | local-output-eval-runner | 27.98 | 36 | 0.0 | pass | -| output-eval-expectation | with_skill | command | local-output-eval-runner | 28.3 | 80 | 100.0 | pass | -| ir-before-packaging | baseline | command | local-output-eval-runner | 29.47 | 33 | 0.0 | pass | -| ir-before-packaging | with_skill | command | local-output-eval-runner | 28.72 | 80 | 100.0 | pass | -| near-neighbor-boundary | baseline | command | local-output-eval-runner | 29.11 | 36 | 0.0 | pass | -| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 28.16 | 65 | 100.0 | pass | -| file-backed-governed-package | baseline | command | local-output-eval-runner | 27.95 | 37 | 0.0 | pass | -| file-backed-governed-package | with_skill | command | local-output-eval-runner | 28.03 | 98 | 100.0 | pass | +| skill-package-contract | baseline | command | local-output-eval-runner | 29.36 | 33 | 0.0 | pass | +| skill-package-contract | with_skill | command | local-output-eval-runner | 28.61 | 73 | 100.0 | pass | +| output-eval-expectation | baseline | command | local-output-eval-runner | 28.44 | 36 | 0.0 | pass | +| output-eval-expectation | with_skill | command | local-output-eval-runner | 28.46 | 80 | 100.0 | pass | +| ir-before-packaging | baseline | command | local-output-eval-runner | 28.04 | 33 | 0.0 | pass | +| ir-before-packaging | with_skill | command | local-output-eval-runner | 28.85 | 80 | 100.0 | pass | +| near-neighbor-boundary | baseline | command | local-output-eval-runner | 28.63 | 36 | 0.0 | pass | +| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 28.65 | 65 | 100.0 | pass | +| file-backed-governed-package | baseline | command | local-output-eval-runner | 28.69 | 37 | 0.0 | pass | +| file-backed-governed-package | with_skill | command | local-output-eval-runner | 29.97 | 98 | 100.0 | pass | ## Next Fixes diff --git a/reports/output_review_adjudication.json b/reports/output_review_adjudication.json index 178315f9..f484553c 100644 --- a/reports/output_review_adjudication.json +++ b/reports/output_review_adjudication.json @@ -12,7 +12,11 @@ "pending_answer_hidden_count": 5, "agreement_rate": null, "needs_review": true, - "failure_count": 0 + "failure_count": 0, + "reviewer_checklist_count": 5, + "reviewer_checklist_pending_count": 5, + "reviewer_checklist_invalid_count": 0, + "reviewer_checklist_ready_count": 0 }, "reviewer": "", "reviewed_at": "", @@ -76,5 +80,137 @@ "prompt": "Turn the attached release brief source into a governed skill package." } ], + "reviewer_checklist": [ + { + "case_id": "skill-package-contract", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "Turn this repeated workflow into a reusable team skill package.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + }, + { + "case_id": "output-eval-expectation", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "Upgrade this production skill so we know whether the generated output is better than baseline.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + }, + { + "case_id": "ir-before-packaging", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "Package this skill for OpenAI, Claude, Agent Skills, and generic targets.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + }, + { + "case_id": "near-neighbor-boundary", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "I only need a one-off summary of these notes, not a reusable process.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + }, + { + "case_id": "file-backed-governed-package", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "Turn the attached release brief source into a governed skill package.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + } + ], "failures": [] } diff --git a/reports/output_review_adjudication.md b/reports/output_review_adjudication.md index 48d85c16..2fc622ce 100644 --- a/reports/output_review_adjudication.md +++ b/reports/output_review_adjudication.md @@ -9,6 +9,7 @@ This report adjudicates reviewer choices from the blind A/B output review pack a - Invalid decisions: `0` - Answer keys revealed: `0` - Pending/invalid answers hidden: `5` +- Reviewer checklist: `0` ready / `5` total No reviewer decisions recorded yet. @@ -25,6 +26,146 @@ Expected winners stay hidden until a valid reviewer decision is recorded. | near-neighbor-boundary | pending | hidden | pending | | | | file-backed-governed-package | pending | hidden | pending | | | +## Reviewer Checklist + +| Case | Readiness | Answer key | Decision file | +| --- | --- | --- | --- | +| `skill-package-contract` | `awaiting-decision` | `hidden` | `reports/output_review_decisions.json` | +| `output-eval-expectation` | `awaiting-decision` | `hidden` | `reports/output_review_decisions.json` | +| `ir-before-packaging` | `awaiting-decision` | `hidden` | `reports/output_review_decisions.json` | +| `near-neighbor-boundary` | `awaiting-decision` | `hidden` | `reports/output_review_decisions.json` | +| `file-backed-governed-package` | `awaiting-decision` | `hidden` | `reports/output_review_decisions.json` | + +### skill-package-contract + +- readiness: `awaiting-decision` +- blocking reason: Reviewer has not selected A or B yet; answer key remains hidden. +- answer key visible: `false` +- blind pack: `reports/output_blind_review_pack.json` +- decisions: `reports/output_review_decisions.json` + +#### Commands + +- write_template: `python3 scripts/adjudicate_output_review.py --write-template` +- adjudicate: `python3 scripts/yao.py output-review` +- refresh_review_studio: `python3 scripts/yao.py review-studio .` + +#### Required Fields + +- winner_variant: A or B after reading only the blind review pack. +- confidence: Optional number from 0 to 1. +- reason: Short rationale; do not reveal baseline or with-skill labels before adjudication. + +#### Privacy Contract + +- Do not paste raw private user data into the decision reason. +- Do not open the answer key before reviewer choices are recorded. +- Leave winner_variant blank when the reviewer is not ready to decide. + +### output-eval-expectation + +- readiness: `awaiting-decision` +- blocking reason: Reviewer has not selected A or B yet; answer key remains hidden. +- answer key visible: `false` +- blind pack: `reports/output_blind_review_pack.json` +- decisions: `reports/output_review_decisions.json` + +#### Commands + +- write_template: `python3 scripts/adjudicate_output_review.py --write-template` +- adjudicate: `python3 scripts/yao.py output-review` +- refresh_review_studio: `python3 scripts/yao.py review-studio .` + +#### Required Fields + +- winner_variant: A or B after reading only the blind review pack. +- confidence: Optional number from 0 to 1. +- reason: Short rationale; do not reveal baseline or with-skill labels before adjudication. + +#### Privacy Contract + +- Do not paste raw private user data into the decision reason. +- Do not open the answer key before reviewer choices are recorded. +- Leave winner_variant blank when the reviewer is not ready to decide. + +### ir-before-packaging + +- readiness: `awaiting-decision` +- blocking reason: Reviewer has not selected A or B yet; answer key remains hidden. +- answer key visible: `false` +- blind pack: `reports/output_blind_review_pack.json` +- decisions: `reports/output_review_decisions.json` + +#### Commands + +- write_template: `python3 scripts/adjudicate_output_review.py --write-template` +- adjudicate: `python3 scripts/yao.py output-review` +- refresh_review_studio: `python3 scripts/yao.py review-studio .` + +#### Required Fields + +- winner_variant: A or B after reading only the blind review pack. +- confidence: Optional number from 0 to 1. +- reason: Short rationale; do not reveal baseline or with-skill labels before adjudication. + +#### Privacy Contract + +- Do not paste raw private user data into the decision reason. +- Do not open the answer key before reviewer choices are recorded. +- Leave winner_variant blank when the reviewer is not ready to decide. + +### near-neighbor-boundary + +- readiness: `awaiting-decision` +- blocking reason: Reviewer has not selected A or B yet; answer key remains hidden. +- answer key visible: `false` +- blind pack: `reports/output_blind_review_pack.json` +- decisions: `reports/output_review_decisions.json` + +#### Commands + +- write_template: `python3 scripts/adjudicate_output_review.py --write-template` +- adjudicate: `python3 scripts/yao.py output-review` +- refresh_review_studio: `python3 scripts/yao.py review-studio .` + +#### Required Fields + +- winner_variant: A or B after reading only the blind review pack. +- confidence: Optional number from 0 to 1. +- reason: Short rationale; do not reveal baseline or with-skill labels before adjudication. + +#### Privacy Contract + +- Do not paste raw private user data into the decision reason. +- Do not open the answer key before reviewer choices are recorded. +- Leave winner_variant blank when the reviewer is not ready to decide. + +### file-backed-governed-package + +- readiness: `awaiting-decision` +- blocking reason: Reviewer has not selected A or B yet; answer key remains hidden. +- answer key visible: `false` +- blind pack: `reports/output_blind_review_pack.json` +- decisions: `reports/output_review_decisions.json` + +#### Commands + +- write_template: `python3 scripts/adjudicate_output_review.py --write-template` +- adjudicate: `python3 scripts/yao.py output-review` +- refresh_review_studio: `python3 scripts/yao.py review-studio .` + +#### Required Fields + +- winner_variant: A or B after reading only the blind review pack. +- confidence: Optional number from 0 to 1. +- reason: Short rationale; do not reveal baseline or with-skill labels before adjudication. + +#### Privacy Contract + +- Do not paste raw private user data into the decision reason. +- Do not open the answer key before reviewer choices are recorded. +- Leave winner_variant blank when the reviewer is not ready to decide. + ## Next Fixes - Keep the blind review pack separate from the answer key until decisions are recorded. diff --git a/reports/package_verification.json b/reports/package_verification.json index 31298d3d..48e9d396 100644 --- a/reports/package_verification.json +++ b/reports/package_verification.json @@ -8,8 +8,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", - "archive_entry_count": 557, + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", + "archive_entry_count": 558, "failure_count": 0, "warning_count": 0 }, diff --git a/reports/package_verification.md b/reports/package_verification.md index a0fbe74a..f4d51886 100644 --- a/reports/package_verification.md +++ b/reports/package_verification.md @@ -4,7 +4,7 @@ - Package directory: `dist` - Targets: `4 / 4` adapters present - Archive present: `True` -- Archive SHA256: `2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2` +- Archive SHA256: `5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a` - Failures: `0` - Warnings: `0` diff --git a/reports/python_compatibility.json b/reports/python_compatibility.json index e235bf3e..b1c9b327 100644 --- a/reports/python_compatibility.json +++ b/reports/python_compatibility.json @@ -5,7 +5,7 @@ "root": ".", "summary": { "target_python": "3.11", - "file_count": 148, + "file_count": 149, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -418,6 +418,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/review_studio_output_review.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/review_studio_world_class.py", "ok": true, diff --git a/reports/python_compatibility.md b/reports/python_compatibility.md index 3df4d50b..38fb4b1a 100644 --- a/reports/python_compatibility.md +++ b/reports/python_compatibility.md @@ -6,7 +6,7 @@ Generated at: `2026-06-14` - decision: `pass` - target python: `3.11` -- files scanned: `148` +- files scanned: `149` - issues: `0` - syntax errors: `0` - f-string 3.11 violations: `0` diff --git a/reports/registry_audit.json b/reports/registry_audit.json index c2885a32..59a8b631 100644 --- a/reports/registry_audit.json +++ b/reports/registry_audit.json @@ -21,8 +21,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20", - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, "compatibility": { "openai": "pass", @@ -53,7 +53,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -78,7 +78,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" } ] }, diff --git a/reports/registry_audit.md b/reports/registry_audit.md index 39a27c8a..cc44979e 100644 --- a/reports/registry_audit.md +++ b/reports/registry_audit.md @@ -6,8 +6,8 @@ - Maturity: `governed` - Owner: `Yao Team` - License: `MIT` -- Package SHA256: `f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20` -- Archive SHA256: `2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2` +- Package SHA256: `60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c` +- Archive SHA256: `5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a` - Install simulated: `True` ## Compatibility diff --git a/reports/review-studio.html b/reports/review-studio.html index 26667a79..5f8eb2bd 100644 --- a/reports/review-studio.html +++ b/reports/review-studio.html @@ -220,6 +220,77 @@ margin: 0; padding-left: 18px; } + .output-review-grid { + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 16px; + margin-top: 16px; + } + .output-review-card { + border: 1px solid var(--line); + border-radius: 8px; + padding: 18px; + background: #fff; + display: grid; + gap: 12px; + min-width: 0; + } + .output-review-card.awaiting-decision, + .output-review-card.fix-decision { border-left: 4px solid var(--warn); } + .output-review-card.adjudicated { border-left: 4px solid var(--pass); } + .output-review-card span, + .output-review-card p, + .output-review-card dd, + .output-review-card li { + color: var(--muted); + font-size: 14px; + overflow-wrap: anywhere; + } + .output-review-card dl { + display: grid; + grid-template-columns: 86px minmax(0, 1fr); + gap: 6px 10px; + margin: 0; + } + .output-review-card dt { color: var(--ink); font-size: 14px; } + .output-review-card dd { margin: 0; min-width: 0; } + .output-review-steps { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 12px; + border-top: 1px solid var(--line); + padding-top: 12px; + } + .output-review-steps h4 { + margin: 0 0 6px; + color: var(--ink); + font-size: 14px; + font-weight: 500; + } + .output-review-steps ul { + margin: 0; + padding-left: 18px; + } + .output-review-commands, + .output-review-fields { + list-style: none; + padding: 0; + display: grid; + gap: 8px; + } + .output-review-commands li, + .output-review-fields li { + display: grid; + gap: 2px; + min-width: 0; + padding: 8px 0 0; + border-top: 1px solid var(--line); + } + .output-review-commands code { + overflow-wrap: anywhere; + white-space: normal; + display: block; + } .world-intake-grid { display: grid; grid-template-columns: minmax(0, 1fr); @@ -340,7 +411,7 @@ font-size: 13px; } @media (max-width: 980px) { - .metrics, .gates, .twocol, .actions-grid, .annotations-grid, .world-evidence-grid, .world-evidence-columns, .world-intake-grid, .world-intake-steps, .kv-grid { grid-template-columns: 1fr; } + .metrics, .gates, .twocol, .actions-grid, .annotations-grid, .output-review-grid, .output-review-steps, .world-evidence-grid, .world-evidence-columns, .world-intake-grid, .world-intake-steps, .kv-grid { grid-template-columns: 1fr; } main { padding: 32px 18px 60px; } nav { justify-content: flex-start; overflow-x: auto; flex-wrap: nowrap; } nav a { flex: 0 0 auto; } @@ -363,12 +434,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 A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

89 scripts scanned; secrets found

Py Compat0

148 files scanned for Python 3.11

Arch Debt0

895 largest lines; 33 CLI handlers

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

68 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

557 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 A/B0/5

adjudication decisions; pending 5

Blueprint20/20

2.0 coverage; evidence pending 4

Runtime5/5

target conformance pass rate

Perm Probe4/4

0 native enforcement targets

Trust0

90 scripts scanned; secrets found

Py Compat0

149 files scanned for Python 3.11

Arch Debt0

899 largest lines; 33 CLI handlers

Atlas5

12 scanned skills; route collisions

Driftlow

1 metadata events; 0 missed triggers

Waivers0

0 gates covered; human risk decisions

Intake4/4

0 valid submissions; 0 invalid

Claim Guard0

68 public surfaces scanned

Notes0/0

0 open blocker annotations

Registry1.1.0

5 targets; MIT license

Archivepass

558 zip entries; package verification

Installpass

4 adapters; 12 permissions enforced; 0 permission failures

Upgrademinor

declared minor; 0 breaking changes

审查闸门

-
通过

意图画布

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

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

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

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 944/1000; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

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

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
通过

架构维护

145 Python files; 0 hotspots; 0 blockers; largest 895 lines; 33 CLI handlers

reports/architecture_maintainability.json 证据
通过

权限批准

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

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

权限探针

4/4 targets probed; native 0; metadata fallback 4; 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 0; missed 0; bad-output 0; risk low

reports/adoption_drift_report.json 证据
关注

人工批准

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; overclaim guard true

reports/world_class_evidence_ledger.json 证据
通过

注册审计

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

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

发布路线

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

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

意图画布

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

reports/intent-confidence.json 证据
通过

触发实验

13 trigger cases; 0 misroutes; 0 ambiguous

reports/route_scorecard.json 证据
关注

输出实验

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

reports/output_quality_scorecard.json 证据
通过

上下文

initial load 944/1000; quality density 137.7

reports/context_budget.json 证据
通过

运行矩阵

5 / 5 targets pass

reports/conformance_matrix.json 证据
通过

信任报告

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

reports/security_trust_report.json 证据
通过

Python 兼容

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

reports/python_compatibility.json 证据
通过

架构维护

146 Python files; 0 hotspots; 0 blockers; largest 899 lines; 33 CLI handlers

reports/architecture_maintainability.json 证据
通过

权限批准

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

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

权限探针

4/4 targets probed; native 0; metadata fallback 4; 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 0; missed 0; bad-output 0; risk low

reports/adoption_drift_report.json 证据
关注

人工批准

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; 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

@@ -410,9 +481,10 @@

盲评包

Pair Count
5
Answer Key Separate
With Skill Hidden Count
5
-

审定报告

Pair Count
5
Judgment Count
0
待审
5
Agreement Count
0
Disagreement Count
0
Invalid Decision Count
0
答案揭示
0
答案隐藏
5
+

审定报告

Pair Count
5
Judgment Count
0
待审
5
Agreement Count
0
Disagreement Count
0
Invalid Decision Count
0
答案揭示
0
答案隐藏
5
Reviewer Checklist Count
5
Reviewer Checklist Pending Count
5
+

评审清单

每张卡片对应一个 blind A/B case,说明当前是否待判、答案是否仍隐藏、应填写的决策文件、有效字段和复跑命令。

awaiting-decision · 答案隐藏

skill-package-contract

Reviewer has not selected A or B yet; answer key remains hidden.

盲评包
reports/output_blind_review_pack.json
决策表
reports/output_review_decisions.json
提示词
Turn this repeated workflow into a reusable team skill package.

操作命令

  • write_templatepython3 scripts/adjudicate_output_review.py --write-template
  • adjudicatepython3 scripts/yao.py output-review
  • refresh_review_studiopython3 scripts/yao.py review-studio .

字段要求

  • winner_variantA or B after reading only the blind review pack.
  • confidenceOptional number from 0 to 1.
  • reasonShort rationale; do not reveal baseline or with-skill labels before adjudication.

隐私边界

  • Do not paste raw private user data into the decision reason.
  • Do not open the answer key before reviewer choices are recorded.
  • Leave winner_variant blank when the reviewer is not ready to decide.
awaiting-decision · 答案隐藏

output-eval-expectation

Reviewer has not selected A or B yet; answer key remains hidden.

盲评包
reports/output_blind_review_pack.json
决策表
reports/output_review_decisions.json
提示词
Upgrade this production skill so we know whether the generated output is better than baseline.

操作命令

  • write_templatepython3 scripts/adjudicate_output_review.py --write-template
  • adjudicatepython3 scripts/yao.py output-review
  • refresh_review_studiopython3 scripts/yao.py review-studio .

字段要求

  • winner_variantA or B after reading only the blind review pack.
  • confidenceOptional number from 0 to 1.
  • reasonShort rationale; do not reveal baseline or with-skill labels before adjudication.

隐私边界

  • Do not paste raw private user data into the decision reason.
  • Do not open the answer key before reviewer choices are recorded.
  • Leave winner_variant blank when the reviewer is not ready to decide.
awaiting-decision · 答案隐藏

ir-before-packaging

Reviewer has not selected A or B yet; answer key remains hidden.

盲评包
reports/output_blind_review_pack.json
决策表
reports/output_review_decisions.json
提示词
Package this skill for OpenAI, Claude, Agent Skills, and generic targets.

操作命令

  • write_templatepython3 scripts/adjudicate_output_review.py --write-template
  • adjudicatepython3 scripts/yao.py output-review
  • refresh_review_studiopython3 scripts/yao.py review-studio .

字段要求

  • winner_variantA or B after reading only the blind review pack.
  • confidenceOptional number from 0 to 1.
  • reasonShort rationale; do not reveal baseline or with-skill labels before adjudication.

隐私边界

  • Do not paste raw private user data into the decision reason.
  • Do not open the answer key before reviewer choices are recorded.
  • Leave winner_variant blank when the reviewer is not ready to decide.
awaiting-decision · 答案隐藏

near-neighbor-boundary

Reviewer has not selected A or B yet; answer key remains hidden.

盲评包
reports/output_blind_review_pack.json
决策表
reports/output_review_decisions.json
提示词
I only need a one-off summary of these notes, not a reusable process.

操作命令

  • write_templatepython3 scripts/adjudicate_output_review.py --write-template
  • adjudicatepython3 scripts/yao.py output-review
  • refresh_review_studiopython3 scripts/yao.py review-studio .

字段要求

  • winner_variantA or B after reading only the blind review pack.
  • confidenceOptional number from 0 to 1.
  • reasonShort rationale; do not reveal baseline or with-skill labels before adjudication.

隐私边界

  • Do not paste raw private user data into the decision reason.
  • Do not open the answer key before reviewer choices are recorded.
  • Leave winner_variant blank when the reviewer is not ready to decide.
awaiting-decision · 答案隐藏

file-backed-governed-package

Reviewer has not selected A or B yet; answer key remains hidden.

盲评包
reports/output_blind_review_pack.json
决策表
reports/output_review_decisions.json
提示词
Turn the attached release brief source into a governed skill package.

操作命令

  • write_templatepython3 scripts/adjudicate_output_review.py --write-template
  • adjudicatepython3 scripts/yao.py output-review
  • refresh_review_studiopython3 scripts/yao.py review-studio .

字段要求

  • winner_variantA or B after reading only the blind review pack.
  • confidenceOptional number from 0 to 1.
  • reasonShort rationale; do not reveal baseline or with-skill labels before adjudication.

隐私边界

  • Do not paste raw private user data into the decision reason.
  • Do not open the answer key before reviewer choices are recorded.
  • Leave winner_variant blank when the reviewer is not ready to decide.

发布标准

Governed 和 Library 至少需要 5 个 output eval cases,并覆盖 file-backed、near-neighbor、boundary case、execution evidence 和 blind A/B review pack。

人工结论

没有 reviewer 决策时只显示 pending;只有真实决策文件会进入一致率和分歧统计。

@@ -434,12 +506,12 @@
-

信任报告

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

信任报告

Secret
0
脚本数
90
网络脚本
3
Help 失败
0
包体哈希
60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c

安全边界

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

-

Python 兼容

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

Python 兼容

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

解释器边界

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

@@ -502,12 +574,12 @@

注册审计

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

-

包体元数据

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

包体元数据

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

发布路线

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

-

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
557
失败数
0
警告数
0
归档哈希
2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2
+

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
558
失败数
0
警告数
0
归档哈希
5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a
diff --git a/reports/review-studio.json b/reports/review-studio.json index 28c73a23..18687cbf 100644 --- a/reports/review-studio.json +++ b/reports/review-studio.json @@ -59,7 +59,7 @@ "key": "trust-report", "label": "信任报告", "status": "pass", - "detail": "0 secrets; 89 scripts; 3 network-capable scripts; 0 help smoke failures", + "detail": "0 secrets; 90 scripts; 3 network-capable scripts; 0 help smoke failures", "evidence": "reports/security_trust_report.json", "link": "security_trust_report.md" }, @@ -67,7 +67,7 @@ "key": "python-compat", "label": "Python 兼容", "status": "pass", - "detail": "Python 3.11; 148 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards", + "detail": "Python 3.11; 149 files; 0 compatibility issues; 0 syntax; 0 f-string 3.11 hazards", "evidence": "reports/python_compatibility.json", "link": "python_compatibility.md" }, @@ -75,7 +75,7 @@ "key": "architecture-maintainability", "label": "架构维护", "status": "pass", - "detail": "145 Python files; 0 hotspots; 0 blockers; largest 895 lines; 33 CLI handlers", + "detail": "146 Python files; 0 hotspots; 0 blockers; largest 899 lines; 33 CLI handlers", "evidence": "reports/architecture_maintainability.json", "link": "architecture_maintainability.md" }, @@ -837,7 +837,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 89 + "file_count": 90 }, { "path": "evals", @@ -852,7 +852,7 @@ "file_count": 195 } ], - "file_count": 348, + "file_count": 349, "folder_count": 4, "distribution": [ { @@ -877,7 +877,7 @@ }, { "label": "scripts", - "value": 89 + "value": 90 }, { "label": "evals", @@ -1006,7 +1006,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 89 + "file_count": 90 }, { "path": "evals", @@ -1279,7 +1279,11 @@ "pending_answer_hidden_count": 5, "agreement_rate": null, "needs_review": true, - "failure_count": 0 + "failure_count": 0, + "reviewer_checklist_count": 5, + "reviewer_checklist_pending_count": 5, + "reviewer_checklist_invalid_count": 0, + "reviewer_checklist_ready_count": 0 }, "reviewer": "", "reviewed_at": "", @@ -1306,9 +1310,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 31 + "changed_file_count": 42 }, - "commit": "088904f519e04981f30c5c8c225de90a4aee2682", + "commit": "810885d70e6ed0fa6b19cd5a0edf971057215f9d", "missing_artifacts": [], "limitations": [ "Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.", @@ -1383,9 +1387,9 @@ "failures": [] }, "trust_security": { - "scanned_files": 173, - "script_count": 89, - "internal_module_count": 16, + "scanned_files": 174, + "script_count": 90, + "internal_module_count": 17, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -1403,8 +1407,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 173, - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "package_hash_file_count": 174, + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" }, "skill_atlas": { "skill_count": 12, @@ -1442,8 +1446,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20", - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, "compatibility": { "openai": "pass", @@ -1474,7 +1478,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -1490,8 +1494,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", - "archive_entry_count": 557, + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", + "archive_entry_count": 558, "failure_count": 0, "warning_count": 0 }, @@ -1502,7 +1506,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 557, + "archive_entry_count": 558, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1569,12 +1573,12 @@ { "field": "archive_sha256", "from": "", - "to": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "to": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "to": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" } ] }, @@ -3691,7 +3695,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.65, + "duration_ms": 29.36, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3719,7 +3723,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.96, + "duration_ms": 28.61, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3742,7 +3746,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.98, + "duration_ms": 28.44, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3770,7 +3774,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.3, + "duration_ms": 28.46, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3793,7 +3797,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.47, + "duration_ms": 28.04, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3821,7 +3825,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.72, + "duration_ms": 28.85, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3844,7 +3848,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 29.11, + "duration_ms": 28.63, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3871,7 +3875,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.16, + "duration_ms": 28.65, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3894,7 +3898,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.95, + "duration_ms": 28.69, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3923,7 +3927,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.03, + "duration_ms": 29.97, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -4164,7 +4168,11 @@ "pending_answer_hidden_count": 5, "agreement_rate": null, "needs_review": true, - "failure_count": 0 + "failure_count": 0, + "reviewer_checklist_count": 5, + "reviewer_checklist_pending_count": 5, + "reviewer_checklist_invalid_count": 0, + "reviewer_checklist_ready_count": 0 }, "reviewer": "", "reviewed_at": "", @@ -4228,6 +4236,138 @@ "prompt": "Turn the attached release brief source into a governed skill package." } ], + "reviewer_checklist": [ + { + "case_id": "skill-package-contract", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "Turn this repeated workflow into a reusable team skill package.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + }, + { + "case_id": "output-eval-expectation", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "Upgrade this production skill so we know whether the generated output is better than baseline.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + }, + { + "case_id": "ir-before-packaging", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "Package this skill for OpenAI, Claude, Agent Skills, and generic targets.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + }, + { + "case_id": "near-neighbor-boundary", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "I only need a one-off summary of these notes, not a reusable process.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + }, + { + "case_id": "file-backed-governed-package", + "readiness": "awaiting-decision", + "blocking_reason": "Reviewer has not selected A or B yet; answer key remains hidden.", + "status": "pending", + "reviewer_winner_variant": "", + "answer_key_visible": false, + "prompt": "Turn the attached release brief source into a governed skill package.", + "blind_pack_path": "reports/output_blind_review_pack.json", + "decisions_path": "reports/output_review_decisions.json", + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio ." + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication." + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide." + ] + } + ], "failures": [] }, "skill_os2_coverage": { @@ -4354,7 +4494,7 @@ "label": "Trust Security", "status": "pass", "objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.", - "current": "89 scripts; secrets 0; help failures 0", + "current": "90 scripts; secrets 0; help failures 0", "command": "python3 scripts/yao.py trust .", "test": "python3 tests/verify_trust_check.py", "evidence": [ @@ -4428,7 +4568,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 557; install failures 0", + "current": "archive entries 558; install failures 0", "command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .", "test": "python3 tests/verify_registry_audit.py", "evidence": [ @@ -5056,6 +5196,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -5071,8 +5212,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -5897,6 +6037,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -5912,8 +6053,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -6738,6 +6878,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -6753,8 +6894,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -7563,6 +7703,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -7578,8 +7719,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -8388,6 +8528,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -8403,8 +8544,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", @@ -9601,9 +9741,9 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 173, - "script_count": 89, - "internal_module_count": 16, + "scanned_files": 174, + "script_count": 90, + "internal_module_count": 17, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -9621,8 +9761,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 173, - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "package_hash_file_count": 174, + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" }, "failures": [], "warnings": [], @@ -10527,6 +10667,20 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/review_studio_output_review.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by render_review_studio.py to render output review checklist cards.", + "has_argparse": false, + "has_main_guard": false, + "uses_input": false, + "uses_network": false, + "uses_file_write": false, + "uses_subprocess": false, + "network_urls": [], + "network_hosts": [] + }, { "path": "scripts/review_studio_world_class.py", "interface": "internal-module", @@ -10926,7 +11080,7 @@ "checked_count": 73, "passed_count": 73, "failed_count": 0, - "skipped_count": 16, + "skipped_count": 17, "failed_scripts": [], "results": [ { @@ -11677,6 +11831,10 @@ "path": "scripts/review_studio_layout.py", "reason": "internal module" }, + { + "path": "scripts/review_studio_output_review.py", + "reason": "internal module" + }, { "path": "scripts/review_studio_world_class.py", "reason": "internal module" @@ -11906,7 +12064,7 @@ "root": ".", "summary": { "target_python": "3.11", - "file_count": 148, + "file_count": 149, "issue_count": 0, "syntax_error_count": 0, "fstring_311_violation_count": 0, @@ -12319,6 +12477,12 @@ "issue_count": 0, "issues": [] }, + { + "path": "scripts/review_studio_output_review.py", + "ok": true, + "issue_count": 0, + "issues": [] + }, { "path": "scripts/review_studio_world_class.py", "ok": true, @@ -12824,15 +12988,15 @@ "generated_at": "2026-06-14", "skill_dir": ".", "summary": { - "python_file_count": 145, - "script_file_count": 89, + "python_file_count": 146, + "script_file_count": 90, "test_file_count": 56, - "internal_module_count": 18, + "internal_module_count": 19, "cli_script_count": 72, "command_handler_count": 33, "warn_line_threshold": 900, "block_line_threshold": 1500, - "largest_file_lines": 895, + "largest_file_lines": 899, "hotspot_count": 0, "blocker_count": 0, "decision": "pass" @@ -12840,14 +13004,14 @@ "largest_files": [ { "path": "scripts/render_review_studio.py", - "lines": 895, + "lines": 899, "kind": "cli-script", "severity": "pass", "recommendation": "Move data loading and large section renderers into focused review_studio_* modules." }, { "path": "tests/verify_yao_cli.py", - "lines": 845, + "lines": 848, "kind": "test", "severity": "pass", "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." @@ -12938,10 +13102,10 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1096197, + "other_text_tokens": 1105224, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1096948, - "relevant_file_count": 477, + "estimated_total_text_tokens": 1105975, + "relevant_file_count": 479, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 @@ -13868,6 +14032,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -14789,7 +14954,7 @@ "adoption_drift": { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13T21:28:44Z", + "generated_at": "2026-06-13T21:39:40Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", @@ -15772,8 +15937,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20", - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, "compatibility": { "openai": "pass", @@ -15804,7 +15969,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -15829,7 +15994,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" } ] }, @@ -15852,8 +16017,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", - "archive_entry_count": 557, + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", + "archive_entry_count": 558, "failure_count": 0, "warning_count": 0 }, @@ -16518,7 +16683,7 @@ "installed_skill_dir": "[temporary-install-root]/yao-meta-skill", "summary": { "archive_present": true, - "archive_entry_count": 557, + "archive_entry_count": 558, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -16860,12 +17025,12 @@ { "field": "archive_sha256", "from": "", - "to": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "to": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "to": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" } ] }, diff --git a/reports/review-viewer.json b/reports/review-viewer.json index 3ceecf88..6372cd9c 100644 --- a/reports/review-viewer.json +++ b/reports/review-viewer.json @@ -437,7 +437,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 89 + "file_count": 90 }, { "path": "evals", @@ -452,7 +452,7 @@ "file_count": 195 } ], - "file_count": 348, + "file_count": 349, "folder_count": 4, "distribution": [ { @@ -477,7 +477,7 @@ }, { "label": "scripts", - "value": 89 + "value": 90 }, { "label": "evals", @@ -606,7 +606,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 89 + "file_count": 90 }, { "path": "evals", @@ -879,7 +879,11 @@ "pending_answer_hidden_count": 5, "agreement_rate": null, "needs_review": true, - "failure_count": 0 + "failure_count": 0, + "reviewer_checklist_count": 5, + "reviewer_checklist_pending_count": 5, + "reviewer_checklist_invalid_count": 0, + "reviewer_checklist_ready_count": 0 }, "reviewer": "", "reviewed_at": "", @@ -906,9 +910,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 31 + "changed_file_count": 42 }, - "commit": "088904f519e04981f30c5c8c225de90a4aee2682", + "commit": "810885d70e6ed0fa6b19cd5a0edf971057215f9d", "missing_artifacts": [], "limitations": [ "Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.", @@ -983,9 +987,9 @@ "failures": [] }, "trust_security": { - "scanned_files": 173, - "script_count": 89, - "internal_module_count": 16, + "scanned_files": 174, + "script_count": 90, + "internal_module_count": 17, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -1003,8 +1007,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 173, - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "package_hash_file_count": 174, + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" }, "skill_atlas": { "skill_count": 12, @@ -1042,8 +1046,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20", - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, "compatibility": { "openai": "pass", @@ -1074,7 +1078,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -1090,8 +1094,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", - "archive_entry_count": 557, + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", + "archive_entry_count": 558, "failure_count": 0, "warning_count": 0 }, @@ -1102,7 +1106,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 557, + "archive_entry_count": 558, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1169,12 +1173,12 @@ { "field": "archive_sha256", "from": "", - "to": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "to": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "to": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" } ] }, diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json index f8374c75..0d628fa7 100644 --- a/reports/security_trust_report.json +++ b/reports/security_trust_report.json @@ -2,9 +2,9 @@ "ok": true, "skill_dir": ".", "summary": { - "scanned_files": 173, - "script_count": 89, - "internal_module_count": 16, + "scanned_files": 174, + "script_count": 90, + "internal_module_count": 17, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -22,8 +22,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 173, - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "package_hash_file_count": 174, + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" }, "failures": [], "warnings": [], @@ -928,6 +928,20 @@ "network_urls": [], "network_hosts": [] }, + { + "path": "scripts/review_studio_output_review.py", + "interface": "internal-module", + "interface_declared": true, + "interface_reason": "Imported by render_review_studio.py to render output review checklist cards.", + "has_argparse": false, + "has_main_guard": false, + "uses_input": false, + "uses_network": false, + "uses_file_write": false, + "uses_subprocess": false, + "network_urls": [], + "network_hosts": [] + }, { "path": "scripts/review_studio_world_class.py", "interface": "internal-module", @@ -1327,7 +1341,7 @@ "checked_count": 73, "passed_count": 73, "failed_count": 0, - "skipped_count": 16, + "skipped_count": 17, "failed_scripts": [], "results": [ { @@ -2078,6 +2092,10 @@ "path": "scripts/review_studio_layout.py", "reason": "internal module" }, + { + "path": "scripts/review_studio_output_review.py", + "reason": "internal module" + }, { "path": "scripts/review_studio_world_class.py", "reason": "internal module" diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md index 9fc248ed..749d3532 100644 --- a/reports/security_trust_report.md +++ b/reports/security_trust_report.md @@ -1,9 +1,9 @@ # Security Trust Report - OK: `True` -- Scanned files: `173` -- Scripts: `89` -- Internal script modules: `16` +- Scanned files: `174` +- Scripts: `90` +- Internal script modules: `17` - Secret findings: `0` - Network-capable scripts: `3` - Network policy covered scripts: `3` @@ -15,8 +15,8 @@ - CLI help smoke failures: `0` - Interactive scripts: `0` - Package hash scope: `source-contract-without-generated-reports` -- Package hash files: `173` -- Package SHA256: `f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20` +- Package hash files: `174` +- Package SHA256: `60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c` ## Failures @@ -125,6 +125,7 @@ | scripts/review_studio_formatting.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to format report dictionaries as audit UI panels. | | scripts/review_studio_gates.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to keep Review Studio gate evaluation separate from HTML rendering. | | scripts/review_studio_layout.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to keep Review Studio layout and CSS out of gate logic. | +| scripts/review_studio_output_review.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to render output review checklist cards. | | scripts/review_studio_world_class.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_studio.py to render world-class evidence cards. | | scripts/review_viewer_data.py | internal-module | True | False | False | False | False | False | False | Imported by render_review_viewer.py to assemble Review Viewer data before HTML rendering. | | scripts/run_conformance_suite.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. | diff --git a/reports/skill-overview.html b/reports/skill-overview.html index 4d386a10..8dbc6831 100644 --- a/reports/skill-overview.html +++ b/reports/skill-overview.html @@ -771,7 +771,7 @@

让 reviewer 快速确认关键文件、目录和资产分布。Lets reviewers confirm key files, directories, and asset distribution quickly.

-
资产分布348项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
+
资产分布349项SKILL.mdREADME.mdagents/interface.yamlmanifest.jsonreferencesscripts
资产分布图展示当前包体的文件和目录重心。
diff --git a/reports/skill-overview.json b/reports/skill-overview.json index 8d562fe3..deb4f6c2 100644 --- a/reports/skill-overview.json +++ b/reports/skill-overview.json @@ -436,7 +436,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 89 + "file_count": 90 }, { "path": "evals", @@ -451,7 +451,7 @@ "file_count": 195 } ], - "file_count": 348, + "file_count": 349, "folder_count": 4, "distribution": [ { @@ -476,7 +476,7 @@ }, { "label": "scripts", - "value": 89 + "value": 90 }, { "label": "evals", @@ -605,7 +605,7 @@ "path": "scripts", "label": "Deterministic helpers or local tooling", "kind": "folder", - "file_count": 89 + "file_count": 90 }, { "path": "evals", @@ -878,7 +878,11 @@ "pending_answer_hidden_count": 5, "agreement_rate": null, "needs_review": true, - "failure_count": 0 + "failure_count": 0, + "reviewer_checklist_count": 5, + "reviewer_checklist_pending_count": 5, + "reviewer_checklist_invalid_count": 0, + "reviewer_checklist_ready_count": 0 }, "reviewer": "", "reviewed_at": "", @@ -905,9 +909,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 31 + "changed_file_count": 42 }, - "commit": "088904f519e04981f30c5c8c225de90a4aee2682", + "commit": "810885d70e6ed0fa6b19cd5a0edf971057215f9d", "missing_artifacts": [], "limitations": [ "Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.", @@ -982,9 +986,9 @@ "failures": [] }, "trust_security": { - "scanned_files": 173, - "script_count": 89, - "internal_module_count": 16, + "scanned_files": 174, + "script_count": 90, + "internal_module_count": 17, "secret_findings": 0, "dependency_files": [ "requirements-ci.txt" @@ -1002,8 +1006,8 @@ "help_smoke_failed_count": 0, "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", - "package_hash_file_count": 173, - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "package_hash_file_count": 174, + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" }, "skill_atlas": { "skill_count": 12, @@ -1041,8 +1045,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20", - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "package_sha256": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, "compatibility": { "openai": "pass", @@ -1073,7 +1077,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -1089,8 +1093,8 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2", - "archive_entry_count": 557, + "archive_sha256": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a", + "archive_entry_count": 558, "failure_count": 0, "warning_count": 0 }, @@ -1101,7 +1105,7 @@ "ok": true, "summary": { "archive_present": true, - "archive_entry_count": 557, + "archive_entry_count": 558, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, @@ -1168,12 +1172,12 @@ { "field": "archive_sha256", "from": "", - "to": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "to": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "to": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" } ] }, diff --git a/reports/skill_atlas.json b/reports/skill_atlas.json index b7688da7..12b23844 100644 --- a/reports/skill_atlas.json +++ b/reports/skill_atlas.json @@ -127,6 +127,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", diff --git a/reports/skill_os2_audit.json b/reports/skill_os2_audit.json index 4e888c1f..b8506c70 100644 --- a/reports/skill_os2_audit.json +++ b/reports/skill_os2_audit.json @@ -197,7 +197,7 @@ "key": "trust-security", "label": "Trust Security", "status": "pass", - "current": "secrets 0; scripts 89; help failures 0", + "current": "secrets 0; scripts 90; help failures 0", "target": "Secrets, scripts, dependencies, permissions, and package hash are reviewable", "evidence": [ { @@ -281,7 +281,7 @@ "key": "registry-distribution", "label": "Registry Distribution", "status": "pass", - "current": "zip entries 557; install failures 0; permission failures 0", + "current": "zip entries 558; install failures 0; permission failures 0", "target": "Package metadata, archive checksum, package verification, and install simulation pass", "evidence": [ { diff --git a/reports/skill_os2_audit.md b/reports/skill_os2_audit.md index 4d63f0fc..0a3ba09a 100644 --- a/reports/skill_os2_audit.md +++ b/reports/skill_os2_audit.md @@ -23,11 +23,11 @@ Generated at: `2026-06-14` | Human Adjudication | human-required | 0/5 decisions; pending 5 | Real reviewer decisions recorded before claiming output review completion | Record real A/B choices in the decision template, then regenerate adjudication. | | Benchmark Reproducibility | pass | artifacts 20; missing 0; failures 3 | Public methodology, reproducible commands, required artifacts, and failure disclosure are machine-checkable | Keep the manifest current with every benchmark, package, and release evidence change. | | Runtime Conformance | pass | 5/5 targets pass | Target package structure, metadata, relative paths, and degradation notes pass | Keep target conformance fixtures updated as platform contracts change. | -| Trust Security | pass | secrets 0; scripts 89; help failures 0 | Secrets, scripts, dependencies, permissions, and package hash are reviewable | Keep high-permission approvals scoped, expiring, and target-mapped. | +| Trust Security | pass | secrets 0; scripts 90; help failures 0 | Secrets, scripts, dependencies, permissions, and package hash are reviewable | Keep high-permission approvals scoped, expiring, and target-mapped. | | Permission Metadata | pass | 4/4 target probes pass; metadata fallback 4 | Packaged adapters expose explicit permission metadata and residual risks | Preserve residual-risk notes until real native enforcement exists. | | Native Permission Enforcement | external-required | native-enforced targets 0 | At least one target/client enforces approved permissions at runtime | Integrate a real client or installer runtime guard before claiming native permission enforcement. | | Skill Atlas | pass | 12 skills; actionable collisions 0 | Workspace catalog, route overlap, stale/owner gaps, drift, and no-route opportunities | Feed real drift data into Atlas once client telemetry is installed. | -| Registry Distribution | pass | zip entries 557; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | +| Registry Distribution | pass | zip entries 558; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. | | Review Studio | pass | decision review; warnings 3; score 91 | One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations | Resolve human/external warning gates before claiming full release readiness. | | Telemetry Drift | pass | events 1; risk low; recipes 5 | Local-first metadata-only event contract, aggregate drift report, hook recipes, and import path | Keep raw JSONL out of distributed packages and use aggregate reports for Atlas. | | Native Client Telemetry | external-required | external source events 0; adoption samples 0 | A real Browser/Chrome/provider client sends production metadata events | Install a real client against the native host and import production metadata-only events. | diff --git a/reports/skill_os2_coverage.json b/reports/skill_os2_coverage.json index 5cae860c..7ff45da7 100644 --- a/reports/skill_os2_coverage.json +++ b/reports/skill_os2_coverage.json @@ -122,7 +122,7 @@ "label": "Trust Security", "status": "pass", "objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.", - "current": "89 scripts; secrets 0; help failures 0", + "current": "90 scripts; secrets 0; help failures 0", "command": "python3 scripts/yao.py trust .", "test": "python3 tests/verify_trust_check.py", "evidence": [ @@ -196,7 +196,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 557; install failures 0", + "current": "archive entries 558; install failures 0", "command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .", "test": "python3 tests/verify_registry_audit.py", "evidence": [ diff --git a/reports/skill_os2_coverage.md b/reports/skill_os2_coverage.md index 73d5d6b4..9f539e18 100644 --- a/reports/skill_os2_coverage.md +++ b/reports/skill_os2_coverage.md @@ -21,9 +21,9 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts, | Skill IR | `pass` | schema 2.0.0; targets 5 | `python3 scripts/yao.py skill-ir .` | `python3 tests/verify_skill_ir.py` | | Output Eval Lab | `pass` | 5 cases; delta 100.0; execution 10 | `python3 scripts/yao.py output-exec . && python3 scripts/yao.py output-review .` | `python3 tests/verify_output_eval_lab.py` | | Runtime Conformance | `pass` | 5/5 targets pass | `python3 scripts/yao.py conformance .` | `python3 tests/verify_conformance_suite.py` | -| Trust Security | `pass` | 89 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` | +| Trust Security | `pass` | 90 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` | | Skill Atlas | `pass` | 12 scanned skills; actionable collisions 0 | `python3 scripts/yao.py skill-atlas --workspace-root .` | `python3 tests/verify_skill_atlas.py` | -| Registry Distribution | `pass` | archive entries 557; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | +| Registry Distribution | `pass` | archive entries 558; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` | | Review Studio | `pass` | 16 gates; decision review; warnings 3 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` | | Telemetry Drift | `pass` | events 1; recipes 5; risk low | `python3 scripts/yao.py telemetry-hooks . && python3 scripts/yao.py adoption-drift .` | `python3 tests/verify_telemetry_hooks.py` | diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json index 772b438c..5091a54a 100644 --- a/reports/upgrade_check.json +++ b/reports/upgrade_check.json @@ -70,12 +70,12 @@ { "field": "archive_sha256", "from": "", - "to": "2c2f2d3a4fffe1dfc54e282c1058efc1d3476b7de588f8e9167b26a7428a63d2" + "to": "5d160bd148b5febdf20537e481703a695dab8d8f8a2cfe21cc1ee101e375546a" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "f34bc1b155763d5269ae0ae904de35383fd4d0000006af8ad7a6c85ab7ce4b20" + "to": "60817db29dd8d235751c67311b180e889b1c79577968883e3cf2df07dcb1875c" } ] }, diff --git a/scripts/adjudicate_output_review.py b/scripts/adjudicate_output_review.py index 1200481d..b4e8ec8c 100644 --- a/scripts/adjudicate_output_review.py +++ b/scripts/adjudicate_output_review.py @@ -216,6 +216,96 @@ def build_summary(pairs: list[dict[str, Any]], failures: list[str]) -> dict[str, } +def checklist_readiness(pair: dict[str, Any]) -> tuple[str, str]: + status = pair.get("status") + if status in {"match", "disagree"}: + return "adjudicated", "Reviewer decision is valid; answer key is revealed for this case." + if status == "invalid": + return "fix-decision", "Reviewer decision exists but failed validation; answer key remains hidden." + return "awaiting-decision", "Reviewer has not selected A or B yet; answer key remains hidden." + + +def build_reviewer_checklist( + pairs: list[dict[str, Any]], + blind_pack_path: Path, + decisions_path: Path, +) -> list[dict[str, Any]]: + checklist = [] + for pair in pairs: + readiness, blocking_reason = checklist_readiness(pair) + checklist.append( + { + "case_id": pair.get("case_id", ""), + "readiness": readiness, + "blocking_reason": blocking_reason, + "status": pair.get("status", "pending"), + "reviewer_winner_variant": pair.get("reviewer_winner_variant", ""), + "answer_key_visible": bool(pair.get("expected_revealed")), + "prompt": pair.get("prompt", ""), + "blind_pack_path": display_path(blind_pack_path), + "decisions_path": display_path(decisions_path), + "commands": { + "write_template": "python3 scripts/adjudicate_output_review.py --write-template", + "adjudicate": "python3 scripts/yao.py output-review", + "refresh_review_studio": "python3 scripts/yao.py review-studio .", + }, + "required_fields": { + "winner_variant": "A or B after reading only the blind review pack.", + "confidence": "Optional number from 0 to 1.", + "reason": "Short rationale; do not reveal baseline or with-skill labels before adjudication.", + }, + "privacy_contract": [ + "Do not paste raw private user data into the decision reason.", + "Do not open the answer key before reviewer choices are recorded.", + "Leave winner_variant blank when the reviewer is not ready to decide.", + ], + } + ) + return checklist + + +def add_checklist_summary(summary: dict[str, Any], checklist: list[dict[str, Any]]) -> dict[str, Any]: + enriched = dict(summary) + enriched["reviewer_checklist_count"] = len(checklist) + enriched["reviewer_checklist_pending_count"] = sum(1 for item in checklist if item["readiness"] == "awaiting-decision") + enriched["reviewer_checklist_invalid_count"] = sum(1 for item in checklist if item["readiness"] == "fix-decision") + enriched["reviewer_checklist_ready_count"] = sum(1 for item in checklist if item["readiness"] == "adjudicated") + return enriched + + +def render_reviewer_checklist(checklist: list[dict[str, Any]]) -> list[str]: + lines = [ + "## Reviewer Checklist", + "", + "| Case | Readiness | Answer key | Decision file |", + "| --- | --- | --- | --- |", + ] + if not checklist: + lines.append("| `none` | `adjudicated` | n/a | none |") + return lines + for item in checklist: + answer_key = "visible" if item.get("answer_key_visible") else "hidden" + lines.append( + f"| `{item['case_id']}` | `{item['readiness']}` | `{answer_key}` | `{item['decisions_path']}` |" + ) + for item in checklist: + lines.extend(["", f"### {item['case_id']}", ""]) + lines.append(f"- readiness: `{item['readiness']}`") + lines.append(f"- blocking reason: {item['blocking_reason']}") + lines.append(f"- answer key visible: `{str(item['answer_key_visible']).lower()}`") + lines.append(f"- blind pack: `{item['blind_pack_path']}`") + lines.append(f"- decisions: `{item['decisions_path']}`") + lines.extend(["", "#### Commands", ""]) + for label, command in item.get("commands", {}).items(): + lines.append(f"- {label}: `{command}`") + lines.extend(["", "#### Required Fields", ""]) + for label, description in item.get("required_fields", {}).items(): + lines.append(f"- {label}: {description}") + lines.extend(["", "#### Privacy Contract", ""]) + lines.extend(f"- {contract}" for contract in item.get("privacy_contract", [])) + return lines + + def render_markdown(payload: dict[str, Any]) -> str: summary = payload["summary"] lines = [ @@ -230,6 +320,7 @@ def render_markdown(payload: dict[str, Any]) -> str: f"- Invalid decisions: `{summary['invalid_decision_count']}`", f"- Answer keys revealed: `{summary['answer_revealed_count']}`", f"- Pending/invalid answers hidden: `{summary['pending_answer_hidden_count']}`", + f"- Reviewer checklist: `{summary['reviewer_checklist_ready_count']}` ready / `{summary['reviewer_checklist_count']}` total", "", ] if summary["judgment_count"] == 0: @@ -262,6 +353,7 @@ def render_markdown(payload: dict[str, Any]) -> str: lines.extend(["", "## Failures", ""]) for failure in payload["failures"]: lines.append(f"- {failure}") + lines.extend(["", *render_reviewer_checklist(payload.get("reviewer_checklist", []))]) lines.extend( [ "", @@ -314,6 +406,8 @@ def adjudicate_output_review( failures.extend(pair_failures) summary = build_summary(adjudicated_pairs, failures) + reviewer_checklist = build_reviewer_checklist(adjudicated_pairs, blind_pack_path, decisions_path) + summary = add_checklist_summary(summary, reviewer_checklist) payload = { "schema_version": "1.0", "ok": not failures, @@ -329,6 +423,7 @@ def adjudicate_output_review( }, "template_written": template_written, "pairs": adjudicated_pairs, + "reviewer_checklist": reviewer_checklist, "failures": failures, } output_json.parent.mkdir(parents=True, exist_ok=True) diff --git a/scripts/render_review_studio.py b/scripts/render_review_studio.py index e9ac90ba..c8bbd5b5 100644 --- a/scripts/render_review_studio.py +++ b/scripts/render_review_studio.py @@ -10,13 +10,13 @@ from review_studio_data import evidence_paths, insight_cards, load_review_data from review_studio_formatting import registry_package_summary, render_kv_grid from review_studio_gates import add_blockers_from_gate, build_gates, status_label, weighted_score from review_studio_layout import render_review_nav, review_studio_css +from review_studio_output_review import render_output_review_section from review_studio_world_class import render_world_class_evidence_entries, render_world_class_intake_checklist ROOT = Path(__file__).resolve().parent.parent - def display_path(skill_dir: Path, path: Path) -> str: try: return str(path.resolve().relative_to(skill_dir.resolve())) @@ -514,9 +514,12 @@ def render_html(report: dict[str, Any]) -> str: "invalid_decision_count", "answer_revealed_count", "pending_answer_hidden_count", + "reviewer_checklist_count", + "reviewer_checklist_pending_count", ], "review adjudication report missing", ) + output_review_section_html = render_output_review_section(report["data"].get("output_review_adjudication", {})) blueprint_panel = render_kv_grid( blueprint_summary, [ @@ -723,6 +726,7 @@ def render_html(report: dict[str, Any]) -> str:

审定报告

{review_panel}
+ {output_review_section_html}

发布标准

Governed 和 Library 至少需要 5 个 output eval cases,并覆盖 file-backed、near-neighbor、boundary case、execution evidence 和 blind A/B review pack。

人工结论

没有 reviewer 决策时只显示 pending;只有真实决策文件会进入一致率和分歧统计。

diff --git a/scripts/review_studio_layout.py b/scripts/review_studio_layout.py index 81c80e6e..3b38c35b 100644 --- a/scripts/review_studio_layout.py +++ b/scripts/review_studio_layout.py @@ -253,6 +253,77 @@ def review_studio_css() -> str: margin: 0; padding-left: 18px; } + .output-review-grid { + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 16px; + margin-top: 16px; + } + .output-review-card { + border: 1px solid var(--line); + border-radius: 8px; + padding: 18px; + background: #fff; + display: grid; + gap: 12px; + min-width: 0; + } + .output-review-card.awaiting-decision, + .output-review-card.fix-decision { border-left: 4px solid var(--warn); } + .output-review-card.adjudicated { border-left: 4px solid var(--pass); } + .output-review-card span, + .output-review-card p, + .output-review-card dd, + .output-review-card li { + color: var(--muted); + font-size: 14px; + overflow-wrap: anywhere; + } + .output-review-card dl { + display: grid; + grid-template-columns: 86px minmax(0, 1fr); + gap: 6px 10px; + margin: 0; + } + .output-review-card dt { color: var(--ink); font-size: 14px; } + .output-review-card dd { margin: 0; min-width: 0; } + .output-review-steps { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 12px; + border-top: 1px solid var(--line); + padding-top: 12px; + } + .output-review-steps h4 { + margin: 0 0 6px; + color: var(--ink); + font-size: 14px; + font-weight: 500; + } + .output-review-steps ul { + margin: 0; + padding-left: 18px; + } + .output-review-commands, + .output-review-fields { + list-style: none; + padding: 0; + display: grid; + gap: 8px; + } + .output-review-commands li, + .output-review-fields li { + display: grid; + gap: 2px; + min-width: 0; + padding: 8px 0 0; + border-top: 1px solid var(--line); + } + .output-review-commands code { + overflow-wrap: anywhere; + white-space: normal; + display: block; + } .world-intake-grid { display: grid; grid-template-columns: minmax(0, 1fr); @@ -373,7 +444,7 @@ def review_studio_css() -> str: font-size: 13px; } @media (max-width: 980px) { - .metrics, .gates, .twocol, .actions-grid, .annotations-grid, .world-evidence-grid, .world-evidence-columns, .world-intake-grid, .world-intake-steps, .kv-grid { grid-template-columns: 1fr; } + .metrics, .gates, .twocol, .actions-grid, .annotations-grid, .output-review-grid, .output-review-steps, .world-evidence-grid, .world-evidence-columns, .world-intake-grid, .world-intake-steps, .kv-grid { grid-template-columns: 1fr; } main { padding: 32px 18px 60px; } nav { justify-content: flex-start; overflow-x: auto; flex-wrap: nowrap; } nav a { flex: 0 0 auto; } diff --git a/scripts/review_studio_output_review.py b/scripts/review_studio_output_review.py new file mode 100644 index 00000000..1fe4478c --- /dev/null +++ b/scripts/review_studio_output_review.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 +"""Output review HTML helpers for Review Studio.""" + +import html +from typing import Any + + +SCRIPT_INTERFACE = "internal-module" +SCRIPT_INTERFACE_REASON = "Imported by render_review_studio.py to render output review checklist cards." + + +def render_required_fields(fields: dict[str, Any]) -> str: + if not fields: + return "

暂无字段要求。

" + items = [] + for key, value in fields.items(): + items.append(f"
  • {html.escape(str(key))}{html.escape(str(value))}
  • ") + return "" + + +def render_command_list(commands: dict[str, Any]) -> str: + if not commands: + return "

    暂无命令。

    " + items = [] + for label, command in commands.items(): + if not command: + continue + items.append( + "
  • " + f"{html.escape(str(label))}" + f"{html.escape(str(command))}" + "
  • " + ) + return "" if items else "

    暂无命令。

    " + + +def render_contract(items: list[Any]) -> str: + if not items: + return "

    暂无边界。

    " + return "" + + +def render_output_review_checklist(adjudication: dict[str, Any]) -> str: + checklist = adjudication.get("reviewer_checklist", []) if isinstance(adjudication, dict) else [] + if not checklist: + return "

    当前没有输出评审操作清单。

    " + cards = [] + for item in checklist: + readiness = str(item.get("readiness", "awaiting-decision")) + answer_key = "可见" if item.get("answer_key_visible") else "隐藏" + cards.append( + "
    " + f"
    {html.escape(readiness)} · 答案{html.escape(answer_key)}" + f"

    {html.escape(str(item.get('case_id', 'case')))}

    " + f"

    {html.escape(str(item.get('blocking_reason', '')))}

    " + f"
    盲评包
    {html.escape(str(item.get('blind_pack_path', '')))}
    " + f"
    决策表
    {html.escape(str(item.get('decisions_path', '')))}
    " + f"
    提示词
    {html.escape(str(item.get('prompt', '')))}
    " + "
    " + "

    操作命令

    " + + render_command_list(item.get("commands", {}) if isinstance(item.get("commands", {}), dict) else {}) + + "
    " + "

    字段要求

    " + + render_required_fields(item.get("required_fields", {}) if isinstance(item.get("required_fields", {}), dict) else {}) + + "
    " + "

    隐私边界

    " + + render_contract(item.get("privacy_contract", []) if isinstance(item.get("privacy_contract", []), list) else []) + + "
    " + "
    " + "
    " + ) + return "
    " + "".join(cards) + "
    " + + +def render_output_review_section(adjudication: dict[str, Any]) -> str: + return ( + "
    " + "

    评审清单

    " + "

    每张卡片对应一个 blind A/B case,说明当前是否待判、答案是否仍隐藏、应填写的决策文件、有效字段和复跑命令。

    " + f"{render_output_review_checklist(adjudication)}" + "
    " + ) diff --git a/skill-ir/examples/yao-meta-skill.json b/skill-ir/examples/yao-meta-skill.json index 9dff6e9f..bc4c541f 100644 --- a/skill-ir/examples/yao-meta-skill.json +++ b/skill-ir/examples/yao-meta-skill.json @@ -171,6 +171,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", @@ -186,8 +187,7 @@ "scripts/sync_local_install.py", "scripts/telemetry_native_host.py", "scripts/trigger_eval.py", - "scripts/trust_check.py", - "scripts/upgrade_check.py" + "scripts/trust_check.py" ], "assets": [ "templates/basic_skill.md.j2", diff --git a/skill_atlas/catalog.json b/skill_atlas/catalog.json index d0f2529d..551eabf5 100644 --- a/skill_atlas/catalog.json +++ b/skill_atlas/catalog.json @@ -83,6 +83,7 @@ "scripts/review_studio_formatting.py", "scripts/review_studio_gates.py", "scripts/review_studio_layout.py", + "scripts/review_studio_output_review.py", "scripts/review_studio_world_class.py", "scripts/review_viewer_data.py", "scripts/run_conformance_suite.py", diff --git a/tests/verify_output_review_adjudication.py b/tests/verify_output_review_adjudication.py index dcab76e2..a69d1478 100644 --- a/tests/verify_output_review_adjudication.py +++ b/tests/verify_output_review_adjudication.py @@ -77,11 +77,24 @@ def main() -> None: assert pending_payload["summary"]["needs_review"], pending_payload assert pending_payload["summary"]["answer_revealed_count"] == 0, pending_payload assert pending_payload["summary"]["pending_answer_hidden_count"] == 5, pending_payload + assert pending_payload["summary"]["reviewer_checklist_count"] == 5, pending_payload + assert pending_payload["summary"]["reviewer_checklist_pending_count"] == 5, pending_payload + assert pending_payload["summary"]["reviewer_checklist_ready_count"] == 0, pending_payload + assert pending_payload["summary"]["reviewer_checklist_invalid_count"] == 0, pending_payload assert all(not item["expected_winner_variant"] and not item["expected_revealed"] for item in pending_payload["pairs"]), pending_payload + checklist = {item["case_id"]: item for item in pending_payload["reviewer_checklist"]} + assert checklist["skill-package-contract"]["readiness"] == "awaiting-decision", checklist["skill-package-contract"] + assert checklist["skill-package-contract"]["answer_key_visible"] is False, checklist["skill-package-contract"] + assert checklist["skill-package-contract"]["decisions_path"].endswith("tests/tmp_output_review_adjudication/missing_decisions.json"), checklist["skill-package-contract"] + assert checklist["skill-package-contract"]["commands"]["write_template"] == "python3 scripts/adjudicate_output_review.py --write-template", checklist["skill-package-contract"] + assert checklist["skill-package-contract"]["required_fields"]["winner_variant"].startswith("A or B"), checklist["skill-package-contract"] assert "No reviewer decisions recorded yet" in pending_md.read_text(encoding="utf-8"), pending_md pending_text = pending_md.read_text(encoding="utf-8") assert "| skill-package-contract | pending | hidden | pending |" in pending_text, pending_text assert "| skill-package-contract | pending | A | pending |" not in pending_text, pending_text + assert "Reviewer Checklist" in pending_text, pending_text + assert "Reviewer checklist: `0` ready / `5` total" in pending_text, pending_text + assert "answer key visible: `false`" in pending_text, pending_text template_path = tmp_root / "output_review_decisions.json" template_proc = run( @@ -147,8 +160,12 @@ def main() -> None: assert filled_payload["summary"]["agreement_rate"] == 100.0, filled_payload assert filled_payload["summary"]["answer_revealed_count"] == 5, filled_payload assert filled_payload["summary"]["pending_answer_hidden_count"] == 0, filled_payload + assert filled_payload["summary"]["reviewer_checklist_ready_count"] == 5, filled_payload + assert filled_payload["summary"]["reviewer_checklist_pending_count"] == 0, filled_payload assert all(item["status"] == "match" for item in filled_payload["pairs"]), filled_payload assert all(item["expected_winner_variant"] in {"A", "B"} and item["expected_revealed"] for item in filled_payload["pairs"]), filled_payload + filled_checklist = {item["case_id"]: item for item in filled_payload["reviewer_checklist"]} + assert all(item["readiness"] == "adjudicated" and item["answer_key_visible"] for item in filled_checklist.values()), filled_checklist invalid = { "schema_version": "1.0", @@ -186,8 +203,12 @@ def main() -> None: assert not invalid_payload["ok"], invalid_payload assert invalid_payload["summary"]["invalid_decision_count"] == 1, invalid_payload assert invalid_payload["summary"]["answer_revealed_count"] == 0, invalid_payload + assert invalid_payload["summary"]["reviewer_checklist_invalid_count"] == 1, invalid_payload assert invalid_payload["pairs"][0]["expected_winner_variant"] == "", invalid_payload assert invalid_payload["pairs"][0]["expected_revealed"] is False, invalid_payload + invalid_checklist = {item["case_id"]: item for item in invalid_payload["reviewer_checklist"]} + assert invalid_checklist[answer_key["answers"][0]["case_id"]]["readiness"] == "fix-decision", invalid_checklist + assert invalid_checklist[answer_key["answers"][0]["case_id"]]["answer_key_visible"] is False, invalid_checklist assert invalid_payload["failures"], invalid_payload print(json.dumps({"ok": True}, ensure_ascii=False, indent=2)) diff --git a/tests/verify_review_studio.py b/tests/verify_review_studio.py index 8935f494..1b5bf7cd 100644 --- a/tests/verify_review_studio.py +++ b/tests/verify_review_studio.py @@ -383,7 +383,14 @@ def main() -> None: assert full_payload["data"]["output_review_adjudication"]["summary"]["pending_count"] == 5, full_payload["data"]["output_review_adjudication"] assert full_payload["data"]["output_review_adjudication"]["summary"]["answer_revealed_count"] == 0, full_payload["data"]["output_review_adjudication"] assert full_payload["data"]["output_review_adjudication"]["summary"]["pending_answer_hidden_count"] == 5, full_payload["data"]["output_review_adjudication"] + assert full_payload["data"]["output_review_adjudication"]["summary"]["reviewer_checklist_count"] == 5, full_payload["data"]["output_review_adjudication"] + assert full_payload["data"]["output_review_adjudication"]["summary"]["reviewer_checklist_pending_count"] == 5, full_payload["data"]["output_review_adjudication"] + assert full_payload["data"]["output_review_adjudication"]["summary"]["reviewer_checklist_ready_count"] == 0, full_payload["data"]["output_review_adjudication"] assert all(not item["expected_revealed"] for item in full_payload["data"]["output_review_adjudication"]["pairs"]), full_payload["data"]["output_review_adjudication"] + output_review_checklist = full_payload["data"]["output_review_adjudication"]["reviewer_checklist"] + assert len(output_review_checklist) == 5, output_review_checklist + assert all(not item["answer_key_visible"] for item in output_review_checklist), output_review_checklist + assert output_review_checklist[0]["commands"]["adjudicate"] == "python3 scripts/yao.py output-review", output_review_checklist[0] assert full_payload["data"]["review_annotations"]["summary"]["annotation_count"] == 0, full_payload["data"]["review_annotations"] assert full_payload["data"]["compiled_targets"]["summary"]["target_count"] >= 4, full_payload["data"]["compiled_targets"] assert full_payload["data"]["compiled_targets"]["summary"]["block_count"] == 0, full_payload["data"]["compiled_targets"] @@ -515,6 +522,12 @@ def main() -> None: assert "执行证据" in html, html assert "盲评包" in html, html[:5000] assert "审定报告" in html, html + assert "评审清单" in html, html + assert "output-review-grid" in html, html + assert "awaiting-decision" in html, html + assert "答案隐藏" in html, html + assert "winner_variant" in html, html + assert "python3 scripts/yao.py output-review" in html, html assert "答案揭示" in html, html assert "答案隐藏" in html, html assert "注册审计" in html, html[:3000] diff --git a/tests/verify_yao_cli.py b/tests/verify_yao_cli.py index 4904de21..422be677 100644 --- a/tests/verify_yao_cli.py +++ b/tests/verify_yao_cli.py @@ -615,6 +615,9 @@ def main() -> None: assert output_review_result["ok"], output_review_result assert output_review_result["payload"]["summary"]["judgment_count"] == 0, output_review_result assert output_review_result["payload"]["summary"]["pending_count"] == 5, output_review_result + assert output_review_result["payload"]["summary"]["reviewer_checklist_count"] == 5, output_review_result + assert output_review_result["payload"]["summary"]["reviewer_checklist_pending_count"] == 5, output_review_result + assert all(not item["answer_key_visible"] for item in output_review_result["payload"]["reviewer_checklist"]), output_review_result assert (created / "reports" / "output_review_adjudication.md").exists(), output_review_result conformance_result = run("conformance", str(created))
    路径Path作用Role类型Type
    SKILL.mdSkill 入口文件Skill entrypoint文件file
    README.md人类可读使用说明Human-readable usage guide文件file
    agents/interface.yaml跨平台接口元数据Neutral interface metadata文件file
    manifest.json生命周期与打包元数据Lifecycle and portability metadata文件file
    references扩展指导与复用资料Extended guidance and reusable notes目录folder
    scripts确定性脚本或本地工具Deterministic helpers or local tooling目录folder
    evals触发与质量检查Trigger and quality checks目录folder
    reports生成的证据与总结报告Generated evidence and overview artifacts目录folder