Gate Codex support on a real-host plugin and hook smoke test
Severity: high | Confidence: 0.98 | Effort: M
Where:
- docs/codex-parity-testing.md:3-18
- .github/workflows/ci.yml:442-453
- .github/workflows/ci.yml:745-775
- plugins/ca-codex/.codex-plugin/plugin.json:1-13
- .github/scripts/test_codex_adapter.py:549-590
Evidence: The live-parity runbook explicitly says the static adapter test cannot prove that Codex delivers payloads, runs trusted hooks, or honors a block, and records only a one-time Windows verification on Codex 0.144.1. Required CI invokes Python scripts directly for adapter parity and tolerates codex --version being absent before validating a locally maintained 0.144.1 schema baseline. The shipped manifest nevertheless advertises Codex >=0.143.0 and full blocking pre-exec/pre-write enforcement. No workflow installs or launches a real Codex runtime. The current workstation has codex-cli 0.144.4, confirming a runnable external host exists even though the gate never exercises it.
Impact: A Codex protocol, trust, hook-discovery, payload, structured-deny, or skill-loading regression can merge while every required parity check is green. Because the missing boundary is the host invoking the guard, static tests can prove the guard's answer yet miss the more dangerous outcome where Codex never calls it or ignores its block.
Recommendation: Add a bounded real-Codex fixture lane that installs exact supported runtime versions, installs/trusts the checked-out ca-codex package, starts in a disposable repository, and proves SessionStart injection plus one allow and representative EXEC/WRITE block through the actual host. Keep a nonblocking latest canary separate from the required supported baseline.
Acceptance criteria:
- Required CI launches the checked-out plugin through a real Codex runtime at the documented minimum or explicitly narrows the supported version claim to the versions continuously tested.
- The live fixture proves SessionStart context injection, skill discovery, an ordinary allowed write, an apply_patch H-18 or H-05 block, and a shell H-20 or H-03 block through Codex itself.
- A fixture with untrusted/unregistered hooks fails visibly rather than passing on static adapter results.
- A nonblocking latest-Codex canary reports upstream protocol drift independently of the pinned required lane.
Gate Codex support on a real-host plugin and hook smoke test
Severity: high | Confidence: 0.98 | Effort: M
Where:
Evidence: The live-parity runbook explicitly says the static adapter test cannot prove that Codex delivers payloads, runs trusted hooks, or honors a block, and records only a one-time Windows verification on Codex 0.144.1. Required CI invokes Python scripts directly for adapter parity and tolerates codex --version being absent before validating a locally maintained 0.144.1 schema baseline. The shipped manifest nevertheless advertises Codex >=0.143.0 and full blocking pre-exec/pre-write enforcement. No workflow installs or launches a real Codex runtime. The current workstation has codex-cli 0.144.4, confirming a runnable external host exists even though the gate never exercises it.
Impact: A Codex protocol, trust, hook-discovery, payload, structured-deny, or skill-loading regression can merge while every required parity check is green. Because the missing boundary is the host invoking the guard, static tests can prove the guard's answer yet miss the more dangerous outcome where Codex never calls it or ignores its block.
Recommendation: Add a bounded real-Codex fixture lane that installs exact supported runtime versions, installs/trusts the checked-out ca-codex package, starts in a disposable repository, and proves SessionStart injection plus one allow and representative EXEC/WRITE block through the actual host. Keep a nonblocking latest canary separate from the required supported baseline.
Acceptance criteria: