Repository navigation
evidence(OMN-17422): bind AC1-AC5 to checks that can fail - #11019
Merged
Merged
Conversation
The OMN-17422 contract carried twelve evidence items and no binds_ac, so the board read every criterion as unmet although the ruling, the ratchet and the blast-radius coverage are all merged. A green count cannot say which criterion a check covered. AC1 binds the ruling recorded before code (option a, 2026-09-01) to a check that the implementing functions still exist on omnibase_infra dev. AC4 binds the parity test that enumerates tenant relations from the contracts rather than a hand list. AC5 binds both halves of a fail-closed ratchet: the incident replay that rejects the real pre-fix bytes, and a check that the ratchet actually runs in dev CI. AC2 is left unbound on purpose: its real-Postgres tests skip without credentials and pytest exits 0 on a skip, so a plain test_passes binding could read green without touching Postgres. AC3 needs a live delegation that has not been authorized. No merged item is edited.
jonahgabriel
enabled auto-merge (squash)
September 24, 2026 04:49
…e check Contract Compliance ran the new grant check and got exit 141. grep -q exits at its first match, the upstream base64 is still writing, and under pipefail the pipeline reports that SIGPIPE as a failure. Whether it fires depends on timing, which is why it passed locally three times and failed in CI. grep -F with its output discarded reads to end of input, so the race is gone by construction. The same shape is fixed in every piped check this change added, not only the one that failed. Receipts are regenerated against the new entry hashes; the checks were re-run under bash -o pipefail with their negative controls.
…nce' into lakshman/OMN-17422-bind-ac-evidence
…ract The SIGPIPE fix changed the contract bytes, so the structural self-bind minted at the first head carried a stale whole-file hash. The validator reads that as CONTRACT_HASH_MISMATCH, which the mint job does not repair on its own. Re-minted with the same script; its probe ran for real and the hash now matches the current contract.
The hosted Acceptance-Criterion Binding Gate refused the AC1 item on this PR (run 35957942675): AC1 is about the projection writer, and the item only grepped the source. AC1 now runs the writer's own behaviour tests from omnibase_infra#3088 (26 passed at 26ed3980; with the unbound branch reverted to the pre-fix `return None`, 18 of 26 fail). The ruling citation is unchanged. AC2 runs the five real FORCE-RLS dispatch tests and passes only on `5 passed` (5 passed against a disposable Postgres 16.15; credentials unset gives 5 skipped and exit 1). AC1 and AC2 are local_done_gate (OMN-15392): the hosted gate has neither omnibase_infra nor Postgres. AC3: one chain-canary delegation on the .201 dev lane (omnibase_infra run 35966603205, PROBE-GREEN 5/5) landed one row for correlation id fcdb0f37-2819-40cc-b496-6c176418bc6d, read back in a READ ONLY transaction; the DLQ high watermark stayed at 1028. The check re-reads the run's conclusion and the recorded readback.
The contract bytes changed in the previous commit, so the structural self-bind recorded a stale contract_sha256. Re-minted with scripts/ci/mint_occ_self_bind.py --write; the eligibility verdict reads eligible.
This was referenced Sep 24, 2026
Contributor
|
Close-out. Merged 2026-09-24T08:02:21Z as Since merge:
Thank you! |
2 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Binds all five acceptance criteria of OMN-17422 to checks that can fail.
contracts/OMN-17422.yamlhad 12 evidence items and nobinds_ac, so the Beta board showed every criterion unmet although the work is merged.What changed
Append-only against
dev, incontracts/OMN-17422.yaml, with one new receipt per item underdrift/dod_receipts/OMN-17422/:ac1-option-a-writer-binds-recorded-tenant(test_passes,local_done_gate).2e544ded, including what isolation it still buys.-k 'unbound or recorded_write_scope'). They cover four behaviours:ac2-real-force-rls-dispatch-not-refused(command,local_done_gate).TestRealPostgresRlsRefusesTheUnboundWriteAndAcceptsTheBoundOnetests from omnimarket#2807 against a real Postgres.5 passed, so a run with no database (skips) is red.ac3-live-delegation-lands-row-dlq-clean(command).ac4-guc-parity-covers-every-tenant-relation(test_passes) runs the contract-derived parity suite (omnibase_infra#4004).ac5-guc-parity-ratchet-incident-replayreplays the real 0027 bytes (rejected) and the 0043 remedy (accepted).ac5-guc-parity-ratchet-wired-in-ciasserts the ratchet runs in omnibase_infradevCI.local_done_gate(OMN-15392) is declared where the hosted gate cannot run the check: it checks out neither omnibase_infra nor a Postgres.Deliberately not done: no merged item or receipt is edited, and no product code, migration, role or deploy is changed.
Follow-up in this PR: the AC1 refusal
The first version bound AC1 to a grep of
handler_wiring.py. The hosted Acceptance-Criterion Binding Gate (OMN-18236) refused it in run 35957942675 withac_binding_static_evidence_on_live_criterion: a grep proves the code was written, not that the writer does anything.That refusal is correct. AC1 now runs the behaviour tests instead. The local pre-commit run had passed only because it had no ticket text. The gate now returns 0 refusals when run locally with the ticket's AC text.
How it was verified
26 passedat omnibase_infra origin/dev26ed39800f1a2028ba0026ba386453246767b716(2026-09-24T06:43:36Z). Both files are unchanged at origin/dev370adc5e. RED control: with_statement_tenant_scope's unbound branch reverted to the pre-fixreturn None, 18 of 26 fail. The file was restored byte-identical.5 passed in 4.10sat omnimarket origin/dev923b76baef5c013cefb79989f3f7d6626a2ad18c, against a disposable local Postgres 16.15 (06:40:28Z). The exact parsed check exits 0 against it (06:57:28Z) and exits 1 with credentials unset (5 skipped). The same five tests PASSED in omnimarket CI run 35868014833, split 10/20.READ ONLYtransaction.success, PROBE-GREEN 5/5 links.820272f9-4aaf-5add-a2df-0af942852ab2, correlation idfcdb0f37-2819-40cc-b496-6c176418bc6d, captured 06:52:49Z inside the job window (06:52:12–06:53:03Z). The id is present inrecent_responses, and one row carries it. An absent id readsfalse.onex.dlq.omnimarket.projection-delegation-inference-response-malformed.v1: high watermark1028before (06:50:55Z) and1028after (06:53:43Z). Zero new entries.19 passedand4 passedat26ed3980; the wiring check exits 0, and an unwired name exits 1.check_value, per-entry hash and probe command was compared with the parsed contract after yamlfmt: 0 mismatches.scripts/ci/mint_occ_self_bind.py --write. The eligibility verdict readseligible.grep -qthat failed Contract Compliance with exit 141 on the OMN-17374 companion was also fixed here; every piped check reads to end of input.onexbot-occ-writer[bot]'s own self-bind mint (OMN-18921), the same shape onex_change_control#10904 carried and merged with. It cannot be signed without rewriting the branch, which is not done.Local gates
--no-verify, noSKIP=, no--no-gpg-sign, nocore.hooksPathoverride. Every pre-commit and pre-push hook ran.Not in this change
latest_*. The readback is recorded in the receipt, and the re-checkable half is the run's conclusion.INTEGRATION_POSTGRES_*wherever the Done gate runs; without it the check is red, never falsely green.