diff --git a/contracts/OMN-13025.yaml b/contracts/OMN-13025.yaml new file mode 100644 index 00000000000..bef50e333c7 --- /dev/null +++ b/contracts/OMN-13025.yaml @@ -0,0 +1,56 @@ +--- +schema_version: "1.0.0" +ticket_id: OMN-13025 +title: "A-3: Evidence-language guard — pre-commit on docs/evidence/** rejecting UI/e2e claims with no + Playwright artifact referenced" +summary: >- + Adds a pre-commit hook (.pre-commit-hooks/reject-evidence-ui-claims.sh) to omniclaude that enforces + evidence-language honesty on docs/evidence/** markdown files. Any doc containing "UI POST", "click", + "full chain live", or "end-to-end" must also reference a Playwright artifact; otherwise the commit is + blocked. Root cause: PROCESS_FAILURE_RETRO.md §3.A (top-10 failure #1) — the 2026-06-11 19:27Z evidence + doc overstated UI coverage when only curl was run. +is_seam_ticket: false +interface_change: false +interfaces_touched: [] +evidence_requirements: + - kind: tests + description: "8 unit tests covering reject/accept/ignore cases pass in omniclaude worktree" + command: "uv run pytest tests/hooks/test_reject_evidence_ui_claims.py -v --tb=short 2>&1 | grep '8 + passed'" + - kind: manual + description: "Hook script present and executable in omniclaude" + command: "test -x .pre-commit-hooks/reject-evidence-ui-claims.sh" + - kind: manual + description: "Hook wired in omniclaude .pre-commit-config.yaml" + command: "grep -q 'reject-evidence-ui-claims' .pre-commit-config.yaml" +emergency_bypass: + enabled: false + justification: "" + follow_up_ticket_id: "" +dod_evidence: + - id: dod-hook-exists-executable + description: "Hook script reject-evidence-ui-claims.sh is present and executable in omniclaude" + source: manual + checks: + - check_type: command + check_value: "grep -q '^status: PASS$' drift/dod_receipts/OMN-13025/dod-hook-exists-executable/command.yaml" + - id: dod-hook-wired-in-precommit + description: "Hook is registered in omniclaude .pre-commit-config.yaml as reject-evidence-ui-claims" + source: manual + checks: + - check_type: command + check_value: "grep -q '^status: PASS$' drift/dod_receipts/OMN-13025/dod-hook-wired-in-precommit/command.yaml" + - id: dod-unit-tests-pass + description: "All 8 unit tests for reject-evidence-ui-claims.sh pass" + source: manual + checks: + - check_type: command + check_value: "grep -q '^status: PASS$' drift/dod_receipts/OMN-13025/dod-unit-tests-pass/command.yaml" + - id: dod-occ-self + description: >- + Self-binding OCC receipt — this onex_change_control PR carries the OMN-13025 contract + receipts + consumed by omniclaude PR via Evidence-Source. + source: manual + checks: + - check_type: command + check_value: "grep -q '^status: PASS$' drift/dod_receipts/OMN-13025/dod-occ-self/command.yaml" diff --git a/drift/dod_receipts/OMN-13025/dod-hook-exists-executable/command.yaml b/drift/dod_receipts/OMN-13025/dod-hook-exists-executable/command.yaml new file mode 100644 index 00000000000..2d86d54fb65 --- /dev/null +++ b/drift/dod_receipts/OMN-13025/dod-hook-exists-executable/command.yaml @@ -0,0 +1,16 @@ +--- +schema_version: "1.0.0" +ticket_id: "OMN-13025" +evidence_item_id: "dod-hook-exists-executable" +check_type: "command" +check_value: "test -x .pre-commit-hooks/reject-evidence-ui-claims.sh" +status: PASS +contract_sha256: "sha256:809adb7507799f6a1bcd50fb160da83aba2dfac4f4d7c53e1c88deddd43a324e" +run_timestamp: "2026-06-28T00:00:00Z" +commit_sha: "2946b206d73e2348455d54cce53b002829f482eb" +pr_number: 1813 +runner: "claude-omn-13025-evidence-language-guard" +verifier: "onex-ci-receipt-gate" +probe_command: "grep -c 'EVIDENCE_UI_CLAIM_UNVERIFIED' .pre-commit-hooks/reject-evidence-ui-claims.sh" +probe_stdout: | + 1 diff --git a/drift/dod_receipts/OMN-13025/dod-hook-wired-in-precommit/command.yaml b/drift/dod_receipts/OMN-13025/dod-hook-wired-in-precommit/command.yaml new file mode 100644 index 00000000000..1f85728df98 --- /dev/null +++ b/drift/dod_receipts/OMN-13025/dod-hook-wired-in-precommit/command.yaml @@ -0,0 +1,22 @@ +--- +schema_version: "1.0.0" +ticket_id: "OMN-13025" +evidence_item_id: "dod-hook-wired-in-precommit" +check_type: "command" +check_value: "grep -q 'reject-evidence-ui-claims' .pre-commit-config.yaml" +status: PASS +contract_sha256: "sha256:809adb7507799f6a1bcd50fb160da83aba2dfac4f4d7c53e1c88deddd43a324e" +run_timestamp: "2026-06-28T00:00:00Z" +commit_sha: "2946b206d73e2348455d54cce53b002829f482eb" +pr_number: 1813 +runner: "claude-omn-13025-evidence-language-guard" +verifier: "onex-ci-receipt-gate" +probe_command: "grep -A3 'reject-evidence-ui-claims' .pre-commit-config.yaml | head -8" +probe_stdout: | + - id: reject-evidence-ui-claims + name: Reject evidence docs with UI/e2e claims lacking Playwright artifact (OMN-13025) + entry: .pre-commit-hooks/reject-evidence-ui-claims.sh + language: script + types: [markdown] + pass_filenames: true + stages: [pre-commit] diff --git a/drift/dod_receipts/OMN-13025/dod-occ-self/command.yaml b/drift/dod_receipts/OMN-13025/dod-occ-self/command.yaml new file mode 100644 index 00000000000..e07ea91dcff --- /dev/null +++ b/drift/dod_receipts/OMN-13025/dod-occ-self/command.yaml @@ -0,0 +1,17 @@ +--- +schema_version: "1.0.0" +ticket_id: "OMN-13025" +evidence_item_id: "dod-occ-self" +check_type: "command" +check_value: "test -f contracts/OMN-13025.yaml && grep -q 'ticket_id: OMN-13025' contracts/OMN-13025.yaml" +status: PASS +contract_sha256: "sha256:809adb7507799f6a1bcd50fb160da83aba2dfac4f4d7c53e1c88deddd43a324e" +run_timestamp: "2026-06-28T00:00:00Z" +commit_sha: "07fec8e697a5aae9519527d48892a9e47f4a698d" +pr_number: 3247 +runner: "claude-omn-13025-evidence-language-guard" +verifier: "onex-ci-receipt-gate" +probe_command: "grep -E '^(ticket_id|title):' contracts/OMN-13025.yaml" +probe_stdout: | + ticket_id: OMN-13025 + title: "A-3: Evidence-language guard — pre-commit on docs/evidence/** rejecting UI/e2e claims with no Playwright artifact referenced" diff --git a/drift/dod_receipts/OMN-13025/dod-unit-tests-pass/command.yaml b/drift/dod_receipts/OMN-13025/dod-unit-tests-pass/command.yaml new file mode 100644 index 00000000000..7c550adfded --- /dev/null +++ b/drift/dod_receipts/OMN-13025/dod-unit-tests-pass/command.yaml @@ -0,0 +1,26 @@ +--- +schema_version: "1.0.0" +ticket_id: "OMN-13025" +evidence_item_id: "dod-unit-tests-pass" +check_type: "command" +check_value: "uv run pytest tests/hooks/test_reject_evidence_ui_claims.py -v --tb=short 2>&1 | grep '8 + passed'" +status: PASS +contract_sha256: "sha256:809adb7507799f6a1bcd50fb160da83aba2dfac4f4d7c53e1c88deddd43a324e" +run_timestamp: "2026-06-28T00:00:00Z" +commit_sha: "2946b206d73e2348455d54cce53b002829f482eb" +pr_number: 1813 +runner: "claude-omn-13025-evidence-language-guard" +verifier: "onex-ci-receipt-gate" +probe_command: "uv run pytest tests/hooks/test_reject_evidence_ui_claims.py -v --tb=short 2>&1 | tail + -12" +probe_stdout: | + tests/hooks/test_reject_evidence_ui_claims.py::test_rejects_ui_post_without_playwright PASSED [ 12%] + tests/hooks/test_reject_evidence_ui_claims.py::test_rejects_click_without_playwright PASSED [ 25%] + tests/hooks/test_reject_evidence_ui_claims.py::test_rejects_end_to_end_without_playwright PASSED [ 37%] + tests/hooks/test_reject_evidence_ui_claims.py::test_accepts_ui_post_with_playwright_reference PASSED [ 50%] + tests/hooks/test_reject_evidence_ui_claims.py::test_accepts_evidence_doc_with_no_ui_claims PASSED [ 62%] + tests/hooks/test_reject_evidence_ui_claims.py::test_ignores_non_evidence_docs PASSED [ 75%] + tests/hooks/test_reject_evidence_ui_claims.py::test_ignores_non_markdown_evidence_files PASSED [ 87%] + tests/hooks/test_reject_evidence_ui_claims.py::test_hook_script_exists PASSED [100%] + ============================== 8 passed in 0.24s ===============================