Skip to content

test(OMN-20298): positive control, do not merge - #4428

Closed
jonahgabriel wants to merge 15 commits into
mainfrom
scratch/omn-20298-positive-control
Closed

jonahgabriel wants to merge 15 commits into
mainfrom
scratch/omn-20298-positive-control

Conversation

@jonahgabriel

Copy link
Copy Markdown
Collaborator

Scratch PR planting a detector job behind the preflight. The Shape-Gate Independence job must fail. Closed and branch deleted after the run.

jonahgabriel and others added 15 commits October 1, 2026 08:23
…m the deploy-source tree, not the lanes' canonical clones (#4401)

deploy-agent-dev took OMNI_HOME from the operator env store
(/data/omninode/omni_home, the lanes' tree), so RT-1's clean checkout
detached and clean -ffdx'd omnimarket, omnibase_core and omnibase_compat
there on every dev job, and the clone guard refused every in-process
delegate on the host. The unit now declares OMNI_HOME=/data/omninode,
the root reconcile-host converges and locks under (OMN-20154), and
protects the name from the env store.

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
…us costs the slowest host, not the sum (#4403)

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
Onex-Workflow: Lane census refresh (OMN-18606)
Onex-Run: https://github.com/OmniNode-ai/omnibase_infra/actions/runs/36829703055

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
…ack only (#4410)

The collaborator lane broker runs with admin_api_require_auth false and published its Admin API on every host interface (55644:9644). Bind it to 127.0.0.1, keeping the OMN-17143 reserved host port 55644. The governance boundary test's port scrape now also reads a loopback-prefixed publish and asserts it still sees 55644.

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
#4409)

omnimarket#3172 adds node_projection_savings 093_savings_series_persisted_baseline.sql,
which replaces projection_delegation_savings_series so it never invents a baseline
for event-only rows, and sets security_invoker back after the replace. The
node-migration vendor-parity gate requires the vendored copy here first.

Byte-for-byte copy of omnimarket be7062387 (sha256 3c53f906...). Numbered 093 so
it applies after the infra-side 092_restore_savings_views_security_invoker.sql.
test_real_forward_corpus_preserves_invoker_rights fails on the pre-fix copy and
passes on this one.
* chore(OMN-13912): post-release dev version bump to 0.38.62

Disarms the OMN-13412 release-identity gate that publishing
v0.38.61 armed against dev.

Triggered-by: https://github.com/OmniNode-ai/omnibase_infra/actions/runs/36839193167

* fix(OMN-13912): regenerate the runner image identity lock for the 0.38.62 bump

---------

Co-authored-by: onexbot-occ-writer[bot] <onexbot-occ-writer[bot]@users.noreply.github.com>
Co-authored-by: jonahgabriel <jonah.gabriel@gmail.com>
…oted reserved key word as a relation target (#4413)

* fix(OMN-20201): the application-database SQL lint never reads an unquoted reserved key word as a relation target

Audit row I21. The relation-target patterns landed on SQL grammar: ALL in
GRANT ... ON ALL TABLES IN SCHEMA, OR and THEN after the LIKE operator once
its literal is blanked, TRUE and FALSE in CHECK (x IS TRUE). Unquoted, a
PostgreSQL fully reserved key word cannot name a relation, so
_record_sql_target now returns for any of them; this replaces the narrower
true/false guard from OMN-17486. A quoted identifier is still held to the lint.

Over all 477 tracked .sql files the change removes six findings and adds none.
Six baseline rows are removed: the four the fix makes stale (all twice, or,
then) and the true/false rows the OMN-17486 guard had already made stale.
Version 0.38.62 for the release-identity gate.

Evidence-Ticket: OMN-20201

* test(OMN-20201): the SQL lint over the real corpus and the frozen baseline holds no reserved key word target

Evidence-Ticket: OMN-20201

* chore(OMN-20201): regenerate the runner image identity for the 0.38.62 lockfile

Evidence-Ticket: OMN-20201

---------

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
…nly (#4408)

* fix(OMN-20260): publish the dev lane Redpanda admin API on loopback only

The base compose file published the Redpanda Admin API on every host
interface while admin_api_require_auth is false, so any LAN or tailnet host
could create SCRAM users and rewrite cluster config on the lab dev lane.
Bind the publish to 127.0.0.1, the shape the dev-105/dev-200/dev-202
overlays already use. In-network consumers use redpanda:9644 and are
unaffected. The private-IP security scan now exempts exactly a loopback
port publish, with a control proving a loopback host dependency still fails.

* fix(OMN-20260): move the keycloak provenance citation to its new infra compose line

The loopback admin publish comment adds eight lines above KC_DB_USERNAME in
docker/docker-compose.infra.yml, so the in-repo provenance citation in
test_application_database_acl_connect_inputs.py moves 891 -> 899. The merge
group run caught it (Tests Split 1/15).

---------

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
…s by run id, so a page that hides the newest run cannot decide (#4416)

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
…4415)

Onex-Workflow: Publish downstream pin bumps
Onex-Run: https://github.com/OmniNode-ai/omnibase_core/actions/runs/36845876557

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
…ants (#4418)

* feat(OMN-20260): gated apply path for governed-lane compose-config grants

scripts/apply_governed_compose_config.py consumes the new compose_config grant
kind (onex_change_control grants/governed_lane_grants.yaml, read at @main only).
It refuses unless the grant matches the lane and project, is unexpired,
unconsumed and not self-granted, the checkout is at compose_ref with the
grant's compose files unmodified, and the in-process docker compose config
digest equals rendered_digest. --execute then runs the OMN-15218 attribution
preflight and recreates exactly the granted services with up -d --no-deps
--no-build.

* fix(OMN-20260): the apply path interpolates with the operator env file, as deploy-runtime.sh does

---------

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
)

* chore(OMN-17292): advance omnimarket contract pin to 303aff486dfb [bot]

Onex-Workflow: Omnimarket contract pin refresh
Onex-Run: https://github.com/OmniNode-ai/omnibase_infra/actions/runs/36827032339

* fix(OMN-17292): delete the provider_quota_state bridge entry now that the omnimarket pin declares it

The pinned omnimarket contracts derive provider_quota_state (omnimarket#3134), so the
supplemental legacy-migration declaration and its _INTERIM_ENTRIES row are redundant.
Regenerated instances are byte-identical.

* test(OMN-17292): prove the provider_quota_state bridge retirement keeps migrations and writer grants

* test(OMN-17292): drop the vendor test that asserts the retired provider_quota_state bridge

The bridge entry was deleted by this PR now that the pinned omnimarket contract declares the table. test_bridge_derives_the_shipped_table_grant on dev still required exactly one LEGACY_MIGRATION_TABLE_DECLARATIONS entry for provider_quota_state, so Tests (Split 7/15) failed in every merge group. Its shipped-grant half is already proven by test_provider_quota_state_bridge_retired_omn17292.py.

---------

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
Co-authored-by: jonahgabriel <jonah.gabriel@gmail.com>
* chore(deps): bump omnibase_core to 0.47.28

Automated dependency cascade from OmniNode-ai/omnibase_core release 0.47.28.

Onex-Workflow: Release
Onex-Run: https://github.com/OmniNode-ai/omnibase_core/actions/runs/36845730794

* fix(OMN-18595): regenerate runner image lock for the omnibase-core 0.47.28 bump

---------

Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
Co-authored-by: jonahgabriel <jonah.gabriel@gmail.com>
Moves canonical handler-shape, flip-bundle seam, and Plugin* lifecycle
guards out of the lint job into independent CI jobs to prevent
skip-on-failure via `needs: [occ-preflight, route]`.

Adds canonical-handler-shape-gate, no-plugin-daemon-classes-gate, and
shape-gate-independence jobs in .github/workflows/ci.yml. The latter
validates detector independence using pinned omnibase_core commit
5220ecf1758b4475c2963ec13171b6431fdc2224 (PR 1833 head).

Updates STRICT_GATE_JOBS in scripts/ci/ci_summary_gate.py and
config/runner_routing_policy.yaml. Adds pre-commit hook
check-shape-gate-independence and new test
tests/ci/test_shape_gate_jobs_independent_omn20298.py. Adjusts
tests/ci/test_lint_validator_runner.py for the new job structure.
Comment thread .github/workflows/ci.yml
Comment on lines 605 to +677
@@ -672,15 +674,70 @@ jobs:
--baseline scripts/ci/canonical_handler_shape_baseline.py \
--receipts-dir scripts/ci/adequacy_receipts

- name: Run mypy type checking
# OMN-18640: scripts/deploy-agent/deploy_agent is IN the scope. It is
# the code that runs every deploy on the lab lane and it sat outside
# the type gate carrying ten errors, three of which were functions
# declared to return `str` while returning `Any`. Its tests have their
# own workflow because it is a standalone uv sub-project; its TYPES are
# checked here, with the root project's mypy, because that is where
# this repository declares type scope.
run: uv run mypy src/omnibase_infra scripts/deploy-agent/deploy_agent
no-plugin-daemon-classes-gate:
name: No Plugin Daemon Classes Gate (OMN-20298)
runs-on: >-
${{
(github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name != github.repository)
&& fromJSON(vars.OMNI_PUBLIC_PR_RUNS_ON_JSON || '["ubuntu-latest"]')
|| fromJSON((github.event_name == 'merge_group' && vars.OMNI_REQUIRED_CI_RUNS_ON_JSON) || vars.OMNI_TRUSTED_CI_RUNS_ON_JSON || '["self-hosted","omnibase-ci"]')
}}
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 2

- name: Setup Python and uv
uses: ./.github/actions/setup-python-uv
with:
python-version: ${{ env.PYTHON_VERSION }}
uv-version: ${{ env.UV_VERSION }}
cache-version: ${{ env.CACHE_VERSION }}
cache-enabled: "false"

# OMN-19613: the guard is an AST check on each file's own classes, so a
# file the PR did not touch cannot turn it red. On pull_request it scans
# only the PR's files; it scans the whole tree on push (which proves the
# merged union on dev, OMN-18835), merge_group and dispatch, when the PR
# changes .pre-commit-config.yaml or this workflow, when the PR moves the
# omnibase-core pin in uv.lock (the validator's code lives in core), and
# whenever the base cannot be resolved. The step always runs; only the
# file list narrows, so the check never goes missing from a PR.
- name: Check Plugin* lifecycle class guard (OMN-13284, relocated to omnibase_core)
env:
EVENT_NAME: ${{ github.event_name }}
Comment thread .github/workflows/ci.yml Outdated
Comment on lines 678 to 717
Comment on lines +5 to +6
uses: OmniNode-ai/omnibase_core/.github/workflows/occ-preflight.yml@52851458622f368c3b596c82bf810bc6acce1d5e
canonical-inference-gate:
Comment on lines +7 to +10
needs: occ-preflight
runs-on: ubuntu-latest
steps:
- run: echo canonical-inference
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.

3 participants