Add world-class preflight HTML cockpit
This commit is contained in:
+1
-1
@@ -16,7 +16,7 @@
|
||||
"vscode"
|
||||
],
|
||||
"package_metadata": "registry/packages/yao-meta-skill.json",
|
||||
"package_sha256": "b2ab2a00182b60cc9e702de55d8cad1dfc9e49a50b7f8a01ac896ffdf0ee030d"
|
||||
"package_sha256": "c0c5e61a719efa6217dedd4e04de0b4a175ab73194a4b4ee2cbd18394240ce98"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "b2ab2a00182b60cc9e702de55d8cad1dfc9e49a50b7f8a01ac896ffdf0ee030d",
|
||||
"archive_sha256": "c4ab5ba9c345474701486a405d0fc43bf9317ecfc577fe5e67cbbbd63f54fa26"
|
||||
"package_sha256": "c0c5e61a719efa6217dedd4e04de0b4a175ab73194a4b4ee2cbd18394240ce98",
|
||||
"archive_sha256": "889886dd1eaeed6a4996a739f9312f47d67ec04ba3a1396bae7dc351b9b40dcf"
|
||||
},
|
||||
"compatibility": {
|
||||
"openai": "pass",
|
||||
@@ -48,7 +48,7 @@
|
||||
},
|
||||
"distribution": {
|
||||
"archive_verified": true,
|
||||
"archive_sha256": "c4ab5ba9c345474701486a405d0fc43bf9317ecfc577fe5e67cbbbd63f54fa26",
|
||||
"archive_sha256": "889886dd1eaeed6a4996a739f9312f47d67ec04ba3a1396bae7dc351b9b40dcf",
|
||||
"package_verification": "reports/package_verification.json",
|
||||
"install_simulated": true,
|
||||
"install_simulation": "reports/install_simulation.json"
|
||||
|
||||
@@ -31,11 +31,18 @@
|
||||
},
|
||||
{
|
||||
"path": "scripts/yao_cli_parser.py",
|
||||
"lines": 821,
|
||||
"lines": 822,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_evidence_consistency.py",
|
||||
"lines": 810,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_layout.py",
|
||||
"lines": 808,
|
||||
@@ -43,13 +50,6 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_evidence_consistency.py",
|
||||
"lines": 804,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 801,
|
||||
@@ -117,11 +117,18 @@
|
||||
},
|
||||
{
|
||||
"path": "scripts/yao_cli_parser.py",
|
||||
"lines": 821,
|
||||
"lines": 822,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_evidence_consistency.py",
|
||||
"lines": 810,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_layout.py",
|
||||
"lines": 808,
|
||||
@@ -129,13 +136,6 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_evidence_consistency.py",
|
||||
"lines": 804,
|
||||
"kind": "cli-script",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 801,
|
||||
|
||||
@@ -30,9 +30,9 @@ No file-size hotspots found.
|
||||
| File | Lines | Kind | Recommended next split |
|
||||
| --- | ---: | --- | --- |
|
||||
| `tests/verify_yao_cli.py` | `899` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. |
|
||||
| `scripts/yao_cli_parser.py` | `821` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/yao_cli_parser.py` | `822` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/render_evidence_consistency.py` | `810` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/skill_report_layout.py` | `808` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/render_evidence_consistency.py` | `804` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `scripts/skill_report_model.py` | `801` | `internal-module` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
| `tests/verify_review_studio.py` | `763` | `test` | Break broad integration assertions into focused verifier helpers when the next behavior change lands. |
|
||||
| `scripts/compile_skill.py` | `734` | `cli-script` | Watch this file before adding new responsibilities; extract a helper module when one concern dominates. |
|
||||
@@ -44,9 +44,9 @@ No file-size hotspots found.
|
||||
| File | Lines | Kind | Severity |
|
||||
| --- | ---: | --- | --- |
|
||||
| `tests/verify_yao_cli.py` | `899` | `test` | `pass` |
|
||||
| `scripts/yao_cli_parser.py` | `821` | `internal-module` | `pass` |
|
||||
| `scripts/yao_cli_parser.py` | `822` | `internal-module` | `pass` |
|
||||
| `scripts/render_evidence_consistency.py` | `810` | `cli-script` | `pass` |
|
||||
| `scripts/skill_report_layout.py` | `808` | `internal-module` | `pass` |
|
||||
| `scripts/render_evidence_consistency.py` | `804` | `cli-script` | `pass` |
|
||||
| `scripts/skill_report_model.py` | `801` | `internal-module` | `pass` |
|
||||
| `tests/verify_review_studio.py` | `763` | `test` | `pass` |
|
||||
| `scripts/compile_skill.py` | `734` | `cli-script` | `pass` |
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
"context_budget_tier": "production",
|
||||
"context_budget_limit": 1000,
|
||||
"skill_body_tokens": 767,
|
||||
"other_text_tokens": 969817,
|
||||
"other_text_tokens": 973078,
|
||||
"estimated_initial_load_tokens": 960,
|
||||
"estimated_total_text_tokens": 970584,
|
||||
"deferred_resource_tokens": 446157,
|
||||
"estimated_total_text_tokens": 973845,
|
||||
"deferred_resource_tokens": 449071,
|
||||
"deferred_resource_warn_threshold": 120000,
|
||||
"deferred_resource_dirs": [
|
||||
{
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 396946,
|
||||
"estimated_tokens": 399860,
|
||||
"file_count": 113
|
||||
},
|
||||
{
|
||||
@@ -31,7 +31,7 @@
|
||||
"large_deferred_resource_dirs": [
|
||||
{
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 396946,
|
||||
"estimated_tokens": 399860,
|
||||
"file_count": 113
|
||||
}
|
||||
],
|
||||
@@ -54,7 +54,7 @@
|
||||
],
|
||||
"missing": [],
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 396946,
|
||||
"estimated_tokens": 399860,
|
||||
"file_count": 113,
|
||||
"rationale": "Script resources are deterministic deferred tools, not initial-load prompt context."
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
| Target | Path | Tier | Limit | Initial | SKILL | Deferred | Resource Governance | Large Deferred Dirs | Quality Density | Unused Dirs | Status |
|
||||
| --- | --- | --- | ---: | ---: | ---: | ---: | --- | --- | ---: | --- | --- |
|
||||
| root | `.` | `production` | 1000 | 960 | 767 | 446157 | `governed` | scripts:396946 | 135.4 | - | ok |
|
||||
| root | `.` | `production` | 1000 | 960 | 767 | 449071 | `governed` | scripts:399860 | 135.4 | - | ok |
|
||||
| complex-release-orchestrator | `examples/complex-release-orchestrator/generated-skill` | `production` | 1000 | 790 | 718 | 1657 | `not-required` | - | 164.6 | - | ok |
|
||||
| governed-incident-command | `examples/governed-incident-command/generated-skill` | `production` | 1000 | 760 | 658 | 1030 | `not-required` | - | 171.1 | - | ok |
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-06-16",
|
||||
"generated_at": "2026-03-31",
|
||||
"targets": [
|
||||
{
|
||||
"label": "root",
|
||||
@@ -8,11 +8,11 @@
|
||||
"budget_limit": 1000,
|
||||
"initial_tokens": 960,
|
||||
"skill_body_tokens": 767,
|
||||
"deferred_resource_tokens": 446157,
|
||||
"deferred_resource_tokens": 449071,
|
||||
"large_deferred_resource_dirs": [
|
||||
{
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 396946,
|
||||
"estimated_tokens": 399860,
|
||||
"file_count": 113
|
||||
}
|
||||
],
|
||||
@@ -35,7 +35,7 @@
|
||||
],
|
||||
"missing": [],
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 396946,
|
||||
"estimated_tokens": 399860,
|
||||
"file_count": 113,
|
||||
"rationale": "Script resources are deterministic deferred tools, not initial-load prompt context."
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"installed_skill_dir": "dist/install-simulation/simulate-yao-meta-skill/yao-meta-skill",
|
||||
"summary": {
|
||||
"archive_present": true,
|
||||
"archive_entry_count": 623,
|
||||
"archive_entry_count": 624,
|
||||
"archive_extracted": true,
|
||||
"entrypoint_loaded": true,
|
||||
"manifest_loaded": true,
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 26.29,
|
||||
"duration_ms": 26.62,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -62,7 +62,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 36.18,
|
||||
"duration_ms": 26.35,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -85,7 +85,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 29.9,
|
||||
"duration_ms": 27.54,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -113,7 +113,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 30.7,
|
||||
"duration_ms": 29.8,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -136,7 +136,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 30.23,
|
||||
"duration_ms": 30.04,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -164,7 +164,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 26.0,
|
||||
"duration_ms": 26.25,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -187,7 +187,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.99,
|
||||
"duration_ms": 25.68,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -214,7 +214,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.82,
|
||||
"duration_ms": 25.66,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -237,7 +237,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.84,
|
||||
"duration_ms": 26.49,
|
||||
"provider": "local-output-eval-runner",
|
||||
"model": "",
|
||||
"usage": {
|
||||
@@ -266,7 +266,7 @@
|
||||
"execution_mode": "command",
|
||||
"model_executed": false,
|
||||
"command_executed": true,
|
||||
"duration_ms": 25.92,
|
||||
"duration_ms": 26.28,
|
||||
"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 | 26.29 | 33 | 0.0 | pass |
|
||||
| skill-package-contract | with_skill | command | local-output-eval-runner | 36.18 | 73 | 100.0 | pass |
|
||||
| output-eval-expectation | baseline | command | local-output-eval-runner | 29.9 | 36 | 0.0 | pass |
|
||||
| output-eval-expectation | with_skill | command | local-output-eval-runner | 30.7 | 80 | 100.0 | pass |
|
||||
| ir-before-packaging | baseline | command | local-output-eval-runner | 30.23 | 33 | 0.0 | pass |
|
||||
| ir-before-packaging | with_skill | command | local-output-eval-runner | 26.0 | 80 | 100.0 | pass |
|
||||
| near-neighbor-boundary | baseline | command | local-output-eval-runner | 25.99 | 36 | 0.0 | pass |
|
||||
| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 25.82 | 65 | 100.0 | pass |
|
||||
| file-backed-governed-package | baseline | command | local-output-eval-runner | 25.84 | 37 | 0.0 | pass |
|
||||
| file-backed-governed-package | with_skill | command | local-output-eval-runner | 25.92 | 98 | 100.0 | pass |
|
||||
| skill-package-contract | baseline | command | local-output-eval-runner | 26.62 | 33 | 0.0 | pass |
|
||||
| skill-package-contract | with_skill | command | local-output-eval-runner | 26.35 | 73 | 100.0 | pass |
|
||||
| output-eval-expectation | baseline | command | local-output-eval-runner | 27.54 | 36 | 0.0 | pass |
|
||||
| output-eval-expectation | with_skill | command | local-output-eval-runner | 29.8 | 80 | 100.0 | pass |
|
||||
| ir-before-packaging | baseline | command | local-output-eval-runner | 30.04 | 33 | 0.0 | pass |
|
||||
| ir-before-packaging | with_skill | command | local-output-eval-runner | 26.25 | 80 | 100.0 | pass |
|
||||
| near-neighbor-boundary | baseline | command | local-output-eval-runner | 25.68 | 36 | 0.0 | pass |
|
||||
| near-neighbor-boundary | with_skill | command | local-output-eval-runner | 25.66 | 65 | 100.0 | pass |
|
||||
| file-backed-governed-package | baseline | command | local-output-eval-runner | 26.49 | 37 | 0.0 | pass |
|
||||
| file-backed-governed-package | with_skill | command | local-output-eval-runner | 26.28 | 98 | 100.0 | pass |
|
||||
|
||||
## Next Fixes
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
"target_count": 4,
|
||||
"adapter_count": 4,
|
||||
"archive_present": true,
|
||||
"archive_sha256": "c4ab5ba9c345474701486a405d0fc43bf9317ecfc577fe5e67cbbbd63f54fa26",
|
||||
"archive_entry_count": 623,
|
||||
"archive_sha256": "889886dd1eaeed6a4996a739f9312f47d67ec04ba3a1396bae7dc351b9b40dcf",
|
||||
"archive_entry_count": 624,
|
||||
"failure_count": 0,
|
||||
"warning_count": 0
|
||||
},
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
- Package directory: `dist`
|
||||
- Targets: `4 / 4` adapters present
|
||||
- Archive present: `True`
|
||||
- Archive SHA256: `c4ab5ba9c345474701486a405d0fc43bf9317ecfc577fe5e67cbbbd63f54fa26`
|
||||
- Archive SHA256: `889886dd1eaeed6a4996a739f9312f47d67ec04ba3a1396bae7dc351b9b40dcf`
|
||||
- Failures: `0`
|
||||
- Warnings: `0`
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
"trust_level": "local",
|
||||
"license": "MIT",
|
||||
"checksums": {
|
||||
"package_sha256": "b2ab2a00182b60cc9e702de55d8cad1dfc9e49a50b7f8a01ac896ffdf0ee030d",
|
||||
"archive_sha256": "c4ab5ba9c345474701486a405d0fc43bf9317ecfc577fe5e67cbbbd63f54fa26"
|
||||
"package_sha256": "c0c5e61a719efa6217dedd4e04de0b4a175ab73194a4b4ee2cbd18394240ce98",
|
||||
"archive_sha256": "889886dd1eaeed6a4996a739f9312f47d67ec04ba3a1396bae7dc351b9b40dcf"
|
||||
},
|
||||
"compatibility": {
|
||||
"openai": "pass",
|
||||
@@ -53,7 +53,7 @@
|
||||
},
|
||||
"distribution": {
|
||||
"archive_verified": true,
|
||||
"archive_sha256": "c4ab5ba9c345474701486a405d0fc43bf9317ecfc577fe5e67cbbbd63f54fa26",
|
||||
"archive_sha256": "889886dd1eaeed6a4996a739f9312f47d67ec04ba3a1396bae7dc351b9b40dcf",
|
||||
"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": "b2ab2a00182b60cc9e702de55d8cad1dfc9e49a50b7f8a01ac896ffdf0ee030d"
|
||||
"package_sha256": "c0c5e61a719efa6217dedd4e04de0b4a175ab73194a4b4ee2cbd18394240ce98"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
- Maturity: `governed`
|
||||
- Owner: `Yao Team`
|
||||
- License: `MIT`
|
||||
- Package SHA256: `b2ab2a00182b60cc9e702de55d8cad1dfc9e49a50b7f8a01ac896ffdf0ee030d`
|
||||
- Archive SHA256: `c4ab5ba9c345474701486a405d0fc43bf9317ecfc577fe5e67cbbbd63f54fa26`
|
||||
- Package SHA256: `c0c5e61a719efa6217dedd4e04de0b4a175ab73194a4b4ee2cbd18394240ce98`
|
||||
- Archive SHA256: `889886dd1eaeed6a4996a739f9312f47d67ec04ba3a1396bae7dc351b9b40dcf`
|
||||
- Install simulated: `True`
|
||||
|
||||
## Compatibility
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"interactive_script_count": 0,
|
||||
"package_hash_scope": "source-contract-without-generated-reports",
|
||||
"package_hash_file_count": 200,
|
||||
"package_sha256": "b2ab2a00182b60cc9e702de55d8cad1dfc9e49a50b7f8a01ac896ffdf0ee030d"
|
||||
"package_sha256": "c0c5e61a719efa6217dedd4e04de0b4a175ab73194a4b4ee2cbd18394240ce98"
|
||||
},
|
||||
"failures": [],
|
||||
"warnings": [],
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
- Interactive scripts: `0`
|
||||
- Package hash scope: `source-contract-without-generated-reports`
|
||||
- Package hash files: `200`
|
||||
- Package SHA256: `b2ab2a00182b60cc9e702de55d8cad1dfc9e49a50b7f8a01ac896ffdf0ee030d`
|
||||
- Package SHA256: `c0c5e61a719efa6217dedd4e04de0b4a175ab73194a4b4ee2cbd18394240ce98`
|
||||
|
||||
## Failures
|
||||
|
||||
|
||||
@@ -119,14 +119,14 @@ Next move: add real client or installer permission enforcement integration.
|
||||
| Runtime Permission Probes | `4 / 4` target adapters probed, `0` native-enforcement adapters, `4` explicit metadata fallbacks, `4` residual risks retained for reviewer visibility |
|
||||
| Skill Atlas | `12` scanned skills, `1` actionable root skill, `1` telemetry report, `0` actionable route collisions, `0` actionable owner gaps, `0` actionable stale skills, `0` actionable drift signals, `24` scoped non-actionable issue signals retained for visibility |
|
||||
| Registry Audit | package metadata generated with version, owner, license, source checksum, archive checksum, Skill IR provenance, and compatibility matrix |
|
||||
| Package Verification | `4 / 4` target adapters present, archive verified, `623` zip entries, `0` failures, `0` warnings |
|
||||
| Install Simulation | archive with `623` entries extracted into a local verification root, entrypoint/manifest/interface loaded, reports present, `4` adapters readable, `12` installer permission checks enforced, `0` permission failures, `0` failures, `0` warnings |
|
||||
| Package Verification | `4 / 4` target adapters present, archive verified, `624` zip entries, `0` failures, `0` warnings |
|
||||
| Install Simulation | archive with `624` entries extracted into a local verification root, entrypoint/manifest/interface loaded, reports present, `4` adapters readable, `12` installer permission checks enforced, `0` permission failures, `0` failures, `0` warnings |
|
||||
| Local Install Sync Preflight | `make sync-local-install` and `make sync-active-install` rebuild the package first, then sync only after install simulation passes with `12` enforced installer permission checks and `0` permission failures |
|
||||
| Upgrade Check | current package declares `minor` over the 1.0.0 baseline, recommended bump is `minor`, and release notes include added targets plus checksum changes |
|
||||
| Adoption Drift | `1` metadata-only review event, `0` adoption samples, adoption `0`, risk band `low`; optional `yao.py` CLI capture, external client `telemetry-emit`, `5` `telemetry-hooks` recipes, Browser/Chrome native messaging host, and validated external JSONL import are available but off by default for reproducible release evidence; raw `reports/telemetry_events.jsonl` is gitignored and blocked from zip packages |
|
||||
| Review Waivers | ledger generated; current release has `1` warning gate that still needs reviewer decision or a time-bounded waiver; blockers remain non-waivable in v0, and world-class evidence gaps must be closed with accepted evidence rather than waived as completed |
|
||||
| Review Annotations | ledger generated; current release has `0` reviewer annotations and `0` open annotation blockers |
|
||||
| Review Studio | decision `review`, world-class score `89`, `16` gates, `0` blockers, `4` warnings, `3` review actions, `0` open annotation blockers |
|
||||
| Review Studio | decision `review`, world-class score `91`, `16` gates, `0` blockers, `3` warnings, `3` review actions, `0` open annotation blockers |
|
||||
| Skill OS 2.0 Audit | `15` audited areas, with local foundation evidence separated from human-required and external-required gaps |
|
||||
| World-Class Evidence Plan | `4` remaining evidence tasks: `1` human-required and `3` external-required, all with runbooks, success checks, and privacy contracts |
|
||||
| World-Class Evidence Ledger | `4` evidence entries remain pending: `1` human-required and `3` external-required; anti-overclaim guards block planned work, metadata fallbacks, pending review, and local command runners from counting as completion |
|
||||
|
||||
@@ -285,7 +285,7 @@
|
||||
"key": "registry-distribution",
|
||||
"label": "Registry Distribution",
|
||||
"status": "pass",
|
||||
"current": "zip entries 623; install failures 0; permission failures 0",
|
||||
"current": "zip entries 624; install failures 0; permission failures 0",
|
||||
"target": "Package metadata, archive checksum, package verification, and install simulation pass",
|
||||
"evidence": [
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ Generated at: `2026-06-16`
|
||||
| Permission Metadata | pass | 4/4 target probes pass; metadata fallback 4; installer enforcement 4 | Packaged adapters expose explicit permission metadata, residual risks, and installer enforcement evidence when available | Preserve residual-risk notes until real native enforcement exists. |
|
||||
| Native Permission Enforcement | external-required | native-enforced targets 0; installer-enforced targets 4 | At least one target/client enforces approved permissions at runtime | Integrate a real target-client or external installer runtime guard before claiming native permission enforcement. |
|
||||
| Skill Atlas | pass | 12 skills; actionable collisions 0 | Workspace catalog, route overlap, stale/owner gaps, drift, and no-route opportunities | Feed real drift data into Atlas once client telemetry is installed. |
|
||||
| Registry Distribution | pass | zip entries 623; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. |
|
||||
| Registry Distribution | pass | zip entries 624; install failures 0; permission failures 0 | Package metadata, archive checksum, package verification, and install simulation pass | Regenerate registry after package verification so checksums stay aligned. |
|
||||
| Review Studio | pass | decision review; warnings 3; score 91 | One page shows gates, evidence paths, blockers, warnings, actions, waivers, and annotations | Resolve human/external warning gates before claiming full release readiness. |
|
||||
| Telemetry Drift | pass | events 1; risk low; recipes 5 | Local-first metadata-only event contract, aggregate drift report, hook recipes, and import path | Keep raw JSONL out of distributed packages and use aggregate reports for Atlas. |
|
||||
| Native Client Telemetry | external-required | external source events 0; adoption samples 0 | A real Browser/Chrome/provider client sends production metadata events | Install a real client against the native host and import production metadata-only events. |
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
"label": "Registry Distribution",
|
||||
"status": "pass",
|
||||
"objective": "Skill packages are installable, versioned, checksumed, and upgrade-reviewable.",
|
||||
"current": "archive entries 623; install failures 0",
|
||||
"current": "archive entries 624; 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": [
|
||||
|
||||
@@ -28,7 +28,7 @@ This report maps the Skill OS 2.0 upgrade blueprint to concrete local artifacts,
|
||||
| Runtime Conformance | `pass` | 5/5 targets pass | `python3 scripts/yao.py conformance .` | `python3 tests/verify_conformance_suite.py` |
|
||||
| Trust Security | `pass` | 113 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 623; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` |
|
||||
| Registry Distribution | `pass` | archive entries 624; install failures 0 | `python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip && python3 scripts/yao.py registry-audit .` | `python3 tests/verify_registry_audit.py` |
|
||||
| Review Studio | `pass` | 16 gates; decision review; warnings 3 | `python3 scripts/yao.py review-studio .` | `python3 tests/verify_review_studio.py` |
|
||||
| Telemetry Drift | `pass` | events 1; recipes 5; risk low | `python3 scripts/yao.py telemetry-hooks . && python3 scripts/yao.py adoption-drift .` | `python3 tests/verify_telemetry_hooks.py` |
|
||||
|
||||
|
||||
@@ -70,12 +70,12 @@
|
||||
{
|
||||
"field": "archive_sha256",
|
||||
"from": "",
|
||||
"to": "c4ab5ba9c345474701486a405d0fc43bf9317ecfc577fe5e67cbbbd63f54fa26"
|
||||
"to": "889886dd1eaeed6a4996a739f9312f47d67ec04ba3a1396bae7dc351b9b40dcf"
|
||||
},
|
||||
{
|
||||
"field": "package_sha256",
|
||||
"from": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"to": "b2ab2a00182b60cc9e702de55d8cad1dfc9e49a50b7f8a01ac896ffdf0ee030d"
|
||||
"to": "c0c5e61a719efa6217dedd4e04de0b4a175ab73194a4b4ee2cbd18394240ce98"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"summary": {
|
||||
"ledger_ready_to_claim_world_class": false,
|
||||
"ledger_pending_count": 4,
|
||||
"claim_surface_count": 175,
|
||||
"claim_surface_count": 176,
|
||||
"json_claim_surface_count": 86,
|
||||
"metadata_claim_surface_count": 87,
|
||||
"package_claim_surface_count": 17,
|
||||
@@ -670,6 +670,10 @@
|
||||
"path": "reports/world_class_evidence_plan.md",
|
||||
"violation_count": 0
|
||||
},
|
||||
{
|
||||
"path": "reports/world_class_evidence_preflight.html",
|
||||
"violation_count": 0
|
||||
},
|
||||
{
|
||||
"path": "reports/world_class_evidence_preflight.json",
|
||||
"violation_count": 0
|
||||
|
||||
@@ -7,7 +7,7 @@ Generated at: `2026-06-16`
|
||||
- decision: `claim-guard-pass-evidence-pending`
|
||||
- ledger ready to claim world-class: `false`
|
||||
- ledger pending evidence: `4`
|
||||
- claim surfaces scanned: `175`
|
||||
- claim surfaces scanned: `176`
|
||||
- JSON claim surfaces scanned: `86`
|
||||
- metadata claim surfaces scanned: `87`
|
||||
- package/runtime claim surfaces scanned: `17`
|
||||
|
||||
@@ -0,0 +1,531 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>World-Class Evidence Preflight</title>
|
||||
<style>
|
||||
:root { --ink:#1B365D; --text:#202124; --muted:#6f6a63; --line:#e8e1d8; --soft:#f8f6f2; --warn:#9b4d0f; --pass:#1f6f43; --block:#8a1f11; }
|
||||
* { box-sizing:border-box; }
|
||||
body { margin:0; background:#fff; color:var(--text); font:16px/1.55 Georgia, "Times New Roman", serif; }
|
||||
.topbar { position:sticky; top:0; z-index:10; background:rgba(255,255,255,.96); border-bottom:1px solid var(--line); }
|
||||
.topbar-inner { max-width:1180px; margin:0 auto; padding:12px 24px; display:flex; justify-content:space-between; gap:16px; align-items:center; }
|
||||
.brand, a, h1, h2, h3, h4 { color:var(--ink); }
|
||||
.links { display:flex; gap:14px; flex-wrap:wrap; }
|
||||
.links a { text-decoration:none; }
|
||||
.shell { max-width:1180px; margin:0 auto; padding:36px 24px 72px; }
|
||||
.hero { border-bottom:1px solid var(--line); padding:32px 0 28px; }
|
||||
.eyebrow { color:var(--ink); font-size:12px; text-transform:uppercase; font-weight:700; letter-spacing:0; }
|
||||
h1 { margin:8px 0 12px; font-size:56px; line-height:1.04; letter-spacing:0; }
|
||||
h2 { margin:0 0 14px; font-size:30px; letter-spacing:0; }
|
||||
h3 { margin:4px 0 10px; font-size:22px; letter-spacing:0; }
|
||||
h4 { margin:0 0 8px; font-size:16px; letter-spacing:0; }
|
||||
.lede { max-width:820px; color:var(--muted); font-size:20px; }
|
||||
.stats { display:grid; grid-template-columns:repeat(5, minmax(0,1fr)); gap:12px; margin:26px 0 0; }
|
||||
.stats article, .panel, .evidence-card, .check-row { border:1px solid var(--line); border-radius:8px; background:#fff; }
|
||||
.stats article { padding:16px; }
|
||||
.stats span, .muted, .evidence-card header span, .check-row span { color:var(--muted); }
|
||||
.stats strong { display:block; color:var(--ink); font-size:28px; line-height:1.15; overflow-wrap:anywhere; }
|
||||
.section { padding:32px 0; border-bottom:1px solid var(--line); }
|
||||
.two-col { display:grid; grid-template-columns:minmax(0,.45fr) minmax(0,1fr); gap:18px; align-items:start; }
|
||||
.panel { padding:20px; min-width:0; }
|
||||
.commands { list-style:none; padding:0; margin:0; display:grid; gap:10px; }
|
||||
.commands li { padding:12px; background:var(--soft); border-radius:8px; }
|
||||
.commands span { display:block; color:var(--ink); font-weight:700; margin-bottom:4px; }
|
||||
.evidence-grid { display:grid; gap:18px; }
|
||||
.evidence-card { padding:20px; min-width:0; }
|
||||
.evidence-card.blocked { border-left:4px solid var(--block); }
|
||||
.evidence-card.ready-for-human-review, .evidence-card.ready-to-collect, .check-row.human-required, .check-row.external-required, .check-row.missing, .check-row.blocked { border-left:4px solid var(--warn); }
|
||||
.evidence-card.ready-for-submission, .check-row.pass { border-left:4px solid var(--pass); }
|
||||
.meta, .check-row dl { display:grid; grid-template-columns:96px minmax(0,1fr); gap:8px 12px; }
|
||||
dt { color:var(--ink); }
|
||||
dd { margin:0; min-width:0; overflow-wrap:anywhere; }
|
||||
code { font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:13px; overflow-wrap:anywhere; }
|
||||
.next-action, .runbook { background:var(--soft); border-radius:8px; padding:14px; margin:14px 0; }
|
||||
.next-action p { margin-top:0; }
|
||||
.check-grid { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:12px; }
|
||||
.check-row { padding:14px; min-width:0; }
|
||||
.check-section { margin-top:16px; }
|
||||
.notice { background:var(--soft); border-left:4px solid var(--ink); padding:16px; border-radius:8px; }
|
||||
li { overflow-wrap:anywhere; }
|
||||
@media (max-width:820px) { .stats, .two-col, .check-grid { grid-template-columns:1fr; } h1 { font-size:38px; } .topbar-inner { align-items:flex-start; flex-direction:column; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="topbar"><div class="topbar-inner"><span class="brand">World-Class Preflight</span><div class="links"><a href="#handoff">Handoff</a><a href="#queue">Queue</a><a href="#boundary">Boundary</a></div></div></nav>
|
||||
<main class="shell">
|
||||
<section class="hero">
|
||||
<span class="eyebrow">Evidence Collection</span>
|
||||
<h1>World-Class Evidence Preflight</h1>
|
||||
<p class="lede">This operator view shows which external and human evidence is still blocked, which commands prepare editable submission drafts, and why preflight never counts as accepted evidence.</p>
|
||||
<div class="stats"><article><span>Decision</span><strong>collection-preflight-blocked</strong></article><article><span>Pending</span><strong>4</strong></article><article><span>Ready</span><strong>1</strong></article><article><span>Blocked</span><strong>3</strong></article><article><span>Source</span><strong>6/13</strong></article></div>
|
||||
</section>
|
||||
<section class="section two-col" id="handoff">
|
||||
<article class="panel">
|
||||
<h2>Submission Kit</h2>
|
||||
<p class="muted">Generate drafts only after real provider, human-review, native-permission, or native-client work exists. Drafts remain non-evidence until valid aggregate artifact refs and SHA-256 digests are supplied.</p>
|
||||
<ul>
|
||||
<li>submissions directory: <code>evidence/world_class/submissions</code></li>
|
||||
<li>drafts count as evidence: <code>false</code></li>
|
||||
<li>preflight accepts evidence: <code>false</code></li>
|
||||
</ul>
|
||||
</article>
|
||||
<aside class="panel"><h2>Commands</h2><ul class="commands"><li><span>prepare submission</span><code>python3 scripts/yao.py world-class-submission-kit . --output-dir evidence/world_class/submissions</code></li><li><span>validate intake</span><code>python3 scripts/yao.py world-class-intake . --submissions-dir evidence/world_class/submissions</code></li><li><span>submission review</span><code>python3 scripts/yao.py world-class-submission-review . --submissions-dir evidence/world_class/submissions</code></li><li><span>refresh ledger</span><code>python3 scripts/yao.py world-class-ledger . --submissions-dir evidence/world_class/submissions</code></li><li><span>guard claim</span><code>python3 scripts/yao.py world-class-claim-guard .</code></li></ul></aside>
|
||||
</section>
|
||||
<section class="section" id="queue"><h2>Evidence Queue</h2><div class="evidence-grid">
|
||||
<article class="evidence-card blocked">
|
||||
<header>
|
||||
<span>external · blocked</span>
|
||||
<h3>Provider Holdout</h3>
|
||||
</header>
|
||||
<dl class="meta">
|
||||
<dt>Evidence</dt><dd><code>provider-holdout</code></dd>
|
||||
<dt>Ledger</dt><dd>pending</dd>
|
||||
<dt>Intake</dt><dd>awaiting-submission</dd>
|
||||
<dt>Review</dt><dd>awaiting-submission</dd>
|
||||
<dt>Draft</dt><dd><code>evidence/world_class/submissions/provider-holdout.json</code></dd>
|
||||
</dl>
|
||||
<section class="next-action">
|
||||
<h4>Next Action</h4>
|
||||
<p>Set OPENAI_API_KEY in the operator shell; never commit or print the value.</p>
|
||||
<code>python3 scripts/yao.py world-class-submission-kit . --evidence-key provider-holdout --output-dir evidence/world_class/submissions</code>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Prechecks</h4>
|
||||
<div class="check-grid">
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>file</span>
|
||||
<strong>Output eval cases</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>present</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Keep output holdout cases available before provider execution.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>file</span>
|
||||
<strong>Provider runner</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>present</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Use the provider runner instead of the local command runner for model-backed evidence.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row missing">
|
||||
<div>
|
||||
<span>env</span>
|
||||
<strong>Provider credential</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>not-set</code></dd>
|
||||
<dt>Status</dt><dd>missing</dd>
|
||||
<dt>Action</dt><dd>Set OPENAI_API_KEY in the operator shell; never commit or print the value.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row optional">
|
||||
<div>
|
||||
<span>env</span>
|
||||
<strong>Provider model</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>not-set</code></dd>
|
||||
<dt>Status</dt><dd>optional</dd>
|
||||
<dt>Action</dt><dd>Optionally set YAO_OUTPUT_EVAL_MODEL; the runbook defaults to gpt-4.1-mini.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Source Checks</h4>
|
||||
<div class="check-grid">
|
||||
<article class="check-row blocked">
|
||||
<div>
|
||||
<span>model_executed_count</span>
|
||||
<strong>Provider model run</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>0</code></dd>
|
||||
<dt>Expected</dt><dd><code>>0</code></dd>
|
||||
<dt>Status</dt><dd>blocked</dd>
|
||||
<dt>Action</dt><dd>Run provider-backed output-exec with real credentials.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>timing_observed_count</span>
|
||||
<strong>Timing observed</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>10</code></dd>
|
||||
<dt>Expected</dt><dd><code>>0</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Provider execution should record timing metadata.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row blocked">
|
||||
<div>
|
||||
<span>token_observed_count</span>
|
||||
<strong>Token usage observed</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>0</code></dd>
|
||||
<dt>Expected</dt><dd><code>>0</code></dd>
|
||||
<dt>Status</dt><dd>blocked</dd>
|
||||
<dt>Action</dt><dd>Provider execution should return non-estimated token usage.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section class="runbook">
|
||||
<h4>Runbook</h4>
|
||||
<ul><li>YAO_OUTPUT_EVAL_MODEL=gpt-4.1-mini OPENAI_API_KEY=<redacted> python3 scripts/yao.py output-exec --provider-runner openai --timeout-seconds 60</li><li>python3 scripts/yao.py skill-os2-audit . --generated-at <YYYY-MM-DD></li><li>Copy evidence/world_class/templates/provider-holdout.intake.json to evidence/world_class/submissions/provider-holdout.json and fill only real evidence fields.</li><li>python3 scripts/yao.py world-class-intake . --submissions-dir evidence/world_class/submissions</li></ul>
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<article class="evidence-card ready-for-human-review">
|
||||
<header>
|
||||
<span>human · ready-for-human-review</span>
|
||||
<h3>Human Adjudication</h3>
|
||||
</header>
|
||||
<dl class="meta">
|
||||
<dt>Evidence</dt><dd><code>human-adjudication</code></dd>
|
||||
<dt>Ledger</dt><dd>pending</dd>
|
||||
<dt>Intake</dt><dd>awaiting-submission</dd>
|
||||
<dt>Review</dt><dd>awaiting-submission</dd>
|
||||
<dt>Draft</dt><dd><code>evidence/world_class/submissions/human-adjudication.json</code></dd>
|
||||
</dl>
|
||||
<section class="next-action">
|
||||
<h4>Next Action</h4>
|
||||
<p>Assign a real reviewer identity before claiming human adjudication.</p>
|
||||
<code>python3 scripts/yao.py world-class-submission-kit . --evidence-key human-adjudication --output-dir evidence/world_class/submissions</code>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Prechecks</h4>
|
||||
<div class="check-grid">
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>file</span>
|
||||
<strong>Blind review kit</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>present</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Open the blind review kit and record real reviewer choices.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>file</span>
|
||||
<strong>Decision template</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>present</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Fill winner_variant values with real A/B decisions.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row human-required">
|
||||
<div>
|
||||
<span>human</span>
|
||||
<strong>Human reviewer</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>external-human-action</code></dd>
|
||||
<dt>Status</dt><dd>human-required</dd>
|
||||
<dt>Action</dt><dd>Assign a real reviewer identity before claiming human adjudication.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Source Checks</h4>
|
||||
<div class="check-grid">
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>pair_count</span>
|
||||
<strong>Review pairs exist</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>5</code></dd>
|
||||
<dt>Expected</dt><dd><code>>0</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Generate the blind A/B review pack.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row blocked">
|
||||
<div>
|
||||
<span>pending_count</span>
|
||||
<strong>No pending decisions</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>5</code></dd>
|
||||
<dt>Expected</dt><dd><code>==0</code></dd>
|
||||
<dt>Status</dt><dd>blocked</dd>
|
||||
<dt>Action</dt><dd>Record a reviewer choice for every pair.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row blocked">
|
||||
<div>
|
||||
<span>judgment_count</span>
|
||||
<strong>Judgments complete</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>0</code></dd>
|
||||
<dt>Expected</dt><dd><code>==pair_count</code></dd>
|
||||
<dt>Status</dt><dd>blocked</dd>
|
||||
<dt>Action</dt><dd>Every pair needs one valid human judgment.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>invalid_decision_count</span>
|
||||
<strong>No invalid decisions</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>0</code></dd>
|
||||
<dt>Expected</dt><dd><code>==0</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Fix malformed winner/confidence entries.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section class="runbook">
|
||||
<h4>Runbook</h4>
|
||||
<ul><li>python3 scripts/yao.py output-review-kit --write-template</li><li>Open reports/output_review_kit.md and choose A or B for each pair without opening the answer key.</li><li>python3 scripts/adjudicate_output_review.py --write-template</li><li>Edit reports/output_review_decisions.json with winner_variant values and reviewer metadata.</li><li>python3 scripts/yao.py output-review</li><li>python3 scripts/yao.py skill-os2-audit . --generated-at <YYYY-MM-DD></li><li>Copy evidence/world_class/templates/human-adjudication.intake.json to evidence/world_class/submissions/human-adjudication.json and fill only real evidence fields.</li><li>python3 scripts/yao.py world-class-intake . --submissions-dir evidence/world_class/submissions</li></ul>
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<article class="evidence-card blocked">
|
||||
<header>
|
||||
<span>external · blocked</span>
|
||||
<h3>Native Permission Enforcement</h3>
|
||||
</header>
|
||||
<dl class="meta">
|
||||
<dt>Evidence</dt><dd><code>native-permission-enforcement</code></dd>
|
||||
<dt>Ledger</dt><dd>pending</dd>
|
||||
<dt>Intake</dt><dd>awaiting-submission</dd>
|
||||
<dt>Review</dt><dd>awaiting-submission</dd>
|
||||
<dt>Draft</dt><dd><code>evidence/world_class/submissions/native-permission-enforcement.json</code></dd>
|
||||
</dl>
|
||||
<section class="next-action">
|
||||
<h4>Next Action</h4>
|
||||
<p>Attach a real target-client or external installer runtime guard; metadata fallback is not enough.</p>
|
||||
<code>python3 scripts/yao.py world-class-submission-kit . --evidence-key native-permission-enforcement --output-dir evidence/world_class/submissions</code>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Prechecks</h4>
|
||||
<div class="check-grid">
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>file</span>
|
||||
<strong>Permission policy</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>present</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Keep approved high-permission capabilities explicit.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>file</span>
|
||||
<strong>Runtime probes</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>present</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Refresh runtime permission probes after packaging changes.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row external-required">
|
||||
<div>
|
||||
<span>external</span>
|
||||
<strong>Native guard</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>external-integration-required</code></dd>
|
||||
<dt>Status</dt><dd>external-required</dd>
|
||||
<dt>Action</dt><dd>Attach a real target-client or external installer runtime guard; metadata fallback is not enough.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Source Checks</h4>
|
||||
<div class="check-grid">
|
||||
<article class="check-row blocked">
|
||||
<div>
|
||||
<span>native_enforcement_count</span>
|
||||
<strong>Native enforcement</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>0</code></dd>
|
||||
<dt>Expected</dt><dd><code>>0</code></dd>
|
||||
<dt>Status</dt><dd>blocked</dd>
|
||||
<dt>Action</dt><dd>Collect real target-client or external runtime guard proof.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>failure_count</span>
|
||||
<strong>Probe failures</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>0</code></dd>
|
||||
<dt>Expected</dt><dd><code>==0</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Runtime permission probes must stay clean.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>installer_enforcement_ready</span>
|
||||
<strong>Installer support</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>True</code></dd>
|
||||
<dt>Expected</dt><dd><code>true</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Installer enforcement is supporting evidence, not native proof.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section class="runbook">
|
||||
<h4>Runbook</h4>
|
||||
<ul><li>Implement or connect a real target client or external installer runtime guard that blocks undeclared network, file_write, or subprocess capabilities.</li><li>Update the generated target adapter only when the guard is actually enforced by that target.</li><li>python3 scripts/yao.py package . --platform openai --platform claude --platform generic --platform vscode --output-dir dist --zip</li><li>python3 scripts/yao.py install-simulate . --package-dir dist --install-root dist/install-simulation</li><li>python3 scripts/yao.py runtime-permissions . --package-dir dist</li><li>python3 scripts/yao.py skill-os2-audit . --generated-at <YYYY-MM-DD></li><li>Copy evidence/world_class/templates/native-permission-enforcement.intake.json to evidence/world_class/submissions/native-permission-enforcement.json and fill only real evidence fields.</li><li>python3 scripts/yao.py world-class-intake . --submissions-dir evidence/world_class/submissions</li></ul>
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<article class="evidence-card blocked">
|
||||
<header>
|
||||
<span>external · blocked</span>
|
||||
<h3>Native Client Telemetry</h3>
|
||||
</header>
|
||||
<dl class="meta">
|
||||
<dt>Evidence</dt><dd><code>native-client-telemetry</code></dd>
|
||||
<dt>Ledger</dt><dd>pending</dd>
|
||||
<dt>Intake</dt><dd>awaiting-submission</dd>
|
||||
<dt>Review</dt><dd>awaiting-submission</dd>
|
||||
<dt>Draft</dt><dd><code>evidence/world_class/submissions/native-client-telemetry.json</code></dd>
|
||||
</dl>
|
||||
<section class="next-action">
|
||||
<h4>Next Action</h4>
|
||||
<p>Install a real Browser, Chrome, IDE, or provider client that emits metadata-only events.</p>
|
||||
<code>python3 scripts/yao.py world-class-submission-kit . --evidence-key native-client-telemetry --output-dir evidence/world_class/submissions</code>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Prechecks</h4>
|
||||
<div class="check-grid">
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>file</span>
|
||||
<strong>Native telemetry host</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>present</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Use the native host to receive metadata-only client events.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>file</span>
|
||||
<strong>Hook recipes</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>present</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Refresh telemetry hook recipes before external client installation.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row external-required">
|
||||
<div>
|
||||
<span>external</span>
|
||||
<strong>External client</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>external-integration-required</code></dd>
|
||||
<dt>Status</dt><dd>external-required</dd>
|
||||
<dt>Action</dt><dd>Install a real Browser, Chrome, IDE, or provider client that emits metadata-only events.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Source Checks</h4>
|
||||
<div class="check-grid">
|
||||
<article class="check-row blocked">
|
||||
<div>
|
||||
<span>external_source_events</span>
|
||||
<strong>External events</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>0</code></dd>
|
||||
<dt>Expected</dt><dd><code>>0</code></dd>
|
||||
<dt>Status</dt><dd>blocked</dd>
|
||||
<dt>Action</dt><dd>Import at least one metadata-only event from a real client.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row blocked">
|
||||
<div>
|
||||
<span>adoption_sample_count</span>
|
||||
<strong>Adoption sample</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>0</code></dd>
|
||||
<dt>Expected</dt><dd><code>>0</code></dd>
|
||||
<dt>Status</dt><dd>blocked</dd>
|
||||
<dt>Action</dt><dd>Telemetry must include adoption outcome evidence.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
||||
<article class="check-row pass">
|
||||
<div>
|
||||
<span>raw_content_allowed</span>
|
||||
<strong>Raw content blocked</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>False</code></dd>
|
||||
<dt>Expected</dt><dd><code>false</code></dd>
|
||||
<dt>Status</dt><dd>pass</dd>
|
||||
<dt>Action</dt><dd>Telemetry must stay metadata-only.</dd>
|
||||
</dl>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
<section class="runbook">
|
||||
<h4>Runbook</h4>
|
||||
<ul><li>python3 scripts/telemetry_native_host.py . --write-launcher /tmp/yao-telemetry-host.sh --write-manifest /tmp/yao-telemetry-host.json --allowed-origin chrome-extension://<extension-id>/</li><li>Install the generated native messaging manifest for the real client and send at least one accepted skill_activation or skill_output event.</li><li>python3 scripts/yao.py telemetry-import . --input-jsonl .yao/telemetry_spool/external_events.jsonl</li><li>python3 scripts/yao.py skill-atlas --workspace-root .</li><li>python3 scripts/yao.py skill-os2-audit . --generated-at <YYYY-MM-DD></li><li>Copy evidence/world_class/templates/native-client-telemetry.intake.json to evidence/world_class/submissions/native-client-telemetry.json and fill only real evidence fields.</li><li>python3 scripts/yao.py world-class-intake . --submissions-dir evidence/world_class/submissions</li></ul>
|
||||
</section>
|
||||
</article>
|
||||
</div></section>
|
||||
<section class="section" id="boundary">
|
||||
<h2>Safety Boundary</h2>
|
||||
<div class="notice"><ul><li>Environment variables are displayed only as set or not-set; secret values are never printed.</li><li>Human-required and external-required states are operator work, not accepted evidence.</li><li>The world-class ledger remains the only source of truth for ready_to_claim_world_class.</li></ul></div>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -793,6 +793,7 @@
|
||||
},
|
||||
"artifacts": {
|
||||
"json": "reports/world_class_evidence_preflight.json",
|
||||
"markdown": "reports/world_class_evidence_preflight.md"
|
||||
"markdown": "reports/world_class_evidence_preflight.md",
|
||||
"html": "reports/world_class_evidence_preflight.html"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ IGNORED_FILE_PATTERNS = {
|
||||
"reports/skill-overview*.json",
|
||||
"reports/world_class_evidence_preflight*.json",
|
||||
"reports/world_class_evidence_preflight*.md",
|
||||
"reports/world_class_evidence_preflight*.html",
|
||||
"reports/*pattern-analysis*.md",
|
||||
"reports/*research-plan*.md",
|
||||
}
|
||||
|
||||
@@ -522,6 +522,8 @@ def build_report(skill_dir: Path, generated_at: str) -> dict[str, Any]:
|
||||
"directory": default_submissions_dir,
|
||||
"drafts_count_as_evidence": False,
|
||||
"preflight_counts_submission_as_completion": False,
|
||||
"html_report": "reports/world_class_evidence_preflight.html",
|
||||
"html_exists": True,
|
||||
"prepare_submission": f"python3 scripts/yao.py world-class-submission-kit . --output-dir {default_submissions_dir}",
|
||||
"validate_intake": f"python3 scripts/yao.py world-class-intake . --submissions-dir {default_submissions_dir}",
|
||||
"submission_review": f"python3 scripts/yao.py world-class-submission-review . --submissions-dir {default_submissions_dir}",
|
||||
@@ -534,6 +536,10 @@ def build_report(skill_dir: Path, generated_at: str) -> dict[str, Any]:
|
||||
"preflight_counts_submission_as_completion": preflight_submissions.get(
|
||||
"preflight_counts_submission_as_completion"
|
||||
),
|
||||
"html_report": world_class_preflight.get("artifacts", {}).get("html")
|
||||
if isinstance(world_class_preflight.get("artifacts", {}), dict)
|
||||
else None,
|
||||
"html_exists": (skill_dir / "reports" / "world_class_evidence_preflight.html").exists(),
|
||||
"prepare_submission": preflight_commands.get("prepare_submission"),
|
||||
"validate_intake": preflight_commands.get("validate_intake"),
|
||||
"submission_review": preflight_commands.get("submission_review"),
|
||||
@@ -546,7 +552,7 @@ def build_report(skill_dir: Path, generated_at: str) -> dict[str, Any]:
|
||||
label="Preflight exposes a safe submission-kit handoff",
|
||||
expected=expected_preflight_handoff,
|
||||
actual=actual_preflight_handoff,
|
||||
paths=[REQUIRED_REPORTS["world_class_preflight"]],
|
||||
paths=[REQUIRED_REPORTS["world_class_preflight"], "reports/world_class_evidence_preflight.html"],
|
||||
detail=(
|
||||
"Preflight must give operators the exact draft, intake, review, ledger, and claim-guard commands "
|
||||
"without letting drafts or submissions count as accepted evidence."
|
||||
|
||||
@@ -7,6 +7,7 @@ from datetime import date
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from html_rendering import html_text
|
||||
from render_world_class_evidence_intake import build_intake
|
||||
from render_world_class_evidence_ledger import build_ledger
|
||||
from render_world_class_submission_review import build_submission_review
|
||||
@@ -336,6 +337,7 @@ def build_preflight(skill_dir: Path, generated_at: str, submissions_dir: Path |
|
||||
"artifacts": {
|
||||
"json": "reports/world_class_evidence_preflight.json",
|
||||
"markdown": "reports/world_class_evidence_preflight.md",
|
||||
"html": "reports/world_class_evidence_preflight.html",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -430,12 +432,216 @@ def render_markdown(report: dict[str, Any]) -> str:
|
||||
return "\n".join(lines).rstrip() + "\n"
|
||||
|
||||
|
||||
def html_list(values: list[Any], empty: str) -> str:
|
||||
if not values:
|
||||
return f"<li>{html_text(empty)}</li>"
|
||||
return "".join(f"<li>{html_text(value)}</li>" for value in values)
|
||||
|
||||
|
||||
def render_html_commands(commands: dict[str, str]) -> str:
|
||||
return "".join(
|
||||
f"<li><span>{html_text(label.replace('_', ' '))}</span><code>{html_text(command)}</code></li>"
|
||||
for label, command in commands.items()
|
||||
)
|
||||
|
||||
|
||||
def render_html_prechecks(rows: list[dict[str, Any]]) -> str:
|
||||
if not rows:
|
||||
return "<p class=\"muted\">No prechecks listed.</p>"
|
||||
return "".join(
|
||||
"""
|
||||
<article class="check-row {status}">
|
||||
<div>
|
||||
<span>{kind}</span>
|
||||
<strong>{label}</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>{actual}</code></dd>
|
||||
<dt>Status</dt><dd>{status}</dd>
|
||||
<dt>Action</dt><dd>{action}</dd>
|
||||
</dl>
|
||||
</article>
|
||||
""".format(
|
||||
status=html_text(row.get("status", "")),
|
||||
kind=html_text(row.get("kind", "")),
|
||||
label=html_text(row.get("label", "")),
|
||||
actual=html_text(row.get("actual", "")),
|
||||
action=html_text(row.get("next_action", "")),
|
||||
)
|
||||
for row in rows
|
||||
)
|
||||
|
||||
|
||||
def render_html_source_checks(rows: list[dict[str, Any]]) -> str:
|
||||
if not rows:
|
||||
return "<p class=\"muted\">No source checks listed.</p>"
|
||||
return "".join(
|
||||
"""
|
||||
<article class="check-row {status}">
|
||||
<div>
|
||||
<span>{field}</span>
|
||||
<strong>{label}</strong>
|
||||
</div>
|
||||
<dl>
|
||||
<dt>Current</dt><dd><code>{actual}</code></dd>
|
||||
<dt>Expected</dt><dd><code>{expected}</code></dd>
|
||||
<dt>Status</dt><dd>{status}</dd>
|
||||
<dt>Action</dt><dd>{action}</dd>
|
||||
</dl>
|
||||
</article>
|
||||
""".format(
|
||||
status=html_text(row.get("status", "")),
|
||||
field=html_text(row.get("field", "")),
|
||||
label=html_text(row.get("label", "")),
|
||||
actual=html_text(row.get("actual", "")),
|
||||
expected=html_text(row.get("expected", "")),
|
||||
action=html_text(row.get("next_action", "")),
|
||||
)
|
||||
for row in rows
|
||||
)
|
||||
|
||||
|
||||
def render_html_item(item: dict[str, Any]) -> str:
|
||||
return f"""
|
||||
<article class="evidence-card {html_text(item.get('status', ''))}">
|
||||
<header>
|
||||
<span>{html_text(item.get('category', ''))} · {html_text(item.get('status', ''))}</span>
|
||||
<h3>{html_text(item.get('label', item.get('evidence_key', '')))}</h3>
|
||||
</header>
|
||||
<dl class="meta">
|
||||
<dt>Evidence</dt><dd><code>{html_text(item.get('evidence_key', ''))}</code></dd>
|
||||
<dt>Ledger</dt><dd>{html_text(item.get('ledger_status', ''))}</dd>
|
||||
<dt>Intake</dt><dd>{html_text(item.get('intake_readiness', ''))}</dd>
|
||||
<dt>Review</dt><dd>{html_text(item.get('review_state', ''))}</dd>
|
||||
<dt>Draft</dt><dd><code>{html_text(item.get('submission_path', ''))}</code></dd>
|
||||
</dl>
|
||||
<section class="next-action">
|
||||
<h4>Next Action</h4>
|
||||
<p>{html_text(item.get('next_action', ''))}</p>
|
||||
<code>{html_text(item.get('commands', {}).get('prepare_submission', ''))}</code>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Prechecks</h4>
|
||||
<div class="check-grid">{render_html_prechecks(item.get('prechecks', []))}</div>
|
||||
</section>
|
||||
<section class="check-section">
|
||||
<h4>Source Checks</h4>
|
||||
<div class="check-grid">{render_html_source_checks(item.get('source_checklist', []))}</div>
|
||||
</section>
|
||||
<section class="runbook">
|
||||
<h4>Runbook</h4>
|
||||
<ul>{html_list(item.get('runbook', []), 'No runbook steps listed.')}</ul>
|
||||
</section>
|
||||
</article>
|
||||
"""
|
||||
|
||||
|
||||
def render_html(report: dict[str, Any]) -> str:
|
||||
summary = report["summary"]
|
||||
stats = [
|
||||
("Decision", summary["decision"]),
|
||||
("Pending", summary["pending_count"]),
|
||||
("Ready", summary["collection_ready_count"]),
|
||||
("Blocked", summary["collection_blocked_count"]),
|
||||
("Source", f"{summary['source_pass_count']}/{summary['source_check_count']}"),
|
||||
]
|
||||
stat_html = "".join(
|
||||
f"<article><span>{html_text(label)}</span><strong>{html_text(value)}</strong></article>"
|
||||
for label, value in stats
|
||||
)
|
||||
item_cards = "".join(render_html_item(item) for item in report.get("items", []))
|
||||
return f"""<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>World-Class Evidence Preflight</title>
|
||||
<style>
|
||||
:root {{ --ink:#1B365D; --text:#202124; --muted:#6f6a63; --line:#e8e1d8; --soft:#f8f6f2; --warn:#9b4d0f; --pass:#1f6f43; --block:#8a1f11; }}
|
||||
* {{ box-sizing:border-box; }}
|
||||
body {{ margin:0; background:#fff; color:var(--text); font:16px/1.55 Georgia, "Times New Roman", serif; }}
|
||||
.topbar {{ position:sticky; top:0; z-index:10; background:rgba(255,255,255,.96); border-bottom:1px solid var(--line); }}
|
||||
.topbar-inner {{ max-width:1180px; margin:0 auto; padding:12px 24px; display:flex; justify-content:space-between; gap:16px; align-items:center; }}
|
||||
.brand, a, h1, h2, h3, h4 {{ color:var(--ink); }}
|
||||
.links {{ display:flex; gap:14px; flex-wrap:wrap; }}
|
||||
.links a {{ text-decoration:none; }}
|
||||
.shell {{ max-width:1180px; margin:0 auto; padding:36px 24px 72px; }}
|
||||
.hero {{ border-bottom:1px solid var(--line); padding:32px 0 28px; }}
|
||||
.eyebrow {{ color:var(--ink); font-size:12px; text-transform:uppercase; font-weight:700; letter-spacing:0; }}
|
||||
h1 {{ margin:8px 0 12px; font-size:56px; line-height:1.04; letter-spacing:0; }}
|
||||
h2 {{ margin:0 0 14px; font-size:30px; letter-spacing:0; }}
|
||||
h3 {{ margin:4px 0 10px; font-size:22px; letter-spacing:0; }}
|
||||
h4 {{ margin:0 0 8px; font-size:16px; letter-spacing:0; }}
|
||||
.lede {{ max-width:820px; color:var(--muted); font-size:20px; }}
|
||||
.stats {{ display:grid; grid-template-columns:repeat(5, minmax(0,1fr)); gap:12px; margin:26px 0 0; }}
|
||||
.stats article, .panel, .evidence-card, .check-row {{ border:1px solid var(--line); border-radius:8px; background:#fff; }}
|
||||
.stats article {{ padding:16px; }}
|
||||
.stats span, .muted, .evidence-card header span, .check-row span {{ color:var(--muted); }}
|
||||
.stats strong {{ display:block; color:var(--ink); font-size:28px; line-height:1.15; overflow-wrap:anywhere; }}
|
||||
.section {{ padding:32px 0; border-bottom:1px solid var(--line); }}
|
||||
.two-col {{ display:grid; grid-template-columns:minmax(0,.45fr) minmax(0,1fr); gap:18px; align-items:start; }}
|
||||
.panel {{ padding:20px; min-width:0; }}
|
||||
.commands {{ list-style:none; padding:0; margin:0; display:grid; gap:10px; }}
|
||||
.commands li {{ padding:12px; background:var(--soft); border-radius:8px; }}
|
||||
.commands span {{ display:block; color:var(--ink); font-weight:700; margin-bottom:4px; }}
|
||||
.evidence-grid {{ display:grid; gap:18px; }}
|
||||
.evidence-card {{ padding:20px; min-width:0; }}
|
||||
.evidence-card.blocked {{ border-left:4px solid var(--block); }}
|
||||
.evidence-card.ready-for-human-review, .evidence-card.ready-to-collect, .check-row.human-required, .check-row.external-required, .check-row.missing, .check-row.blocked {{ border-left:4px solid var(--warn); }}
|
||||
.evidence-card.ready-for-submission, .check-row.pass {{ border-left:4px solid var(--pass); }}
|
||||
.meta, .check-row dl {{ display:grid; grid-template-columns:96px minmax(0,1fr); gap:8px 12px; }}
|
||||
dt {{ color:var(--ink); }}
|
||||
dd {{ margin:0; min-width:0; overflow-wrap:anywhere; }}
|
||||
code {{ font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:13px; overflow-wrap:anywhere; }}
|
||||
.next-action, .runbook {{ background:var(--soft); border-radius:8px; padding:14px; margin:14px 0; }}
|
||||
.next-action p {{ margin-top:0; }}
|
||||
.check-grid {{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:12px; }}
|
||||
.check-row {{ padding:14px; min-width:0; }}
|
||||
.check-section {{ margin-top:16px; }}
|
||||
.notice {{ background:var(--soft); border-left:4px solid var(--ink); padding:16px; border-radius:8px; }}
|
||||
li {{ overflow-wrap:anywhere; }}
|
||||
@media (max-width:820px) {{ .stats, .two-col, .check-grid {{ grid-template-columns:1fr; }} h1 {{ font-size:38px; }} .topbar-inner {{ align-items:flex-start; flex-direction:column; }} }}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="topbar"><div class="topbar-inner"><span class="brand">World-Class Preflight</span><div class="links"><a href="#handoff">Handoff</a><a href="#queue">Queue</a><a href="#boundary">Boundary</a></div></div></nav>
|
||||
<main class="shell">
|
||||
<section class="hero">
|
||||
<span class="eyebrow">Evidence Collection</span>
|
||||
<h1>World-Class Evidence Preflight</h1>
|
||||
<p class="lede">This operator view shows which external and human evidence is still blocked, which commands prepare editable submission drafts, and why preflight never counts as accepted evidence.</p>
|
||||
<div class="stats">{stat_html}</div>
|
||||
</section>
|
||||
<section class="section two-col" id="handoff">
|
||||
<article class="panel">
|
||||
<h2>Submission Kit</h2>
|
||||
<p class="muted">Generate drafts only after real provider, human-review, native-permission, or native-client work exists. Drafts remain non-evidence until valid aggregate artifact refs and SHA-256 digests are supplied.</p>
|
||||
<ul>
|
||||
<li>submissions directory: <code>{html_text(report['submissions']['directory'])}</code></li>
|
||||
<li>drafts count as evidence: <code>{html_text(str(report['submissions']['drafts_count_as_evidence']).lower())}</code></li>
|
||||
<li>preflight accepts evidence: <code>{html_text(str(report['summary']['preflight_counts_as_evidence']).lower())}</code></li>
|
||||
</ul>
|
||||
</article>
|
||||
<aside class="panel"><h2>Commands</h2><ul class="commands">{render_html_commands(report['submissions']['commands'])}</ul></aside>
|
||||
</section>
|
||||
<section class="section" id="queue"><h2>Evidence Queue</h2><div class="evidence-grid">{item_cards}</div></section>
|
||||
<section class="section" id="boundary">
|
||||
<h2>Safety Boundary</h2>
|
||||
<div class="notice"><ul><li>Environment variables are displayed only as set or not-set; secret values are never printed.</li><li>Human-required and external-required states are operator work, not accepted evidence.</li><li>The world-class ledger remains the only source of truth for ready_to_claim_world_class.</li></ul></div>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="Render collection preflight checks for pending world-class evidence.")
|
||||
parser.add_argument("skill_dir", nargs="?", default=".")
|
||||
parser.add_argument("--submissions-dir")
|
||||
parser.add_argument("--output-json", default="reports/world_class_evidence_preflight.json")
|
||||
parser.add_argument("--output-md", default="reports/world_class_evidence_preflight.md")
|
||||
parser.add_argument("--output-html", default="reports/world_class_evidence_preflight.html")
|
||||
parser.add_argument("--generated-at", default=date.today().isoformat())
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -444,14 +650,19 @@ def main() -> None:
|
||||
report = build_preflight(skill_dir, args.generated_at, submissions_dir=submissions_dir)
|
||||
output_json = Path(args.output_json)
|
||||
output_md = Path(args.output_md)
|
||||
output_html = Path(args.output_html)
|
||||
if not output_json.is_absolute():
|
||||
output_json = skill_dir / output_json
|
||||
if not output_md.is_absolute():
|
||||
output_md = skill_dir / output_md
|
||||
if not output_html.is_absolute():
|
||||
output_html = skill_dir / output_html
|
||||
output_json.parent.mkdir(parents=True, exist_ok=True)
|
||||
output_md.parent.mkdir(parents=True, exist_ok=True)
|
||||
output_html.parent.mkdir(parents=True, exist_ok=True)
|
||||
output_json.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||
output_md.write_text(render_markdown(report), encoding="utf-8")
|
||||
output_html.write_text(render_html(report), encoding="utf-8")
|
||||
print(json.dumps(report, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ IGNORED_FILE_PATTERNS = {
|
||||
"reports/skill-overview*.json",
|
||||
"reports/world_class_evidence_preflight*.json",
|
||||
"reports/world_class_evidence_preflight*.md",
|
||||
"reports/world_class_evidence_preflight*.html",
|
||||
"reports/*pattern-analysis*.md",
|
||||
"reports/*research-plan*.md",
|
||||
}
|
||||
|
||||
@@ -225,6 +225,7 @@ def build_parser(command_handlers: dict[str, Callable[[argparse.Namespace], int]
|
||||
world_class_preflight_cmd.add_argument("--submissions-dir")
|
||||
world_class_preflight_cmd.add_argument("--output-json")
|
||||
world_class_preflight_cmd.add_argument("--output-md")
|
||||
world_class_preflight_cmd.add_argument("--output-html")
|
||||
world_class_preflight_cmd.add_argument("--generated-at")
|
||||
world_class_preflight_cmd.set_defaults(func=_handler(command_handlers, "command_world_class_preflight"))
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ REPORT_FILES = [
|
||||
"reports/world_class_evidence_plan.json",
|
||||
"reports/world_class_evidence_intake.json",
|
||||
"reports/world_class_evidence_preflight.json",
|
||||
"reports/world_class_evidence_preflight.html",
|
||||
"reports/world_class_submission_review.json",
|
||||
"reports/world_class_operator_runbook.json",
|
||||
"reports/skill_os2_coverage.json",
|
||||
|
||||
@@ -159,6 +159,7 @@ def verify_volatile_report_outputs_ignored() -> dict:
|
||||
"skill-overview.json",
|
||||
"world_class_evidence_preflight.json",
|
||||
"world_class_evidence_preflight.md",
|
||||
"world_class_evidence_preflight.html",
|
||||
]
|
||||
for report_name in volatile_reports:
|
||||
report_path = skill_dir / "reports" / report_name
|
||||
|
||||
@@ -60,7 +60,8 @@ def main() -> None:
|
||||
|
||||
output_json = TMP / "world_class_evidence_preflight.json"
|
||||
output_md = TMP / "world_class_evidence_preflight.md"
|
||||
proc = run_preflight(None, "--output-json", str(output_json), "--output-md", str(output_md))
|
||||
output_html = TMP / "world_class_evidence_preflight.html"
|
||||
proc = run_preflight(None, "--output-json", str(output_json), "--output-md", str(output_md), "--output-html", str(output_html))
|
||||
payload = json.loads(proc.stdout)
|
||||
assert payload["schema_version"] == "1.0", payload
|
||||
assert payload["ok"] is True, payload
|
||||
@@ -84,6 +85,7 @@ def main() -> None:
|
||||
"python3 scripts/yao.py world-class-submission-kit . "
|
||||
"--output-dir evidence/world_class/submissions"
|
||||
), payload["submissions"]
|
||||
assert payload["artifacts"]["html"] == "reports/world_class_evidence_preflight.html", payload["artifacts"]
|
||||
submission_commands = payload["submissions"]["commands"]
|
||||
assert submission_commands["prepare_submission"] == (
|
||||
"python3 scripts/yao.py world-class-submission-kit . "
|
||||
@@ -138,6 +140,16 @@ def main() -> None:
|
||||
assert "world-class-submission-kit . --evidence-key provider-holdout --output-dir evidence/world_class/submissions" in markdown, markdown
|
||||
assert "drafts count as evidence: `false`" in markdown, markdown
|
||||
assert "values are never printed" in markdown, markdown
|
||||
html = output_html.read_text(encoding="utf-8")
|
||||
assert "<title>World-Class Evidence Preflight</title>" in html, html
|
||||
assert "World-Class Evidence Preflight" in html, html
|
||||
assert "Evidence Queue" in html, html
|
||||
assert "Submission Kit" in html, html
|
||||
assert "world-class-submission-kit . --output-dir evidence/world_class/submissions" in html, html
|
||||
assert "provider-holdout" in html, html
|
||||
assert "Source Checks" in html, html
|
||||
assert "ready_to_claim_world_class" in html, html
|
||||
assert "Environment variables are displayed only as set or not-set" in html, html
|
||||
|
||||
env_json = TMP / "preflight_with_env.json"
|
||||
env_proc = run_preflight(
|
||||
@@ -146,6 +158,8 @@ def main() -> None:
|
||||
str(env_json),
|
||||
"--output-md",
|
||||
str(TMP / "preflight_with_env.md"),
|
||||
"--output-html",
|
||||
str(TMP / "preflight_with_env.html"),
|
||||
)
|
||||
env_payload = json.loads(env_proc.stdout)
|
||||
env_provider = by_key(env_payload["items"], "provider-holdout")
|
||||
@@ -154,6 +168,7 @@ def main() -> None:
|
||||
assert env_provider_checks["openai-api-key"]["actual"] == "set", env_provider_checks
|
||||
assert env_provider_checks["provider-model"]["status"] == "pass", env_provider_checks
|
||||
assert "sk-test-secret" not in env_proc.stdout, env_proc.stdout
|
||||
assert "sk-test-secret" not in (TMP / "preflight_with_env.html").read_text(encoding="utf-8"), env_payload
|
||||
assert env_payload["summary"]["credential_value_exposed"] is False, env_payload
|
||||
assert env_payload["summary"]["ready_to_claim_world_class"] is False, env_payload
|
||||
|
||||
@@ -166,6 +181,8 @@ def main() -> None:
|
||||
str(TMP / "preflight_spaced.json"),
|
||||
"--output-md",
|
||||
str(TMP / "preflight_spaced.md"),
|
||||
"--output-html",
|
||||
str(TMP / "preflight_spaced.html"),
|
||||
)
|
||||
spaced_payload = json.loads(spaced_proc.stdout)
|
||||
quoted_spaced = "'tests/tmp_world_class_preflight/submission kit spaced'"
|
||||
@@ -177,6 +194,8 @@ def main() -> None:
|
||||
str(TMP / "cli_preflight.json"),
|
||||
"--output-md",
|
||||
str(TMP / "cli_preflight.md"),
|
||||
"--output-html",
|
||||
str(TMP / "cli_preflight.html"),
|
||||
"--generated-at",
|
||||
"2026-06-16",
|
||||
)
|
||||
@@ -184,6 +203,7 @@ def main() -> None:
|
||||
assert cli_payload["summary"]["decision"] == "collection-preflight-blocked", cli_payload
|
||||
assert cli_payload["summary"]["preflight_counts_as_evidence"] is False, cli_payload
|
||||
assert (TMP / "cli_preflight.md").exists(), cli_payload
|
||||
assert (TMP / "cli_preflight.html").exists(), cli_payload
|
||||
|
||||
print(json.dumps({"ok": True}, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user