diff --git a/registry/index.json b/registry/index.json index 07f7bb7..4057c3c 100644 --- a/registry/index.json +++ b/registry/index.json @@ -16,7 +16,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" } ] } diff --git a/registry/packages/yao-meta-skill.json b/registry/packages/yao-meta-skill.json index e74ef2c..d3f060b 100644 --- a/registry/packages/yao-meta-skill.json +++ b/registry/packages/yao-meta-skill.json @@ -16,8 +16,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045", - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, "compatibility": { "openai": "pass", @@ -48,7 +48,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" diff --git a/reports/adoption_drift_report.json b/reports/adoption_drift_report.json index 10e9925..0eb1148 100644 --- a/reports/adoption_drift_report.json +++ b/reports/adoption_drift_report.json @@ -1,7 +1,7 @@ { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13T23:31:32Z", + "generated_at": "2026-06-13T23:43:44Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", diff --git a/reports/architecture_maintainability.json b/reports/architecture_maintainability.json index 136689b..5901173 100644 --- a/reports/architecture_maintainability.json +++ b/reports/architecture_maintainability.json @@ -27,7 +27,7 @@ }, { "path": "tests/verify_yao_cli.py", - "lines": 898, + "lines": 899, "kind": "test", "severity": "pass", "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." @@ -55,7 +55,7 @@ }, { "path": "scripts/yao_cli_parser.py", - "lines": 728, + "lines": 729, "kind": "internal-module", "severity": "pass", "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." diff --git a/reports/architecture_maintainability.md b/reports/architecture_maintainability.md index 2c66594..a50a385 100644 --- a/reports/architecture_maintainability.md +++ b/reports/architecture_maintainability.md @@ -26,11 +26,11 @@ No file-size hotspots found. | File | Lines | Kind | Severity | | --- | ---: | --- | --- | | `scripts/render_review_studio.py` | `899` | `cli-script` | `pass` | -| `tests/verify_yao_cli.py` | `898` | `test` | `pass` | +| `tests/verify_yao_cli.py` | `899` | `test` | `pass` | | `scripts/yao.py` | `867` | `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` | `728` | `internal-module` | `pass` | +| `scripts/yao_cli_parser.py` | `729` | `internal-module` | `pass` | | `scripts/optimize_description.py` | `723` | `cli-script` | `pass` | | `scripts/trust_check.py` | `714` | `internal-module` | `pass` | | `scripts/render_review_viewer.py` | `685` | `cli-script` | `pass` | diff --git a/reports/benchmark_reproducibility.json b/reports/benchmark_reproducibility.json index 0440256..7d8bdb7 100644 --- a/reports/benchmark_reproducibility.json +++ b/reports/benchmark_reproducibility.json @@ -3,11 +3,11 @@ "ok": true, "generated_at": "2026-06-14", "skill_dir": ".", - "commit": "834665b73c1422486be8cb1b1dd826fa58e81be7", + "commit": "6b71aa2fb1feac8342dc72ceb2a5d9c5e7572130", "git_status": { "available": true, "dirty": true, - "changed_file_count": 58, + "changed_file_count": 49, "sample": [ " M registry/index.json", " M registry/packages/yao-meta-skill.json", @@ -42,7 +42,7 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 58 + "changed_file_count": 49 }, "methodology": { "path": "reports/benchmark_methodology.md", @@ -116,7 +116,7 @@ "path": "reports/output_execution_runs.json", "exists": true, "bytes": 7967, - "sha256": "94be89b0096ba1890e95f7ecfe2a25f603f507aca699843af5c466a1e6812848" + "sha256": "b0953427365ce84f89454531d5819a2ce6f494875661fbbb3be33b012a0d8f13" }, { "label": "blind_review", @@ -151,7 +151,7 @@ "path": "reports/security_trust_report.json", "exists": true, "bytes": 95873, - "sha256": "e5bbb8250aeeee8b77cac94c7308484d27c90cf7bc241aea4e66791ec565f83c" + "sha256": "cb599bf68524be22e7df189f1f09deac404bda493a3013c74be209d7ef7efae4" }, { "label": "python_compatibility", @@ -165,14 +165,14 @@ "path": "reports/registry_audit.json", "exists": true, "bytes": 3183, - "sha256": "3ea8d598452cf8995d403164bf3d204b2cc40b07accb8ea4883486e805c74e31" + "sha256": "2ff87aeb6f3dc7f0614d33d291faad1a55da2ade3ba98014bee5143dfb8f4806" }, { "label": "package_verification", "path": "reports/package_verification.json", "exists": true, "bytes": 19325, - "sha256": "aef6143865fb67bcf2bc9f75f2cba8308deb2498180257c585050b3b46fb1534" + "sha256": "a5dac0ea2b6365c97d0b72ad695ed0ebbd5ac472745e20c1a98f695b26bdd827" }, { "label": "install_simulation", @@ -186,7 +186,7 @@ "path": "reports/skill_os2_audit.json", "exists": true, "bytes": 14309, - "sha256": "a1ab5e625fbc89d12454afd43e98f4a68fb51f3ac35568e6419062feaee2cfc1" + "sha256": "78bcbcbc54711e63a6e34059c30748599a7e71d434182b78c307af6d2553cc81" }, { "label": "world_class_evidence_plan", diff --git a/reports/benchmark_reproducibility.md b/reports/benchmark_reproducibility.md index 0c63796..2b0c675 100644 --- a/reports/benchmark_reproducibility.md +++ b/reports/benchmark_reproducibility.md @@ -1,7 +1,7 @@ # Benchmark Reproducibility Generated at: `2026-06-14` -Commit: `834665b73c1422486be8cb1b1dd826fa58e81be7` +Commit: `6b71aa2fb1feac8342dc72ceb2a5d9c5e7572130` 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: `58` +- changed files at generation: `49` This report proves local benchmark reproducibility only. It keeps external provider and human-review gaps visible instead of counting them as complete. @@ -40,17 +40,17 @@ This report proves local benchmark reproducibility only. It keeps external provi | output_cases | `evals/output/cases.jsonl` | present | `a6ae96857116` | | output_schema | `evals/output/schema.json` | present | `8ee340c95064` | | output_scorecard | `reports/output_quality_scorecard.json` | present | `0806258a8e08` | -| output_execution | `reports/output_execution_runs.json` | present | `94be89b0096b` | +| output_execution | `reports/output_execution_runs.json` | present | `b0953427365c` | | blind_review | `reports/output_blind_review_pack.json` | present | `bbe2db8ec277` | | 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 | `e5bbb8250aee` | +| trust_report | `reports/security_trust_report.json` | present | `cb599bf68524` | | python_compatibility | `reports/python_compatibility.json` | present | `e5dd973d0b5c` | -| registry_audit | `reports/registry_audit.json` | present | `3ea8d598452c` | -| package_verification | `reports/package_verification.json` | present | `aef6143865fb` | +| registry_audit | `reports/registry_audit.json` | present | `2ff87aeb6f3d` | +| package_verification | `reports/package_verification.json` | present | `a5dac0ea2b63` | | install_simulation | `reports/install_simulation.json` | present | `eebfba42d71e` | -| skill_os2_audit | `reports/skill_os2_audit.json` | present | `a1ab5e625fbc` | +| skill_os2_audit | `reports/skill_os2_audit.json` | present | `78bcbcbc5471` | | world_class_evidence_plan | `reports/world_class_evidence_plan.json` | present | `02e49b66159d` | | world_class_evidence_ledger | `reports/world_class_evidence_ledger.json` | present | `0b52d0d1528b` | | world_class_evidence_intake | `reports/world_class_evidence_intake.json` | present | `5fbfcd35ac6a` | diff --git a/reports/context_budget.json b/reports/context_budget.json index 39d65a3..0bd1cf6 100644 --- a/reports/context_budget.json +++ b/reports/context_budget.json @@ -6,9 +6,9 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1154440, + "other_text_tokens": 1157142, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1155191, + "estimated_total_text_tokens": 1157893, "relevant_file_count": 491, "unused_resource_dirs": [], "quality_signal_points": 130, diff --git a/reports/install_simulation.json b/reports/install_simulation.json index 3805160..d9c66f2 100644 --- a/reports/install_simulation.json +++ b/reports/install_simulation.json @@ -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": 574, + "archive_entry_count": 568, "archive_extracted": true, "entrypoint_loaded": true, "manifest_loaded": true, diff --git a/reports/output_execution_runs.json b/reports/output_execution_runs.json index 9c7e4ce..1a1da6d 100644 --- a/reports/output_execution_runs.json +++ b/reports/output_execution_runs.json @@ -34,7 +34,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.21, + "duration_ms": 27.97, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -62,7 +62,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.95, + "duration_ms": 27.97, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -85,7 +85,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.36, + "duration_ms": 28.26, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -113,7 +113,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.76, + "duration_ms": 28.71, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -136,7 +136,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.5, + "duration_ms": 28.89, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -164,7 +164,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.05, + "duration_ms": 27.93, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -187,7 +187,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.23, + "duration_ms": 27.5, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -214,7 +214,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.26, + "duration_ms": 27.37, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -237,7 +237,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.66, + "duration_ms": 27.2, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -266,7 +266,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.46, + "duration_ms": 27.27, "provider": "local-output-eval-runner", "model": "", "usage": { diff --git a/reports/output_execution_runs.md b/reports/output_execution_runs.md index 01a20cb..f5e09b9 100644 --- a/reports/output_execution_runs.md +++ b/reports/output_execution_runs.md @@ -23,16 +23,16 @@ Command runner evidence is present. This proves the eval harness executed an ext | Case | Variant | Mode | Model | Duration ms | Tokens | Score | Status | | --- | --- | --- | --- | ---: | ---: | ---: | --- | -| skill-package-contract | baseline | command | local-output-eval-runner | 28.21 | 33 | 0.0 | pass | -| skill-package-contract | with_skill | command | local-output-eval-runner | 27.95 | 73 | 100.0 | pass | -| output-eval-expectation | baseline | command | local-output-eval-runner | 28.36 | 36 | 0.0 | pass | -| output-eval-expectation | with_skill | command | local-output-eval-runner | 27.76 | 80 | 100.0 | pass | -| ir-before-packaging | baseline | command | local-output-eval-runner | 28.5 | 33 | 0.0 | pass | -| ir-before-packaging | with_skill | command | local-output-eval-runner | 28.05 | 80 | 100.0 | pass | -| near-neighbor-boundary | baseline | command | local-output-eval-runner | 28.23 | 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.66 | 37 | 0.0 | pass | -| file-backed-governed-package | with_skill | command | local-output-eval-runner | 28.46 | 98 | 100.0 | pass | +| skill-package-contract | baseline | command | local-output-eval-runner | 27.97 | 33 | 0.0 | pass | +| skill-package-contract | with_skill | command | local-output-eval-runner | 27.97 | 73 | 100.0 | pass | +| output-eval-expectation | baseline | command | local-output-eval-runner | 28.26 | 36 | 0.0 | pass | +| output-eval-expectation | with_skill | command | local-output-eval-runner | 28.71 | 80 | 100.0 | pass | +| ir-before-packaging | baseline | command | local-output-eval-runner | 28.89 | 33 | 0.0 | pass | +| ir-before-packaging | with_skill | command | local-output-eval-runner | 27.93 | 80 | 100.0 | pass | +| near-neighbor-boundary | baseline | command | local-output-eval-runner | 27.5 | 36 | 0.0 | pass | +| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 27.37 | 65 | 100.0 | pass | +| file-backed-governed-package | baseline | command | local-output-eval-runner | 27.2 | 37 | 0.0 | pass | +| file-backed-governed-package | with_skill | command | local-output-eval-runner | 27.27 | 98 | 100.0 | pass | ## Next Fixes diff --git a/reports/package_verification.json b/reports/package_verification.json index 7b4b543..29dc62b 100644 --- a/reports/package_verification.json +++ b/reports/package_verification.json @@ -8,7 +8,7 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "archive_entry_count": 568, "failure_count": 0, "warning_count": 0 diff --git a/reports/package_verification.md b/reports/package_verification.md index c97e9fd..e0ce467 100644 --- a/reports/package_verification.md +++ b/reports/package_verification.md @@ -4,7 +4,7 @@ - Package directory: `dist` - Targets: `4 / 4` adapters present - Archive present: `True` -- Archive SHA256: `fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7` +- Archive SHA256: `cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b` - Failures: `0` - Warnings: `0` diff --git a/reports/registry_audit.json b/reports/registry_audit.json index df0a8ed..341f44a 100644 --- a/reports/registry_audit.json +++ b/reports/registry_audit.json @@ -21,8 +21,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045", - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, "compatibility": { "openai": "pass", @@ -53,7 +53,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -78,7 +78,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" } ] }, diff --git a/reports/registry_audit.md b/reports/registry_audit.md index adb4f69..85cdccf 100644 --- a/reports/registry_audit.md +++ b/reports/registry_audit.md @@ -6,8 +6,8 @@ - Maturity: `governed` - Owner: `Yao Team` - License: `MIT` -- Package SHA256: `5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045` -- Archive SHA256: `fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7` +- Package SHA256: `7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771` +- Archive SHA256: `cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b` - Install simulated: `True` ## Compatibility diff --git a/reports/review-studio.html b/reports/review-studio.html index 248e2d6..fd49d8f 100644 --- a/reports/review-studio.html +++ b/reports/review-studio.html @@ -506,7 +506,7 @@
-

信任报告

Secret
0
脚本数
93
网络脚本
3
Help 失败
0
包体哈希
5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045
+

信任报告

Secret
0
脚本数
93
网络脚本
3
Help 失败
0
包体哈希
7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771

安全边界

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

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

注册审计

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

-

包体元数据

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

包体元数据

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

发布路线

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

-

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
568
失败数
0
警告数
0
归档哈希
fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7
+

包体验证

目标数
4
Adapter
4
归档存在
Zip 条目
568
失败数
0
警告数
0
归档哈希
cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b
diff --git a/reports/review-studio.json b/reports/review-studio.json index 7b65daa..f4e4fed 100644 --- a/reports/review-studio.json +++ b/reports/review-studio.json @@ -1347,9 +1347,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 33 + "changed_file_count": 32 }, - "commit": "834665b73c1422486be8cb1b1dd826fa58e81be7", + "commit": "6b71aa2fb1feac8342dc72ceb2a5d9c5e7572130", "missing_artifacts": [], "limitations": [ "Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.", @@ -1453,7 +1453,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 177, - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" }, "skill_atlas": { "skill_count": 12, @@ -1491,8 +1491,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045", - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, "compatibility": { "openai": "pass", @@ -1523,7 +1523,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -1539,7 +1539,7 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "archive_entry_count": 568, "failure_count": 0, "warning_count": 0 @@ -1618,12 +1618,12 @@ { "field": "archive_sha256", "from": "", - "to": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "to": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "to": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" } ] }, @@ -3792,7 +3792,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.88, + "duration_ms": 26.32, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3820,7 +3820,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.25, + "duration_ms": 25.41, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3843,7 +3843,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.73, + "duration_ms": 26.48, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3871,7 +3871,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 26.83, + "duration_ms": 27.35, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3894,7 +3894,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 28.58, + "duration_ms": 28.32, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3922,7 +3922,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 27.09, + "duration_ms": 25.82, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3945,7 +3945,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 26.26, + "duration_ms": 25.54, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3972,7 +3972,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.6, + "duration_ms": 25.39, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -3995,7 +3995,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.49, + "duration_ms": 25.46, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -4024,7 +4024,7 @@ "execution_mode": "command", "model_executed": false, "command_executed": true, - "duration_ms": 25.76, + "duration_ms": 25.36, "provider": "local-output-eval-runner", "model": "", "usage": { @@ -4938,7 +4938,7 @@ "label": "Registry Distribution", "status": "pass", "objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.", - "current": "archive entries 567; install failures 0", + "current": "archive entries 568; install failures 0", "command": "python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .", "test": "python3 tests/verify_registry_audit.py", "evidence": [ @@ -10230,7 +10230,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 177, - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" }, "failures": [], "warnings": [], @@ -13584,7 +13584,7 @@ }, { "path": "tests/verify_yao_cli.py", - "lines": 898, + "lines": 899, "kind": "test", "severity": "pass", "recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands." @@ -13612,7 +13612,7 @@ }, { "path": "scripts/yao_cli_parser.py", - "lines": 728, + "lines": 729, "kind": "internal-module", "severity": "pass", "recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates." @@ -13675,10 +13675,10 @@ "context_budget_tier": "production", "context_budget_limit": 1000, "skill_body_tokens": 751, - "other_text_tokens": 1154215, + "other_text_tokens": 1157129, "estimated_initial_load_tokens": 944, - "estimated_total_text_tokens": 1154966, - "relevant_file_count": 490, + "estimated_total_text_tokens": 1157880, + "relevant_file_count": 491, "unused_resource_dirs": [], "quality_signal_points": 130, "quality_density": 137.7 @@ -15530,7 +15530,7 @@ "adoption_drift": { "ok": true, "schema_version": "2.0", - "generated_at": "2026-06-13T23:27:35Z", + "generated_at": "2026-06-13T23:42:36Z", "skill_dir": ".", "privacy_contract": { "storage": "local-first", @@ -16792,8 +16792,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045", - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, "compatibility": { "openai": "pass", @@ -16824,7 +16824,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -16849,7 +16849,7 @@ "vscode" ], "package_metadata": "registry/packages/yao-meta-skill.json", - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" } ] }, @@ -16872,7 +16872,7 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "archive_entry_count": 568, "failure_count": 0, "warning_count": 0 @@ -17880,12 +17880,12 @@ { "field": "archive_sha256", "from": "", - "to": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "to": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "to": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" } ] }, diff --git a/reports/security_trust_report.json b/reports/security_trust_report.json index 80033bd..3de9b45 100644 --- a/reports/security_trust_report.json +++ b/reports/security_trust_report.json @@ -23,7 +23,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 177, - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" }, "failures": [], "warnings": [], diff --git a/reports/security_trust_report.md b/reports/security_trust_report.md index a8830fe..02c2cbb 100644 --- a/reports/security_trust_report.md +++ b/reports/security_trust_report.md @@ -16,7 +16,7 @@ - Interactive scripts: `0` - Package hash scope: `source-contract-without-generated-reports` - Package hash files: `177` -- Package SHA256: `5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045` +- Package SHA256: `7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771` ## Failures diff --git a/reports/skill-overview.json b/reports/skill-overview.json index 24adf3a..ce02707 100644 --- a/reports/skill-overview.json +++ b/reports/skill-overview.json @@ -935,9 +935,9 @@ "world_class_task_count": 4, "world_class_ledger_pending_count": 4, "working_tree_dirty": true, - "changed_file_count": 33 + "changed_file_count": 32 }, - "commit": "834665b73c1422486be8cb1b1dd826fa58e81be7", + "commit": "6b71aa2fb1feac8342dc72ceb2a5d9c5e7572130", "missing_artifacts": [], "limitations": [ "Local command-runner evidence is reproducible but does not replace provider-backed model holdout evidence.", @@ -1041,7 +1041,7 @@ "interactive_script_count": 0, "package_hash_scope": "source-contract-without-generated-reports", "package_hash_file_count": 177, - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" }, "skill_atlas": { "skill_count": 12, @@ -1079,8 +1079,8 @@ "trust_level": "local", "license": "MIT", "checksums": { - "package_sha256": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045", - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "package_sha256": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, "compatibility": { "openai": "pass", @@ -1111,7 +1111,7 @@ }, "distribution": { "archive_verified": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "package_verification": "reports/package_verification.json", "install_simulated": true, "install_simulation": "reports/install_simulation.json" @@ -1127,7 +1127,7 @@ "target_count": 4, "adapter_count": 4, "archive_present": true, - "archive_sha256": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7", + "archive_sha256": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b", "archive_entry_count": 568, "failure_count": 0, "warning_count": 0 @@ -1206,12 +1206,12 @@ { "field": "archive_sha256", "from": "", - "to": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "to": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "to": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" } ] }, diff --git a/reports/upgrade_check.json b/reports/upgrade_check.json index ba5be63..88dfaa3 100644 --- a/reports/upgrade_check.json +++ b/reports/upgrade_check.json @@ -70,12 +70,12 @@ { "field": "archive_sha256", "from": "", - "to": "fc334a4b4da4af6c463510a76551e018633deb5626dca38d9aaaa2c636591eb7" + "to": "cc5a43f9a1a3cf2a75cd3dc31d1317b90b2a911f32e3667b62936943dc5d808b" }, { "field": "package_sha256", "from": "0000000000000000000000000000000000000000000000000000000000000000", - "to": "5b6eb1631e77feb6fe3f4199e128607cdc719f8ec0675c92ae986aad2553a045" + "to": "7f70f5ec6944b938933be61ba59499f6f65493c99a72213c59609b0f0cbd4771" } ] }, diff --git a/scripts/prepare_world_class_submission_kit.py b/scripts/prepare_world_class_submission_kit.py index bb7e83f..40c0ba1 100644 --- a/scripts/prepare_world_class_submission_kit.py +++ b/scripts/prepare_world_class_submission_kit.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import argparse +import html import json import shutil from datetime import date @@ -26,6 +27,10 @@ def write_json(path: Path, payload: dict[str, Any]) -> None: path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") +def html_text(value: Any) -> str: + return html.escape(str(value or ""), quote=True) + + def requested_checklist_items(intake: dict[str, Any], evidence_keys: list[str]) -> list[dict[str, Any]]: items = intake.get("operator_checklist", []) if not evidence_keys: @@ -128,12 +133,176 @@ def render_readme(report: dict[str, Any]) -> str: return "\n".join(lines).rstrip() + "\n" +def render_html_list(values: list[Any], empty: str) -> str: + if not values: + return f"
  • {html_text(empty)}
  • " + return "".join(f"
  • {html_text(value)}
  • " for value in values) + + +def render_html_commands(commands: dict[str, str]) -> str: + return "".join( + f"
  • {html_text(label.replace('_', ' '))}{html_text(command)}
  • " + for label, command in commands.items() + ) + + +def render_html_files(files: list[dict[str, Any]]) -> str: + if not files: + return "

    No submission drafts were requested.

    " + return "".join( + """ +
    +
    + {status} +

    {key}

    +
    +
    +
    Template
    {template}
    +
    Draft
    {output}
    +
    + {errors} +
    + """.format( + status=html_text(item.get("status", "")), + key=html_text(item.get("evidence_key", "")), + template=html_text(item.get("template_path", "")), + output=html_text(item.get("output_path", "")), + errors=( + "" + if item.get("errors") + else "" + ), + ) + for item in files + ) + + +def render_html_item(item: dict[str, Any]) -> str: + must_collect = item.get("must_collect", {}) if isinstance(item.get("must_collect", {}), dict) else {} + return f""" +
    +
    + {html_text(item.get('category', ''))} · {html_text(item.get('readiness', ''))} +

    {html_text(item.get('label', item.get('evidence_key', '')))}

    +
    +

    {html_text(item.get('blocking_reason', ''))}

    +
    +
    Owner
    {html_text(item.get('owner', ''))}
    +
    Evidence
    {html_text(item.get('evidence_key', ''))}
    +
    Submission
    {html_text(item.get('submission_path', ''))}
    +
    +
    +
    +

    Must Collect

    +
      {render_html_list(must_collect.get('provenance_requirements', []), 'No provenance requirements listed.')}
    +
    +
    +

    Pass Checks

    +
      {render_html_list(must_collect.get('success_checks', []), 'No success checks listed.')}
    +
    +
    +

    Privacy

    +
      {render_html_list(must_collect.get('privacy_contract', []), 'No privacy contract listed.')}
    +
    +
    +
    + """ + + +def render_html(report: dict[str, Any]) -> str: + summary = report["summary"] + stats = [ + ("Requested", summary["requested_count"]), + ("Written", summary["written_count"]), + ("Existing", summary["existing_count"]), + ("Skipped", summary["skipped_count"]), + ] + stat_html = "".join(f"
    {html_text(label)}{html_text(value)}
    " for label, value in stats) + evidence_html = "".join(render_html_item(item) for item in report.get("evidence_items", [])) + return f""" + + + + + World-Class Evidence Submission Kit + + + + +
    +
    + Evidence Intake +

    World-Class Evidence Submission Kit

    +

    Use this cockpit to prepare human and external evidence packets. Drafts are not accepted evidence, and this page never changes the ledger result.

    +
    {stat_html}
    +
    +
    +

    Workflow

    1. Run the real provider, human review, native permission, or native client telemetry work first.
    2. Edit the matching JSON draft with aggregate artifact references and provenance metadata.
    3. Set template_only to false only after real evidence exists.
    4. Validate intake, refresh the ledger, then guard public claims.
    + +
    +

    Drafts

    {render_html_files(report['files'])}
    +

    Evidence Requirements

    {evidence_html}
    +

    Safety Boundary

    • Drafts never count as accepted ledger evidence.
    • Valid intake means ready for ledger review, not world-class completion.
    • Do not include credentials, raw prompts, raw outputs, transcripts, notes, or private user content.
    +
    + + +""" + + def build_submission_kit( skill_dir: Path, output_dir: Path, generated_at: str, evidence_keys: list[str] | None = None, overwrite: bool = False, + output_html: Path | None = None, ) -> dict[str, Any]: intake = build_intake(skill_dir, generated_at, submissions_dir=output_dir) items = requested_checklist_items(intake, evidence_keys or []) @@ -143,6 +312,7 @@ def build_submission_kit( files = [copy_template(skill_dir, output_dir, item, template_results, overwrite) for item in items] manifest_path = output_dir / "submission_manifest.json" readme_path = output_dir / "README.md" + output_html = output_html or (output_dir / "index.html") written_count = sum(1 for item in files if item["status"] == "written") existing_count = sum(1 for item in files if item["status"] == "exists") skipped_count = sum(1 for item in files if item["status"] == "skipped") @@ -166,6 +336,7 @@ def build_submission_kit( }, "unknown_evidence_keys": unknown_keys, "files": files, + "evidence_items": items, "commands": { "validate_intake": f"python3 scripts/yao.py world-class-intake . --submissions-dir {rel_path(output_dir, skill_dir)}", "refresh_ledger": f"python3 scripts/yao.py world-class-ledger . --submissions-dir {rel_path(output_dir, skill_dir)}", @@ -181,11 +352,14 @@ def build_submission_kit( "artifacts": { "manifest": rel_path(manifest_path, skill_dir), "readme": rel_path(readme_path, skill_dir), + "html": rel_path(output_html, skill_dir), }, } output_dir.mkdir(parents=True, exist_ok=True) write_json(manifest_path, report) readme_path.write_text(render_readme(report), encoding="utf-8") + output_html.parent.mkdir(parents=True, exist_ok=True) + output_html.write_text(render_html(report), encoding="utf-8") return report @@ -196,6 +370,7 @@ def main() -> None: parser.add_argument("--evidence-key", action="append", default=[]) parser.add_argument("--overwrite", action="store_true") parser.add_argument("--generated-at", default=date.today().isoformat()) + parser.add_argument("--output-html") args = parser.parse_args() skill_dir = Path(args.skill_dir).resolve() @@ -208,6 +383,7 @@ def main() -> None: args.generated_at, evidence_keys=args.evidence_key, overwrite=args.overwrite, + output_html=Path(args.output_html).resolve() if args.output_html else None, ) print(json.dumps(report, ensure_ascii=False, indent=2)) if not report["ok"]: diff --git a/scripts/yao_cli_parser.py b/scripts/yao_cli_parser.py index 96b011c..164d53f 100644 --- a/scripts/yao_cli_parser.py +++ b/scripts/yao_cli_parser.py @@ -217,6 +217,7 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int] world_class_submission_kit_cmd.add_argument("--evidence-key", action="append", default=[]) world_class_submission_kit_cmd.add_argument("--overwrite", action="store_true") world_class_submission_kit_cmd.add_argument("--generated-at") + world_class_submission_kit_cmd.add_argument("--output-html") world_class_submission_kit_cmd.set_defaults(func=_handler(command_handlers, "command_world_class_submission_kit")) world_class_submission_review_cmd = subparsers.add_parser( diff --git a/scripts/yao_cli_report_commands.py b/scripts/yao_cli_report_commands.py index fa59c5b..d62f4c6 100644 --- a/scripts/yao_cli_report_commands.py +++ b/scripts/yao_cli_report_commands.py @@ -87,6 +87,8 @@ def command_world_class_submission_kit(args: argparse.Namespace) -> int: cmd.append("--overwrite") if args.generated_at: cmd.extend(["--generated-at", args.generated_at]) + if args.output_html: + cmd.extend(["--output-html", args.output_html]) return emit_result(run_script("prepare_world_class_submission_kit.py", cmd)) diff --git a/tests/verify_world_class_evidence_intake.py b/tests/verify_world_class_evidence_intake.py index 133c8b1..7bc7e33 100644 --- a/tests/verify_world_class_evidence_intake.py +++ b/tests/verify_world_class_evidence_intake.py @@ -165,9 +165,16 @@ def main() -> None: assert kit_draft["attestation"]["real_external_or_human_evidence"] is False, kit_draft kit_manifest = json.loads((kit_dir / "submission_manifest.json").read_text(encoding="utf-8")) assert kit_manifest["summary"]["ledger_counts_submission_as_completion"] is False, kit_manifest["summary"] + assert kit_manifest["artifacts"]["html"].endswith("tests/tmp_world_class_evidence_intake/submission_kit/index.html"), kit_manifest["artifacts"] kit_readme = (kit_dir / "README.md").read_text(encoding="utf-8") assert "Drafts are not accepted evidence." in kit_readme, kit_readme assert "validate intake" in kit_readme, kit_readme + kit_html = (kit_dir / "index.html").read_text(encoding="utf-8") + assert "World-Class Evidence Submission Kit" in kit_html, kit_html + assert "Drafts are not accepted evidence" in kit_html, kit_html + assert "provider-holdout" in kit_html, kit_html + assert "World-Class Evidence Submission Kit" in kit_html, kit_html + assert "Do not include credentials, raw prompts, raw outputs, transcripts, notes, or private user content." in kit_html, kit_html draft_intake = run_intake("--submissions-dir", str(kit_dir)) assert draft_intake["ok"] is False, draft_intake assert draft_intake["summary"]["submission_count"] == 1, draft_intake["summary"] diff --git a/tests/verify_yao_cli.py b/tests/verify_yao_cli.py index 7966e4d..b4e455b 100644 --- a/tests/verify_yao_cli.py +++ b/tests/verify_yao_cli.py @@ -282,19 +282,20 @@ def main() -> None: world_class_submission_kit_result = run( "world-class-submission-kit", str(ROOT), - "--output-dir", - str(tmp_root / "world_class_submission_kit"), - "--evidence-key", - "provider-holdout", - "--generated-at", - "2026-06-14", + "--output-dir", str(tmp_root / "world_class_submission_kit"), + "--evidence-key", "provider-holdout", + "--generated-at", "2026-06-14", + "--output-html", str(tmp_root / "world_class_submission_kit.html"), ) + kit_payload = world_class_submission_kit_result["payload"] assert world_class_submission_kit_result["ok"], world_class_submission_kit_result - assert world_class_submission_kit_result["payload"]["summary"]["decision"] == "submission-kit-ready", world_class_submission_kit_result - assert world_class_submission_kit_result["payload"]["summary"]["written_count"] == 1, world_class_submission_kit_result - assert world_class_submission_kit_result["payload"]["summary"]["drafts_count_as_evidence"] is False, world_class_submission_kit_result + assert kit_payload["summary"]["decision"] == "submission-kit-ready", world_class_submission_kit_result + assert kit_payload["summary"]["written_count"] == 1, world_class_submission_kit_result + assert kit_payload["summary"]["drafts_count_as_evidence"] is False, world_class_submission_kit_result + assert kit_payload["artifacts"]["html"].endswith("tests/tmp_cli/world_class_submission_kit.html"), world_class_submission_kit_result assert (tmp_root / "world_class_submission_kit" / "provider-holdout.json").exists(), world_class_submission_kit_result assert (tmp_root / "world_class_submission_kit" / "submission_manifest.json").exists(), world_class_submission_kit_result + assert (tmp_root / "world_class_submission_kit.html").exists(), world_class_submission_kit_result world_class_submission_review_result = run( "world-class-submission-review",