Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
a96ec11
fix(OMN-11994): handler_wiring psycopg2 list adaptation for text[] co…
jonahgabriel May 25, 2026
b8b83a3
fix(OMN-11958): remove duplicate dispatcher for node_architecture_gra…
jonahgabriel May 25, 2026
01fc631
fix(OMN-11975): use asyncio.gather for concurrent consumer startup (#…
jonahgabriel May 25, 2026
2486ba6
chore(OMN-11513): update pricing manifest to current fleet model IDs …
jonahgabriel May 25, 2026
c8209c8
fix(OMN-11513): replace silent localhost fallbacks with required env …
jonahgabriel May 25, 2026
22beef8
fix(OMN-11996): register DispatchResultApplier for node_delegate_skil…
jonahgabriel May 25, 2026
e774ed3
fix(OMN-11997): remove non-IMMUTABLE ::date functional index from int…
jonahgabriel May 25, 2026
cf0626e
feat(OMN-11998): add 082_swarm_runs migration for swarm dispatch proj…
jonahgabriel May 25, 2026
32e63ae
fix(OMN-12002): allow auto-wired handlers to publish to all contract-…
jonahgabriel May 25, 2026
3195d12
fix(OMN-12116): set event_type on output envelopes in dispatch result…
jonahgabriel May 25, 2026
f5ab4a8
feat(OMN-12131): add log_entries migration to omnidash_analytics (#1743)
jonahgabriel May 25, 2026
c3afa5a
feat(OMN-11879): add version field to all 100 contracts (#1746)
jonahgabriel May 25, 2026
c1126c2
fix(OMN-11879): replace deprecated version field with contract_versio…
jonahgabriel May 25, 2026
3d78943
refactor(OMN-11536): service_* naming purge — 4 renames (#1751)
jonahgabriel May 25, 2026
96bab19
fix(OMN-11973): remove stale src/omnibase_infra/migrations COPY from …
jonahgabriel May 26, 2026
95d2645
fix(OMN-12162): Resolve stub handler_registry.register_handlers_from_…
jonahgabriel May 26, 2026
5f0dc1c
fix(OMN-12195): pin OMNIMARKET_REF to dev branch in runtime Dockerfil…
jonahgabriel May 26, 2026
2a19371
fix(OMN-12198): synthesize envelope for raw non-envelope Kafka payloa…
jonahgabriel May 26, 2026
9f93451
feat(OMN-12006): inject ContainerBackedDelegationDispatchPort at auto…
jonahgabriel May 26, 2026
bcd6bf5
fix(OMN-12151): skip terminal event when handle_async returns None (#…
jonahgabriel May 26, 2026
b481ee3
fix(OMN-12196): resolve bifrost source contract from omnimarket packa…
jonahgabriel May 26, 2026
fb1cdac
fix(OMN-12164): Fix datetime.now() in omnibase_infra handlers (#1754)
jonahgabriel May 26, 2026
49e8d90
feat(OMN-12193): Create AdapterProjectTrackerLinear migration target
jonahgabriel May 26, 2026
0efc357
refactor(OMN-12184): Convert boundary @dataclass to Pydantic BaseMode…
jonahgabriel May 26, 2026
638ea92
chore(deps-dev): update pytest-asyncio requirement (#1759)
dependabot[bot] May 26, 2026
7645dfe
feat(OMN-9737): wire load_hook_activations_from_path into RuntimeCont…
jonahgabriel May 26, 2026
089bbf2
fix(OMN-11068): health endpoint returns 503 when runtime is degraded …
jonahgabriel May 26, 2026
c049b45
feat(OMN-7603): enable consumer health emitter + validate-runtime cat…
jonahgabriel May 26, 2026
be5f7e5
feat(OMN-9470): workspace mode packages sibling repos with per-repo p…
jonahgabriel May 26, 2026
7f28113
chore: release v0.37.0 (OMN-12245) (#1760)
jonahgabriel May 26, 2026
edd9e46
chore(OMN-12245): backmerge main into dev for infra promotion (#1771)
jonahgabriel May 26, 2026
edf92c5
refactor(OMN-11607): reduce cyclomatic complexity in event_bus_kafka.…
jonahgabriel May 26, 2026
3a20290
backmerge(OMN-12245): projection runtime dispatch hotfix (#1776)
jonahgabriel May 27, 2026
60a5953
fix(OMN-6664): clean up non-standard noqa suppressions in omnibase_in…
jonahgabriel May 28, 2026
a389cea
feat(OMN-9545): remove dead instance-discovery fields from registry A…
jonahgabriel May 28, 2026
2c1d672
feat(OMN-12294): drop bridge-backed delegation dispatch, use pure Kaf…
jonahgabriel May 29, 2026
3fcb11f
fix(OMN-10409): skip Bifrost render for projection API (#1780)
jonahgabriel May 29, 2026
10a3b86
fix(OMN-12432): authenticate uv git+https fetches in CI (Empty reply …
jonahgabriel Jun 1, 2026
f2cb619
test(OMN-12384): add focused unit tests for runtime kernel hotspots (…
jonahgabriel Jun 1, 2026
bae87dc
ci(OMN-12563): temporarily disable sibling compat process (#1823)
jonahgabriel Jun 1, 2026
e11adfe
ci(OMN-12564): add versioned CI env canary (#1824)
jonahgabriel Jun 1, 2026
4426390
ci(OMN-12564): disable OCC cache save (#1825)
jonahgabriel Jun 1, 2026
480d302
fix(OMN-12421): advance stale OMNIBASE_COMPAT_REF pin so clean redepl…
jonahgabriel Jun 1, 2026
e3047a3
test(OMN-12385): add focused unit tests for EventBusKafka publish/sub…
jonahgabriel Jun 1, 2026
82be452
fix(OMN-12424): force fresh git wheel for moving-ref ONEX deps in Doc…
jonahgabriel Jun 1, 2026
0b81ad6
fix(OMN-12534): register topic event type dispatchers (#1814)
jonahgabriel Jun 1, 2026
c1062e5
fix(OMN-12501): quarantine Protocol handler declarations (#1800)
jonahgabriel Jun 1, 2026
42e3903
fix(OMN-12516): require Infisical Redis auth in catalog (#1803)
jonahgabriel Jun 1, 2026
6d6143d
feat(OMN-12378): add Repowise freshness receipt (#1799)
jonahgabriel Jun 1, 2026
b773784
fix(OMN-12433): restore runner egress healthcheck (#1792)
jonahgabriel Jun 1, 2026
966e785
feat(OMN-12566): bounded Docker network janitor + subnet-pool alertin…
jonahgabriel Jun 1, 2026
bfab808
ci(OMN-12477): remove hotfix/* bypass from main-target-guard (dev-onl…
jonahgabriel Jun 1, 2026
f930c3d
feat(OMN-12572): extend deploy-agent for runtime_lane + image_digest …
jonahgabriel Jun 1, 2026
66cd568
docs(OMN-12575): capture live runtime deployment baseline evidence (#…
jonahgabriel Jun 1, 2026
a889f57
fix(OMN-12503): require stability runtime health env (#1801)
jonahgabriel Jun 1, 2026
5df04a8
ci(OMN-12567): versioned runner image contract with prebuilt env + bo…
jonahgabriel Jun 1, 2026
38f861f
ci(OMN-12568): validate versioned runner image on fresh runner + roll…
jonahgabriel Jun 1, 2026
e804194
ci(OMN-12529): harden runner uv transport retries (#1809)
jonahgabriel Jun 2, 2026
c610df9
chore: release v0.38.0 (OMN-12561) (#1827)
jonahgabriel Jun 2, 2026
d203bb5
docs(OMN-12432): add merge queue lint cancellation diagnosis (#1812)
jonahgabriel Jun 2, 2026
4985d14
fix(OMN-12582): reconcile runner-fleet compose/config to live 48-runn…
jonahgabriel Jun 2, 2026
2222af4
fix(OMN-12489): wire stability projection dependencies (#1821)
jonahgabriel Jun 2, 2026
1bc21b6
fix(OMN-12584): chown runner cache so prebuilt-env bake builds + add …
jonahgabriel Jun 2, 2026
ae6c8b5
ci(OMN-12583): bump runner image for node24 actions (#1835)
jonahgabriel Jun 2, 2026
8b63f97
ci(OMN-12542): add merge queue janitor (#1817)
jonahgabriel Jun 2, 2026
c9a8420
fix(OMN-12533): retry broker metadata startup errors (#1813)
jonahgabriel Jun 2, 2026
d64b7f8
feat(OMN-12559): auto-discover omnimarket node migrations into infra …
jonahgabriel Jun 2, 2026
10c9ddb
fix(OMN-12536): preserve catalog runtime tmpfs (#1816)
jonahgabriel Jun 2, 2026
ae883b7
fix(OMN-12532): set stability runtime state dir (#1811)
jonahgabriel Jun 2, 2026
ae940b0
fix(OMN-12597): re-sync vendored savings node migration to canonical …
jonahgabriel Jun 2, 2026
2cc5f58
ci(OMN-12544): add runner pool overrides (#1819)
jonahgabriel Jun 2, 2026
aa248df
fix(OMN-12448): bound consumer-startup concurrency + retry-then-raise…
jonahgabriel Jun 2, 2026
3e0a3f6
fix(OMN-12416): type-scope multi-handler dispatch + per-handler resul…
jonahgabriel Jun 2, 2026
98ca5d2
fix(OMN-12449): hot-load market nodes — shared trusted-namespace cons…
jonahgabriel Jun 2, 2026
2008842
fix(OMN-12444): define stability session health runtime contract (#1794)
jonahgabriel Jun 2, 2026
0720e44
fix(OMN-12531): pass Kafka API version to Pattern B terminal consumer…
jonahgabriel Jun 2, 2026
9bd7621
fix(OMN-12528): cap stability topic provisioning (#1808)
jonahgabriel Jun 2, 2026
b333e4e
fix(OMN-12522): advertise stability broker on connected network (#1838)
jonahgabriel Jun 2, 2026
52525c9
feat(OMN-12626): prod runtime promotion-lineage guard — pin prod to a…
jonahgabriel Jun 2, 2026
5577e9f
feat(OMN-12619): contract-native DLQ replay node + quarantine path (#…
jonahgabriel Jun 2, 2026
f9a84eb
fix(OMN-12513): add runtime probe toolchain (#1802)
jonahgabriel Jun 2, 2026
ce6f323
chore(OMN-12527): delete dead IntentExecutionRouter (#1807)
jonahgabriel Jun 3, 2026
3384691
fix(OMN-7466): harden reusable runtime boot diagnostics (#1791)
jonahgabriel Jun 3, 2026
111b4f4
feat(OMN-12623): topic-migration executor + lag/drain gate + status p…
jonahgabriel Jun 3, 2026
3fcb1c1
fix(OMN-12632): adapt drain-proof lag observer to aiokafka 0.13.0 adm…
jonahgabriel Jun 3, 2026
389c432
fix(OMN-12631): decouple redpanda advertise hosts by lane (#1844)
jonahgabriel Jun 3, 2026
0af783b
fix(OMN-12627): vendor registration projection migrations (#1843)
jonahgabriel Jun 3, 2026
b3a15a3
fix(OMN-12618): verify deploy agent lanes against live runtime state …
jonahgabriel Jun 3, 2026
af13fe9
fix(OMN-12618): add runtime error triage upsert index (#1848)
jonahgabriel Jun 3, 2026
36d9b2b
fix(OMN-12618): preserve generated runtime image build (#1849)
jonahgabriel Jun 3, 2026
d30f05d
fix(OMN-12618): read workspace provenance metadata (#1850)
jonahgabriel Jun 3, 2026
73af6fa
fix(OMN-12664): preserve full Gemini endpoint path in bifrost gateway…
jonahgabriel Jun 4, 2026
962cc56
chore(OMN-12667): bump zone-filter workflow ref (#1860)
jonahgabriel Jun 4, 2026
c61ae0f
chore(OMN-12668): bump upload-artifact action (#1861)
jonahgabriel Jun 4, 2026
366b9b8
Revert "fix(OMN-12664): preserve full Gemini endpoint path in bifrost…
jonahgabriel Jun 4, 2026
ff7cfad
chore(OMN-12669): bump checkout action (#1862)
jonahgabriel Jun 4, 2026
7df0e68
chore(OMN-12671): bump uv dependency group (#1864)
jonahgabriel Jun 4, 2026
b3ff3c6
fix(OMN-12672): cap a2a-sdk below v1 (#1865)
jonahgabriel Jun 4, 2026
13c1263
build(deps, OMN-12673): refresh infra redis and deepdiff ranges (#1867)
jonahgabriel Jun 4, 2026
b92f6a7
build(deps, OMN-12673): refresh infra starlette fastapi lock (#1869)
jonahgabriel Jun 4, 2026
e62507f
fix(OMN-12682): derive service topic registry from catalog (#1870)
jonahgabriel Jun 4, 2026
068bf24
fix(OMN-12716): codify qwen vllm tool parser unit (#1871)
jonahgabriel Jun 5, 2026
556ac13
fix(OMN-12700): emit typed LLM inference response (#1872)
jonahgabriel Jun 5, 2026
ee6f1ac
fix(OMN-12720): publish inference validation failures (#1873)
jonahgabriel Jun 5, 2026
187dcfc
fix(OMN-12724): respect runtime profile ownership for subscriptions (…
jonahgabriel Jun 5, 2026
9e2af41
fix(OMN-12725): preflight runtime projection schema (#1875)
jonahgabriel Jun 6, 2026
8560104
fix(OMN-12723): bootstrap runtime volume ownership (#1876)
jonahgabriel Jun 6, 2026
2144328
fix(OMN-12724): flatten delegation terminal publish payload (#1878)
jonahgabriel Jun 6, 2026
a2dcb02
fix(OMN-12727): update core pin for delegation routing (#1877)
jonahgabriel Jun 6, 2026
dfbd180
fix(OMN-12726): sync runtime build context for deploy (#1879)
jonahgabriel Jun 6, 2026
5f81555
fix(OMN-12724): preserve runtime lane profile names (#1880)
jonahgabriel Jun 6, 2026
a96b753
fix(OMN-12734): clear contract resolver bifrost path (#1881)
jonahgabriel Jun 6, 2026
614e725
chore(release)(OMN-12245): backmerge omnibase_infra v0.38.1 version b…
jonahgabriel Jun 6, 2026
0e4e177
fix(OMN-12749): invoke typed local runtime handlers (#1888)
jonahgabriel Jun 6, 2026
b77cacc
fix(OMN-12755): preserve workspace root in deploy-runtime (#1889)
jonahgabriel Jun 6, 2026
4d26f3c
fix(OMN-12752): route terminal event for single handlers (#1890)
jonahgabriel Jun 7, 2026
8a684c1
fix(OMN-12763): pin runtime core to overlay contract fix (#1891)
jonahgabriel Jun 7, 2026
fc5befd
ci: harden migration freeze checkout timeout (#1882)
jonahgabriel Jun 7, 2026
8a14d61
chore(OMN-12765): backmerge main release lane into dev (#1892)
jonahgabriel Jun 7, 2026
d0b6a7c
chore(OMN-12765): backmerge current main into infra dev lane (#1894)
jonahgabriel Jun 7, 2026
e2dbdc9
feat(OMN-12816): additive extra_body passthrough on ModelLlmInference…
jonahgabriel Jun 8, 2026
abb9ea3
chore(OMN-12816): backmerge main release metadata into dev (#1906)
jonahgabriel Jun 8, 2026
2793e4f
chore(OMN-12816): normalize infra main promotion conflicts (#1907)
jonahgabriel Jun 8, 2026
8d36cd9
test(OMN-12816): add main promotion integration marker (#1908)
jonahgabriel Jun 8, 2026
6a5726a
ci(OMN-12816): use branch-aware receipt policy for promotions (#1909)
jonahgabriel Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
66 changes: 66 additions & 0 deletions .github/actions/emit-runner-identity/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: 'Emit runner image identity'
description: >-
Emit the bound runner image identity (OMN-12567) as job startup evidence. The identity is a binding — image digest + dependency manifest + Python version + uv version + shared-env version — not a human label. Surfacing it in every job makes image-drift debugging deterministic instead of guesswork.
author: 'OmniNode'
inputs:
lock-file:
description: 'Path to the bound runner image identity lock file.'
required: false
default: 'docker/runners/runner-image.lock.json'
working-directory:
description: 'Working directory containing the repo checkout.'
required: false
default: '.'
runs:
using: 'composite'
steps:
- name: Emit runner image identity
id: emit_runner_identity
shell: bash
working-directory: ${{ inputs.working-directory }}
env:
OMNI_RUNNER_LOCK_FILE: ${{ inputs.lock-file }}
run: |
set -euo pipefail
if [[ -n "${pythonLocation:-}" && -x "${pythonLocation}/bin/python" ]]; then
python_bin="${pythonLocation}/bin/python"
else
python_bin="$(command -v python3)"
fi

if [[ ! -f "${OMNI_RUNNER_LOCK_FILE}" ]]; then
echo "::warning::runner image lock file not found: ${OMNI_RUNNER_LOCK_FILE}; skipping identity emission"
exit 0
fi

evidence="$(
PYTHONPATH="scripts/ci" "${python_bin}" \
scripts/ci/runner_image_identity.py \
--lock-file "${OMNI_RUNNER_LOCK_FILE}" \
--mode emit
)"

echo "runner image identity (startup evidence): ${evidence}"
echo "runner_image_identity=${evidence}" >> "${GITHUB_OUTPUT}"
echo "OMNI_RUNNER_IMAGE_IDENTITY_EVIDENCE=${evidence}" >> "${GITHUB_ENV}"

# The image baked into the running container (if any) must match the
# committed lock identity; surface a mismatch loudly without failing the
# job, so drift is visible in the step summary.
baked="${OMNI_RUNNER_IMAGE_IDENTITY:-}"
recorded="$("${python_bin}" -c 'import json,os; print(json.load(open(os.environ["OMNI_RUNNER_LOCK_FILE"]))["identity_digest"])')"
if [[ -n "${baked}" && "${baked}" != "unbound" && "${baked}" != "${recorded}" ]]; then
echo "::warning::runner image identity drift: baked=${baked} recorded=${recorded}"
fi

{
echo "### Runner image identity (OMN-12567)"
echo ""
echo '```json'
echo "${evidence}"
echo '```'
if [[ -n "${baked}" && "${baked}" != "unbound" ]]; then
echo ""
echo "- baked image identity: \`${baked}\`"
fi
} >> "${GITHUB_STEP_SUMMARY}"
126 changes: 122 additions & 4 deletions .github/actions/setup-python-uv/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,43 +41,127 @@ inputs:
sync-attempts:
description: 'Maximum uv sync attempts before failing'
required: false
default: '3'
default: '5'
sync-retry-delay-seconds:
description: 'Base delay in seconds between uv sync retries'
required: false
default: '10'
github-token:
description: >-
Token used to authenticate uv git+https dependency fetches against github.com. Defaults to the workflow GITHUB_TOKEN, which authenticates same-org public-repo fetches and lifts them above the anonymous rate limit. Override with `secrets.CROSS_REPO_PAT` for private cross-repo deps.
required: false
default: ${{ github.token }}
shared-env-enabled:
description: >-
Use the host-local immutable CI environment cache. "auto" enables it only when OMNI_CI_SHARED_ENV_ENABLED=true in the workflow environment.
required: false
default: 'auto'
shared-env-root:
description: Host-local root for immutable CI environments.
required: false
default: '/home/runner/.cache/omni/ci-envs'
shared-env-install-args:
description: Arguments used when building the immutable shared CI env.
required: false
default: '--frozen --all-extras --all-groups --no-install-project'
runs:
using: 'composite'
steps:
- name: Resolve shared CI env mode
id: shared_env_mode
shell: bash
env:
SHARED_ENV_ENABLED: ${{ inputs.shared-env-enabled }}
run: |
case "${SHARED_ENV_ENABLED}" in
true)
enabled=true
;;
false)
enabled=false
;;
auto)
if [ "${OMNI_CI_SHARED_ENV_ENABLED:-false}" = "true" ]; then
enabled=true
else
enabled=false
fi
;;
*)
echo "::error::shared-env-enabled must be true, false, or auto"
exit 2
;;
esac
echo "enabled=${enabled}" >> "$GITHUB_OUTPUT"
echo "shared CI env enabled: ${enabled}"
- name: Set up Python
uses: actions/setup-python@v5
if: steps.shared_env_mode.outputs.enabled != 'true'
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}
- name: Install uv
if: steps.shared_env_mode.outputs.enabled != 'true'
uses: astral-sh/setup-uv@v7
with:
version: ${{ inputs.uv-version }}
enable-cache: ${{ inputs.cache-enabled != 'false' }}
- name: Prepare shared CI env
if: steps.shared_env_mode.outputs.enabled == 'true' && inputs.skip-install != 'true'
shell: bash
working-directory: ${{ inputs.working-directory }}
env:
OMNI_CI_ENV_ROOT: ${{ inputs.shared-env-root }}
OMNI_CI_REPO: omnibase_infra
OMNI_CI_ENV_INSTALL_ARGS: ${{ inputs.shared-env-install-args }}
PYTHON_VERSION: ${{ inputs.python-version }}
UV_VERSION: ${{ inputs.uv-version }}
GIT_FETCH_TOKEN: ${{ inputs.github-token }}
run: |
"${GITHUB_ACTION_PATH}/../../../scripts/ci/ensure_ci_env.sh"
- name: Load cached uv
if: inputs.cache-enabled != 'false'
if: steps.shared_env_mode.outputs.enabled != 'true' && inputs.cache-enabled != 'false'
uses: actions/cache@v4
with:
path: ~/.cache/uv
key: ${{ inputs.cache-key-prefix }}-${{ runner.os }}-${{ inputs.python-version }}-${{ hashFiles(inputs.lock-file-path) }}-${{ inputs.cache-version }}
restore-keys: |
${{ inputs.cache-key-prefix }}-${{ runner.os }}-${{ inputs.python-version }}-${{ inputs.cache-version }}-
- name: Install dependencies
if: inputs.skip-install != 'true'
if: steps.shared_env_mode.outputs.enabled != 'true' && inputs.skip-install != 'true'
shell: bash
working-directory: ${{ inputs.working-directory }}
env:
CACHE_ENABLED: ${{ inputs.cache-enabled }}
INSTALL_ARGS: ${{ inputs.install-args }}
UV_SYNC_ATTEMPTS: ${{ inputs.sync-attempts }}
UV_SYNC_RETRY_DELAY_SECONDS: ${{ inputs.sync-retry-delay-seconds }}
GIT_FETCH_TOKEN: ${{ inputs.github-token }}
run: |
export UV_HTTP_TIMEOUT="${UV_HTTP_TIMEOUT:-600}"
export UV_CONCURRENT_DOWNLOADS="${UV_CONCURRENT_DOWNLOADS:-1}"
export UV_CONCURRENT_BUILDS="${UV_CONCURRENT_BUILDS:-1}"
export UV_CONCURRENT_INSTALLS="${UV_CONCURRENT_INSTALLS:-1}"
export UV_TORCH_BACKEND="${UV_TORCH_BACKEND:-cpu}"
git config --global http.version HTTP/1.1
# Treat a stalled transfer (0 bytes/s) as a failure rather than hanging
# indefinitely, so the retry loop below can recover. (OMN-12529)
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
# Authenticate uv's internal git+https fetches. Anonymous github.com
# requests are rate-limited (60/hr); many parallel --no-cache syncs from
# one runner egress IP trip "Empty reply from server". Authenticated
# requests get 5000/hr. uv shells out to `git fetch`, which inherits the
# GIT_CONFIG_* env vars below — a process-scoped insteadOf rewrite that
# never writes the token to a persistent gitconfig on the self-hosted
# runner. (OMN-12432)
if [ -n "${GIT_FETCH_TOKEN}" ]; then
export GIT_CONFIG_COUNT=1
export GIT_CONFIG_KEY_0="url.https://x-access-token:${GIT_FETCH_TOKEN}@github.com/.insteadOf"
export GIT_CONFIG_VALUE_0="https://github.com/"
echo "git github.com fetches: authenticated (x-access-token)"
else
echo "::warning::github-token not provided; uv git fetches stay anonymous and may be rate-limited"
fi
read -r -a install_args <<< "$INSTALL_ARGS"
sync_attempts="${UV_SYNC_ATTEMPTS}"
retry_delay_seconds="${UV_SYNC_RETRY_DELAY_SECONDS}"
Expand All @@ -98,6 +182,7 @@ runs:
echo "UV_HTTP_TIMEOUT=${UV_HTTP_TIMEOUT:-<unset>}"
echo "UV_CONCURRENT_DOWNLOADS=${UV_CONCURRENT_DOWNLOADS:-<unset>}"
echo "UV_CONCURRENT_BUILDS=${UV_CONCURRENT_BUILDS:-<unset>}"
echo "UV_TORCH_BACKEND=${UV_TORCH_BACKEND:-<unset>}"
echo "UV_NO_CACHE=${UV_NO_CACHE:-<unset>}"

sync_cmd=(uv sync)
Expand All @@ -120,3 +205,36 @@ runs:
sleep "$sleep_seconds"
attempt=$((attempt + 1))
done
- name: Emit runner image identity
# OMN-12567: every job that prepares Python emits the bound runner image
# identity as startup evidence so image-drift debugging is deterministic.
# The action-relative path makes this work for both same-repo and
# cross-repo (subdir) checkout layouts.
shell: bash
run: |
set -euo pipefail
scripts_ci="${GITHUB_ACTION_PATH}/../../../scripts/ci"
lock_file="${GITHUB_ACTION_PATH}/../../../docker/runners/runner-image.lock.json"
if [[ ! -f "${lock_file}" ]]; then
echo "::warning::runner image lock file not found at ${lock_file}; skipping identity emission"
exit 0
fi
if [[ -n "${pythonLocation:-}" && -x "${pythonLocation}/bin/python" ]]; then
python_bin="${pythonLocation}/bin/python"
else
python_bin="$(command -v python3)"
fi
evidence="$(
PYTHONPATH="${scripts_ci}" "${python_bin}" \
"${scripts_ci}/runner_image_identity.py" \
--lock-file "${lock_file}" --mode emit
)"
echo "runner image identity (startup evidence): ${evidence}"
echo "OMNI_RUNNER_IMAGE_IDENTITY_EVIDENCE=${evidence}" >> "${GITHUB_ENV}"
{
echo "### Runner image identity (OMN-12567)"
echo ""
echo '```json'
echo "${evidence}"
echo '```'
} >> "${GITHUB_STEP_SUMMARY}"
9 changes: 9 additions & 0 deletions .github/codeql/codeql-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
# SPDX-License-Identifier: MIT
name: omnibase-infra-codeql
paths:
- src
- scripts
- tests
paths-ignore:
- .github/**
15 changes: 8 additions & 7 deletions .github/workflows/artifact-reconciliation-webhook.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,15 @@ jobs:
with:
separator: ","

- name: Set up Python
uses: actions/setup-python@v6
- name: Set up CI Python environment
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
uses: ./.github/actions/setup-python-uv
with:
python-version: "3.12"

- name: Install dependencies
run: |
pip install --quiet confluent-kafka pydantic click
cache-key-prefix: uv-pr-webhook
cache-enabled: "false"
install-args: --frozen
shared-env-enabled: "true"

- name: Publish PR webhook event
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
Expand All @@ -70,7 +71,7 @@ jobs:
PR_MERGED: ${{ github.event.pull_request.merged }}
PR_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
run: |
python scripts/publish_pr_webhook_event.py \
uv run python scripts/publish_pr_webhook_event.py \
--action "$PR_ACTION" \
--repo "$PR_REPO" \
--pr-number "$PR_NUMBER" \
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/attest-source-hash.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
with:
persist-credentials: false

Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/build-and-push-runtime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,19 @@ env:
PYTHON_VERSION: "3.12"

jobs:
# OMN-12626 (R1): refuse to build the prod-bound runtime image unless the
# source tree is clean AND HEAD is a promoted origin/main commit. This runs
# on push to main (the promoted ref), so a real main build passes and a
# dirty/dev-only build fails closed before any image is built or pushed.
lineage-guard:
name: Prod promotion lineage guard
uses: ./.github/workflows/prod-promotion-lineage.yml
with:
enforce_lineage: true

build-and-push:
name: Build and push runtime image
needs: lineage-guard
permissions:
id-token: write
contents: read
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/call-receipt-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,16 @@ permissions:
jobs:
verify:
uses: OmniNode-ai/omnibase_core/.github/workflows/receipt-gate.yml@main
with:
branch-policy-mode: >-
${{
github.event.pull_request.base.ref == 'main'
&& 'main-release'
|| github.event.merge_group.base_ref == 'refs/heads/main'
&& 'main-release'
|| github.event.pull_request.base.ref == 'dev'
&& 'dev-preflight'
|| github.event.merge_group.base_ref == 'refs/heads/dev'
&& 'dev-preflight'
|| 'legacy'
}}
2 changes: 1 addition & 1 deletion .github/workflows/check-handshake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
&& fromJSON(vars.OMNI_PUBLIC_PR_RUNS_ON_JSON || '["ubuntu-latest"]')
|| fromJSON(vars.OMNI_TRUSTED_CI_RUNS_ON_JSON || '["self-hosted","omnibase-ci"]')
}}
timeout-minutes: 5
timeout-minutes: 10

steps:
- name: Checkout repo
Expand Down
Loading
Loading