Skip to content

feat(OMN-13025): A-3 evidence-language guard — pre-commit blocks UI/e2e claims in docs/evidence/** without Playwright artifact - #1813

Merged
jonahgabriel merged 2 commits into
devfrom
jonah/omn-13025-a-3-evidence-language-guard-pre-commit-on-docsevidence
Jun 28, 2026
Merged

jonahgabriel merged 2 commits into
devfrom
jonah/omn-13025-a-3-evidence-language-guard-pre-commit-on-docsevidence

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Jun 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

OMN-13025 (A-3): Adds reject-evidence-ui-claims pre-commit hook that enforces evidence-language honesty in docs/evidence/** markdown files.

OCC receipt PR: OmniNode-ai/onex_change_control#3247

Root Cause

PROCESS_FAILURE_RETRO.md §3.A (top-10 failure #1): the 2026-06-11 19:27Z evidence doc claimed "UI POST → full chain live" when only curl was run. This led to a false "done" declaration.

What This PR Adds

  • .pre-commit-hooks/reject-evidence-ui-claims.sh — blocking hook (no warn-only mode per CLAUDE.md Rule Phase 3: Local Template System Implementation #5 + Rule Phase 7: Refinement & Optimization - Complete (10 Streams) #10)
  • .pre-commit-config.yaml — wires the hook at pre-commit stage on types: [markdown]
  • contracts/OMN-13025.yaml — OCC contract with dod_evidence
  • tests/hooks/test_reject_evidence_ui_claims.py — 8 unit tests (TDD-first, all pass before implementation was written)
  • tests/hooks/fixtures/evidence_language/ — 6 fixture files covering all reject/accept/ignore cases

Hook Behavior

Blocked claim patterns (case-insensitive) in docs/evidence/**:

  • UI POST
  • click
  • full chain live
  • end-to-end / end to end

A claim is allowed only when the document also references a Playwright artifact (playwright or test-results/ appears anywhere in the doc).

DoD Evidence

dod-hook-exists-executable:
  test -x .pre-commit-hooks/reject-evidence-ui-claims.sh
  → PASS (script present and executable)

dod-hook-wired-in-precommit:
  grep -q 'reject-evidence-ui-claims' .pre-commit-config.yaml
  → PASS (hook registered in pre-commit config)

dod-unit-tests-pass:
  uv run pytest tests/hooks/test_reject_evidence_ui_claims.py -v
  → 8 passed in 0.37s

dod-commit-blocked-on-overstatement:
  Hook rejects docs/evidence/*.md with "UI POST" and no Playwright reference
  → EVIDENCE_UI_CLAIM_UNVERIFIED raised (correct behavior)

Evidence-Source: OCC#3247
Evidence-Ticket: OMN-13025
Implementation-Head: db97023cf66d47ae4e97a8a1c6d383980b946d56
OCC-Receipt-PR: OmniNode-ai/onex_change_control#3247

@coderabbitai

coderabbitai Bot commented Jun 28, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

@jonahgabriel, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 53 minutes and 49 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d3e97d65-172f-4eb6-a0be-71529f8671d8

📥 Commits

Reviewing files that changed from the base of the PR and between f18ee75 and db97023.

📒 Files selected for processing (10)
  • .pre-commit-config.yaml
  • .pre-commit-hooks/reject-evidence-ui-claims.sh
  • contracts/OMN-13025.yaml
  • tests/hooks/fixtures/evidence_language/accept_no_ui_claims.md
  • tests/hooks/fixtures/evidence_language/accept_non_evidence_ui_claims.md
  • tests/hooks/fixtures/evidence_language/accept_ui_post_with_playwright.md
  • tests/hooks/fixtures/evidence_language/reject_click_no_playwright.md
  • tests/hooks/fixtures/evidence_language/reject_end_to_end_no_playwright.md
  • tests/hooks/fixtures/evidence_language/reject_ui_post_no_playwright.md
  • tests/hooks/test_reject_evidence_ui_claims.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonah/omn-13025-a-3-evidence-language-guard-pre-commit-on-docsevidence

Comment @coderabbitai help to get the list of available commands.

@jonahgabriel
jonahgabriel force-pushed the jonah/omn-13025-a-3-evidence-language-guard-pre-commit-on-docsevidence branch from 4deec6b to 1ad7da7 Compare June 28, 2026 10:11
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Hostile Reviewer — DEGRADED (informational)

Blocking findings (critical/error): 0
Total findings: 0
Models succeeded: none

Note: All reviewer models failed or were unavailable. Degraded results are informational during the pilot phase (OMN-8524) and do not block merge. Error: cli_review exited non-zero (all models failed or binary error)


Gate semantics (pilot phase)

Verdict Meaning Blocks merge?
passed No critical/error findings No
blocked CRITICAL or ERROR findings found Yes
degraded All models unavailable (infra) No (pilot)

Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524)

@github-actions
github-actions Bot enabled auto-merge June 28, 2026 10:12
@github-actions
github-actions Bot added this pull request to the merge queue Jun 28, 2026
@jonahgabriel
jonahgabriel removed this pull request from the merge queue due to a manual request Jun 28, 2026
@github-actions
github-actions Bot enabled auto-merge June 28, 2026 12:27
@github-actions
github-actions Bot added this pull request to the merge queue Jun 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to no response for status checks Jun 28, 2026
@jonahgabriel
jonahgabriel added this pull request to the merge queue Jun 28, 2026
Merged via the queue into dev with commit bd62a55 Jun 28, 2026
108 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-13025-a-3-evidence-language-guard-pre-commit-on-docsevidence branch June 28, 2026 21:28
jonahgabriel added a commit that referenced this pull request Sep 15, 2026
Bumps [psycopg2-binary](https://github.com/psycopg/psycopg2) from 2.9.12
to 2.9.13.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/psycopg/psycopg2/blob/master/NEWS">psycopg2-binary's
changelog</a>.</em></p>
<blockquote>
<h2>Current release</h2>
<p>What's new in psycopg 2.9.13
^^^^^^^^^^^^^^^^^^^^^^^^^^^^</p>
<ul>
<li>Add support for Python 3.15
(:ticket:<code>[#1848](https://github.com/psycopg/psycopg2/issues/1848)</code>).</li>
<li>Fix parsing of malformed bytea input.</li>
<li>Fix parsing of malformed int64 input in arrays
(:ticket:<code>[#1847](https://github.com/psycopg/psycopg2/issues/1847)</code>).</li>
<li>Add a <code>pyproject.toml</code> file to declare a PEP 517 build
backend

(:ticket:<code>[#1788](https://github.com/psycopg/psycopg2/issues/1788)</code>).</li>
<li>Drop support for Python 3.9.</li>
</ul>
<p>What's new in psycopg 2.9.12
^^^^^^^^^^^^^^^^^^^^^^^^^^^^</p>
<ul>
<li>Fix infinite loop with malformed interval
(:ticket:<code>1835</code>).</li>
</ul>
<p>What's new in psycopg 2.9.11
^^^^^^^^^^^^^^^^^^^^^^^^^^^^</p>
<ul>
<li>Add support for Python 3.14.</li>
<li>Avoid a segfault passing more arguments than placeholders if Python
is built
with assertions enabled
(:ticket:<code>[#1791](https://github.com/psycopg/psycopg2/issues/1791)</code>).</li>
<li>Add riscv64 platform binary packages
(:ticket:<code>[#1813](https://github.com/psycopg/psycopg2/issues/1813)</code>).</li>
<li><code>~psycopg2.errorcodes</code> map and
<code>~psycopg2.errors</code> classes updated to
PostgreSQL 18.</li>
<li>Drop support for Python 3.8.</li>
</ul>
<p>What's new in psycopg 2.9.10
^^^^^^^^^^^^^^^^^^^^^^^^^^^^</p>
<ul>
<li>Add support for Python 3.13.</li>
<li>Receive notifications on commit
(:ticket:<code>[#1728](https://github.com/psycopg/psycopg2/issues/1728)</code>).</li>
<li><code>~psycopg2.errorcodes</code> map and
<code>~psycopg2.errors</code> classes updated to
PostgreSQL 17.</li>
<li>Drop support for Python 3.7.</li>
</ul>
<p>What's new in psycopg 2.9.9
^^^^^^^^^^^^^^^^^^^^^^^^^^^</p>
<ul>
<li>Add support for Python 3.12.</li>
<li>Drop support for Python 3.6.</li>
</ul>
<p>What's new in psycopg 2.9.8</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/psycopg/psycopg2/commit/f650e7afed0c94f596594e8328a0c7fa65a9d0e5"><code>f650e7a</code></a>
chore: bump to release 2.9.13</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/368c8a1ca6d80088703a693ce64b68ad7d346698"><code>368c8a1</code></a>
chore!: drop support for Python 3.9</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/9b39e65ab232f0a267a278cdaef1bd9975d88c65"><code>9b39e65</code></a>
chore: drop scaleway build support</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/2ca70416be6d4d3d8170ec439876c0b3569af718"><code>2ca7041</code></a>
fix: fix handling of PostgreSQL 18 exceptions</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/5385c027ef62ce14e57a7379e0375868507d6746"><code>5385c02</code></a>
Build CPython 3.15 wheels</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/1d32e1f6678ffa8ab8897ca81826bf4dde6354cd"><code>1d32e1f</code></a>
ci: only attempt triggering documentation refresh when pushing on main
repo</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/433e7b77a7b700fbb1cdc6e9dca6b5948d07fc23"><code>433e7b7</code></a>
chore: add pyproject.toml file to declare a PEP 517 build backend</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/8fb80bc3b2c358f4e3c54e33a37326d3f8b3ff6a"><code>8fb80bc</code></a>
fix: fix parsing of malformed int64 input in arrays</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/f98014a46a1e34f024ebd6134d1d87b77490c500"><code>f98014a</code></a>
fix: fix parsing of malformed bytea input</li>
<li><a
href="https://github.com/psycopg/psycopg2/commit/822b79cfe12ca0a04482acd382cae669a16aa789"><code>822b79c</code></a>
chore: bump dependencies in binary package</li>
<li>Additional commits viewable in <a
href="https://github.com/psycopg/psycopg2/compare/2.9.12...2.9.13">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=psycopg2-binary&package-manager=pip&previous-version=2.9.12&new-version=2.9.13)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Co-authored-by: jonahgabriel <jonah.gabriel@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant