Skip to content

feat(OMN-10580): add CI grep gate for leaked literals with allowlist governance - #547

Merged
jonahgabriel merged 10 commits into
mainfrom
jonah/omn-10580-task-8-add-ci-grep-gate-pre-commit-gha-with-allowlist
May 7, 2026
Merged

jonahgabriel merged 10 commits into
mainfrom
jonah/omn-10580-task-8-add-ci-grep-gate-pre-commit-gha-with-allowlist

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented May 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Implements OMN-10580: harden the advisory check_leaked_literals.sh into a blocking gate wired as both a pre-commit hook and a required GHA status check.

  • Gate script (scripts/validation/check_leaked_literals.sh): default mode changed from advisory to blocking; added onex-allow-model-id annotation type; removed block_always per-path policy so annotations are honoured uniformly across src/, tests/, and scripts/; added file-level exemption for test fixtures.

  • Pre-commit hook (.pre-commit-config.yaml): new leaked-literals-gate entry, language: system, blocking diff scope on commit; CI runs blocking all.

  • GHA workflow (.github/workflows/reject-leaked-literals.yml): renamed job to Leaked Literals Gate for required-status-check wiring; mode changed to blocking all.

  • Source annotations: all src/ env-var fallbacks annotated with onex-allow-* inline comments.

  • Test file exemptions: 25 test files annotated with # onex-allow-file markers.

  • Governance artifacts: .leaked-literals-allowlist.yaml and docs/leaked-literals-governance.md.

  • Test suite update: test_src_path_annotation_exempts replaces old test_src_path_annotation_does_not_exempt.

DoD evidence

  • bash scripts/validation/check_leaked_literals.sh blocking all -> findings=0
  • Pre-commit run: Leaked literals gate (OMN-10580).........Passed
  • uv run pytest tests/ -m unit -> 2193 passed, 0 failed

Evidence-Source: OCC#774
Evidence-Ticket: OMN-10580

Ticket: OMN-10580

Summary by CodeRabbit

  • New Features

    • Introduced a blocking "Leaked Literals Gate" enforced in CI and pre-commit.
  • Documentation

    • Added governance docs and a work-tracking contract describing the gate, exemptions, and evidence requirements.
  • Chores

    • Added machine-readable allowlist/exemptions and annotated many defaults to use environment-variable overrides for lab fallbacks.
  • Tests

    • Added and updated tests and test metadata to cover gate behavior, exemptions, routing and authorization scenarios.

…governance

