Require ledger reviewer identity for world-class evidence
This commit is contained in:
@@ -151,7 +151,9 @@
|
||||
"reviewer_or_operator_identity_present",
|
||||
"artifact_refs_reviewed",
|
||||
"privacy_contract_satisfied",
|
||||
"ledger_reviewer_approved"
|
||||
"ledger_reviewer_approved",
|
||||
"ledger_reviewer",
|
||||
"ledger_reviewed_at"
|
||||
],
|
||||
"properties": {
|
||||
"real_external_or_human_evidence": {
|
||||
@@ -169,6 +171,12 @@
|
||||
"ledger_reviewer_approved": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"ledger_reviewer": {
|
||||
"type": "string"
|
||||
},
|
||||
"ledger_reviewed_at": {
|
||||
"type": "string"
|
||||
},
|
||||
"notes": {
|
||||
"type": "string"
|
||||
}
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
"artifact_refs_reviewed": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"notes": "Copy this template into submissions/ after a real reviewer completes blind decisions."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
"artifact_refs_reviewed": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"notes": "Copy this template into submissions/ after real client events have been imported."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
"artifact_refs_reviewed": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"notes": "Copy this template into submissions/ only after a real client or installer guard exists."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
"artifact_refs_reviewed": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"notes": "Copy this template into submissions/ and set all booleans truthfully after the real provider run."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,13 +15,20 @@
|
||||
"warn_line_threshold": 900,
|
||||
"watch_line_threshold": 720,
|
||||
"block_line_threshold": 1500,
|
||||
"largest_file_lines": 696,
|
||||
"largest_file_lines": 700,
|
||||
"watchlist_count": 0,
|
||||
"hotspot_count": 0,
|
||||
"blocker_count": 0,
|
||||
"decision": "pass"
|
||||
},
|
||||
"largest_files": [
|
||||
{
|
||||
"path": "scripts/world_class_evidence_contract.py",
|
||||
"lines": 700,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_yao_cli.py",
|
||||
"lines": 696,
|
||||
@@ -29,13 +36,6 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands."
|
||||
},
|
||||
{
|
||||
"path": "scripts/world_class_evidence_contract.py",
|
||||
"lines": 687,
|
||||
"kind": "internal-module",
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_review_viewer.py",
|
||||
"lines": 685,
|
||||
@@ -43,6 +43,13 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Split viewer data assembly from HTML section rendering."
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_world_class_evidence_intake.py",
|
||||
"lines": 669,
|
||||
"kind": "test",
|
||||
"severity": "pass",
|
||||
"recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands."
|
||||
},
|
||||
{
|
||||
"path": "scripts/skill_report_model.py",
|
||||
"lines": 665,
|
||||
@@ -50,13 +57,6 @@
|
||||
"severity": "pass",
|
||||
"recommendation": "Watch this file before adding new responsibilities; extract a helper module when one concern dominates."
|
||||
},
|
||||
{
|
||||
"path": "tests/verify_world_class_evidence_intake.py",
|
||||
"lines": 663,
|
||||
"kind": "test",
|
||||
"severity": "pass",
|
||||
"recommendation": "Break broad integration assertions into focused verifier helpers when the next behavior change lands."
|
||||
},
|
||||
{
|
||||
"path": "scripts/render_skill_os2_coverage.py",
|
||||
"lines": 649,
|
||||
|
||||
@@ -13,7 +13,7 @@ Generated at: `2026-06-16`
|
||||
- Yao CLI command handlers: `68`
|
||||
- entrypoint command handlers: `18`
|
||||
- command modules: `6`
|
||||
- largest file lines: `696`
|
||||
- largest file lines: `700`
|
||||
- watch threshold lines: `720`
|
||||
- watchlist: `0`
|
||||
- hotspots: `0`
|
||||
@@ -33,11 +33,11 @@ No near-threshold files found.
|
||||
|
||||
| File | Lines | Kind | Severity |
|
||||
| --- | ---: | --- | --- |
|
||||
| `scripts/world_class_evidence_contract.py` | `700` | `internal-module` | `pass` |
|
||||
| `tests/verify_yao_cli.py` | `696` | `test` | `pass` |
|
||||
| `scripts/world_class_evidence_contract.py` | `687` | `internal-module` | `pass` |
|
||||
| `scripts/render_review_viewer.py` | `685` | `cli-script` | `pass` |
|
||||
| `tests/verify_world_class_evidence_intake.py` | `669` | `test` | `pass` |
|
||||
| `scripts/skill_report_model.py` | `665` | `internal-module` | `pass` |
|
||||
| `tests/verify_world_class_evidence_intake.py` | `663` | `test` | `pass` |
|
||||
| `scripts/render_skill_os2_coverage.py` | `649` | `cli-script` | `pass` |
|
||||
| `scripts/render_review_studio.py` | `647` | `cli-script` | `pass` |
|
||||
| `scripts/render_reference_synthesis.py` | `644` | `cli-script` | `pass` |
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
"context_budget_tier": "production",
|
||||
"context_budget_limit": 1000,
|
||||
"skill_body_tokens": 797,
|
||||
"other_text_tokens": 1056256,
|
||||
"other_text_tokens": 1057945,
|
||||
"estimated_initial_load_tokens": 990,
|
||||
"estimated_total_text_tokens": 1057053,
|
||||
"deferred_resource_tokens": 489692,
|
||||
"estimated_total_text_tokens": 1058742,
|
||||
"deferred_resource_tokens": 489964,
|
||||
"deferred_resource_warn_threshold": 120000,
|
||||
"deferred_resource_dirs": [
|
||||
{
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 429594,
|
||||
"estimated_tokens": 429866,
|
||||
"file_count": 135
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@
|
||||
"large_deferred_resource_dirs": [
|
||||
{
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 429594,
|
||||
"estimated_tokens": 429866,
|
||||
"file_count": 135
|
||||
}
|
||||
],
|
||||
@@ -59,7 +59,7 @@
|
||||
],
|
||||
"missing": [],
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 429594,
|
||||
"estimated_tokens": 429866,
|
||||
"file_count": 135,
|
||||
"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 | 990 | 797 | 489692 | `governed` | scripts:429594 | 131.3 | - | ok |
|
||||
| root | `.` | `production` | 1000 | 990 | 797 | 489964 | `governed` | scripts:429866 | 131.3 | - | ok |
|
||||
| complex-release-orchestrator | `examples/complex-release-orchestrator/generated-skill` | `production` | 1000 | 790 | 718 | 1657 | `not-required` | - | 164.6 | - | ok |
|
||||
| governed-incident-command | `examples/governed-incident-command/generated-skill` | `production` | 1000 | 760 | 658 | 1030 | `not-required` | - | 171.1 | - | ok |
|
||||
|
||||
|
||||
@@ -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": 990,
|
||||
"skill_body_tokens": 797,
|
||||
"deferred_resource_tokens": 489692,
|
||||
"deferred_resource_tokens": 489964,
|
||||
"large_deferred_resource_dirs": [
|
||||
{
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 429594,
|
||||
"estimated_tokens": 429866,
|
||||
"file_count": 135
|
||||
}
|
||||
],
|
||||
@@ -35,7 +35,7 @@
|
||||
],
|
||||
"missing": [],
|
||||
"path": "scripts",
|
||||
"estimated_tokens": 429594,
|
||||
"estimated_tokens": 429866,
|
||||
"file_count": 135,
|
||||
"rationale": "Script resources are deterministic deferred tools, not initial-load prompt context."
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"interactive_script_count": 0,
|
||||
"package_hash_scope": "source-contract-without-generated-reports",
|
||||
"package_hash_file_count": 226,
|
||||
"package_sha256": "95b883a7258f8b201a7f94b47a35fa3f665ac65160def6d41764f20e2cdb5e4d"
|
||||
"package_sha256": "a19c34849f99fe3f9166f7ba13c54d9ca709e1cec205ad3a1e82e8f1eb30d895"
|
||||
},
|
||||
"failures": [],
|
||||
"warnings": [],
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
- Interactive scripts: `0`
|
||||
- Package hash scope: `source-contract-without-generated-reports`
|
||||
- Package hash files: `226`
|
||||
- Package SHA256: `95b883a7258f8b201a7f94b47a35fa3f665ac65160def6d41764f20e2cdb5e4d`
|
||||
- Package SHA256: `a19c34849f99fe3f9166f7ba13c54d9ca709e1cec205ad3a1e82e8f1eb30d895`
|
||||
|
||||
## Failures
|
||||
|
||||
|
||||
@@ -158,6 +158,8 @@
|
||||
"attested_real_evidence": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": false
|
||||
},
|
||||
"anti_overclaim": {
|
||||
@@ -277,6 +279,8 @@
|
||||
"attested_real_evidence": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": false
|
||||
},
|
||||
"anti_overclaim": {
|
||||
@@ -386,6 +390,8 @@
|
||||
"attested_real_evidence": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": false
|
||||
},
|
||||
"anti_overclaim": {
|
||||
@@ -488,6 +494,8 @@
|
||||
"attested_real_evidence": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": false
|
||||
},
|
||||
"anti_overclaim": {
|
||||
|
||||
@@ -38,7 +38,7 @@ This ledger records the current evidence state. It requires both passing source
|
||||
- source status: `external_required`
|
||||
- observed state: `{"model_executed_count": 0, "timing_observed_count": 10, "token_observed_count": 0, "accepted": false}`
|
||||
- source checks: `1` pass / `3` total
|
||||
- submission state: `{"status": "missing", "path": "evidence/world_class/submissions/provider-holdout.json", "artifact_ref_count": 0, "attested_real_evidence": false, "privacy_contract_satisfied": false, "ledger_reviewer_approved": false, "ledger_counts_as_completion": false}`
|
||||
- submission state: `{"status": "missing", "path": "evidence/world_class/submissions/provider-holdout.json", "artifact_ref_count": 0, "attested_real_evidence": false, "privacy_contract_satisfied": false, "ledger_reviewer_approved": false, "ledger_reviewer": "", "ledger_reviewed_at": "", "ledger_counts_as_completion": false}`
|
||||
|
||||
### Provenance Requirements
|
||||
|
||||
@@ -81,7 +81,7 @@ This ledger records the current evidence state. It requires both passing source
|
||||
- source status: `human_required`
|
||||
- observed state: `{"pair_count": 5, "judgment_count": 0, "pending_count": 5, "invalid_decision_count": 0, "answer_revealed_count": 0, "accepted": false}`
|
||||
- source checks: `2` pass / `4` total
|
||||
- submission state: `{"status": "missing", "path": "evidence/world_class/submissions/human-adjudication.json", "artifact_ref_count": 0, "attested_real_evidence": false, "privacy_contract_satisfied": false, "ledger_reviewer_approved": false, "ledger_counts_as_completion": false}`
|
||||
- submission state: `{"status": "missing", "path": "evidence/world_class/submissions/human-adjudication.json", "artifact_ref_count": 0, "attested_real_evidence": false, "privacy_contract_satisfied": false, "ledger_reviewer_approved": false, "ledger_reviewer": "", "ledger_reviewed_at": "", "ledger_counts_as_completion": false}`
|
||||
|
||||
### Provenance Requirements
|
||||
|
||||
@@ -129,7 +129,7 @@ This ledger records the current evidence state. It requires both passing source
|
||||
- source status: `external_required`
|
||||
- observed state: `{"native_enforcement_count": 0, "metadata_fallback_count": 4, "installer_enforcement_pass_count": 4, "installer_permission_failure_count": 0, "installer_enforcement_ready": true, "residual_risk_count": 4, "failure_count": 0, "accepted": false}`
|
||||
- source checks: `2` pass / `3` total
|
||||
- submission state: `{"status": "missing", "path": "evidence/world_class/submissions/native-permission-enforcement.json", "artifact_ref_count": 0, "attested_real_evidence": false, "privacy_contract_satisfied": false, "ledger_reviewer_approved": false, "ledger_counts_as_completion": false}`
|
||||
- submission state: `{"status": "missing", "path": "evidence/world_class/submissions/native-permission-enforcement.json", "artifact_ref_count": 0, "attested_real_evidence": false, "privacy_contract_satisfied": false, "ledger_reviewer_approved": false, "ledger_reviewer": "", "ledger_reviewed_at": "", "ledger_counts_as_completion": false}`
|
||||
|
||||
### Provenance Requirements
|
||||
|
||||
@@ -174,7 +174,7 @@ This ledger records the current evidence state. It requires both passing source
|
||||
- source status: `external_required`
|
||||
- observed state: `{"external_source_events": 0, "adoption_sample_count": 0, "raw_content_allowed": false, "risk_band": "low", "accepted": false}`
|
||||
- source checks: `1` pass / `3` total
|
||||
- submission state: `{"status": "missing", "path": "evidence/world_class/submissions/native-client-telemetry.json", "artifact_ref_count": 0, "attested_real_evidence": false, "privacy_contract_satisfied": false, "ledger_reviewer_approved": false, "ledger_counts_as_completion": false}`
|
||||
- submission state: `{"status": "missing", "path": "evidence/world_class/submissions/native-client-telemetry.json", "artifact_ref_count": 0, "attested_real_evidence": false, "privacy_contract_satisfied": false, "ledger_reviewer_approved": false, "ledger_reviewer": "", "ledger_reviewed_at": "", "ledger_counts_as_completion": false}`
|
||||
|
||||
### Provenance Requirements
|
||||
|
||||
|
||||
@@ -128,6 +128,8 @@
|
||||
"attested_real_evidence": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": false
|
||||
},
|
||||
"anti_overclaim": {
|
||||
@@ -261,6 +263,8 @@
|
||||
"attested_real_evidence": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": false
|
||||
},
|
||||
"anti_overclaim": {
|
||||
@@ -383,6 +387,8 @@
|
||||
"attested_real_evidence": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": false
|
||||
},
|
||||
"anti_overclaim": {
|
||||
@@ -499,6 +505,8 @@
|
||||
"attested_real_evidence": false,
|
||||
"privacy_contract_satisfied": false,
|
||||
"ledger_reviewer_approved": false,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": false
|
||||
},
|
||||
"anti_overclaim": {
|
||||
|
||||
@@ -335,7 +335,7 @@ def build_handoff_steps(
|
||||
"label": "Edit submission packet",
|
||||
"status": "manual",
|
||||
"command": "",
|
||||
"completion_signal": "template_only is false only after real evidence exists; ledger_reviewer_approved remains false until reviewer approval.",
|
||||
"completion_signal": "template_only is false only after real evidence exists; ledger_reviewer_approved, ledger_reviewer, and ledger_reviewed_at stay unset until reviewer approval.",
|
||||
"counts_as_completion": False,
|
||||
"blocking_condition": "Raw prompts, outputs, transcripts, credentials, or private content must not be included.",
|
||||
},
|
||||
@@ -353,7 +353,7 @@ def build_handoff_steps(
|
||||
"label": "Review submission queue",
|
||||
"status": "pending",
|
||||
"command": commands["review_submission"],
|
||||
"completion_signal": "world_class_submission_review shows ready-for-ledger-review before ledger_reviewer_approved is set.",
|
||||
"completion_signal": "world_class_submission_review shows ready-for-ledger-review before reviewer identity, timestamp, and approval are set.",
|
||||
"counts_as_completion": False,
|
||||
"blocking_condition": "Reviewer queue output is advisory and cannot accept evidence.",
|
||||
},
|
||||
|
||||
@@ -126,11 +126,13 @@ def submission_state(skill_dir: Path, task: dict[str, Any], submissions_dir: Pat
|
||||
return {
|
||||
"status": load_status,
|
||||
"path": rel_path(path, skill_dir),
|
||||
"artifact_ref_count": 0,
|
||||
"attested_real_evidence": False,
|
||||
"privacy_contract_satisfied": False,
|
||||
"ledger_reviewer_approved": False,
|
||||
"ledger_counts_as_completion": False,
|
||||
"artifact_ref_count": 0,
|
||||
"attested_real_evidence": False,
|
||||
"privacy_contract_satisfied": False,
|
||||
"ledger_reviewer_approved": False,
|
||||
"ledger_reviewer": "",
|
||||
"ledger_reviewed_at": "",
|
||||
"ledger_counts_as_completion": False,
|
||||
}
|
||||
validation = validate_payload(payload, task, path=path, root=skill_dir, template_expected=False)
|
||||
refs = payload.get("artifact_refs", [])
|
||||
@@ -149,6 +151,8 @@ def submission_state(skill_dir: Path, task: dict[str, Any], submissions_dir: Pat
|
||||
"reviewer_or_operator_identity_present": attestation.get("reviewer_or_operator_identity_present") is True,
|
||||
"privacy_contract_satisfied": attestation.get("privacy_contract_satisfied") is True,
|
||||
"ledger_reviewer_approved": attestation.get("ledger_reviewer_approved") is True,
|
||||
"ledger_reviewer": str(attestation.get("ledger_reviewer", "")).strip(),
|
||||
"ledger_reviewed_at": str(attestation.get("ledger_reviewed_at", "")).strip(),
|
||||
"errors": validation.get("errors", []),
|
||||
"ledger_counts_as_completion": False,
|
||||
}
|
||||
|
||||
@@ -676,6 +676,19 @@ def validate_payload(
|
||||
if not template_expected:
|
||||
for key in REQUIRED_ATTESTATION_TRUE:
|
||||
add_error(errors, attestation.get(key) is True, f"attestation.{key} must be true for a real submission")
|
||||
ledger_reviewer = str(attestation.get("ledger_reviewer", "")).strip()
|
||||
submitted_by = str(payload.get("submitted_by", "")).strip()
|
||||
require_real_text(errors, ledger_reviewer, "attestation.ledger_reviewer")
|
||||
add_error(
|
||||
errors,
|
||||
bool(SUBMITTED_AT_RE.match(str(attestation.get("ledger_reviewed_at", "")).strip())),
|
||||
"attestation.ledger_reviewed_at must use YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ",
|
||||
)
|
||||
add_error(
|
||||
errors,
|
||||
bool(ledger_reviewer and submitted_by and ledger_reviewer.casefold() != submitted_by.casefold()),
|
||||
"attestation.ledger_reviewer must be different from submitted_by",
|
||||
)
|
||||
validate_real_artifact_payloads(payload, errors, root, template_expected)
|
||||
return {
|
||||
"path": rel_path(path, root),
|
||||
|
||||
@@ -25,7 +25,7 @@ def render_readme(report: dict[str, Any]) -> str:
|
||||
"2. Edit the matching JSON draft with only aggregate artifact references and provenance metadata.",
|
||||
"3. Set `template_only` to `false` only after real evidence exists.",
|
||||
"4. Set attestation booleans truthfully; do not include credentials, raw prompts, raw outputs, transcripts, notes, or private user content.",
|
||||
"5. Validate the packet before asking the ledger reviewer to set `attestation.ledger_reviewer_approved` truthfully.",
|
||||
"5. Validate the packet before asking the ledger reviewer to set `attestation.ledger_reviewer`, `attestation.ledger_reviewed_at`, and `attestation.ledger_reviewer_approved` truthfully.",
|
||||
"6. Optional artifact prefill only inserts SHA-256 digests for current local aggregate artifacts; it does not mark a draft as real evidence.",
|
||||
"",
|
||||
"## Commands",
|
||||
|
||||
@@ -87,6 +87,8 @@ def provider_submission(*, valid: bool, artifact_path: str = "reports/output_exe
|
||||
"artifact_refs_reviewed": valid,
|
||||
"privacy_contract_satisfied": valid,
|
||||
"ledger_reviewer_approved": valid,
|
||||
"ledger_reviewer": "Yao ledger reviewer" if valid else "",
|
||||
"ledger_reviewed_at": "2026-06-14" if valid else "",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -138,6 +140,8 @@ def external_submission(
|
||||
"artifact_refs_reviewed": True,
|
||||
"privacy_contract_satisfied": True,
|
||||
"ledger_reviewer_approved": True,
|
||||
"ledger_reviewer": "Yao ledger reviewer",
|
||||
"ledger_reviewed_at": "2026-06-14",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -372,6 +376,8 @@ def human_submission(skill_root: Path, *, reviewer: str = "Yao QA") -> dict:
|
||||
"artifact_refs_reviewed": True,
|
||||
"privacy_contract_satisfied": True,
|
||||
"ledger_reviewer_approved": True,
|
||||
"ledger_reviewer": "Yao ledger reviewer",
|
||||
"ledger_reviewed_at": "2026-06-14",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ def provider_submission(artifact_root: Path = ROOT, artifact_path: str = "report
|
||||
"artifact_refs_reviewed": True,
|
||||
"privacy_contract_satisfied": True,
|
||||
"ledger_reviewer_approved": True,
|
||||
"ledger_reviewer": "Yao ledger reviewer",
|
||||
"ledger_reviewed_at": "2026-06-13",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -386,6 +388,82 @@ def main() -> None:
|
||||
for error in unapproved_provider["submission_state"]["errors"]
|
||||
), unapproved_provider
|
||||
|
||||
missing_reviewer_submissions = TMP / "missing_reviewer_submissions"
|
||||
missing_reviewer_submissions.mkdir()
|
||||
missing_reviewer_submission = provider_submission(accepted_source_skill)
|
||||
missing_reviewer_submission["attestation"]["ledger_reviewer"] = ""
|
||||
(missing_reviewer_submissions / "provider-holdout.json").write_text(
|
||||
json.dumps(missing_reviewer_submission, ensure_ascii=False, indent=2) + "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
missing_reviewer_proc = subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
str(SCRIPT),
|
||||
str(accepted_source_skill),
|
||||
"--output-json",
|
||||
str(TMP / "missing_reviewer_provider_ledger.json"),
|
||||
"--output-md",
|
||||
str(TMP / "missing_reviewer_provider_ledger.md"),
|
||||
"--submissions-dir",
|
||||
str(missing_reviewer_submissions),
|
||||
"--generated-at",
|
||||
"2026-06-13",
|
||||
],
|
||||
cwd=ROOT,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
)
|
||||
missing_reviewer_payload = json.loads(missing_reviewer_proc.stdout)
|
||||
missing_reviewer_provider = {
|
||||
entry["key"]: entry for entry in missing_reviewer_payload["entries"]
|
||||
}["provider-holdout"]
|
||||
assert missing_reviewer_provider["status"] == "pending", missing_reviewer_provider
|
||||
assert missing_reviewer_provider["submission_state"]["status"] == "invalid-contract", missing_reviewer_provider
|
||||
assert any(
|
||||
"attestation.ledger_reviewer is required" in error
|
||||
for error in missing_reviewer_provider["submission_state"]["errors"]
|
||||
), missing_reviewer_provider
|
||||
|
||||
self_approved_submissions = TMP / "self_approved_submissions"
|
||||
self_approved_submissions.mkdir()
|
||||
self_approved_submission = provider_submission(accepted_source_skill)
|
||||
self_approved_submission["attestation"]["ledger_reviewer"] = self_approved_submission["submitted_by"]
|
||||
(self_approved_submissions / "provider-holdout.json").write_text(
|
||||
json.dumps(self_approved_submission, ensure_ascii=False, indent=2) + "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
self_approved_proc = subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
str(SCRIPT),
|
||||
str(accepted_source_skill),
|
||||
"--output-json",
|
||||
str(TMP / "self_approved_provider_ledger.json"),
|
||||
"--output-md",
|
||||
str(TMP / "self_approved_provider_ledger.md"),
|
||||
"--submissions-dir",
|
||||
str(self_approved_submissions),
|
||||
"--generated-at",
|
||||
"2026-06-13",
|
||||
],
|
||||
cwd=ROOT,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
)
|
||||
self_approved_payload = json.loads(self_approved_proc.stdout)
|
||||
self_approved_provider = {
|
||||
entry["key"]: entry for entry in self_approved_payload["entries"]
|
||||
}["provider-holdout"]
|
||||
assert self_approved_provider["status"] == "pending", self_approved_provider
|
||||
assert self_approved_provider["submission_state"]["status"] == "invalid-contract", self_approved_provider
|
||||
assert any(
|
||||
"attestation.ledger_reviewer must be different from submitted_by" in error
|
||||
for error in self_approved_provider["submission_state"]["errors"]
|
||||
), self_approved_provider
|
||||
|
||||
accepted_submissions = TMP / "accepted_submissions"
|
||||
accepted_submissions.mkdir()
|
||||
(accepted_submissions / "provider-holdout.json").write_text(
|
||||
|
||||
@@ -59,6 +59,8 @@ def provider_submission() -> dict:
|
||||
"artifact_refs_reviewed": True,
|
||||
"privacy_contract_satisfied": True,
|
||||
"ledger_reviewer_approved": True,
|
||||
"ledger_reviewer": "Yao ledger reviewer",
|
||||
"ledger_reviewed_at": "2026-06-14",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -163,6 +163,9 @@ def main() -> None:
|
||||
kit_draft = json.loads((kit_dir / "provider-holdout.json").read_text(encoding="utf-8"))
|
||||
assert kit_draft["template_only"] is True, kit_draft
|
||||
assert kit_draft["attestation"]["real_external_or_human_evidence"] is False, kit_draft
|
||||
assert kit_draft["attestation"]["ledger_reviewer_approved"] is False, kit_draft
|
||||
assert kit_draft["attestation"]["ledger_reviewer"] == "", kit_draft
|
||||
assert kit_draft["attestation"]["ledger_reviewed_at"] == "", kit_draft
|
||||
assert "sha256" not in kit_draft["artifact_refs"][0], kit_draft
|
||||
assert kit_draft["provenance"]["run_command"] == (
|
||||
"python3 scripts/yao.py output-exec --provider-runner openai --timeout-seconds 60"
|
||||
@@ -190,6 +193,7 @@ def main() -> None:
|
||||
assert "Evidence Matrix" in kit_readme, kit_readme
|
||||
assert "Operator Handoff" in kit_readme, kit_readme
|
||||
assert "Handoff rows are procedural" in kit_readme, kit_readme
|
||||
assert "ledger_reviewed_at" in kit_readme, kit_readme
|
||||
assert "`review-submission`" in kit_readme, kit_readme
|
||||
assert "Submission refs" in kit_readme, kit_readme
|
||||
assert "Supporting assets" in kit_readme, kit_readme
|
||||
@@ -249,6 +253,7 @@ def main() -> None:
|
||||
prefilled_draft = json.loads((prefilled_kit_dir / "provider-holdout.json").read_text(encoding="utf-8"))
|
||||
assert prefilled_draft["template_only"] is True, prefilled_draft
|
||||
assert prefilled_draft["attestation"]["real_external_or_human_evidence"] is False, prefilled_draft
|
||||
assert prefilled_draft["attestation"]["ledger_reviewer_approved"] is False, prefilled_draft
|
||||
assert len(prefilled_draft["artifact_refs"][0]["sha256"]) == 64, prefilled_draft
|
||||
assert prefilled_draft["artifact_refs"][0]["contains_raw_content"] is False, prefilled_draft
|
||||
prefilled_readme = (prefilled_kit_dir / "README.md").read_text(encoding="utf-8")
|
||||
|
||||
@@ -61,6 +61,8 @@ def provider_submission(*, valid: bool = True) -> dict:
|
||||
"artifact_refs_reviewed": valid,
|
||||
"privacy_contract_satisfied": valid,
|
||||
"ledger_reviewer_approved": valid,
|
||||
"ledger_reviewer": "Yao ledger reviewer" if valid else "",
|
||||
"ledger_reviewed_at": "2026-06-14" if valid else "",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user