feat: add output review kit
This commit is contained in:
@@ -2,7 +2,7 @@ PYTHON ?= python3
|
||||
LOCAL_SKILL_INSTALL_DIR ?= $(HOME)/.agents/skills.disabled/yao-meta-skill
|
||||
ACTIVE_SKILL_INSTALL_DIR ?= $(HOME)/.agents/skills/yao-meta-skill
|
||||
|
||||
.PHONY: eval eval-suite route-scorecard route-confusion-check description-optimization judge-blind-eval description-optimization-check promotion-check python-compat-check architecture-maintainability-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-submission-review-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger results-panel regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check sync-local-install sync-active-install test ci-test clean
|
||||
.PHONY: eval eval-suite route-scorecard route-confusion-check description-optimization judge-blind-eval description-optimization-check promotion-check python-compat-check architecture-maintainability-check yao-cli-check skill-overview-check skill-report-metrics-check skill-report-charts-check skill-ir-check compiler-check output-eval-check output-execution-check output-review-kit-check output-review-adjudication-check runtime-conformance-check runtime-permission-check trust-check skill-atlas-check registry-audit-check package-verify-check install-simulation-check upgrade-check review-viewer-check review-studio-check skill-os2-audit-check skill-os2-coverage-check world-class-evidence-check world-class-ledger-check world-class-intake-check world-class-submission-review-check world-class-claim-guard-check benchmark-reproducibility-check feedback-check adoption-drift-check telemetry-import-check telemetry-emit-check telemetry-hooks-check telemetry-native-host-check review-waivers-check review-annotations-check baseline-compare-check reference-scan-check github-benchmark-scan-check intent-confidence-check reference-synthesis-check output-risk-profile-check artifact-design-profile-check prompt-quality-profile-check system-model-check iteration-directions-check description-drift-history iteration-ledger results-panel regression-history context-reports portability-report portability-check failure-regression-check package-check package-failure-check security-boundary-check local-install-sync-check snapshot-check validate lint governance-check resource-boundary-check quality-check sync-local-install sync-active-install test ci-test clean
|
||||
|
||||
eval:
|
||||
$(PYTHON) scripts/trigger_eval.py --description-file evals/improved_description.txt --cases evals/trigger_cases.json --baseline-description-file evals/baseline_description.txt
|
||||
@@ -58,6 +58,9 @@ output-eval-check:
|
||||
output-execution-check:
|
||||
$(PYTHON) tests/verify_output_execution_runs.py
|
||||
|
||||
output-review-kit-check:
|
||||
$(PYTHON) tests/verify_output_review_kit.py
|
||||
|
||||
output-review-adjudication-check:
|
||||
$(PYTHON) tests/verify_output_review_adjudication.py
|
||||
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
"vscode"
|
||||
],
|
||||
"package_metadata": "registry/packages/yao-meta-skill.json",
|
||||
"package_sha256": "68a0228b56de8c9e9e94d64d7c1e386bf3dff55c0f6228b65f91e75d02525926"
|
||||
"package_sha256": "33ca97e8df3e3c75228595ab8bd06d65c697ef708723a0a53637bd8f22bbcfda"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "68a0228b56de8c9e9e94d64d7c1e386bf3dff55c0f6228b65f91e75d02525926",
|
||||
"package_sha256": "33ca97e8df3e3c75228595ab8bd06d65c697ef708723a0a53637bd8f22bbcfda",
|
||||
"archive_sha256": "cb1ac8c62bc5dee942a88f18eb5d71c93ae58f854ac19f3d912f9c9c3a4ec24e"
|
||||
},
|
||||
"compatibility": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"schema_version": "2.0",
|
||||
"generated_at": "2026-06-13T22:37:14Z",
|
||||
"generated_at": "2026-06-13T22:55:26Z",
|
||||
"skill_dir": ".",
|
||||
"privacy_contract": {
|
||||
"storage": "local-first",
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"generated_at": "2026-06-13",
|
||||
"skill_dir": ".",
|
||||
"summary": {
|
||||
"python_file_count": 149,
|
||||
"script_file_count": 92,
|
||||
"test_file_count": 57,
|
||||
"python_file_count": 151,
|
||||
"script_file_count": 93,
|
||||
"test_file_count": 58,
|
||||
"internal_module_count": 19,
|
||||
"cli_script_count": 74,
|
||||
"command_handler_count": 33,
|
||||
"cli_script_count": 75,
|
||||
"command_handler_count": 34,
|
||||
"warn_line_threshold": 900,
|
||||
"block_line_threshold": 1500,
|
||||
"largest_file_lines": 898,
|
||||
@@ -27,21 +27,21 @@
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_yao_cli.py",
|
||||
"lines": 891,
|
||||
"lines": 893,
|
||||
"kind": "test",
|
||||
"severity": "pass",
|
||||
"recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands."
|
||||
},
|
||||
{
|
||||
"path": "scripts/yao.py",
|
||||
"lines": 841,
|
||||
"lines": 862,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Split command handlers by domain while keeping scripts/yao.py as the thin CLI orchestrator."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 782,
|
||||
"lines": 792,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
@@ -53,6 +53,13 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/yao_cli_parser.py",
|
||||
"lines": 726,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/optimize_description.py",
|
||||
"lines": 723,
|
||||
@@ -67,13 +74,6 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/yao_cli_parser.py",
|
||||
"lines": 714,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_review_viewer.py",
|
||||
"lines": 685,
|
||||
|
||||
@@ -5,12 +5,12 @@ Generated at: `2026-06-13`
|
||||
## Summary
|
||||
|
||||
- decision: `pass`
|
||||
- python files: `149`
|
||||
- scripts: `92`
|
||||
- tests: `57`
|
||||
- python files: `151`
|
||||
- scripts: `93`
|
||||
- tests: `58`
|
||||
- internal modules: `19`
|
||||
- CLI scripts: `74`
|
||||
- Yao CLI command handlers: `33`
|
||||
- CLI scripts: `75`
|
||||
- Yao CLI command handlers: `34`
|
||||
- largest file lines: `898`
|
||||
- hotspots: `0`
|
||||
- blockers: `0`
|
||||
@@ -26,13 +26,13 @@ No file-size hotspots found.
|
||||
| File | Lines | Kind | Severity |
|
||||
| --- | ---: | --- | --- |
|
||||
| `scripts/render_review_studio.py` | `898` | `cli-script` | `pass` |
|
||||
| `tests/verify_yao_cli.py` | `891` | `test` | `pass` |
|
||||
| `scripts/yao.py` | `841` | `cli-script` | `pass` |
|
||||
| `scripts/skill_report_model.py` | `782` | `internal-module` | `pass` |
|
||||
| `tests/verify_yao_cli.py` | `893` | `test` | `pass` |
|
||||
| `scripts/yao.py` | `862` | `cli-script` | `pass` |
|
||||
| `scripts/skill_report_model.py` | `792` | `internal-module` | `pass` |
|
||||
| `scripts/compile_skill.py` | `734` | `cli-script` | `pass` |
|
||||
| `scripts/yao_cli_parser.py` | `726` | `internal-module` | `pass` |
|
||||
| `scripts/optimize_description.py` | `723` | `cli-script` | `pass` |
|
||||
| `scripts/trust_check.py` | `714` | `internal-module` | `pass` |
|
||||
| `scripts/yao_cli_parser.py` | `714` | `internal-module` | `pass` |
|
||||
| `scripts/render_review_viewer.py` | `685` | `cli-script` | `pass` |
|
||||
| `scripts/build_skill_atlas.py` | `674` | `cli-script` | `pass` |
|
||||
| `scripts/skill_report_layout.py` | `653` | `internal-module` | `pass` |
|
||||
|
||||
@@ -3,16 +3,13 @@
|
||||
"ok": true,
|
||||
"generated_at": "2026-06-14",
|
||||
"skill_dir": ".",
|
||||
"commit": "30539bed7a29dd88c2f289dd0c115da9834dd5d9",
|
||||
"commit": "ecdb16dd90025bcca3051be4c6a1b5b723c7ec75",
|
||||
"git_status": {
|
||||
"available": true,
|
||||
"dirty": true,
|
||||
"changed_file_count": 60,
|
||||
"changed_file_count": 59,
|
||||
"sample": [
|
||||
" M AGENTS.md",
|
||||
" M Makefile",
|
||||
" M README.md",
|
||||
" M evidence/world_class/README.md",
|
||||
" M registry/index.json",
|
||||
" M registry/packages/yao-meta-skill.json",
|
||||
" M reports/adoption_drift_report.json",
|
||||
@@ -20,7 +17,10 @@
|
||||
" M reports/architecture_maintainability.json",
|
||||
" M reports/architecture_maintainability.md",
|
||||
" M reports/benchmark_reproducibility.json",
|
||||
" M reports/benchmark_reproducibility.md"
|
||||
" M reports/benchmark_reproducibility.md",
|
||||
" M reports/compiled_targets.json",
|
||||
" M reports/context_budget.json",
|
||||
" M reports/install_simulation.json"
|
||||
]
|
||||
},
|
||||
"summary": {
|
||||
@@ -42,7 +42,7 @@
|
||||
"world_class_task_count": 4,
|
||||
"world_class_ledger_pending_count": 4,
|
||||
"working_tree_dirty": true,
|
||||
"changed_file_count": 60
|
||||
"changed_file_count": 59
|
||||
},
|
||||
"methodology": {
|
||||
"path": "reports/benchmark_methodology.md",
|
||||
@@ -116,7 +116,7 @@
|
||||
"path": "reports/output_execution_runs.json",
|
||||
"exists": true,
|
||||
"bytes": 7967,
|
||||
"sha256": "34fa0a084b7537cca412b4bbea4018639ceac9e98ddf83a6d25ee2dc7f7dbe4f"
|
||||
"sha256": "b86a205e0eee68676a822c4f818b5ea0496c381c783043832be72050d5a1e716"
|
||||
},
|
||||
{
|
||||
"label": "blind_review",
|
||||
@@ -129,8 +129,8 @@
|
||||
"label": "review_adjudication",
|
||||
"path": "reports/output_review_adjudication.json",
|
||||
"exists": true,
|
||||
"bytes": 9125,
|
||||
"sha256": "5765254c430947c7e2b05883831d7db0b886d607b59f9a8a2602dcfa925f400b"
|
||||
"bytes": 9495,
|
||||
"sha256": "240485a721af49d5c75fe8049e9ef74b50546f685aa6346ab9e20713fb1105f4"
|
||||
},
|
||||
{
|
||||
"label": "trigger_scorecard",
|
||||
@@ -150,22 +150,22 @@
|
||||
"label": "trust_report",
|
||||
"path": "reports/security_trust_report.json",
|
||||
"exists": true,
|
||||
"bytes": 94809,
|
||||
"sha256": "1d256935f965a265ae5c60e8600a081db8aebe1fdeff7068c5d08fb521fe653b"
|
||||
"bytes": 95873,
|
||||
"sha256": "6205af0ad3c9980eab785d7644832b1ca804d898eebcf993cced83c23b256fa4"
|
||||
},
|
||||
{
|
||||
"label": "python_compatibility",
|
||||
"path": "reports/python_compatibility.json",
|
||||
"exists": true,
|
||||
"bytes": 19840,
|
||||
"sha256": "9b8f5b17fe2711b17557366edda49a89bbf2e378576de52d7de798137dc8a421"
|
||||
"bytes": 20093,
|
||||
"sha256": "e5dd973d0b5c78c5e40d52727939134b8167d742cb90bea2141744c0f7d5fa33"
|
||||
},
|
||||
{
|
||||
"label": "registry_audit",
|
||||
"path": "reports/registry_audit.json",
|
||||
"exists": true,
|
||||
"bytes": 3183,
|
||||
"sha256": "c3ae3224b9339aec1e01e695835aa14113bf23979100eda2099fa9609e841c17"
|
||||
"sha256": "daedc9b8047e2926221f39209d0751dac67b160c2c68fded0fcca796d9727144"
|
||||
},
|
||||
{
|
||||
"label": "package_verification",
|
||||
@@ -179,42 +179,42 @@
|
||||
"path": "reports/install_simulation.json",
|
||||
"exists": true,
|
||||
"bytes": 8758,
|
||||
"sha256": "465f407ccc808169f5380550161f481ab8f0fbc20ef9ab170814fb703b05fe3b"
|
||||
"sha256": "3c9306b5b1221f5951f69598c8e7104557ea17635f11c42b8b52a37cae6d22a2"
|
||||
},
|
||||
{
|
||||
"label": "skill_os2_audit",
|
||||
"path": "reports/skill_os2_audit.json",
|
||||
"exists": true,
|
||||
"bytes": 13946,
|
||||
"sha256": "340c10df7350d74cbfe3fd77461ce2cbab201198fd93fd276e7273eb6f6222e7"
|
||||
"sha256": "9c22f67024a63d8646c2306ef642e06848bb443adde690e2f97573024e3a636b"
|
||||
},
|
||||
{
|
||||
"label": "world_class_evidence_plan",
|
||||
"path": "reports/world_class_evidence_plan.json",
|
||||
"exists": true,
|
||||
"bytes": 9532,
|
||||
"sha256": "ed1274b7c18cac9e683bb4a24a5ed8039d1eb582d676f0fc26cc3a33e5371a67"
|
||||
"bytes": 9634,
|
||||
"sha256": "7ff33ae06f00247f97fa85ca3268aaa61f672aebba75ac96fc3d932b4997daa2"
|
||||
},
|
||||
{
|
||||
"label": "world_class_evidence_ledger",
|
||||
"path": "reports/world_class_evidence_ledger.json",
|
||||
"exists": true,
|
||||
"bytes": 10750,
|
||||
"sha256": "e6dfdb22dc9f54255c1d4b42d36c035ffafbca4fe1d1bc6569c5e8262443f257"
|
||||
"bytes": 10790,
|
||||
"sha256": "2e2dc29095a05d481353fec00f5b87c3381c81ba9661fb36b03496d5e5db325e"
|
||||
},
|
||||
{
|
||||
"label": "world_class_evidence_intake",
|
||||
"path": "reports/world_class_evidence_intake.json",
|
||||
"exists": true,
|
||||
"bytes": 12369,
|
||||
"sha256": "465f8d915a869ad536c2d71ba26dc536b82ba64e6e98013e8dbd0efd1bb92883"
|
||||
"bytes": 12411,
|
||||
"sha256": "10ac53e66486505ff1646f5616ffa334c0e2a2ac99d9d54cf6222d2ee3868063"
|
||||
},
|
||||
{
|
||||
"label": "world_class_claim_guard",
|
||||
"path": "reports/world_class_claim_guard.json",
|
||||
"exists": true,
|
||||
"bytes": 8093,
|
||||
"sha256": "24396b9ecb4351cb9e3dff3d69b83bb940bf1507387a086cb0a08ca8cfdfa618"
|
||||
"bytes": 8179,
|
||||
"sha256": "299a88eb7b47d16761d66980e01ccd8164609e344c3c98bb0b8a67b56cf68edd"
|
||||
}
|
||||
],
|
||||
"missing_artifacts": [],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Benchmark Reproducibility
|
||||
|
||||
Generated at: `2026-06-14`
|
||||
Commit: `30539bed7a29dd88c2f289dd0c115da9834dd5d9`
|
||||
Commit: `ecdb16dd90025bcca3051be4c6a1b5b723c7ec75`
|
||||
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: `60`
|
||||
- changed files at generation: `59`
|
||||
|
||||
This report proves local benchmark reproducibility only. It keeps external provider and human-review gaps visible instead of counting them as complete.
|
||||
|
||||
@@ -40,21 +40,21 @@ 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 | `34fa0a084b75` |
|
||||
| output_execution | `reports/output_execution_runs.json` | present | `b86a205e0eee` |
|
||||
| blind_review | `reports/output_blind_review_pack.json` | present | `bbe2db8ec277` |
|
||||
| review_adjudication | `reports/output_review_adjudication.json` | present | `5765254c4309` |
|
||||
| review_adjudication | `reports/output_review_adjudication.json` | present | `240485a721af` |
|
||||
| trigger_scorecard | `reports/route_scorecard.json` | present | `c164e83e36d0` |
|
||||
| runtime_conformance | `reports/conformance_matrix.json` | present | `8251329e663d` |
|
||||
| trust_report | `reports/security_trust_report.json` | present | `1d256935f965` |
|
||||
| python_compatibility | `reports/python_compatibility.json` | present | `9b8f5b17fe27` |
|
||||
| registry_audit | `reports/registry_audit.json` | present | `c3ae3224b933` |
|
||||
| trust_report | `reports/security_trust_report.json` | present | `6205af0ad3c9` |
|
||||
| python_compatibility | `reports/python_compatibility.json` | present | `e5dd973d0b5c` |
|
||||
| registry_audit | `reports/registry_audit.json` | present | `daedc9b8047e` |
|
||||
| package_verification | `reports/package_verification.json` | present | `89dbb682f4a4` |
|
||||
| install_simulation | `reports/install_simulation.json` | present | `465f407ccc80` |
|
||||
| skill_os2_audit | `reports/skill_os2_audit.json` | present | `340c10df7350` |
|
||||
| world_class_evidence_plan | `reports/world_class_evidence_plan.json` | present | `ed1274b7c18c` |
|
||||
| world_class_evidence_ledger | `reports/world_class_evidence_ledger.json` | present | `e6dfdb22dc9f` |
|
||||
| world_class_evidence_intake | `reports/world_class_evidence_intake.json` | present | `465f8d915a86` |
|
||||
| world_class_claim_guard | `reports/world_class_claim_guard.json` | present | `24396b9ecb43` |
|
||||
| install_simulation | `reports/install_simulation.json` | present | `3c9306b5b122` |
|
||||
| skill_os2_audit | `reports/skill_os2_audit.json` | present | `9c22f67024a6` |
|
||||
| world_class_evidence_plan | `reports/world_class_evidence_plan.json` | present | `7ff33ae06f00` |
|
||||
| world_class_evidence_ledger | `reports/world_class_evidence_ledger.json` | present | `2e2dc29095a0` |
|
||||
| world_class_evidence_intake | `reports/world_class_evidence_intake.json` | present | `10ac53e66486` |
|
||||
| world_class_claim_guard | `reports/world_class_claim_guard.json` | present | `299a88eb7b47` |
|
||||
|
||||
## Reproduction Commands
|
||||
|
||||
|
||||
@@ -166,6 +166,7 @@
|
||||
"scripts/lint_skill.py",
|
||||
"scripts/local_output_eval_runner.py",
|
||||
"scripts/optimize_description.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -223,8 +224,7 @@
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py"
|
||||
"scripts/sync_local_install.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -383,7 +383,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -399,6 +399,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -485,14 +486,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -514,7 +515,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -627,7 +628,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -643,6 +644,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -729,14 +731,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -756,7 +758,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -1011,6 +1013,7 @@
|
||||
"scripts/lint_skill.py",
|
||||
"scripts/local_output_eval_runner.py",
|
||||
"scripts/optimize_description.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -1068,8 +1071,7 @@
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py"
|
||||
"scripts/sync_local_install.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -1228,7 +1230,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -1244,6 +1246,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -1330,14 +1333,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -1359,7 +1362,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -1472,7 +1475,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -1488,6 +1491,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -1574,14 +1578,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -1601,7 +1605,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -1856,6 +1860,7 @@
|
||||
"scripts/lint_skill.py",
|
||||
"scripts/local_output_eval_runner.py",
|
||||
"scripts/optimize_description.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -1913,8 +1918,7 @@
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py"
|
||||
"scripts/sync_local_install.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -2073,7 +2077,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -2089,6 +2093,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -2175,14 +2180,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -2204,7 +2209,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -2310,7 +2315,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -2326,6 +2331,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -2412,14 +2418,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -2439,7 +2445,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -2685,6 +2691,7 @@
|
||||
"scripts/lint_skill.py",
|
||||
"scripts/local_output_eval_runner.py",
|
||||
"scripts/optimize_description.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -2742,8 +2749,7 @@
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py"
|
||||
"scripts/sync_local_install.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -2902,7 +2908,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -2918,6 +2924,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -3004,14 +3011,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -3033,7 +3040,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -3139,7 +3146,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -3155,6 +3162,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -3241,14 +3249,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -3268,7 +3276,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -3514,6 +3522,7 @@
|
||||
"scripts/lint_skill.py",
|
||||
"scripts/local_output_eval_runner.py",
|
||||
"scripts/optimize_description.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -3571,8 +3580,7 @@
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py"
|
||||
"scripts/sync_local_install.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
@@ -3731,7 +3739,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -3747,6 +3755,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -3833,14 +3842,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -3862,7 +3871,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
@@ -3972,7 +3981,7 @@
|
||||
},
|
||||
"file_write": {
|
||||
"required": true,
|
||||
"script_count": 62,
|
||||
"script_count": 63,
|
||||
"scripts": [
|
||||
"scripts/adjudicate_output_review.py",
|
||||
"scripts/build_confusion_matrix.py",
|
||||
@@ -3988,6 +3997,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -4074,14 +4084,14 @@
|
||||
},
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"checked_count": 75,
|
||||
"checked_count": 76,
|
||||
"failed_count": 0,
|
||||
"failed_scripts": []
|
||||
},
|
||||
"trust_summary": {
|
||||
"secret_findings": 0,
|
||||
"network_script_count": 3,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"subprocess_script_count": 9,
|
||||
"interactive_script_count": 0,
|
||||
"help_smoke_failed_count": 0
|
||||
@@ -4101,7 +4111,7 @@
|
||||
],
|
||||
"capability_counts": {
|
||||
"network": 3,
|
||||
"file_write": 62,
|
||||
"file_write": 63,
|
||||
"subprocess": 9,
|
||||
"interactive": 0
|
||||
},
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
"context_budget_tier": "production",
|
||||
"context_budget_limit": 1000,
|
||||
"skill_body_tokens": 751,
|
||||
"other_text_tokens": 1129811,
|
||||
"other_text_tokens": 1145183,
|
||||
"estimated_initial_load_tokens": 944,
|
||||
"estimated_total_text_tokens": 1130562,
|
||||
"relevant_file_count": 484,
|
||||
"estimated_total_text_tokens": 1145934,
|
||||
"relevant_file_count": 490,
|
||||
"unused_resource_dirs": [],
|
||||
"quality_signal_points": 130,
|
||||
"quality_density": 137.7
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"installed_skill_dir": "tests/tmp_review_studio/install-root/simulate-yao-meta-skill/yao-meta-skill",
|
||||
"summary": {
|
||||
"archive_present": true,
|
||||
"archive_entry_count": 563,
|
||||
"archive_entry_count": 567,
|
||||
"archive_extracted": true,
|
||||
"entrypoint_loaded": true,
|
||||
"manifest_loaded": true,
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 27.77,
|
||||
"duration_ms": 27.61,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -62,7 +62,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 28.86,
|
||||
"duration_ms": 26.83,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -85,7 +85,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 28.67,
|
||||
"duration_ms": 28.0,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -113,7 +113,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 28.37,
|
||||
"duration_ms": 28.5,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -136,7 +136,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 28.7,
|
||||
"duration_ms": 28.58,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -164,7 +164,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 27.96,
|
||||
"duration_ms": 28.82,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -187,7 +187,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 28.07,
|
||||
"duration_ms": 28.41,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -214,7 +214,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 28.42,
|
||||
"duration_ms": 28.26,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -237,7 +237,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 28.64,
|
||||
"duration_ms": 28.37,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -266,7 +266,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 28.43,
|
||||
"duration_ms": 29.97,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
|
||||
@@ -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.77 | 33 | 0.0 | pass |
|
||||
| skill-package-contract | with_skill | command | local-output-eval-runner | 28.86 | 73 | 100.0 | pass |
|
||||
| output-eval-expectation | baseline | command | local-output-eval-runner | 28.67 | 36 | 0.0 | pass |
|
||||
| output-eval-expectation | with_skill | command | local-output-eval-runner | 28.37 | 80 | 100.0 | pass |
|
||||
| ir-before-packaging | baseline | command | local-output-eval-runner | 28.7 | 33 | 0.0 | pass |
|
||||
| ir-before-packaging | with_skill | command | local-output-eval-runner | 27.96 | 80 | 100.0 | pass |
|
||||
| near-neighbor-boundary | baseline | command | local-output-eval-runner | 28.07 | 36 | 0.0 | pass |
|
||||
| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 28.42 | 65 | 100.0 | pass |
|
||||
| file-backed-governed-package | baseline | command | local-output-eval-runner | 28.64 | 37 | 0.0 | pass |
|
||||
| file-backed-governed-package | with_skill | command | local-output-eval-runner | 28.43 | 98 | 100.0 | pass |
|
||||
| skill-package-contract | baseline | command | local-output-eval-runner | 27.61 | 33 | 0.0 | pass |
|
||||
| skill-package-contract | with_skill | command | local-output-eval-runner | 26.83 | 73 | 100.0 | pass |
|
||||
| output-eval-expectation | baseline | command | local-output-eval-runner | 28.0 | 36 | 0.0 | pass |
|
||||
| output-eval-expectation | with_skill | command | local-output-eval-runner | 28.5 | 80 | 100.0 | pass |
|
||||
| ir-before-packaging | baseline | command | local-output-eval-runner | 28.58 | 33 | 0.0 | pass |
|
||||
| ir-before-packaging | with_skill | command | local-output-eval-runner | 28.82 | 80 | 100.0 | pass |
|
||||
| near-neighbor-boundary | baseline | command | local-output-eval-runner | 28.41 | 36 | 0.0 | pass |
|
||||
| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 28.26 | 65 | 100.0 | pass |
|
||||
| file-backed-governed-package | baseline | command | local-output-eval-runner | 28.37 | 37 | 0.0 | pass |
|
||||
| file-backed-governed-package | with_skill | command | local-output-eval-runner | 29.97 | 98 | 100.0 | pass |
|
||||
|
||||
## Next Fixes
|
||||
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
"blind_pack_path": "reports/output_blind_review_pack.json",
|
||||
"decisions_path": "reports/output_review_decisions.json",
|
||||
"commands": {
|
||||
"prepare_review_kit": "python3 scripts/yao.py output-review-kit",
|
||||
"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 ."
|
||||
@@ -118,6 +119,7 @@
|
||||
"blind_pack_path": "reports/output_blind_review_pack.json",
|
||||
"decisions_path": "reports/output_review_decisions.json",
|
||||
"commands": {
|
||||
"prepare_review_kit": "python3 scripts/yao.py output-review-kit",
|
||||
"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 ."
|
||||
@@ -144,6 +146,7 @@
|
||||
"blind_pack_path": "reports/output_blind_review_pack.json",
|
||||
"decisions_path": "reports/output_review_decisions.json",
|
||||
"commands": {
|
||||
"prepare_review_kit": "python3 scripts/yao.py output-review-kit",
|
||||
"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 ."
|
||||
@@ -170,6 +173,7 @@
|
||||
"blind_pack_path": "reports/output_blind_review_pack.json",
|
||||
"decisions_path": "reports/output_review_decisions.json",
|
||||
"commands": {
|
||||
"prepare_review_kit": "python3 scripts/yao.py output-review-kit",
|
||||
"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 ."
|
||||
@@ -196,6 +200,7 @@
|
||||
"blind_pack_path": "reports/output_blind_review_pack.json",
|
||||
"decisions_path": "reports/output_review_decisions.json",
|
||||
"commands": {
|
||||
"prepare_review_kit": "python3 scripts/yao.py output-review-kit",
|
||||
"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 ."
|
||||
|
||||
@@ -46,6 +46,7 @@ Expected winners stay hidden until a valid reviewer decision is recorded.
|
||||
|
||||
#### Commands
|
||||
|
||||
- prepare_review_kit: `python3 scripts/yao.py output-review-kit`
|
||||
- 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 .`
|
||||
@@ -72,6 +73,7 @@ Expected winners stay hidden until a valid reviewer decision is recorded.
|
||||
|
||||
#### Commands
|
||||
|
||||
- prepare_review_kit: `python3 scripts/yao.py output-review-kit`
|
||||
- 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 .`
|
||||
@@ -98,6 +100,7 @@ Expected winners stay hidden until a valid reviewer decision is recorded.
|
||||
|
||||
#### Commands
|
||||
|
||||
- prepare_review_kit: `python3 scripts/yao.py output-review-kit`
|
||||
- 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 .`
|
||||
@@ -124,6 +127,7 @@ Expected winners stay hidden until a valid reviewer decision is recorded.
|
||||
|
||||
#### Commands
|
||||
|
||||
- prepare_review_kit: `python3 scripts/yao.py output-review-kit`
|
||||
- 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 .`
|
||||
@@ -150,6 +154,7 @@ Expected winners stay hidden until a valid reviewer decision is recorded.
|
||||
|
||||
#### Commands
|
||||
|
||||
- prepare_review_kit: `python3 scripts/yao.py output-review-kit`
|
||||
- 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 .`
|
||||
|
||||
@@ -0,0 +1,267 @@
|
||||
{
|
||||
"schema_version": "1.0",
|
||||
"ok": true,
|
||||
"summary": {
|
||||
"case_count": 5,
|
||||
"ready_for_adjudication_count": 0,
|
||||
"pending_decision_count": 5,
|
||||
"invalid_decision_count": 0,
|
||||
"reviewer_metadata_present": false,
|
||||
"answer_key_hidden": true,
|
||||
"answer_key_path_exposed": false,
|
||||
"ready_to_run_adjudication": false,
|
||||
"failure_count": 0
|
||||
},
|
||||
"artifacts": {
|
||||
"reviewer_kit_json": "reports/output_review_kit.json",
|
||||
"reviewer_kit_markdown": "reports/output_review_kit.md",
|
||||
"blind_pack_json": "reports/output_blind_review_pack.json",
|
||||
"blind_pack_markdown": "reports/output_blind_review_pack.md",
|
||||
"decisions": "reports/output_review_decisions.json",
|
||||
"adjudication_json": "reports/output_review_adjudication.json",
|
||||
"adjudication_markdown": "reports/output_review_adjudication.md"
|
||||
},
|
||||
"template_written": false,
|
||||
"review_contract": {
|
||||
"reviewer_steps": [
|
||||
"Open reports/output_blind_review_pack.md or this kit and compare Variant A vs Variant B for each case.",
|
||||
"Record choices in reports/output_review_decisions.json without opening the answer key.",
|
||||
"Use winner_variant A or B, confidence from 0 to 1, and a short reason for every case.",
|
||||
"Run python3 scripts/yao.py output-review after choices are recorded.",
|
||||
"Refresh python3 scripts/yao.py review-studio . before asking for release approval."
|
||||
],
|
||||
"required_fields": {
|
||||
"reviewer": "Human reviewer name or review group.",
|
||||
"reviewed_at": "Review date or timestamp.",
|
||||
"winner_variant": "A or B for every case.",
|
||||
"confidence": "Optional numeric confidence from 0 to 1.",
|
||||
"reason": "Short rationale based on the rubric, not on hidden labels."
|
||||
},
|
||||
"privacy_contract": [
|
||||
"The answer key is intentionally withheld from this kit.",
|
||||
"Do not inspect hidden labels or expected winners before decisions are recorded.",
|
||||
"Do not paste private user data into decision reasons.",
|
||||
"Pending decisions must stay pending instead of being counted as human agreement."
|
||||
]
|
||||
},
|
||||
"cases": [
|
||||
{
|
||||
"case_id": "skill-package-contract",
|
||||
"prompt": "Turn this repeated workflow into a reusable team skill package.",
|
||||
"input_files": [],
|
||||
"review_instruction": "Pick A or B based only on the rubric. Do not infer which output came from the skill.",
|
||||
"rubric": [
|
||||
{
|
||||
"id": "has-entrypoint",
|
||||
"description": "Output names the routeable Skill entrypoint.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-interface",
|
||||
"description": "Output includes neutral interface metadata.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-report",
|
||||
"description": "Output points reviewer to generated overview report.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-resource-boundary",
|
||||
"description": "Output preserves entrypoint/resource separation.",
|
||||
"weight": 1.0
|
||||
}
|
||||
],
|
||||
"variant_a": {
|
||||
"blind_id": "skill-package-contract:A",
|
||||
"output": "Create a routeable SKILL.md, agents/interface.yaml, reports/skill-overview.html, and a focused eval plan. Keep the root entrypoint lean, move durable guidance into references/, scripts into scripts/, and evidence into reports/."
|
||||
},
|
||||
"variant_b": {
|
||||
"blind_id": "skill-package-contract:B",
|
||||
"output": "I can write a prompt for that workflow and include a short checklist."
|
||||
},
|
||||
"decision_state": {
|
||||
"status": "awaiting-decision",
|
||||
"winner_variant_recorded": false,
|
||||
"confidence_recorded": false,
|
||||
"reason_recorded": false,
|
||||
"blocking_reason": "Decision template exists but this row is still blank."
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "output-eval-expectation",
|
||||
"prompt": "Upgrade this production skill so we know whether the generated output is better than baseline.",
|
||||
"input_files": [],
|
||||
"review_instruction": "Pick A or B based only on the rubric. Do not infer which output came from the skill.",
|
||||
"rubric": [
|
||||
{
|
||||
"id": "has-baseline-comparison",
|
||||
"description": "Output explicitly compares with-skill and baseline outputs.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-assertion-grading",
|
||||
"description": "Output includes objective assertion grading.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-scorecard",
|
||||
"description": "Output produces a scorecard report path.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-failure-taxonomy",
|
||||
"description": "Output records failure taxonomy.",
|
||||
"weight": 1.0
|
||||
}
|
||||
],
|
||||
"variant_a": {
|
||||
"blind_id": "output-eval-expectation:A",
|
||||
"output": "Add Output Eval Lab cases with baseline_output and with_skill_output, run assertion grading, report with-skill vs baseline pass-rate delta, and record failure taxonomy plus next fixes in reports/output_quality_scorecard.md."
|
||||
},
|
||||
"variant_b": {
|
||||
"blind_id": "output-eval-expectation:B",
|
||||
"output": "Add more examples and run the trigger eval again."
|
||||
},
|
||||
"decision_state": {
|
||||
"status": "awaiting-decision",
|
||||
"winner_variant_recorded": false,
|
||||
"confidence_recorded": false,
|
||||
"reason_recorded": false,
|
||||
"blocking_reason": "Decision template exists but this row is still blank."
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "ir-before-packaging",
|
||||
"prompt": "Package this skill for OpenAI, Claude, Agent Skills, and generic targets.",
|
||||
"input_files": [],
|
||||
"review_instruction": "Pick A or B based only on the rubric. Do not infer which output came from the skill.",
|
||||
"rubric": [
|
||||
{
|
||||
"id": "has-ir-first",
|
||||
"description": "Output requires Skill IR before packaging.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-core-ir-fields",
|
||||
"description": "Output lists core IR contract fields.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-targets",
|
||||
"description": "Output names requested runtime targets.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-semantic-preservation",
|
||||
"description": "Output says targets must preserve the capability contract.",
|
||||
"weight": 1.0
|
||||
}
|
||||
],
|
||||
"variant_a": {
|
||||
"blind_id": "ir-before-packaging:A",
|
||||
"output": "Export folders for each platform and adjust files as needed."
|
||||
},
|
||||
"variant_b": {
|
||||
"blind_id": "ir-before-packaging:B",
|
||||
"output": "Export Skill IR first with job_to_be_done, trigger_surface, workflow, resources, eval_plan, risk, and governance. Then compile or package targets from the IR so OpenAI, Claude, Agent Skills, and generic packages preserve the same capability contract."
|
||||
},
|
||||
"decision_state": {
|
||||
"status": "awaiting-decision",
|
||||
"winner_variant_recorded": false,
|
||||
"confidence_recorded": false,
|
||||
"reason_recorded": false,
|
||||
"blocking_reason": "Decision template exists but this row is still blank."
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "near-neighbor-boundary",
|
||||
"prompt": "I only need a one-off summary of these notes, not a reusable process.",
|
||||
"input_files": [],
|
||||
"review_instruction": "Pick A or B based only on the rubric. Do not infer which output came from the skill.",
|
||||
"rubric": [
|
||||
{
|
||||
"id": "declines-skill",
|
||||
"description": "Output refuses unnecessary skill creation for one-off work.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "names-near-neighbor",
|
||||
"description": "Output labels the request as near-neighbor instead of owned work.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "requires-reuse-signal",
|
||||
"description": "Output asks for repeat-use evidence before packaging.",
|
||||
"weight": 1.0
|
||||
}
|
||||
],
|
||||
"variant_a": {
|
||||
"blind_id": "near-neighbor-boundary:A",
|
||||
"output": "Create a SKILL.md and a reusable workflow anyway so future notes can use it."
|
||||
},
|
||||
"variant_b": {
|
||||
"blind_id": "near-neighbor-boundary:B",
|
||||
"output": "Do not create a skill for this one-off request. Treat it as a near-neighbor: answer the summary directly unless the user confirms repeated use, shared ownership, or a reusable output contract."
|
||||
},
|
||||
"decision_state": {
|
||||
"status": "awaiting-decision",
|
||||
"winner_variant_recorded": false,
|
||||
"confidence_recorded": false,
|
||||
"reason_recorded": false,
|
||||
"blocking_reason": "Decision template exists but this row is still blank."
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "file-backed-governed-package",
|
||||
"prompt": "Turn the attached release brief source into a governed skill package.",
|
||||
"input_files": [
|
||||
"fixtures/release-brief-source.md"
|
||||
],
|
||||
"review_instruction": "Pick A or B based only on the rubric. Do not infer which output came from the skill.",
|
||||
"rubric": [
|
||||
{
|
||||
"id": "uses-file-backed-evidence",
|
||||
"description": "Output names file-backed source evidence.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-governance",
|
||||
"description": "Output preserves governed ownership metadata.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-output-contract",
|
||||
"description": "Output preserves output and rollback boundaries.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "has-trust-and-scorecard",
|
||||
"description": "Output requires trust and output scorecard artifacts.",
|
||||
"weight": 1.0
|
||||
},
|
||||
{
|
||||
"id": "does-not-invent-evidence",
|
||||
"description": "Output forbids invented launch evidence.",
|
||||
"weight": 1.0
|
||||
}
|
||||
],
|
||||
"variant_a": {
|
||||
"blind_id": "file-backed-governed-package:A",
|
||||
"output": "Draft a release announcement with the changelog, support notes, and owner name."
|
||||
},
|
||||
"variant_b": {
|
||||
"blind_id": "file-backed-governed-package:B",
|
||||
"output": "Use the file-backed fixture as source evidence, then create a governed skill package with SKILL.md, agents/interface.yaml, owner, review cadence, input_files, output contract, rollback boundary, trust report, and reports/output_quality_scorecard.md. Mark missing launch metrics as missing evidence instead of inventing them."
|
||||
},
|
||||
"decision_state": {
|
||||
"status": "awaiting-decision",
|
||||
"winner_variant_recorded": false,
|
||||
"confidence_recorded": false,
|
||||
"reason_recorded": false,
|
||||
"blocking_reason": "Decision template exists but this row is still blank."
|
||||
}
|
||||
}
|
||||
],
|
||||
"failures": []
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
# Output Review Kit
|
||||
|
||||
This reviewer-facing packet contains the blind A/B cases, decision fields, and command flow. It intentionally does not expose the answer key.
|
||||
|
||||
## Summary
|
||||
|
||||
- cases: `5`
|
||||
- ready for adjudication: `0`
|
||||
- pending decisions: `5`
|
||||
- invalid decisions: `0`
|
||||
- reviewer metadata present: `false`
|
||||
- answer key hidden: `true`
|
||||
- answer key path exposed: `false`
|
||||
|
||||
## Review Flow
|
||||
|
||||
1. Open reports/output_blind_review_pack.md or this kit and compare Variant A vs Variant B for each case.
|
||||
2. Record choices in reports/output_review_decisions.json without opening the answer key.
|
||||
3. Use winner_variant A or B, confidence from 0 to 1, and a short reason for every case.
|
||||
4. Run python3 scripts/yao.py output-review after choices are recorded.
|
||||
5. Refresh python3 scripts/yao.py review-studio . before asking for release approval.
|
||||
|
||||
## Required Fields
|
||||
|
||||
- `reviewer`: Human reviewer name or review group.
|
||||
- `reviewed_at`: Review date or timestamp.
|
||||
- `winner_variant`: A or B for every case.
|
||||
- `confidence`: Optional numeric confidence from 0 to 1.
|
||||
- `reason`: Short rationale based on the rubric, not on hidden labels.
|
||||
|
||||
## Privacy Contract
|
||||
|
||||
- The answer key is intentionally withheld from this kit.
|
||||
- Do not inspect hidden labels or expected winners before decisions are recorded.
|
||||
- Do not paste private user data into decision reasons.
|
||||
- Pending decisions must stay pending instead of being counted as human agreement.
|
||||
|
||||
## Decision States
|
||||
|
||||
| Case | State | Winner | Confidence | Reason | Blocking Reason |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `skill-package-contract` | `awaiting-decision` | `false` | `false` | `false` | Decision template exists but this row is still blank. |
|
||||
| `output-eval-expectation` | `awaiting-decision` | `false` | `false` | `false` | Decision template exists but this row is still blank. |
|
||||
| `ir-before-packaging` | `awaiting-decision` | `false` | `false` | `false` | Decision template exists but this row is still blank. |
|
||||
| `near-neighbor-boundary` | `awaiting-decision` | `false` | `false` | `false` | Decision template exists but this row is still blank. |
|
||||
| `file-backed-governed-package` | `awaiting-decision` | `false` | `false` | `false` | Decision template exists but this row is still blank. |
|
||||
|
||||
## Blind Cases
|
||||
|
||||
### skill-package-contract
|
||||
|
||||
Prompt: Turn this repeated workflow into a reusable team skill package.
|
||||
|
||||
Rubric:
|
||||
- `has-entrypoint` (1.0): Output names the routeable Skill entrypoint.
|
||||
- `has-interface` (1.0): Output includes neutral interface metadata.
|
||||
- `has-report` (1.0): Output points reviewer to generated overview report.
|
||||
- `has-resource-boundary` (1.0): Output preserves entrypoint/resource separation.
|
||||
|
||||
#### Variant A
|
||||
|
||||
Create a routeable SKILL.md, agents/interface.yaml, reports/skill-overview.html, and a focused eval plan. Keep the root entrypoint lean, move durable guidance into references/, scripts into scripts/, and evidence into reports/.
|
||||
|
||||
#### Variant B
|
||||
|
||||
I can write a prompt for that workflow and include a short checklist.
|
||||
|
||||
### output-eval-expectation
|
||||
|
||||
Prompt: Upgrade this production skill so we know whether the generated output is better than baseline.
|
||||
|
||||
Rubric:
|
||||
- `has-baseline-comparison` (1.0): Output explicitly compares with-skill and baseline outputs.
|
||||
- `has-assertion-grading` (1.0): Output includes objective assertion grading.
|
||||
- `has-scorecard` (1.0): Output produces a scorecard report path.
|
||||
- `has-failure-taxonomy` (1.0): Output records failure taxonomy.
|
||||
|
||||
#### Variant A
|
||||
|
||||
Add Output Eval Lab cases with baseline_output and with_skill_output, run assertion grading, report with-skill vs baseline pass-rate delta, and record failure taxonomy plus next fixes in reports/output_quality_scorecard.md.
|
||||
|
||||
#### Variant B
|
||||
|
||||
Add more examples and run the trigger eval again.
|
||||
|
||||
### ir-before-packaging
|
||||
|
||||
Prompt: Package this skill for OpenAI, Claude, Agent Skills, and generic targets.
|
||||
|
||||
Rubric:
|
||||
- `has-ir-first` (1.0): Output requires Skill IR before packaging.
|
||||
- `has-core-ir-fields` (1.0): Output lists core IR contract fields.
|
||||
- `has-targets` (1.0): Output names requested runtime targets.
|
||||
- `has-semantic-preservation` (1.0): Output says targets must preserve the capability contract.
|
||||
|
||||
#### Variant A
|
||||
|
||||
Export folders for each platform and adjust files as needed.
|
||||
|
||||
#### Variant B
|
||||
|
||||
Export Skill IR first with job_to_be_done, trigger_surface, workflow, resources, eval_plan, risk, and governance. Then compile or package targets from the IR so OpenAI, Claude, Agent Skills, and generic packages preserve the same capability contract.
|
||||
|
||||
### near-neighbor-boundary
|
||||
|
||||
Prompt: I only need a one-off summary of these notes, not a reusable process.
|
||||
|
||||
Rubric:
|
||||
- `declines-skill` (1.0): Output refuses unnecessary skill creation for one-off work.
|
||||
- `names-near-neighbor` (1.0): Output labels the request as near-neighbor instead of owned work.
|
||||
- `requires-reuse-signal` (1.0): Output asks for repeat-use evidence before packaging.
|
||||
|
||||
#### Variant A
|
||||
|
||||
Create a SKILL.md and a reusable workflow anyway so future notes can use it.
|
||||
|
||||
#### Variant B
|
||||
|
||||
Do not create a skill for this one-off request. Treat it as a near-neighbor: answer the summary directly unless the user confirms repeated use, shared ownership, or a reusable output contract.
|
||||
|
||||
### file-backed-governed-package
|
||||
|
||||
Prompt: Turn the attached release brief source into a governed skill package.
|
||||
|
||||
Rubric:
|
||||
- `uses-file-backed-evidence` (1.0): Output names file-backed source evidence.
|
||||
- `has-governance` (1.0): Output preserves governed ownership metadata.
|
||||
- `has-output-contract` (1.0): Output preserves output and rollback boundaries.
|
||||
- `has-trust-and-scorecard` (1.0): Output requires trust and output scorecard artifacts.
|
||||
- `does-not-invent-evidence` (1.0): Output forbids invented launch evidence.
|
||||
|
||||
#### Variant A
|
||||
|
||||
Draft a release announcement with the changelog, support notes, and owner name.
|
||||
|
||||
#### Variant B
|
||||
|
||||
Use the file-backed fixture as source evidence, then create a governed skill package with SKILL.md, agents/interface.yaml, owner, review cadence, input_files, output contract, rollback boundary, trust report, and reports/output_quality_scorecard.md. Mark missing launch metrics as missing evidence instead of inventing them.
|
||||
@@ -5,7 +5,7 @@
|
||||
"root": ".",
|
||||
"summary": {
|
||||
"target_python": "3.11",
|
||||
"file_count": 152,
|
||||
"file_count": 154,
|
||||
"issue_count": 0,
|
||||
"syntax_error_count": 0,
|
||||
"fstring_311_violation_count": 0,
|
||||
@@ -166,6 +166,12 @@
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/prepare_output_review_kit.py",
|
||||
"ok": true,
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/prepare_world_class_submission_kit.py",
|
||||
"ok": true,
|
||||
@@ -706,6 +712,12 @@
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_output_review_kit.py",
|
||||
"ok": true,
|
||||
"issue_count": 0,
|
||||
"issues": []
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_output_risk_profile.py",
|
||||
"ok": true,
|
||||
|
||||
@@ -6,7 +6,7 @@ Generated at: `2026-06-13`
|
||||
|
||||
- decision: `pass`
|
||||
- target python: `3.11`
|
||||
- files scanned: `152`
|
||||
- files scanned: `154`
|
||||
- issues: `0`
|
||||
- syntax errors: `0`
|
||||
- f-string 3.11 violations: `0`
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "68a0228b56de8c9e9e94d64d7c1e386bf3dff55c0f6228b65f91e75d02525926",
|
||||
"package_sha256": "33ca97e8df3e3c75228595ab8bd06d65c697ef708723a0a53637bd8f22bbcfda",
|
||||
"archive_sha256": "cb1ac8c62bc5dee942a88f18eb5d71c93ae58f854ac19f3d912f9c9c3a4ec24e"
|
||||
},
|
||||
"compatibility": {
|
||||
@@ -78,7 +78,7 @@
|
||||
"vscode"
|
||||
],
|
||||
"package_metadata": "registry/packages/yao-meta-skill.json",
|
||||
"package_sha256": "68a0228b56de8c9e9e94d64d7c1e386bf3dff55c0f6228b65f91e75d02525926"
|
||||
"package_sha256": "33ca97e8df3e3c75228595ab8bd06d65c697ef708723a0a53637bd8f22bbcfda"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
- Maturity: `governed`
|
||||
- Owner: `Yao Team`
|
||||
- License: `MIT`
|
||||
- Package SHA256: `68a0228b56de8c9e9e94d64d7c1e386bf3dff55c0f6228b65f91e75d02525926`
|
||||
- Package SHA256: `33ca97e8df3e3c75228595ab8bd06d65c697ef708723a0a53637bd8f22bbcfda`
|
||||
- Archive SHA256: `cb1ac8c62bc5dee942a88f18eb5d71c93ae58f854ac19f3d912f9c9c3a4ec24e`
|
||||
- Install simulated: `True`
|
||||
|
||||
|
||||
+10
-10
File diff suppressed because one or more lines are too long
+495
-143
File diff suppressed because it is too large
Load Diff
@@ -2,8 +2,8 @@
|
||||
"ok": true,
|
||||
"skill_dir": ".",
|
||||
"summary": {
|
||||
"scanned_files": 176,
|
||||
"script_count": 92,
|
||||
"scanned_files": 177,
|
||||
"script_count": 93,
|
||||
"internal_module_count": 17,
|
||||
"secret_findings": 0,
|
||||
"dependency_files": [
|
||||
@@ -12,18 +12,18 @@
|
||||
"network_script_count": 3,
|
||||
"network_policy_covered_count": 3,
|
||||
"network_policy_missing_count": 0,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"permission_required_count": 3,
|
||||
"permission_approved_count": 3,
|
||||
"permission_missing_count": 0,
|
||||
"permission_invalid_count": 0,
|
||||
"permission_expired_count": 0,
|
||||
"help_smoke_checked_count": 75,
|
||||
"help_smoke_checked_count": 76,
|
||||
"help_smoke_failed_count": 0,
|
||||
"interactive_script_count": 0,
|
||||
"package_hash_scope": "source-contract-without-generated-reports",
|
||||
"package_hash_file_count": 176,
|
||||
"package_sha256": "68a0228b56de8c9e9e94d64d7c1e386bf3dff55c0f6228b65f91e75d02525926"
|
||||
"package_hash_file_count": 177,
|
||||
"package_sha256": "33ca97e8df3e3c75228595ab8bd06d65c697ef708723a0a53637bd8f22bbcfda"
|
||||
},
|
||||
"failures": [],
|
||||
"warnings": [],
|
||||
@@ -332,6 +332,20 @@
|
||||
"network_urls": [],
|
||||
"network_hosts": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/prepare_output_review_kit.py",
|
||||
"interface": "cli",
|
||||
"interface_declared": false,
|
||||
"interface_reason": "Default CLI classification; add SCRIPT_INTERFACE for internal modules.",
|
||||
"has_argparse": true,
|
||||
"has_main_guard": true,
|
||||
"uses_input": false,
|
||||
"uses_network": false,
|
||||
"uses_file_write": true,
|
||||
"uses_subprocess": false,
|
||||
"network_urls": [],
|
||||
"network_hosts": []
|
||||
},
|
||||
{
|
||||
"path": "scripts/prepare_world_class_submission_kit.py",
|
||||
"interface": "cli",
|
||||
@@ -1365,9 +1379,9 @@
|
||||
"help_smoke": {
|
||||
"enabled": true,
|
||||
"timeout_seconds": 5.0,
|
||||
"candidate_count": 75,
|
||||
"checked_count": 75,
|
||||
"passed_count": 75,
|
||||
"candidate_count": 76,
|
||||
"checked_count": 76,
|
||||
"passed_count": 76,
|
||||
"failed_count": 0,
|
||||
"skipped_count": 17,
|
||||
"failed_scripts": [],
|
||||
@@ -1582,6 +1596,16 @@
|
||||
"stdout_excerpt": "usage: optimize_description.py [-h] --description-file DESCRIPTION_FILE\n [--baseline-description-file BASELINE_DESCRIPTION_FILE]\n --dev-cases DEV_CASES\n ",
|
||||
"stderr_excerpt": ""
|
||||
},
|
||||
{
|
||||
"path": "scripts/prepare_output_review_kit.py",
|
||||
"command": "python3 scripts/prepare_output_review_kit.py --help",
|
||||
"returncode": 0,
|
||||
"timed_out": false,
|
||||
"passed": true,
|
||||
"has_help_text": true,
|
||||
"stdout_excerpt": "usage: prepare_output_review_kit.py [-h] [--blind-pack-json BLIND_PACK_JSON]\n [--blind-pack-md BLIND_PACK_MD]\n [--decisions DECISIONS]\n ",
|
||||
"stderr_excerpt": ""
|
||||
},
|
||||
{
|
||||
"path": "scripts/prepare_world_class_submission_kit.py",
|
||||
"command": "python3 scripts/prepare_world_class_submission_kit.py --help",
|
||||
@@ -2260,6 +2284,7 @@
|
||||
"scripts/github_benchmark_scan.py",
|
||||
"scripts/import_telemetry_events.py",
|
||||
"scripts/init_skill.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
# Security Trust Report
|
||||
|
||||
- OK: `True`
|
||||
- Scanned files: `176`
|
||||
- Scripts: `92`
|
||||
- Scanned files: `177`
|
||||
- Scripts: `93`
|
||||
- Internal script modules: `17`
|
||||
- Secret findings: `0`
|
||||
- Network-capable scripts: `3`
|
||||
- Network policy covered scripts: `3`
|
||||
- Network policy missing scripts: `0`
|
||||
- File-write scripts: `62`
|
||||
- File-write scripts: `63`
|
||||
- Permission approvals: `3 / 3`
|
||||
- Permission approval gaps: `0`
|
||||
- CLI help smoke checked: `75`
|
||||
- CLI help smoke checked: `76`
|
||||
- CLI help smoke failures: `0`
|
||||
- Interactive scripts: `0`
|
||||
- Package hash scope: `source-contract-without-generated-reports`
|
||||
- Package hash files: `176`
|
||||
- Package SHA256: `68a0228b56de8c9e9e94d64d7c1e386bf3dff55c0f6228b65f91e75d02525926`
|
||||
- Package hash files: `177`
|
||||
- Package SHA256: `33ca97e8df3e3c75228595ab8bd06d65c697ef708723a0a53637bd8f22bbcfda`
|
||||
|
||||
## Failures
|
||||
|
||||
@@ -54,8 +54,8 @@
|
||||
|
||||
- Enabled: `True`
|
||||
- Timeout seconds: `5.0`
|
||||
- Checked scripts: `75`
|
||||
- Passed scripts: `75`
|
||||
- Checked scripts: `76`
|
||||
- Passed scripts: `76`
|
||||
- Failed scripts: `none`
|
||||
|
||||
## Script Surface
|
||||
@@ -83,6 +83,7 @@
|
||||
| scripts/lint_skill.py | cli | False | True | True | False | False | False | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/local_output_eval_runner.py | cli | False | True | True | False | False | False | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/optimize_description.py | cli | False | True | True | False | False | False | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/prepare_output_review_kit.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/prepare_world_class_submission_kit.py | cli | True | True | True | False | False | True | False | Prepares editable world-class evidence intake packets without counting drafts as accepted evidence. |
|
||||
| scripts/probe_runtime_permissions.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
| scripts/promotion_checker.py | cli | False | True | True | False | False | True | False | Default CLI classification; add SCRIPT_INTERFACE for internal modules. |
|
||||
|
||||
@@ -621,7 +621,7 @@
|
||||
<div class="two-col">
|
||||
<article class="panel">
|
||||
<h3><span data-lang="zh-CN">作用定位</span><span data-lang="en">Role</span></h3>
|
||||
<ul class="list"><li><span data-lang="zh-CN">从工作流、提示词、对话记录、文档或笔记中创建、重构、评估和打包 agent skill;适用于新建 Skill、沉淀重复流程、改进现有 Skill、补充 eval 或团队复用打包。</span><span data-lang="en">Create, refactor, evaluate, and package agent skills from workflows, prompts, transcripts, docs, or notes. Use when asked to create a skill, turn a repeated process into a reusable skill, improve an existing skill, add evals, or package a skill for team reuse.</span></li><li><span data-lang="zh-CN">把一次性经验沉淀为可复用、可评估、可迁移的 Skill 包体。</span><span data-lang="en">把一次性经验沉淀为可复用、可评估、可迁移的 Skill 包体。</span></li><li><span data-lang="zh-CN">交付结果:SKILL.md, agents/interface.yaml, reports/skill-ir.json, reports/compiled_targets.md, reports/output_quality_scorecard.md, reports/output_execution_runs.md, reports/output_blind_review_pack.md, reports/output_blind_answer_key.json, reports/output_review_adjudication.md, reports/benchmark_reproducibility.md, reports/conformance_matrix.md, reports/security_trust_report.md, reports/runtime_permission_probes.md, reports/skill_atlas.html, reports/registry_audit.md, reports/package_verification.md, reports/install_simulation.md, reports/upgrade_check.md, reports/adoption_drift_report.md, reports/review_waivers.md, reports/world_class_evidence_plan.md, reports/world_class_evidence_ledger.md, reports/review_annotations.md, reports/review-studio.html, reports/skill-overview.html</span><span data-lang="en">交付结果:SKILL.md, agents/interface.yaml, reports/skill-ir.json, reports/compiled_targets.md, reports/output_quality_scorecard.md, reports/output_execution_runs.md, reports/output_blind_review_pack.md, reports/output_blind_answer_key.json, reports/output_review_adjudication.md, reports/benchmark_reproducibility.md, reports/conformance_matrix.md, reports/security_trust_report.md, reports/runtime_permission_probes.md, reports/skill_atlas.html, reports/registry_audit.md, reports/package_verification.md, reports/install_simulation.md, reports/upgrade_check.md, reports/adoption_drift_report.md, reports/review_waivers.md, reports/world_class_evidence_plan.md, reports/world_class_evidence_ledger.md, reports/review_annotations.md, reports/review-studio.html, reports/skill-overview.html</span></li></ul>
|
||||
<ul class="list"><li><span data-lang="zh-CN">从工作流、提示词、对话记录、文档或笔记中创建、重构、评估和打包 agent skill;适用于新建 Skill、沉淀重复流程、改进现有 Skill、补充 eval 或团队复用打包。</span><span data-lang="en">Create, refactor, evaluate, and package agent skills from workflows, prompts, transcripts, docs, or notes. Use when asked to create a skill, turn a repeated process into a reusable skill, improve an existing skill, add evals, or package a skill for team reuse.</span></li><li><span data-lang="zh-CN">把一次性经验沉淀为可复用、可评估、可迁移的 Skill 包体。</span><span data-lang="en">把一次性经验沉淀为可复用、可评估、可迁移的 Skill 包体。</span></li><li><span data-lang="zh-CN">交付结果:SKILL.md, agents/interface.yaml, reports/skill-ir.json, reports/compiled_targets.md, reports/output_quality_scorecard.md, reports/output_execution_runs.md, reports/output_blind_review_pack.md, reports/output_review_kit.md, reports/output_review_adjudication.md, reports/benchmark_reproducibility.md, reports/output_blind_answer_key.json, reports/conformance_matrix.md, reports/security_trust_report.md, reports/runtime_permission_probes.md, reports/skill_atlas.html, reports/registry_audit.md, reports/package_verification.md, reports/install_simulation.md, reports/upgrade_check.md, reports/adoption_drift_report.md, reports/review_waivers.md, reports/world_class_evidence_plan.md, reports/world_class_evidence_ledger.md, reports/review_annotations.md, reports/review-studio.html, reports/skill-overview.html</span><span data-lang="en">交付结果:SKILL.md, agents/interface.yaml, reports/skill-ir.json, reports/compiled_targets.md, reports/output_quality_scorecard.md, reports/output_execution_runs.md, reports/output_blind_review_pack.md, reports/output_review_kit.md, reports/output_review_adjudication.md, reports/benchmark_reproducibility.md, reports/output_blind_answer_key.json, reports/conformance_matrix.md, reports/security_trust_report.md, reports/runtime_permission_probes.md, reports/skill_atlas.html, reports/registry_audit.md, reports/package_verification.md, reports/install_simulation.md, reports/upgrade_check.md, reports/adoption_drift_report.md, reports/review_waivers.md, reports/world_class_evidence_plan.md, reports/world_class_evidence_ledger.md, reports/review_annotations.md, reports/review-studio.html, reports/skill-overview.html</span></li></ul>
|
||||
</article>
|
||||
<figure class="chart-figure" data-chart="flow"><svg viewBox="0 0 620 170" role="img" aria-label="交付流程"><text x="20" y="28" class="chart-title">交付流程</text><path d="M188 93 H248 M398 93 H458" class="chart-line"/><g><rect x="38" y="56" width="150" height="74" rx="8" fill="#F6F8FB" stroke="#e8e6dc"/><text x="113" y="99" text-anchor="middle">输入材料</text></g><g><rect x="248" y="56" width="150" height="74" rx="8" fill="#F6F8FB" stroke="#e8e6dc"/><text x="323" y="99" text-anchor="middle">Skill 包体</text></g><g><rect x="458" y="56" width="150" height="74" rx="8" fill="#F6F8FB" stroke="#e8e6dc"/><text x="533" y="99" text-anchor="middle">可复用能力</text></g></svg><figcaption>交付流程把用户输入、生成的包体和可复用能力放在一条线上。</figcaption></figure>
|
||||
</div>
|
||||
@@ -771,7 +771,7 @@
|
||||
<p><span data-lang="zh-CN">让 reviewer 快速确认关键文件、目录和资产分布。</span><span data-lang="en">Lets reviewers confirm key files, directories, and asset distribution quickly.</span></p>
|
||||
</div>
|
||||
<div class="two-col">
|
||||
<figure class="chart-figure" data-chart="asset_donut"><svg viewBox="0 0 430 270" role="img" aria-label="资产分布"><text x="20" y="30" class="chart-title">资产分布</text><circle cx="130" cy="130" r="70" fill="none" stroke="#1B365D" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="0.0" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#2D5A8A" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-0.8" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#D0DCE9" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-1.6" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#E4ECF5" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-2.3" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#e8e6dc" stroke-width="24" stroke-dasharray="25.0 75.0" stroke-dashoffset="-3.1" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#504e49" stroke-width="24" stroke-dasharray="71.9 28.1" stroke-dashoffset="-28.1" pathLength="100" transform="rotate(-90 130 130)"/><text x="130" y="136" text-anchor="middle">353项</text><text x="235" y="78">SKILL.md</text><text x="235" y="100">README.md</text><text x="235" y="122">agents/interface.yaml</text><text x="235" y="144">manifest.json</text><text x="235" y="166">references</text><text x="235" y="188">scripts</text></svg><figcaption>资产分布图展示当前包体的文件和目录重心。</figcaption></figure>
|
||||
<figure class="chart-figure" data-chart="asset_donut"><svg viewBox="0 0 430 270" role="img" aria-label="资产分布"><text x="20" y="30" class="chart-title">资产分布</text><circle cx="130" cy="130" r="70" fill="none" stroke="#1B365D" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="0.0" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#2D5A8A" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-0.8" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#D0DCE9" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-1.6" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#E4ECF5" stroke-width="24" stroke-dasharray="0.8 99.2" stroke-dashoffset="-2.3" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#e8e6dc" stroke-width="24" stroke-dasharray="24.8 75.2" stroke-dashoffset="-3.1" pathLength="100" transform="rotate(-90 130 130)"/><circle cx="130" cy="130" r="70" fill="none" stroke="#504e49" stroke-width="24" stroke-dasharray="72.1 27.9" stroke-dashoffset="-27.9" pathLength="100" transform="rotate(-90 130 130)"/><text x="130" y="136" text-anchor="middle">356项</text><text x="235" y="78">SKILL.md</text><text x="235" y="100">README.md</text><text x="235" y="122">agents/interface.yaml</text><text x="235" y="144">manifest.json</text><text x="235" y="166">references</text><text x="235" y="188">scripts</text></svg><figcaption>资产分布图展示当前包体的文件和目录重心。</figcaption></figure>
|
||||
<table>
|
||||
<thead><tr><th><span data-lang="zh-CN">路径</span><span data-lang="en">Path</span></th><th><span data-lang="zh-CN">作用</span><span data-lang="en">Role</span></th><th><span data-lang="zh-CN">类型</span><span data-lang="en">Type</span></th></tr></thead>
|
||||
<tbody><tr><td>SKILL.md</td><td><span data-lang="zh-CN">Skill 入口文件</span><span data-lang="en">Skill entrypoint</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>README.md</td><td><span data-lang="zh-CN">人类可读使用说明</span><span data-lang="en">Human-readable usage guide</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>agents/interface.yaml</td><td><span data-lang="zh-CN">跨平台接口元数据</span><span data-lang="en">Neutral interface metadata</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>manifest.json</td><td><span data-lang="zh-CN">生命周期与打包元数据</span><span data-lang="en">Lifecycle and portability metadata</span></td><td><span data-lang="zh-CN">文件</span><span data-lang="en">file</span></td></tr><tr><td>references</td><td><span data-lang="zh-CN">扩展指导与复用资料</span><span data-lang="en">Extended guidance and reusable notes</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>scripts</td><td><span data-lang="zh-CN">确定性脚本或本地工具</span><span data-lang="en">Deterministic helpers or local tooling</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>evals</td><td><span data-lang="zh-CN">触发与质量检查</span><span data-lang="en">Trigger and quality checks</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr><tr><td>reports</td><td><span data-lang="zh-CN">生成的证据与总结报告</span><span data-lang="en">Generated evidence and overview artifacts</span></td><td><span data-lang="zh-CN">目录</span><span data-lang="en">folder</span></td></tr></tbody>
|
||||
|
||||
+49
-21
@@ -16,9 +16,10 @@
|
||||
"reports/output_quality_scorecard.md",
|
||||
"reports/output_execution_runs.md",
|
||||
"reports/output_blind_review_pack.md",
|
||||
"reports/output_blind_answer_key.json",
|
||||
"reports/output_review_kit.md",
|
||||
"reports/output_review_adjudication.md",
|
||||
"reports/benchmark_reproducibility.md",
|
||||
"reports/output_blind_answer_key.json",
|
||||
"reports/conformance_matrix.md",
|
||||
"reports/security_trust_report.md",
|
||||
"reports/runtime_permission_probes.md",
|
||||
@@ -436,7 +437,7 @@
|
||||
"path": "scripts",
|
||||
"label": "Deterministic helpers or local tooling",
|
||||
"kind": "folder",
|
||||
"file_count": 92
|
||||
"file_count": 93
|
||||
},
|
||||
{
|
||||
"path": "evals",
|
||||
@@ -448,10 +449,10 @@
|
||||
"path": "reports",
|
||||
"label": "Generated evidence and overview artifacts",
|
||||
"kind": "folder",
|
||||
"file_count": 197
|
||||
"file_count": 199
|
||||
}
|
||||
],
|
||||
"file_count": 353,
|
||||
"file_count": 356,
|
||||
"folder_count": 4,
|
||||
"distribution": [
|
||||
{
|
||||
@@ -476,7 +477,7 @@
|
||||
},
|
||||
{
|
||||
"label": "scripts",
|
||||
"value": 92
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"label": "evals",
|
||||
@@ -484,7 +485,7 @@
|
||||
},
|
||||
{
|
||||
"label": "reports",
|
||||
"value": 197
|
||||
"value": 199
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -605,7 +606,7 @@
|
||||
"path": "scripts",
|
||||
"label": "Deterministic helpers or local tooling",
|
||||
"kind": "folder",
|
||||
"file_count": 92
|
||||
"file_count": 93
|
||||
},
|
||||
{
|
||||
"path": "evals",
|
||||
@@ -617,7 +618,7 @@
|
||||
"path": "reports",
|
||||
"label": "Generated evidence and overview artifacts",
|
||||
"kind": "folder",
|
||||
"file_count": 197
|
||||
"file_count": 199
|
||||
}
|
||||
],
|
||||
"strengths": [
|
||||
@@ -865,6 +866,30 @@
|
||||
"pair_count": 5,
|
||||
"answer_key_separate": true
|
||||
},
|
||||
"output_review_kit": {
|
||||
"ok": true,
|
||||
"summary": {
|
||||
"case_count": 5,
|
||||
"ready_for_adjudication_count": 0,
|
||||
"pending_decision_count": 5,
|
||||
"invalid_decision_count": 0,
|
||||
"reviewer_metadata_present": false,
|
||||
"answer_key_hidden": true,
|
||||
"answer_key_path_exposed": false,
|
||||
"ready_to_run_adjudication": false,
|
||||
"failure_count": 0
|
||||
},
|
||||
"artifacts": {
|
||||
"reviewer_kit_json": "reports/output_review_kit.json",
|
||||
"reviewer_kit_markdown": "reports/output_review_kit.md",
|
||||
"blind_pack_json": "reports/output_blind_review_pack.json",
|
||||
"blind_pack_markdown": "reports/output_blind_review_pack.md",
|
||||
"decisions": "reports/output_review_decisions.json",
|
||||
"adjudication_json": "reports/output_review_adjudication.json",
|
||||
"adjudication_markdown": "reports/output_review_adjudication.md"
|
||||
},
|
||||
"failures": []
|
||||
},
|
||||
"output_review_adjudication": {
|
||||
"ok": true,
|
||||
"summary": {
|
||||
@@ -909,9 +934,9 @@
|
||||
"world_class_task_count": 4,
|
||||
"world_class_ledger_pending_count": 4,
|
||||
"working_tree_dirty": true,
|
||||
"changed_file_count": 56
|
||||
"changed_file_count": 59
|
||||
},
|
||||
"commit": "30539bed7a29dd88c2f289dd0c115da9834dd5d9",
|
||||
"commit": "ecdb16dd90025bcca3051be4c6a1b5b723c7ec75",
|
||||
"missing_artifacts": [],
|
||||
"limitations": [
|
||||
"Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.",
|
||||
@@ -986,8 +1011,8 @@
|
||||
"failures": []
|
||||
},
|
||||
"trust_security": {
|
||||
"scanned_files": 176,
|
||||
"script_count": 92,
|
||||
"scanned_files": 177,
|
||||
"script_count": 93,
|
||||
"internal_module_count": 17,
|
||||
"secret_findings": 0,
|
||||
"dependency_files": [
|
||||
@@ -996,18 +1021,18 @@
|
||||
"network_script_count": 3,
|
||||
"network_policy_covered_count": 3,
|
||||
"network_policy_missing_count": 0,
|
||||
"file_write_script_count": 62,
|
||||
"file_write_script_count": 63,
|
||||
"permission_required_count": 3,
|
||||
"permission_approved_count": 3,
|
||||
"permission_missing_count": 0,
|
||||
"permission_invalid_count": 0,
|
||||
"permission_expired_count": 0,
|
||||
"help_smoke_checked_count": 75,
|
||||
"help_smoke_checked_count": 76,
|
||||
"help_smoke_failed_count": 0,
|
||||
"interactive_script_count": 0,
|
||||
"package_hash_scope": "source-contract-without-generated-reports",
|
||||
"package_hash_file_count": 176,
|
||||
"package_sha256": "6298aa08d70a1e36956df32bcbb7a0bc778e8125f5449630cebf966b1c06a5f7"
|
||||
"package_hash_file_count": 177,
|
||||
"package_sha256": "7645bfc56829c3d6888e792b170b2e734d041c930c31f7f285c0d59e49d7de1b"
|
||||
},
|
||||
"skill_atlas": {
|
||||
"skill_count": 12,
|
||||
@@ -1045,7 +1070,7 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "6298aa08d70a1e36956df32bcbb7a0bc778e8125f5449630cebf966b1c06a5f7",
|
||||
"package_sha256": "7645bfc56829c3d6888e792b170b2e734d041c930c31f7f285c0d59e49d7de1b",
|
||||
"archive_sha256": "cb1ac8c62bc5dee942a88f18eb5d71c93ae58f854ac19f3d912f9c9c3a4ec24e"
|
||||
},
|
||||
"compatibility": {
|
||||
@@ -1082,7 +1107,7 @@
|
||||
"install_simulated": true,
|
||||
"install_simulation": "reports/install_simulation.json"
|
||||
},
|
||||
"generated_at": "2026-06-14"
|
||||
"generated_at": "2026-06-13"
|
||||
},
|
||||
"failures": [],
|
||||
"warnings": []
|
||||
@@ -1105,7 +1130,7 @@
|
||||
"ok": true,
|
||||
"summary": {
|
||||
"archive_present": true,
|
||||
"archive_entry_count": 563,
|
||||
"archive_entry_count": 567,
|
||||
"archive_extracted": true,
|
||||
"entrypoint_loaded": true,
|
||||
"manifest_loaded": true,
|
||||
@@ -1177,7 +1202,7 @@
|
||||
{
|
||||
"field": "package_sha256",
|
||||
"from": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"to": "6298aa08d70a1e36956df32bcbb7a0bc778e8125f5449630cebf966b1c06a5f7"
|
||||
"to": "7645bfc56829c3d6888e792b170b2e734d041c930c31f7f285c0d59e49d7de1b"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1349,8 +1374,9 @@
|
||||
"current": "0/5 decisions; pending 5",
|
||||
"objective": "Record real blind A/B reviewer decisions before claiming human output review completion.",
|
||||
"runbook": [
|
||||
"python3 scripts/yao.py output-review-kit --write-template",
|
||||
"Open reports/output_review_kit.md and choose A or B for each pair without opening the answer key.",
|
||||
"python3 scripts/adjudicate_output_review.py --write-template",
|
||||
"Open reports/output_blind_review_pack.md and choose A or B for each pair without opening the answer key.",
|
||||
"Edit reports/output_review_decisions.json with winner_variant values and reviewer metadata.",
|
||||
"python3 scripts/yao.py output-review",
|
||||
"python3 scripts/yao.py skill-os2-audit . --generated-at <YYYY-MM-DD>",
|
||||
@@ -1365,6 +1391,7 @@
|
||||
],
|
||||
"evidence_artifacts": [
|
||||
"reports/output_blind_review_pack.md",
|
||||
"reports/output_review_kit.md",
|
||||
"reports/output_review_decisions.json",
|
||||
"reports/output_review_adjudication.json",
|
||||
"reports/output_review_adjudication.md",
|
||||
@@ -1556,6 +1583,7 @@
|
||||
],
|
||||
"evidence_artifacts": [
|
||||
"reports/output_blind_review_pack.md",
|
||||
"reports/output_review_kit.md",
|
||||
"reports/output_review_decisions.json",
|
||||
"reports/output_review_adjudication.json",
|
||||
"reports/output_review_adjudication.md",
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
"scripts/lint_skill.py",
|
||||
"scripts/local_output_eval_runner.py",
|
||||
"scripts/optimize_description.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
"key": "trust-security",
|
||||
"label": "Trust Security",
|
||||
"status": "pass",
|
||||
"current": "secrets 0; scripts 92; help failures 0",
|
||||
"current": "secrets 0; scripts 93; help failures 0",
|
||||
"target": "Secrets, scripts, dependencies, permissions, and package hash are reviewable",
|
||||
"evidence": [
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ Generated at: `2026-06-13`
|
||||
| Human Adjudication | human-required | 0/5 decisions; pending 5 | Real reviewer decisions recorded before claiming output review completion | Record real A/B choices in the decision template, then regenerate adjudication. |
|
||||
| Benchmark Reproducibility | pass | artifacts 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 92; 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 93; 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. |
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"label": "Trust Security",
|
||||
"status": "pass",
|
||||
"objective": "Scripts, dependencies, permissions, secrets, and package hash are reviewable for team distribution.",
|
||||
"current": "92 scripts; secrets 0; help failures 0",
|
||||
"current": "93 scripts; secrets 0; help failures 0",
|
||||
"command": "python3 scripts/yao.py trust .",
|
||||
"test": "python3 tests/verify_trust_check.py",
|
||||
"evidence": [
|
||||
|
||||
@@ -21,7 +21,7 @@ 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` | 92 scripts; secrets 0; help failures 0 | `python3 scripts/yao.py trust .` | `python3 tests/verify_trust_check.py` |
|
||||
| Trust Security | `pass` | 93 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 563; 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` |
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
{
|
||||
"field": "package_sha256",
|
||||
"from": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"to": "68a0228b56de8c9e9e94d64d7c1e386bf3dff55c0f6228b65f91e75d02525926"
|
||||
"to": "33ca97e8df3e3c75228595ab8bd06d65c697ef708723a0a53637bd8f22bbcfda"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"summary": {
|
||||
"ledger_ready_to_claim_world_class": false,
|
||||
"ledger_pending_count": 4,
|
||||
"claim_surface_count": 69,
|
||||
"claim_surface_count": 70,
|
||||
"violation_count": 0,
|
||||
"overclaim_guard_active": true,
|
||||
"decision": "claim-guard-pass-evidence-pending"
|
||||
@@ -195,6 +195,10 @@
|
||||
"path": "reports/output_review_adjudication.md",
|
||||
"violation_count": 0
|
||||
},
|
||||
{
|
||||
"path": "reports/output_review_kit.md",
|
||||
"violation_count": 0
|
||||
},
|
||||
{
|
||||
"path": "reports/package_verification.md",
|
||||
"violation_count": 0
|
||||
|
||||
@@ -7,7 +7,7 @@ Generated at: `2026-06-13`
|
||||
- decision: `claim-guard-pass-evidence-pending`
|
||||
- ledger ready to claim world-class: `false`
|
||||
- ledger pending evidence: `4`
|
||||
- claim surfaces scanned: `69`
|
||||
- claim surfaces scanned: `70`
|
||||
- violations: `0`
|
||||
- overclaim guard active: `true`
|
||||
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
],
|
||||
"evidence_artifacts": [
|
||||
"reports/output_blind_review_pack.md",
|
||||
"reports/output_review_kit.md",
|
||||
"reports/output_review_decisions.json",
|
||||
"reports/output_review_adjudication.json",
|
||||
"reports/output_review_adjudication.md",
|
||||
|
||||
@@ -107,6 +107,7 @@ This report validates the intake contract for human and external evidence. A val
|
||||
- reports/skill_os2_audit.json item human-adjudication status becomes pass
|
||||
- evidence_artifacts:
|
||||
- reports/output_blind_review_pack.md
|
||||
- reports/output_review_kit.md
|
||||
- reports/output_review_decisions.json
|
||||
- reports/output_review_adjudication.json
|
||||
- reports/output_review_adjudication.md
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
],
|
||||
"evidence_artifacts": [
|
||||
"reports/output_blind_review_pack.md",
|
||||
"reports/output_review_kit.md",
|
||||
"reports/output_review_decisions.json",
|
||||
"reports/output_review_adjudication.json",
|
||||
"reports/output_review_adjudication.md",
|
||||
|
||||
@@ -58,8 +58,9 @@
|
||||
"current": "0/5 decisions; pending 5",
|
||||
"objective": "Record real blind A/B reviewer decisions before claiming human output review completion.",
|
||||
"runbook": [
|
||||
"python3 scripts/yao.py output-review-kit --write-template",
|
||||
"Open reports/output_review_kit.md and choose A or B for each pair without opening the answer key.",
|
||||
"python3 scripts/adjudicate_output_review.py --write-template",
|
||||
"Open reports/output_blind_review_pack.md and choose A or B for each pair without opening the answer key.",
|
||||
"Edit reports/output_review_decisions.json with winner_variant values and reviewer metadata.",
|
||||
"python3 scripts/yao.py output-review",
|
||||
"python3 scripts/yao.py skill-os2-audit . --generated-at <YYYY-MM-DD>",
|
||||
@@ -74,6 +75,7 @@
|
||||
],
|
||||
"evidence_artifacts": [
|
||||
"reports/output_blind_review_pack.md",
|
||||
"reports/output_review_kit.md",
|
||||
"reports/output_review_decisions.json",
|
||||
"reports/output_review_adjudication.json",
|
||||
"reports/output_review_adjudication.md",
|
||||
|
||||
@@ -63,8 +63,9 @@ This report is an execution plan for the remaining world-class evidence gaps. It
|
||||
|
||||
### Runbook
|
||||
|
||||
- `python3 scripts/yao.py output-review-kit --write-template`
|
||||
- Open reports/output_review_kit.md and choose A or B for each pair without opening the answer key.
|
||||
- `python3 scripts/adjudicate_output_review.py --write-template`
|
||||
- Open reports/output_blind_review_pack.md and choose A or B for each pair without opening the answer key.
|
||||
- Edit reports/output_review_decisions.json with winner_variant values and reviewer metadata.
|
||||
- `python3 scripts/yao.py output-review`
|
||||
- `python3 scripts/yao.py skill-os2-audit . --generated-at <YYYY-MM-DD>`
|
||||
@@ -81,6 +82,7 @@ This report is an execution plan for the remaining world-class evidence gaps. It
|
||||
### Evidence Artifacts
|
||||
|
||||
- `reports/output_blind_review_pack.md`
|
||||
- `reports/output_review_kit.md`
|
||||
- `reports/output_review_decisions.json`
|
||||
- `reports/output_review_adjudication.json`
|
||||
- `reports/output_review_adjudication.md`
|
||||
|
||||
@@ -245,6 +245,7 @@ def build_reviewer_checklist(
|
||||
"blind_pack_path": display_path(blind_pack_path),
|
||||
"decisions_path": display_path(decisions_path),
|
||||
"commands": {
|
||||
"prepare_review_kit": "python3 scripts/yao.py output-review-kit",
|
||||
"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 .",
|
||||
|
||||
@@ -40,6 +40,7 @@ DEFAULT_TARGETS = [
|
||||
"compiler-check",
|
||||
"output-eval-check",
|
||||
"output-execution-check",
|
||||
"output-review-kit-check",
|
||||
"output-review-adjudication-check",
|
||||
"runtime-conformance-check",
|
||||
"runtime-permission-check",
|
||||
|
||||
@@ -0,0 +1,316 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Prepare a reviewer-facing blind A/B output review kit."""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from adjudicate_output_review import (
|
||||
build_decision_template,
|
||||
confidence_value,
|
||||
decision_index,
|
||||
display_path,
|
||||
load_json,
|
||||
normalize_variant,
|
||||
)
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
DEFAULT_BLIND_PACK_JSON = ROOT / "reports" / "output_blind_review_pack.json"
|
||||
DEFAULT_BLIND_PACK_MD = ROOT / "reports" / "output_blind_review_pack.md"
|
||||
DEFAULT_DECISIONS = ROOT / "reports" / "output_review_decisions.json"
|
||||
DEFAULT_OUTPUT_JSON = ROOT / "reports" / "output_review_kit.json"
|
||||
DEFAULT_OUTPUT_MD = ROOT / "reports" / "output_review_kit.md"
|
||||
|
||||
|
||||
def load_optional_decisions(path: Path) -> tuple[dict[str, Any], list[str]]:
|
||||
if not path.exists():
|
||||
return {"schema_version": "1.0", "decisions": []}, []
|
||||
return load_json(path)
|
||||
|
||||
|
||||
def pairs_from_pack(blind_pack: dict[str, Any]) -> list[dict[str, Any]]:
|
||||
pairs = blind_pack.get("pairs", [])
|
||||
if not isinstance(pairs, list):
|
||||
return []
|
||||
return [item for item in pairs if isinstance(item, dict) and item.get("case_id")]
|
||||
|
||||
|
||||
def decision_state(decision: dict[str, Any] | None) -> dict[str, Any]:
|
||||
if not decision:
|
||||
return {
|
||||
"status": "awaiting-decision",
|
||||
"winner_variant_recorded": False,
|
||||
"confidence_recorded": False,
|
||||
"reason_recorded": False,
|
||||
"blocking_reason": "No reviewer choice has been recorded yet.",
|
||||
}
|
||||
winner = normalize_variant(decision.get("winner_variant", decision.get("reviewer_winner_variant", decision.get("winner", ""))))
|
||||
confidence, confidence_failure = confidence_value(decision.get("confidence"))
|
||||
reason = str(decision.get("reason", "")).strip()
|
||||
if not winner and confidence is None and not reason:
|
||||
return {
|
||||
"status": "awaiting-decision",
|
||||
"winner_variant_recorded": False,
|
||||
"confidence_recorded": False,
|
||||
"reason_recorded": False,
|
||||
"blocking_reason": "Decision template exists but this row is still blank.",
|
||||
}
|
||||
failures = []
|
||||
if winner not in {"A", "B"}:
|
||||
failures.append("winner_variant must be A or B")
|
||||
if confidence_failure:
|
||||
failures.append(confidence_failure)
|
||||
if not reason:
|
||||
failures.append("reason should explain the reviewer rationale")
|
||||
if failures:
|
||||
return {
|
||||
"status": "needs-fix",
|
||||
"winner_variant_recorded": winner in {"A", "B"},
|
||||
"confidence_recorded": confidence is not None,
|
||||
"reason_recorded": bool(reason),
|
||||
"blocking_reason": "; ".join(failures),
|
||||
}
|
||||
return {
|
||||
"status": "ready-for-adjudication",
|
||||
"winner_variant_recorded": True,
|
||||
"confidence_recorded": confidence is not None,
|
||||
"reason_recorded": True,
|
||||
"blocking_reason": "Reviewer choice is complete enough for adjudication.",
|
||||
}
|
||||
|
||||
|
||||
def build_cases(blind_pack: dict[str, Any], decisions: dict[str, dict[str, Any]]) -> list[dict[str, Any]]:
|
||||
cases = []
|
||||
for pair in pairs_from_pack(blind_pack):
|
||||
case_id = str(pair.get("case_id", ""))
|
||||
rubric = []
|
||||
for item in pair.get("rubric", []) if isinstance(pair.get("rubric", []), list) else []:
|
||||
if isinstance(item, dict):
|
||||
rubric.append(
|
||||
{
|
||||
"id": str(item.get("id", "")),
|
||||
"description": str(item.get("description", "")),
|
||||
"weight": float(item.get("weight", 1) or 0),
|
||||
}
|
||||
)
|
||||
cases.append(
|
||||
{
|
||||
"case_id": case_id,
|
||||
"prompt": str(pair.get("prompt", "")),
|
||||
"input_files": pair.get("input_files", []) if isinstance(pair.get("input_files", []), list) else [],
|
||||
"review_instruction": str(pair.get("review_instruction", "")),
|
||||
"rubric": rubric,
|
||||
"variant_a": {
|
||||
"blind_id": str(pair.get("variant_a", {}).get("blind_id", "")) if isinstance(pair.get("variant_a"), dict) else "",
|
||||
"output": str(pair.get("variant_a", {}).get("output", "")) if isinstance(pair.get("variant_a"), dict) else "",
|
||||
},
|
||||
"variant_b": {
|
||||
"blind_id": str(pair.get("variant_b", {}).get("blind_id", "")) if isinstance(pair.get("variant_b"), dict) else "",
|
||||
"output": str(pair.get("variant_b", {}).get("output", "")) if isinstance(pair.get("variant_b"), dict) else "",
|
||||
},
|
||||
"decision_state": decision_state(decisions.get(case_id)),
|
||||
}
|
||||
)
|
||||
return cases
|
||||
|
||||
|
||||
def build_summary(cases: list[dict[str, Any]], failures: list[str], reviewer: str, reviewed_at: str) -> dict[str, Any]:
|
||||
status_counts: dict[str, int] = {}
|
||||
for case in cases:
|
||||
status = str(case.get("decision_state", {}).get("status", "awaiting-decision"))
|
||||
status_counts[status] = status_counts.get(status, 0) + 1
|
||||
ready_count = status_counts.get("ready-for-adjudication", 0)
|
||||
pending_count = status_counts.get("awaiting-decision", 0)
|
||||
invalid_count = status_counts.get("needs-fix", 0)
|
||||
return {
|
||||
"case_count": len(cases),
|
||||
"ready_for_adjudication_count": ready_count,
|
||||
"pending_decision_count": pending_count,
|
||||
"invalid_decision_count": invalid_count,
|
||||
"reviewer_metadata_present": bool(str(reviewer).strip() and str(reviewed_at).strip()),
|
||||
"answer_key_hidden": True,
|
||||
"answer_key_path_exposed": False,
|
||||
"ready_to_run_adjudication": bool(cases) and ready_count == len(cases) and invalid_count == 0,
|
||||
"failure_count": len(failures),
|
||||
}
|
||||
|
||||
|
||||
def build_contract(blind_pack_md: Path, decisions_path: Path) -> dict[str, Any]:
|
||||
return {
|
||||
"reviewer_steps": [
|
||||
f"Open {display_path(blind_pack_md)} or this kit and compare Variant A vs Variant B for each case.",
|
||||
f"Record choices in {display_path(decisions_path)} without opening the answer key.",
|
||||
"Use winner_variant A or B, confidence from 0 to 1, and a short reason for every case.",
|
||||
"Run python3 scripts/yao.py output-review after choices are recorded.",
|
||||
"Refresh python3 scripts/yao.py review-studio . before asking for release approval.",
|
||||
],
|
||||
"required_fields": {
|
||||
"reviewer": "Human reviewer name or review group.",
|
||||
"reviewed_at": "Review date or timestamp.",
|
||||
"winner_variant": "A or B for every case.",
|
||||
"confidence": "Optional numeric confidence from 0 to 1.",
|
||||
"reason": "Short rationale based on the rubric, not on hidden labels.",
|
||||
},
|
||||
"privacy_contract": [
|
||||
"The answer key is intentionally withheld from this kit.",
|
||||
"Do not inspect hidden labels or expected winners before decisions are recorded.",
|
||||
"Do not paste private user data into decision reasons.",
|
||||
"Pending decisions must stay pending instead of being counted as human agreement.",
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def render_rubric(rubric: list[dict[str, Any]]) -> list[str]:
|
||||
if not rubric:
|
||||
return ["- No rubric items found."]
|
||||
return [f"- `{item['id']}` ({item['weight']}): {item['description']}" for item in rubric]
|
||||
|
||||
|
||||
def render_markdown(payload: dict[str, Any]) -> str:
|
||||
summary = payload["summary"]
|
||||
contract = payload["review_contract"]
|
||||
lines = [
|
||||
"# Output Review Kit",
|
||||
"",
|
||||
"This reviewer-facing packet contains the blind A/B cases, decision fields, and command flow. It intentionally does not expose the answer key.",
|
||||
"",
|
||||
"## Summary",
|
||||
"",
|
||||
f"- cases: `{summary['case_count']}`",
|
||||
f"- ready for adjudication: `{summary['ready_for_adjudication_count']}`",
|
||||
f"- pending decisions: `{summary['pending_decision_count']}`",
|
||||
f"- invalid decisions: `{summary['invalid_decision_count']}`",
|
||||
f"- reviewer metadata present: `{str(summary['reviewer_metadata_present']).lower()}`",
|
||||
f"- answer key hidden: `{str(summary['answer_key_hidden']).lower()}`",
|
||||
f"- answer key path exposed: `{str(summary['answer_key_path_exposed']).lower()}`",
|
||||
"",
|
||||
"## Review Flow",
|
||||
"",
|
||||
]
|
||||
lines.extend(f"{index}. {step}" for index, step in enumerate(contract["reviewer_steps"], start=1))
|
||||
lines.extend(["", "## Required Fields", ""])
|
||||
lines.extend(f"- `{key}`: {value}" for key, value in contract["required_fields"].items())
|
||||
lines.extend(["", "## Privacy Contract", ""])
|
||||
lines.extend(f"- {item}" for item in contract["privacy_contract"])
|
||||
lines.extend(
|
||||
[
|
||||
"",
|
||||
"## Decision States",
|
||||
"",
|
||||
"| Case | State | Winner | Confidence | Reason | Blocking Reason |",
|
||||
"| --- | --- | --- | --- | --- | --- |",
|
||||
]
|
||||
)
|
||||
for case in payload["cases"]:
|
||||
state = case["decision_state"]
|
||||
lines.append(
|
||||
f"| `{case['case_id']}` | `{state['status']}` | `{str(state['winner_variant_recorded']).lower()}` | "
|
||||
f"`{str(state['confidence_recorded']).lower()}` | `{str(state['reason_recorded']).lower()}` | {state['blocking_reason']} |"
|
||||
)
|
||||
lines.extend(["", "## Blind Cases", ""])
|
||||
for case in payload["cases"]:
|
||||
lines.extend(
|
||||
[
|
||||
f"### {case['case_id']}",
|
||||
"",
|
||||
f"Prompt: {case['prompt']}",
|
||||
"",
|
||||
"Rubric:",
|
||||
*render_rubric(case["rubric"]),
|
||||
"",
|
||||
"#### Variant A",
|
||||
"",
|
||||
case["variant_a"]["output"] or "_No output found._",
|
||||
"",
|
||||
"#### Variant B",
|
||||
"",
|
||||
case["variant_b"]["output"] or "_No output found._",
|
||||
"",
|
||||
]
|
||||
)
|
||||
if payload.get("failures"):
|
||||
lines.extend(["## Failures", ""])
|
||||
lines.extend(f"- {failure}" for failure in payload["failures"])
|
||||
return "\n".join(lines).strip() + "\n"
|
||||
|
||||
|
||||
def prepare_output_review_kit(
|
||||
blind_pack_json: Path,
|
||||
blind_pack_md: Path,
|
||||
decisions_path: Path,
|
||||
output_json: Path,
|
||||
output_md: Path,
|
||||
write_template: bool = False,
|
||||
) -> dict[str, Any]:
|
||||
blind_pack, failures = load_json(blind_pack_json)
|
||||
decisions_payload, decision_failures = load_optional_decisions(decisions_path)
|
||||
failures.extend(decision_failures)
|
||||
template_written = False
|
||||
if write_template and blind_pack and not decisions_path.exists():
|
||||
decisions_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
decisions_path.write_text(
|
||||
json.dumps(build_decision_template(blind_pack), ensure_ascii=False, indent=2) + "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
template_written = True
|
||||
decisions_payload, decision_failures = load_optional_decisions(decisions_path)
|
||||
failures.extend(decision_failures)
|
||||
decisions, index_failures = decision_index(decisions_payload)
|
||||
failures.extend(index_failures)
|
||||
case_ids = {str(pair.get("case_id", "")) for pair in pairs_from_pack(blind_pack)}
|
||||
for case_id in decisions:
|
||||
if case_id not in case_ids:
|
||||
failures.append(f"decision references unknown case_id: {case_id}")
|
||||
cases = build_cases(blind_pack, decisions)
|
||||
summary = build_summary(cases, failures, str(decisions_payload.get("reviewer", "")), str(decisions_payload.get("reviewed_at", "")))
|
||||
payload = {
|
||||
"schema_version": "1.0",
|
||||
"ok": not failures,
|
||||
"summary": summary,
|
||||
"artifacts": {
|
||||
"reviewer_kit_json": display_path(output_json),
|
||||
"reviewer_kit_markdown": display_path(output_md),
|
||||
"blind_pack_json": display_path(blind_pack_json),
|
||||
"blind_pack_markdown": display_path(blind_pack_md),
|
||||
"decisions": display_path(decisions_path),
|
||||
"adjudication_json": "reports/output_review_adjudication.json",
|
||||
"adjudication_markdown": "reports/output_review_adjudication.md",
|
||||
},
|
||||
"template_written": template_written,
|
||||
"review_contract": build_contract(blind_pack_md, decisions_path),
|
||||
"cases": cases,
|
||||
"failures": failures,
|
||||
}
|
||||
output_json.parent.mkdir(parents=True, exist_ok=True)
|
||||
output_md.parent.mkdir(parents=True, exist_ok=True)
|
||||
output_json.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||
output_md.write_text(render_markdown(payload), encoding="utf-8")
|
||||
return payload
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="Prepare a reviewer-facing blind A/B output review kit.")
|
||||
parser.add_argument("--blind-pack-json", default=str(DEFAULT_BLIND_PACK_JSON))
|
||||
parser.add_argument("--blind-pack-md", default=str(DEFAULT_BLIND_PACK_MD))
|
||||
parser.add_argument("--decisions", default=str(DEFAULT_DECISIONS))
|
||||
parser.add_argument("--output-json", default=str(DEFAULT_OUTPUT_JSON))
|
||||
parser.add_argument("--output-md", default=str(DEFAULT_OUTPUT_MD))
|
||||
parser.add_argument("--write-template", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
payload = prepare_output_review_kit(
|
||||
Path(args.blind_pack_json).resolve(),
|
||||
Path(args.blind_pack_md).resolve(),
|
||||
Path(args.decisions).resolve(),
|
||||
Path(args.output_json).resolve(),
|
||||
Path(args.output_md).resolve(),
|
||||
write_template=args.write_template,
|
||||
)
|
||||
print(json.dumps(payload, ensure_ascii=False, indent=2))
|
||||
raise SystemExit(0 if payload["ok"] else 2)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -41,8 +41,9 @@ TASK_TEMPLATES: dict[str, dict[str, Any]] = {
|
||||
"owner": "human reviewer",
|
||||
"objective": "Record real blind A/B reviewer decisions before claiming human output review completion.",
|
||||
"runbook": [
|
||||
"python3 scripts/yao.py output-review-kit --write-template",
|
||||
"Open reports/output_review_kit.md and choose A or B for each pair without opening the answer key.",
|
||||
"python3 scripts/adjudicate_output_review.py --write-template",
|
||||
"Open reports/output_blind_review_pack.md and choose A or B for each pair without opening the answer key.",
|
||||
"Edit reports/output_review_decisions.json with winner_variant values and reviewer metadata.",
|
||||
"python3 scripts/yao.py output-review",
|
||||
"python3 scripts/yao.py skill-os2-audit . --generated-at <YYYY-MM-DD>",
|
||||
@@ -55,6 +56,7 @@ TASK_TEMPLATES: dict[str, dict[str, Any]] = {
|
||||
],
|
||||
"evidence_artifacts": [
|
||||
"reports/output_blind_review_pack.md",
|
||||
"reports/output_review_kit.md",
|
||||
"reports/output_review_decisions.json",
|
||||
"reports/output_review_adjudication.json",
|
||||
"reports/output_review_adjudication.md",
|
||||
|
||||
@@ -63,6 +63,7 @@ def evidence_paths(skill_dir: Path) -> dict[str, str]:
|
||||
"output_eval": "reports/output_quality_scorecard.md",
|
||||
"output_execution": "reports/output_execution_runs.md",
|
||||
"output_blind_review": "reports/output_blind_review_pack.md",
|
||||
"output_review_kit": "reports/output_review_kit.md",
|
||||
"output_review_decisions": "reports/output_review_decisions.json",
|
||||
"output_review_adjudication": "reports/output_review_adjudication.md",
|
||||
"benchmark_reproducibility": "reports/benchmark_reproducibility.md",
|
||||
@@ -103,6 +104,7 @@ def load_review_data(skill_dir: Path) -> dict[str, dict[str, Any]]:
|
||||
"output_quality": load_json(reports / "output_quality_scorecard.json"),
|
||||
"output_execution": load_json(reports / "output_execution_runs.json"),
|
||||
"output_blind_review": load_json(reports / "output_blind_review_pack.json"),
|
||||
"output_review_kit": load_json(reports / "output_review_kit.json"),
|
||||
"output_review_adjudication": load_json(reports / "output_review_adjudication.json"),
|
||||
"skill_os2_coverage": load_json(reports / "skill_os2_coverage.json"),
|
||||
"compiled_targets": load_json(reports / "compiled_targets.json"),
|
||||
@@ -136,6 +138,7 @@ def insight_cards(data: dict[str, dict[str, Any]]) -> list[dict[str, str]]:
|
||||
output = data["output_quality"].get("summary", {})
|
||||
output_execution = data["output_execution"].get("summary", {})
|
||||
output_blind = data["output_blind_review"].get("summary", {})
|
||||
output_review_kit = data["output_review_kit"].get("summary", {})
|
||||
output_review = data["output_review_adjudication"].get("summary", {})
|
||||
blueprint = data["skill_os2_coverage"].get("summary", {})
|
||||
compiled = data["compiled_targets"].get("summary", {})
|
||||
@@ -184,6 +187,11 @@ def insight_cards(data: dict[str, dict[str, Any]]) -> list[dict[str, str]]:
|
||||
"value": str(output_blind.get("pair_count", 0)),
|
||||
"detail": "review pairs hide baseline vs with-skill labels",
|
||||
},
|
||||
{
|
||||
"label": "Review Kit",
|
||||
"value": f"{output_review_kit.get('ready_for_adjudication_count', 0)}/{output_review_kit.get('case_count', 0)}",
|
||||
"detail": f"pending {output_review_kit.get('pending_decision_count', 0)}; answer key hidden",
|
||||
},
|
||||
{
|
||||
"label": "Review A/B",
|
||||
"value": f"{output_review.get('judgment_count', 0)}/{output_review.get('pair_count', 0)}",
|
||||
|
||||
@@ -78,7 +78,7 @@ def render_output_review_section(adjudication: dict[str, Any]) -> str:
|
||||
return (
|
||||
"<section>"
|
||||
"<h2>评审清单</h2>"
|
||||
"<p class='muted'>每张卡片对应一个 blind A/B case,说明当前是否待判、答案是否仍隐藏、应填写的决策文件、有效字段和复跑命令。</p>"
|
||||
"<p class='muted'>先打开 reports/output_review_kit.md;每张卡片对应一个 blind A/B case,说明当前是否待判、答案是否仍隐藏、应填写的决策文件、有效字段和复跑命令。</p>"
|
||||
f"{render_output_review_checklist(adjudication)}"
|
||||
"</section>"
|
||||
)
|
||||
|
||||
@@ -475,6 +475,7 @@ def build_report_model(skill_dir: Path) -> dict:
|
||||
output_quality = load_json(skill_dir / "reports" / "output_quality_scorecard.json")
|
||||
output_execution = load_json(skill_dir / "reports" / "output_execution_runs.json")
|
||||
output_blind_review = load_json(skill_dir / "reports" / "output_blind_review_pack.json")
|
||||
output_review_kit = load_json(skill_dir / "reports" / "output_review_kit.json")
|
||||
output_review_adjudication = load_json(skill_dir / "reports" / "output_review_adjudication.json")
|
||||
benchmark_reproducibility = load_json(skill_dir / "reports" / "benchmark_reproducibility.json")
|
||||
conformance = load_json(skill_dir / "reports" / "conformance_matrix.json")
|
||||
@@ -550,8 +551,11 @@ def build_report_model(skill_dir: Path) -> dict:
|
||||
if (skill_dir / "reports" / "output_blind_answer_key.json").exists():
|
||||
insert_after = deliverables.index("reports/output_blind_review_pack.md") + 1 if "reports/output_blind_review_pack.md" in deliverables else deliverables.index("reports/output_quality_scorecard.md") + 1
|
||||
deliverables.insert(insert_after, "reports/output_blind_answer_key.json")
|
||||
if (skill_dir / "reports" / "output_review_kit.md").exists():
|
||||
insert_after = deliverables.index("reports/output_blind_review_pack.md") + 1 if "reports/output_blind_review_pack.md" in deliverables else deliverables.index("reports/output_quality_scorecard.md") + 1
|
||||
deliverables.insert(insert_after, "reports/output_review_kit.md")
|
||||
if (skill_dir / "reports" / "output_review_adjudication.md").exists():
|
||||
insert_after = deliverables.index("reports/output_blind_answer_key.json") + 1 if "reports/output_blind_answer_key.json" in deliverables else deliverables.index("reports/output_quality_scorecard.md") + 1
|
||||
insert_after = deliverables.index("reports/output_review_kit.md") + 1 if "reports/output_review_kit.md" in deliverables else deliverables.index("reports/output_quality_scorecard.md") + 1
|
||||
deliverables.insert(insert_after, "reports/output_review_adjudication.md")
|
||||
if (skill_dir / "reports" / "benchmark_reproducibility.md").exists():
|
||||
insert_after = deliverables.index("reports/output_review_adjudication.md") + 1 if "reports/output_review_adjudication.md" in deliverables else deliverables.index("reports/output_quality_scorecard.md") + 1
|
||||
@@ -680,6 +684,12 @@ def build_report_model(skill_dir: Path) -> dict:
|
||||
"pair_count": output_blind_review.get("summary", {}).get("pair_count", 0),
|
||||
"answer_key_separate": output_blind_review.get("summary", {}).get("answer_key_separate", False),
|
||||
},
|
||||
"output_review_kit": {
|
||||
"ok": output_review_kit.get("ok", False),
|
||||
"summary": output_review_kit.get("summary", {}),
|
||||
"artifacts": output_review_kit.get("artifacts", {}),
|
||||
"failures": output_review_kit.get("failures", []),
|
||||
},
|
||||
"output_review_adjudication": {
|
||||
"ok": output_review_adjudication.get("ok", False),
|
||||
"summary": output_review_adjudication.get("summary", {}),
|
||||
|
||||
@@ -167,6 +167,7 @@ def command_report(args: argparse.Namespace) -> int:
|
||||
run_script("compile_skill.py", [str(ROOT)]),
|
||||
run_script("run_output_eval.py", []),
|
||||
run_script("run_output_execution.py", ["--runner-command", local_output_runner_command()]),
|
||||
run_script("prepare_output_review_kit.py", []),
|
||||
run_script("adjudicate_output_review.py", []),
|
||||
run_script("render_adoption_drift_report.py", [str(ROOT)]),
|
||||
run_script("render_telemetry_hook_recipes.py", [str(ROOT)]),
|
||||
@@ -201,6 +202,7 @@ def command_report(args: argparse.Namespace) -> int:
|
||||
"system_model": "reports/system-model.json",
|
||||
"compiled_targets": "reports/compiled_targets.json",
|
||||
"output_execution": "reports/output_execution_runs.json",
|
||||
"output_review_kit": "reports/output_review_kit.json",
|
||||
"output_review_adjudication": "reports/output_review_adjudication.json",
|
||||
"adoption_drift": "reports/adoption_drift_report.json",
|
||||
"telemetry_hooks": "reports/telemetry_hook_recipes.json",
|
||||
@@ -501,6 +503,25 @@ def command_output_execution(args: argparse.Namespace) -> int:
|
||||
return 0 if result["ok"] else 2
|
||||
|
||||
|
||||
def command_output_review_kit(args: argparse.Namespace) -> int:
|
||||
cmd = []
|
||||
if args.blind_pack_json:
|
||||
cmd.extend(["--blind-pack-json", args.blind_pack_json])
|
||||
if args.blind_pack_md:
|
||||
cmd.extend(["--blind-pack-md", args.blind_pack_md])
|
||||
if args.decisions:
|
||||
cmd.extend(["--decisions", args.decisions])
|
||||
if args.output_json:
|
||||
cmd.extend(["--output-json", args.output_json])
|
||||
if args.output_md:
|
||||
cmd.extend(["--output-md", args.output_md])
|
||||
if args.write_template:
|
||||
cmd.append("--write-template")
|
||||
result = run_script("prepare_output_review_kit.py", cmd)
|
||||
print(json.dumps(result["payload"] if result["payload"] is not None else result, ensure_ascii=False, indent=2))
|
||||
return 0 if result["ok"] else 2
|
||||
|
||||
|
||||
def command_output_review(args: argparse.Namespace) -> int:
|
||||
cmd = []
|
||||
if args.blind_pack:
|
||||
|
||||
@@ -587,6 +587,18 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int]
|
||||
output_eval_cmd.add_argument("--blind-answer-key-json")
|
||||
output_eval_cmd.set_defaults(func=_handler(command_handlers, "command_output_eval"))
|
||||
|
||||
output_review_kit_cmd = subparsers.add_parser(
|
||||
"output-review-kit",
|
||||
help="Prepare a reviewer-facing blind A/B output review kit without exposing the answer key.",
|
||||
)
|
||||
output_review_kit_cmd.add_argument("--blind-pack-json")
|
||||
output_review_kit_cmd.add_argument("--blind-pack-md")
|
||||
output_review_kit_cmd.add_argument("--decisions")
|
||||
output_review_kit_cmd.add_argument("--output-json")
|
||||
output_review_kit_cmd.add_argument("--output-md")
|
||||
output_review_kit_cmd.add_argument("--write-template", action="store_true")
|
||||
output_review_kit_cmd.set_defaults(func=_handler(command_handlers, "command_output_review_kit"))
|
||||
|
||||
output_execution_cmd = subparsers.add_parser(
|
||||
"output-exec",
|
||||
help="Record output-eval execution evidence, timing, and token usage.",
|
||||
|
||||
@@ -129,6 +129,7 @@
|
||||
"scripts/lint_skill.py",
|
||||
"scripts/local_output_eval_runner.py",
|
||||
"scripts/optimize_description.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
@@ -186,8 +187,7 @@
|
||||
"scripts/skill_report_layout.py",
|
||||
"scripts/skill_report_metrics.py",
|
||||
"scripts/skill_report_model.py",
|
||||
"scripts/sync_local_install.py",
|
||||
"scripts/telemetry_native_host.py"
|
||||
"scripts/sync_local_install.py"
|
||||
],
|
||||
"assets": [
|
||||
"templates/basic_skill.md.j2",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"scripts/lint_skill.py",
|
||||
"scripts/local_output_eval_runner.py",
|
||||
"scripts/optimize_description.py",
|
||||
"scripts/prepare_output_review_kit.py",
|
||||
"scripts/prepare_world_class_submission_kit.py",
|
||||
"scripts/probe_runtime_permissions.py",
|
||||
"scripts/promotion_checker.py",
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
OUTPUT_EVAL = ROOT / "scripts" / "run_output_eval.py"
|
||||
REVIEW_KIT = ROOT / "scripts" / "prepare_output_review_kit.py"
|
||||
CLI = ROOT / "scripts" / "yao.py"
|
||||
|
||||
|
||||
def run(args: list[str], check: bool = True) -> subprocess.CompletedProcess[str]:
|
||||
return subprocess.run(
|
||||
[sys.executable, *args],
|
||||
cwd=ROOT,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=check,
|
||||
)
|
||||
|
||||
|
||||
def assert_no_answer_key_leak(text: str) -> None:
|
||||
forbidden = [
|
||||
"output_blind_answer_key",
|
||||
"expected_winner",
|
||||
"variant_a_role",
|
||||
"variant_b_role",
|
||||
"score_winner_role",
|
||||
]
|
||||
for needle in forbidden:
|
||||
assert needle not in text, f"review kit leaked hidden field {needle!r}"
|
||||
|
||||
|
||||
def main() -> None:
|
||||
tmp_root = ROOT / "tests" / "tmp_output_review_kit"
|
||||
if tmp_root.exists():
|
||||
shutil.rmtree(tmp_root)
|
||||
tmp_root.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
scorecard_json = tmp_root / "output_quality_scorecard.json"
|
||||
scorecard_md = tmp_root / "output_quality_scorecard.md"
|
||||
blind_pack_json = tmp_root / "output_blind_review_pack.json"
|
||||
blind_pack_md = tmp_root / "output_blind_review_pack.md"
|
||||
answer_key_json = tmp_root / "output_blind_answer_key.json"
|
||||
|
||||
run(
|
||||
[
|
||||
str(OUTPUT_EVAL),
|
||||
"--cases",
|
||||
str(ROOT / "evals" / "output" / "cases.jsonl"),
|
||||
"--output-json",
|
||||
str(scorecard_json),
|
||||
"--output-md",
|
||||
str(scorecard_md),
|
||||
"--blind-pack-json",
|
||||
str(blind_pack_json),
|
||||
"--blind-pack-md",
|
||||
str(blind_pack_md),
|
||||
"--blind-answer-key-json",
|
||||
str(answer_key_json),
|
||||
]
|
||||
)
|
||||
|
||||
decisions_path = tmp_root / "output_review_decisions.json"
|
||||
kit_json = tmp_root / "output_review_kit.json"
|
||||
kit_md = tmp_root / "output_review_kit.md"
|
||||
pending_proc = run(
|
||||
[
|
||||
str(REVIEW_KIT),
|
||||
"--blind-pack-json",
|
||||
str(blind_pack_json),
|
||||
"--blind-pack-md",
|
||||
str(blind_pack_md),
|
||||
"--decisions",
|
||||
str(decisions_path),
|
||||
"--output-json",
|
||||
str(kit_json),
|
||||
"--output-md",
|
||||
str(kit_md),
|
||||
"--write-template",
|
||||
]
|
||||
)
|
||||
pending_payload = json.loads(pending_proc.stdout)
|
||||
assert pending_payload["ok"], pending_payload
|
||||
assert pending_payload["template_written"], pending_payload
|
||||
assert pending_payload["summary"]["case_count"] == 5, pending_payload
|
||||
assert pending_payload["summary"]["pending_decision_count"] == 5, pending_payload
|
||||
assert pending_payload["summary"]["ready_for_adjudication_count"] == 0, pending_payload
|
||||
assert pending_payload["summary"]["answer_key_hidden"] is True, pending_payload
|
||||
assert pending_payload["summary"]["answer_key_path_exposed"] is False, pending_payload
|
||||
assert pending_payload["summary"]["ready_to_run_adjudication"] is False, pending_payload
|
||||
assert "answer_key" not in pending_payload["artifacts"], pending_payload["artifacts"]
|
||||
assert len(pending_payload["cases"]) == 5, pending_payload["cases"]
|
||||
first_case = pending_payload["cases"][0]
|
||||
assert first_case["variant_a"]["output"], first_case
|
||||
assert first_case["variant_b"]["output"], first_case
|
||||
assert first_case["decision_state"]["status"] == "awaiting-decision", first_case
|
||||
assert decisions_path.exists(), decisions_path
|
||||
|
||||
kit_json_text = kit_json.read_text(encoding="utf-8")
|
||||
kit_md_text = kit_md.read_text(encoding="utf-8")
|
||||
assert "# Output Review Kit" in kit_md_text, kit_md_text
|
||||
assert "answer key path exposed: `false`" in kit_md_text, kit_md_text
|
||||
assert "Variant A" in kit_md_text and "Variant B" in kit_md_text, kit_md_text
|
||||
assert "python3 scripts/yao.py output-review" in kit_md_text, kit_md_text
|
||||
assert_no_answer_key_leak(kit_json_text)
|
||||
assert_no_answer_key_leak(kit_md_text)
|
||||
|
||||
cli_proc = run(
|
||||
[
|
||||
str(CLI),
|
||||
"output-review-kit",
|
||||
"--blind-pack-json",
|
||||
str(blind_pack_json),
|
||||
"--blind-pack-md",
|
||||
str(blind_pack_md),
|
||||
"--decisions",
|
||||
str(decisions_path),
|
||||
"--output-json",
|
||||
str(tmp_root / "cli_output_review_kit.json"),
|
||||
"--output-md",
|
||||
str(tmp_root / "cli_output_review_kit.md"),
|
||||
]
|
||||
)
|
||||
cli_payload = json.loads(cli_proc.stdout)
|
||||
assert cli_payload["ok"], cli_payload
|
||||
assert cli_payload["summary"]["case_count"] == 5, cli_payload
|
||||
assert cli_payload["summary"]["answer_key_hidden"] is True, cli_payload
|
||||
assert "answer_key" not in cli_payload["artifacts"], cli_payload["artifacts"]
|
||||
|
||||
template = json.loads(decisions_path.read_text(encoding="utf-8"))
|
||||
filled = {
|
||||
"schema_version": "1.0",
|
||||
"reviewer": "Yao QA",
|
||||
"reviewed_at": "2026-06-14",
|
||||
"decisions": [
|
||||
{
|
||||
"case_id": item["case_id"],
|
||||
"winner_variant": "A",
|
||||
"confidence": 0.8,
|
||||
"reason": "Variant A is clearer against the visible rubric.",
|
||||
}
|
||||
for item in template["decisions"]
|
||||
],
|
||||
}
|
||||
decisions_path.write_text(json.dumps(filled, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||
ready_proc = run(
|
||||
[
|
||||
str(REVIEW_KIT),
|
||||
"--blind-pack-json",
|
||||
str(blind_pack_json),
|
||||
"--blind-pack-md",
|
||||
str(blind_pack_md),
|
||||
"--decisions",
|
||||
str(decisions_path),
|
||||
"--output-json",
|
||||
str(tmp_root / "ready_output_review_kit.json"),
|
||||
"--output-md",
|
||||
str(tmp_root / "ready_output_review_kit.md"),
|
||||
]
|
||||
)
|
||||
ready_payload = json.loads(ready_proc.stdout)
|
||||
assert ready_payload["ok"], ready_payload
|
||||
assert ready_payload["summary"]["ready_for_adjudication_count"] == 5, ready_payload
|
||||
assert ready_payload["summary"]["pending_decision_count"] == 0, ready_payload
|
||||
assert ready_payload["summary"]["invalid_decision_count"] == 0, ready_payload
|
||||
assert ready_payload["summary"]["reviewer_metadata_present"] is True, ready_payload
|
||||
assert ready_payload["summary"]["ready_to_run_adjudication"] is True, ready_payload
|
||||
assert all(case["decision_state"]["status"] == "ready-for-adjudication" for case in ready_payload["cases"]), ready_payload
|
||||
|
||||
invalid = dict(filled)
|
||||
invalid["decisions"] = [dict(filled["decisions"][0], winner_variant="C", reason="")]
|
||||
invalid_path = tmp_root / "invalid_output_review_decisions.json"
|
||||
invalid_path.write_text(json.dumps(invalid, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||
invalid_proc = run(
|
||||
[
|
||||
str(REVIEW_KIT),
|
||||
"--blind-pack-json",
|
||||
str(blind_pack_json),
|
||||
"--blind-pack-md",
|
||||
str(blind_pack_md),
|
||||
"--decisions",
|
||||
str(invalid_path),
|
||||
"--output-json",
|
||||
str(tmp_root / "invalid_output_review_kit.json"),
|
||||
"--output-md",
|
||||
str(tmp_root / "invalid_output_review_kit.md"),
|
||||
]
|
||||
)
|
||||
invalid_payload = json.loads(invalid_proc.stdout)
|
||||
assert invalid_payload["ok"], invalid_payload
|
||||
assert invalid_payload["summary"]["invalid_decision_count"] == 1, invalid_payload
|
||||
assert invalid_payload["summary"]["answer_key_hidden"] is True, invalid_payload
|
||||
assert invalid_payload["cases"][0]["decision_state"]["status"] == "needs-fix", invalid_payload["cases"][0]
|
||||
|
||||
print(json.dumps({"ok": True}, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -89,6 +89,7 @@ def main() -> None:
|
||||
assert "world-class-submission-review" in parser_help, parser_help
|
||||
assert "world-class-claim-guard" in parser_help, parser_help
|
||||
assert "benchmark-reproducibility" in parser_help, parser_help
|
||||
assert "output-review-kit" in parser_help, parser_help
|
||||
assert "telemetry-import" in parser_help, parser_help
|
||||
assert "telemetry-emit" in parser_help, parser_help
|
||||
assert "telemetry-hooks" in parser_help, parser_help
|
||||
@@ -757,6 +758,7 @@ def main() -> None:
|
||||
assert "prompt_quality_profile" in report_result["payload"]["artifacts"], report_result
|
||||
assert "compiled_targets" in report_result["payload"]["artifacts"], report_result
|
||||
assert "output_execution" in report_result["payload"]["artifacts"], report_result
|
||||
assert "output_review_kit" in report_result["payload"]["artifacts"], report_result
|
||||
assert "output_review_adjudication" in report_result["payload"]["artifacts"], report_result
|
||||
assert "adoption_drift" in report_result["payload"]["artifacts"], report_result
|
||||
assert "review_annotations" in report_result["payload"]["artifacts"], report_result
|
||||
|
||||
Reference in New Issue
Block a user