- Harden check_leaked_literals.sh from advisory to blocking mode
- Add onex-allow-model-id annotation type for private HuggingFace model IDs
- Remove block_always path policy; annotations now honoured in all paths including src/
- Add file-level exemption (#onex-allow-file) for test fixtures with many deliberate occurrences
- Add leaked-literals-gate as pre-commit hook (blocking diff scope)
- Rewrite reject-leaked-literals.yml GHA workflow as required status check "Leaked Literals Gate"
- Annotate all src/ defaults with onex-allow-* inline annotations (OMN-10580)
- Add onex-allow-file markers to all test fixtures containing deliberate lab literals
- Add .leaked-literals-allowlist.yaml audit trail registry
- Add docs/leaked-literals-governance.md with escape-hatch reference
- Update test_leak_gate.py: src/ annotations now permitted (env-var fallback pattern)
@coderabbitai

coderabbitai Bot commented May 7, 2026 •

Copy link
Copy Markdown

Review Change Stack
No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 02e18228-6a31-4fe2-bd19-3a979a37ddc7

📥 Commits

Reviewing files that changed from the base of the PR and between d521523 and 8fe9bf9.

📒 Files selected for processing (1)
  • .github/workflows/pr-arch-review.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/pr-arch-review.yml

📝 Walkthrough

Walkthrough

This PR implements an end-to-end leaked-literals governance: policy and contract, a blocking validation script with line- and file-level exemptions, a machine-readable allowlist, pre-commit and CI blocking gates, inline allowlist annotations across code and configs, environment-fallback refactors, and expanded tests.

Changes

Leaked Literals Gate Enforcement

Layer / File(s) Summary
Policy & Governance Documentation
docs/leaked-literals-governance.md, docs/work-tracking/contracts/OMN-10580.yaml
Governance defines blocked literal types, per-line and file-level escape mechanisms, self-exempt entries, and DoD evidence requirements.
Validation Script Expansion
scripts/validation/check_leaked_literals.sh
Script default changed to blocking; allowlist regex extended (including onex-allow-model-id); per-line same-line annotation exemptions and file-level onex-allow-file exemptions added; advisory mode remains report-only.
Allowlist Registry & CI Wiring
.leaked-literals-allowlist.yaml, .pre-commit-config.yaml, .github/workflows/reject-leaked-literals.yml
Machine-readable allowlist added; pre-commit hook for blocking diff checks introduced; GitHub Actions workflow updated to run the gate in blocking mode.
GitHub Workflows Documentation
.github/workflows/auto-merge.yml, .github/workflows/pr-arch-review.yml, .github/workflows/pr-review-bot.yml, .github/workflows/linear-close-on-merge.yml
Small inline comments clarify CI actor gating logic, bot-fallback identity, and branch-name examples; no executable logic changed.
Environment Variable: OMNI_HOME Paths
multiple src/omnimarket/nodes/* entrypoints and handlers
Refactors hardcoded developer local paths to os.environ.get() fallbacks with annotated reasons; runtime behavior unchanged.
Infrastructure Endpoint Refactors
scripts/, docker-compose.projection.yml, src/omnimarket/nodes/*
Postgres, Kafka/Redpanda, dashboard/runtime APIs, SSH targets, and LLM base URLs now use env-var fallbacks and include inline allowlist annotations documenting overrides.
Model Registry & Inference Config
src/omnimarket/inference/bridge_config_loader.py, src/omnimarket/nodes/*/models_registry.yaml, src/omnimarket/nodes/*/models/*
Added onex-allow-model-id / onex-allow-internal-ip annotations to model defaults and Pydantic field descriptions to document lab defaults and env overrides.
LLM Endpoints & Model References
src/omnimarket/nodes/*
Annotated hardcoded LLM model identifiers and endpoints with allowlist comments and switched certain base URLs to env-driven fallbacks.
Experiment & Script Annotations
src/omnimarket/experiments/*, scripts/*
Added allowlist comments to experiment CLI defaults, cost publisher, skill-dir utility, and proof/test harness fixtures; no behavioral changes.
Test Fixture Annotations (Golden Chain & Integration)
tests/*
Added onex-allow-file directives to many tests to declare lab endpoint usage as fixtures rather than runtime defaults.
Test Fixture Annotations (Node Handlers & Model Router)
tests/nodes/*, tests/test_model_router_*.py
Marked handler and router test modules with onex-allow-file and added/extended tests for wiring, authorization, TTL, backoff, fallback, degradation, and event publishing.
Test Coverage: Emergency Bypass Parser
tests/test_emergency_bypass_parser.py
New comprehensive tests for bypass parsing, authorization, atomic consumption, Kafka audit events, DB audit writes, rollback handling, and topic namespace enforcement.
Test Coverage: Review Workflow Wiring
tests/nodes/node_pr_review_bot/test_workflow_runner_wiring.py
New regression tests ensure inference bridge config loads env vars, missing env vars are skipped, reviewer model keys resolve, and concrete handler wiring plus REPORT-phase accumulation occur.
Test Coverage: Leaked Literals Gate
tests/unit/scripts/test_leak_gate.py
Unit tests added/updated to assert blocking-mode behavior: annotated src/ hits exempt; unannotated hits are rejected.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

🐰 "I hopped through docs and linted lines with care,
I flagged the secrets hidden here and there,
A dotted rule, a blocking gate so bright,
Now CI watches closely through the night."

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 21.74% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main change: adding a CI grep gate for leaked literals with allowlist governance, referencing the work ticket OMN-10580.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonah/omn-10580-task-8-add-ci-grep-gate-pre-commit-gha-with-allowlist

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

@github-actions
github-actions Bot enabled auto-merge May 7, 2026 16:28
@github-actions

github-actions Bot commented May 7, 2026 •

Copy link
Copy Markdown

⚠️ 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)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (1)
src/omnimarket/nodes/node_doc_freshness_sweep/handlers/handler_doc_freshness_sweep.py (1)

155-160: ⚡ Quick win

Prefer a user-agnostic default over a personal absolute path.

Using "/Users/jonah/Code/omni_home" as the built-in fallback is brittle and environment-specific. A home-relative fallback keeps local convenience without hardcoding one developer path.

♻️ Proposed change
         omni_home = (
             request.omni_home
             or os.environ.get(
                 "OMNI_HOME",
-                "/Users/jonah/Code/omni_home",  # onex-allow-local-path OMN-10580 reason="OMNI_HOME env-var fallback; OMNI_HOME must be set in any non-dev environment"
+                str(Path.home() / "Code" / "omni_home"),  # onex-allow-local-path OMN-10580 reason="OMNI_HOME env-var fallback; OMNI_HOME must be set in any non-dev environment"
             )
         )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/omnimarket/nodes/node_doc_freshness_sweep/handlers/handler_doc_freshness_sweep.py`
around lines 155 - 160, The fallback for omni_home currently hardcodes a
personal absolute path; update the fallback in the omni_home assignment (in
handler_doc_freshness_sweep.py where omni_home is computed) to a user-agnostic,
home-relative default such as os.path.expanduser("~/.omni_home") (or similar)
instead of "/Users/jonah/Code/omni_home", so that request.omni_home or OMNI_HOME
env var is still honored but local fallback works across users and environments.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/pr-arch-review.yml:
- Line 26: The workflow sets bot_login to a hardcoded username (bot_login) that
doesn't match the actor of the token at secrets.GITHUB_TOKEN; update the
bot_login value to the actual GitHub Actions actor string used by that token
(github-actions[bot]) so comment upsert matching uses the same actor as the
token, i.e., change the bot_login key referenced near the secrets.GITHUB_TOKEN
usage to "github-actions[bot]".

In @.github/workflows/pr-review-bot.yml:
- Line 89: The workflow hardcodes bot_login to "jonahgabriel" which mismatches
the fallback token actor; change the assignment so bot_login is set from the
workflow actor (the identity that will use the ${GITHUB_TOKEN}) by replacing the
literal with the runtime actor variable (use github.actor) so the fallback token
and bot_login match and prevent upsert/duplication issues.

In `@scripts/projection_api_server.py`:
- Around line 70-73: _dsn() currently hardcodes the host/port so POSTGRES_HOST /
POSTGRES_PORT cannot override it; update the _dsn function to read POSTGRES_HOST
and POSTGRES_PORT (e.g., via os.environ.get with the current lab IP/port as
defaults), read POSTGRES_PASSWORD as before, and build the DSN string from those
variables (and the existing database name and user) so environment overrides
work as intended; reference the _dsn function and the
POSTGRES_HOST/POSTGRES_PORT/POSTGRES_PASSWORD env names when making the change.

In `@scripts/validation/check_leaked_literals.sh`:
- Around line 87-90: The current ALLOWLIST_REGEX variable accepts any
onex-allow-* annotation regardless of the actual leaked literal class, weakening
typed exemptions; update ALLOWLIST_REGEX so it enforces that the allowlist token
suffix (internal-ip|local-path|test-fixture|raw-env|model-id) must match the
leak-class being checked (i.e., build a regex that captures the specific leak
class and only accepts the exact onex-allow-<same-class> token on the same
line), adjust the pattern used in check_leaked_literals.sh (symbol:
ALLOWLIST_REGEX) accordingly, and ensure the same change is applied to the other
occurrence referenced in the script (the block at the later lines mentioned).
- Around line 152-158: Summary: The FILE_LEVEL_EXEMPT_REGEX currently matches
the token anywhere in a file; anchor it so only real directive comment lines
(not occurrences inside strings or examples) skip the file. Fix: update
FILE_LEVEL_EXEMPT_REGEX used by the grep -qE check to require the directive
appear on its own comment line by anchoring the pattern to the start of line and
allowing optional leading whitespace and a single '#' comment marker (e.g.
change to a pattern like start-of-line, optional spaces, '#', optional space,
'onex-allow-file', then the OMN- number and reason), leaving the rest of the
grep -qE -- "${f}" logic intact so files are skipped only when a true directive
line exists.

In
`@src/omnimarket/nodes/node_baseline_capture/handlers/probes/probe_system_health.py`:
- Around line 27-29: The hardcoded Redpanda admin URL
("http://192.168.86.201:9644/v1/cluster/health") in probe_system_health.py
contradicts the inline note about REDPANDA_ADMIN_HOST and can target the lab
host incorrectly; update the construction of the Redpanda probe entry (the tuple
containing "redpanda") to read os.environ.get("REDPANDA_ADMIN_HOST") (or
similar) and build the full health URL from that value with the original URL as
the default fallback, e.g. get host = os.environ.get("REDPANDA_ADMIN_HOST",
"http://192.168.86.201:9644") then use f"{host}/v1/cluster/health" when creating
the tuple so the env override works while preserving the default.

In `@src/omnimarket/nodes/node_handoff_effect/handlers/handler_handoff_effect.py`:
- Line 23: _SSH_HOST is hardcoded despite the comment promising an
ONEX_INFRA_SSH_TARGET env-var override; change its definition to read from the
environment (e.g., _SSH_HOST = os.environ.get("ONEX_INFRA_SSH_TARGET",
"jonah@192.168.86.201")) so the handler honors the override, matching the
pattern used in handler_platform_readiness.py (os is already imported).

In `@src/omnimarket/nodes/node_ticket_work/handlers/handler_ticket_work.py`:
- Line 68: The code documents that _CANONICAL_WORKTREES is overridable via the
OMNI_WORKTREES env var but run_review() always uses the hardcoded
_CANONICAL_WORKTREES; update run_review() to read
os.environ.get("OMNI_WORKTREES") (or equivalent config loader) and use that
value if set, falling back to _CANONICAL_WORKTREES, or alternatively update the
annotation text to remove the override claim—modify the logic in the run_review
function (and any callers that reference _CANONICAL_WORKTREES directly) so the
environment override is actually applied.

---

Nitpick comments:
In
`@src/omnimarket/nodes/node_doc_freshness_sweep/handlers/handler_doc_freshness_sweep.py`:
- Around line 155-160: The fallback for omni_home currently hardcodes a personal
absolute path; update the fallback in the omni_home assignment (in
handler_doc_freshness_sweep.py where omni_home is computed) to a user-agnostic,
home-relative default such as os.path.expanduser("~/.omni_home") (or similar)
instead of "/Users/jonah/Code/omni_home", so that request.omni_home or OMNI_HOME
env var is still honored but local fallback works across users and environments.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e056658b-76a9-4770-82f5-d9e8895ae038

📥 Commits

Reviewing files that changed from the base of the PR and between e961ec7 and d0b2c8a.

📒 Files selected for processing (69)
  • .github/workflows/auto-merge.yml
  • .github/workflows/linear-close-on-merge.yml
  • .github/workflows/pr-arch-review.yml
  • .github/workflows/pr-review-bot.yml
  • .github/workflows/reject-leaked-literals.yml
  • .leaked-literals-allowlist.yaml
  • .pre-commit-config.yaml
  • docker-compose.projection.yml
  • docs/leaked-literals-governance.md
  • docs/work-tracking/contracts/OMN-10580.yaml
  • scripts/ci/check_entry_point_format.py
  • scripts/cost_event_publisher.py
  • scripts/install_codex_skills.py
  • scripts/projection_api_server.py
  • scripts/run_delegation_cost_projection_process.sh
  • scripts/run_merge_sweep_phase2_proof.sh
  • scripts/validation/check_leaked_literals.sh
  • src/omnimarket/experiments/adk_eval/type_debt_scout_poc/__main__.py
  • src/omnimarket/experiments/adk_eval/type_debt_scout_poc/handler_type_debt_scout.py
  • src/omnimarket/inference/bridge_config_loader.py
  • src/omnimarket/nodes/node_ab_compare_orchestrator/models_registry.yaml
  • src/omnimarket/nodes/node_ab_inference_effect/models/model_inference_request.py
  • src/omnimarket/nodes/node_aislop_sweep/__main__.py
  • src/omnimarket/nodes/node_baseline_capture/handlers/probes/probe_kafka_topics.py
  • src/omnimarket/nodes/node_baseline_capture/handlers/probes/probe_system_health.py
  • src/omnimarket/nodes/node_build_loop_orchestrator/assemble_live.py
  • src/omnimarket/nodes/node_ci_fix_effect/contract.yaml
  • src/omnimarket/nodes/node_compliance_sweep/__main__.py
  • src/omnimarket/nodes/node_database_sweep/handlers/handler_database_sweep.py
  • src/omnimarket/nodes/node_dispatch_queue_drainer/handlers/handler_dispatch_queue_drainer.py
  • src/omnimarket/nodes/node_doc_freshness_sweep/handlers/handler_doc_freshness_sweep.py
  • src/omnimarket/nodes/node_duplication_sweep/handlers/handler_duplication_sweep.py
  • src/omnimarket/nodes/node_handoff_effect/handlers/handler_handoff_effect.py
  • src/omnimarket/nodes/node_nightly_loop_controller/models/model_nightly_loop.py
  • src/omnimarket/nodes/node_platform_diagnostics/handlers/dimension_checks.py
  • src/omnimarket/nodes/node_platform_readiness/handlers/dimension_checks.py
  • src/omnimarket/nodes/node_platform_readiness/handlers/handler_platform_readiness.py
  • src/omnimarket/nodes/node_pr_review_bot/contract.yaml
  • src/omnimarket/nodes/node_projection_llm_cost/consumer.py
  • src/omnimarket/nodes/node_runtime_sweep/__main__.py
  • src/omnimarket/nodes/node_session_orchestrator/handlers/handler_session_orchestrator.py
  • src/omnimarket/nodes/node_thread_reply_effect/handlers/handler_thread_reply.py
  • src/omnimarket/nodes/node_ticket_work/handlers/handler_ticket_work.py
  • tests/conftest.py
  • tests/integration/test_cost_event_publisher_kafka.py
  • tests/nodes/node_ab_inference_effect/test_handler.py
  • tests/nodes/node_ci_fix_effect/test_handler_ci_fix.py
  • tests/nodes/node_merge_sweep_triage_orchestrator/test_phase2_command_models.py
  • tests/nodes/node_pr_review_bot/test_workflow_runner_wiring.py
  • tests/nodes/node_thread_reply_effect/test_handler_thread_reply.py
  • tests/test_emergency_bypass_parser.py
  • tests/test_golden_chain_local_supervisor.py
  • tests/test_golden_chain_nightly_loop_controller.py
  • tests/test_golden_chain_pr_lifecycle_upgrade.py
  • tests/test_golden_chain_review_thread_reconciler.py
  • tests/test_model_router_authorization_and_ttl.py
  • tests/test_model_router_exponential_backoff.py
  • tests/test_model_router_fallback_on_degradation.py
  • tests/test_model_router_health_check_degrades.py
  • tests/test_model_router_publishes_degradation_event.py
  • tests/test_model_router_routes_to_local_first.py
  • tests/test_runtime_sha_verify_handler.py
  • tests/test_session_bootstrap_rev7.py
  • tests/test_webhook_reconciler.py
  • tests/unit/config/test_settings.py
  • tests/unit/experiments/adk_eval/harness/test_aggregator.py
  • tests/unit/nodes/node_overnight/test_main_publish_events.py
  • tests/unit/scripts/test_leak_gate.py
  • tests/unit/scripts/test_run_delegation_cost_projection_process.py

Comment thread .github/workflows/pr-arch-review.yml Outdated
Comment thread .github/workflows/pr-review-bot.yml
Comment thread scripts/projection_api_server.py
Comment thread scripts/validation/check_leaked_literals.sh
Comment thread scripts/validation/check_leaked_literals.sh
Comment thread src/omnimarket/nodes/node_handoff_effect/handlers/handler_handoff_effect.py Outdated
Comment thread src/omnimarket/nodes/node_ticket_work/handlers/handler_ticket_work.py Outdated
…notations

- _dsn() in projection_api_server.py now reads POSTGRES_HOST/PORT
- _SSH_HOST in handler_handoff_effect.py now reads ONEX_INFRA_SSH_TARGET
- _CANONICAL_WORKTREES in handler_ticket_work.py now reads OMNI_WORKTREES
- Redpanda probe URL now reads REDPANDA_ADMIN_HOST

Addresses CodeRabbit feedback on PR #547.
- pr-arch-review.yml: note that jonahgabriel fallback needs to be replaced
  with github-actions[bot] in a follow-up cleanup PR (deferred per CR ack)
- check_leaked_literals.sh: note that type-specific annotation cross-checking
  is deferred to a follow-up gate hardening pass (deferred per CR ack)
…tity

CR correctly flagged that the GITHUB_TOKEN actor is github-actions[bot],
not the repo owner's personal login. Applying the fix directly per CR
suggestion rather than deferring to a follow-up PR.
@jonahgabriel

Copy link
Copy Markdown
Contributor Author

@coderabbitai The type-specific annotation cross-checking follow-up is now tracked at #548. Can you please resolve the open thread on scripts/validation/check_leaked_literals.sh (PRRT_kwDOR6jjtc6AYacy) — you acknowledged the pragmatic tradeoff in your last reply and a concrete tracking issue now exists.

@coderabbitai

coderabbitai Bot commented May 7, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
gh api graphql -f query='
mutation {
  resolveReviewThread(input: { threadId: "PRRT_kwDOR6jjtc6AYacy" }) {
    thread {
      id
      isResolved
    }
  }
}'

Length of output: 92


@jonahgabriel: Done — the review thread on scripts/validation/check_leaked_literals.sh (PRRT_kwDOR6jjtc6AYacy) has been resolved. Thanks for opening #548 to track the type-specific annotation cross-checking follow-up!

@jonahgabriel
jonahgabriel added this pull request to the merge queue May 7, 2026
Merged via the queue into main with commit c706ab4 May 7, 2026
33 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-10580-task-8-add-ci-grep-gate-pre-commit-gha-with-allowlist branch May 7, 2026 18:22
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