Skip to content

v3 alpha: ship the first verifiable OCI worker - #10

Merged
descambiado merged 3 commits into
mainfrom
codex/oci-worker-proof-v3
Jul 28, 2026
Merged

v3 alpha: ship the first verifiable OCI worker#10
descambiado merged 3 commits into
mainfrom
codex/oci-worker-proof-v3

Conversation

@descambiado

Copy link
Copy Markdown
Owner

Why

BOFA v3 had a signed worker protocol but no deployable artifact proving it. This PR turns that contract into one deliberately narrow OCI worker that can be built, executed and verified without pretending that cloud provisioning already exists.

What changes

  • adds a non-root one-job worker image with a read-only-runtime contract and an immutable deny-by-default catalog
  • initially allows only the offline forensics/hash_calculator adapter with evidence_read and network_mode=none
  • binds every accepted JobSpec to the exact launched image reference/digest, observed network mode and baked adapter catalog
  • actively kills subprocesses that exceed their signed output quota or TTL
  • adds signed fixture generation plus python tools/demo_worker_oci.py --build for a complete local proof
  • pins the Dockerfile frontend, Python base image, Python versions, Linux amd64/arm64 wheels and third-party Actions by immutable SHA-256/commit
  • adds a dedicated workflow that builds, scans and executes on PRs; on main it publishes a multi-arch candidate with SBOM/provenance, scans it, signs and verifies the digest with Cosign, then promotes sha-* and edge
  • updates the BOFA/SotyHub boundary and status documentation

Verification

  • locked-down Docker proof: build -> signed JobSpec -> one-shot execution -> receipt verification
  • local image: UID/GID 65532, 53.3 MB, 4.5 KB allowlisted build context
  • linux/amd64 build and execution: pass
  • linux/arm64 build: pass
  • worker protocol and OCI contract suites: pass, including image mismatch, catalog denial, replay, active output cutoff and TTL
  • runtime hardening, catalog, control plane, bounty, auth, fabric, AI and execution API suites: pass
  • root and worker pip-audit: no known vulnerabilities
  • frontend lint: 0 errors / 8 existing Fast Refresh warnings
  • frontend typecheck and production build: pass
  • npm high/critical gate: pass; two documented moderate React Router advisories remain

Honest limits

  • this image is an offline proof worker, not Kali and not a general tool container
  • GHCR publication/signing occurs only after merge to main
  • no cloud provider, evidence-upload credential, cost meter or teardown attestation is added here
  • OCI/remote API profiles remain fail-closed until a dispatcher consumes the published digest

Next milestone

Connect one dispatcher to this digest, return the receipt plus teardown/cost events, and expose one complete defensive run from SotyHub.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 194919288c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +116 to +118
--env BOFA_IMAGE_REFERENCE=ghcr.io/descambiado/bofa-worker \
--env BOFA_IMAGE_DIGEST="${FIXTURE_IMAGE_DIGEST}" \
bofa-worker:ci

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Bind the check to the image actually launched

In the inspected worker-image.yml container test, the signed fixture and BOFA_IMAGE_DIGEST both use the constant all-a digest, while Docker actually launches the mutable bofa-worker:ci tag. Because WorkerRuntime only compares the signed digest with this caller-supplied environment value, the test succeeds even if the launched image is not the signed image; the same dispatcher mistake in production would bypass the advertised immutable-image binding. Resolve the built image's real ID/digest and launch that exact identity rather than supplying an unrelated fixture value.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2fd05c27b0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread worker/catalog.json
"evidence_read"
],
"network_modes": [
"none"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Align the worker network mode with the OCI profile

When BOFA_OCI_WORKER_IMAGE and its digest are configured for this image, ExecutionFabric._default_profiles() enables oci-ephemeral but signs every manifest with network_mode="restricted" (core/execution/fabric.py:64-78). This catalog permits only none, while WorkerRuntime.inspect() requires the signed and observed modes to be identical, so even the catalogued hash job returned by /execution/preflight will be denied with runtime_network_mode; the new fixture misses this because it constructs a separate none profile. Make the control-plane OCI profile match this image or expose a dedicated profile for its catalog.

Useful? React with 👍 / 👎.

@descambiado
descambiado merged commit ff76d0f into main Jul 28, 2026
5 checks passed
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