Skip to content

Separate the Codex advisory engine from the red team, and require session passkeys - #1265

Merged
nedtwigg merged 5 commits into
mainfrom
codex-engine-followups
Oct 21, 2026
Merged

nedtwigg merged 5 commits into
mainfrom
codex-engine-followups

Conversation

@nedtwigg

@nedtwigg nedtwigg commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

Summary

Follow-ups to #1263 from the first local run of the Codex engine, plus one Hosted cleanup.

  • Vocabulary. The terms are now:

    • the audit: Claude, nightly and on every release, gates releases;
    • the second-opinion audit: Codex, nightly, never gates;
    • the canary: weekly, measures both;
    • the red team: quarterly and before releases that change remote control or Hosted, an open-ended pass over the code and the published guarantees without the FAIL IF lines, on Claude through Anthropic's Cyber Verification Program and on Codex through OpenAI's Daybreak program.

    docs/specs/security-audit.md now has separate "Second-opinion audit" and "Red team" sections. S275 moves with its ID to "Second-opinion audit", and the cadence goes under "Red team". These follow the new names:

    • the rationale;
    • security.md (the /security copy);
    • the security-ci.md S45 pointer;
    • the ci-and-secrets work stream;
    • the local script;
    • the report workflow's comments and step names;
    • the public-body builder;
    • the recall generator;
    • the graph's legend and copy.

    The workflow's run-name is unchanged, since the generator selects runs by it.

  • AUDIT_OPEN_FINDINGS=<file> in scripts/security-audit-local.sh: when set, the script copies that file to audit-open-findings.txt instead of listing the open findings with gh, so the gh login a Codex sandbox reaches doesn't need access to them. A relative path resolves from where the script was run, and a missing file exits 64. It's documented in the script header and the spec.

  • A Codex canary without Claude's scorecard. canary --engine codex --key <run> now prints the publish command with Codex's own counts and no canary_either. The builder accepts the empty input, the codex-recall record carries either: null, and the generator and graph read null as "not computed": that week plots no point on the either line, and its description and run list say "not computed". A null is never counted as zero.

  • Hosted migration 010 deletes the sessions from before 009 that name no passkey, and makes dormouse_relay_sessions."credentialId" NOT NULL. mintSession is the only writer, and both of its callers already pass the passkey. S100 gains "a session is stored naming no passkey", hosted.md drops the note about older sessions living out their expiry, and security-hosted.md adds 010 to its list of files to inspect. Test helpers that wrote passkey-less sessions now insert a passkey first. The passkey-removal canary seed also drops the new NOT NULL, so its seeded tree still passes the hosted tests (checked).

Touches .github/ (workflows/codex-audit-report.yaml comments, an input description and step names; audit/ci-and-secrets.md work stream headings; audit/canaries/passkey-removal-keeps-sessions.patch).

Test plan

  • pnpm test:checks
  • pnpm test:audit: 183 pass. New tests cover AUDIT_OPEN_FINDINGS (file copied, gh never called, missing file refused), the Codex canary publish command without a scorecard, and the builder publishing with no either count. Each one goes red with its fix reverted.
  • website pnpm test: typecheck + 460 vitest. New generator and graph tests cover a null either count, and each goes red with its fix reverted.
  • hosted pnpm test (Docker) and pnpm typecheck. A new migration test applies 001–009, writes a session with a passkey and one without, applies 010, and checks that only the first survives and that a new passkey-less session is refused. It goes red with either statement of 010 removed. One unrelated voice test timed out once and passed on rerun.
  • Seeded tree for passkey-removal-keeps-sessions: hosted relay, workers, relay-room, and migrations tests pass.

🤖 Generated with Claude Code

nedtwigg and others added 3 commits October 20, 2026 20:18
Migration 010 deletes the sessions minted before 009, which name no
passkey, and makes dormouse_relay_sessions."credentialId" NOT NULL.
mintSession, the one writer, already sets it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The audit checks every FAIL IF: Claude in CI is the release gate and
Codex its advisory engine. The red team is the separate quarterly pass
over the code and the published guarantees without the FAIL IF lines.
security-audit.md splits the two into their own sections, and the
script, workflow, builder, generator, and /security copy follow.

AUDIT_OPEN_FINDINGS=<file> hands the local runner's domains the open
findings from a file instead of listing them with gh, so the gh login a
Codex sandbox reaches needs no read on them.

A Codex canary without Claude's scorecard now prints its publish
command with the either count left empty. The builder accepts it, the
codex-recall record carries either: null, and the recall generator and
graph read that as not computed: no point on the either line that week.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The test helpers that wrote sessions with no passkey now insert one, and
the passkey-removal canary seed drops the NOT NULL from 010 along with
the passkey from mintSession, so its tree still passes the hosted tests.
S100's wording keeps the clause the seed names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Deploying mouseterm with  Cloudflare Pages  Cloudflare Pages

Latest commit: 3ee47f8
Status: ✅  Deploy successful!
Preview URL: https://070274d8.mouseterm.pages.dev
Branch Preview URL: https://codex-engine-followups.mouseterm.pages.dev

View logs

The audit (Claude, nightly and on every release) gates releases; the
second-opinion audit (Codex, nightly) never does; the canary (weekly)
measures both; the red team (quarterly, and before releases that change
remote control or Hosted) runs on Claude through Anthropic's Cyber
Verification Program and on Codex through OpenAI's Daybreak program.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comment thread docs/specs/security-audit.md Resolved
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nedtwigg
nedtwigg merged commit 5dab5b7 into main Oct 21, 2026
11 checks passed
@nedtwigg nedtwigg mentioned this pull request Oct 21, 2026
7 tasks done
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.

2 participants