Live: ACP bind smoke (/acp spawn ... --bind here)

Example:

APUS_LIVE_ACP_BIND=1 \
  APUS_LIVE_ACP_BIND_AGENT=claude \
  pnpm test:live src/server/gateway/gateway-acp-bind.live.test.ts

Docker recipe:

pnpm test:docker:live-acp-bind

Single-agent Docker recipes:

pnpm test:docker:live-acp-bind:claude
pnpm test:docker:live-acp-bind:codex
pnpm test:docker:live-acp-bind:droid
pnpm test:docker:live-acp-bind:gemini
pnpm test:docker:live-acp-bind:opencode

Docker notes:

Live: Codex app-server harness smoke

Local recipe:

APUS_LIVE_CODEX_HARNESS=1 \
  APUS_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 \
  APUS_LIVE_CODEX_HARNESS_MCP_PROBE=1 \
  APUS_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1 \
  APUS_LIVE_CODEX_HARNESS_MODEL=openai/gpt-5.6-luna \
  pnpm test:live -- src/server/gateway/gateway-codex-harness.live.test.ts

Docker recipe:

pnpm test:docker:live-codex-harness

The Docker lane uses a seccomp profile based on Docker's default policy with the namespace setup operations required by Codex's native Bubblewrap sandbox. It keeps no-new-privileges enabled and checks native sandbox startup before making provider requests. The runner's kernel and AppArmor policy must also permit nested sandbox setup. On disposable CI/Testbox runners with AppArmor, the lane loads a temporary profile for its own container and removes it after the container exits. It preserves Docker's other restrictions and does not change the default profile or kernel settings. Loading requires an available apparmor_parser and noninteractive permission to load profiles.

The subagent check also enables Codex's V2 native children by default. Explicit APUS_CODEX_APP_SERVER_ARGS overrides are forwarded unchanged; disabling the subagent check leaves the native argument defaults unchanged. Manual compaction configurations supply explicit native arguments that take precedence over this environment default.

Restart and history stress:

APUS_LIVE_CODEX_HARNESS_RESUME_STRESS=1 \
pnpm test:docker:live-codex-harness

Fan-out, large-output, compaction, and restart stress:

APUS_LIVE_CODEX_HARNESS_AUTH=api-key \
  APUS_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=1 \
  APUS_LIVE_CODEX_HARNESS_SUBAGENT_COUNT=8 \
  APUS_LIVE_CODEX_HARNESS_RESUME_STRESS=1 \
  APUS_LIVE_CODEX_HARNESS_COMPACTION_STRESS=1 \
  pnpm test:docker:live-codex-harness

Full native Codex 922000 input-budget compaction stress:

APUS_LIVE_CODEX_HARNESS=1 \
  APUS_LIVE_CODEX_HARNESS_AUTH=api-key \
  APUS_LIVE_CODEX_HARNESS_FULL_CONTEXT=1 \
  APUS_LIVE_CODEX_HARNESS_MODEL_CATALOG=/absolute/path/to/models-api-1m.json \
  APUS_LIVE_CODEX_HARNESS_MODEL=openai/gpt-5.6-luna \
  APUS_LIVE_CODEX_HARNESS_THINKING=low \
  APUS_LIVE_CODEX_HARNESS_COMPACTION_STRESS_TURNS=8 \
  APUS_LIVE_CODEX_HARNESS_LARGE_OUTPUT_BYTES=800000 \
  APUS_LIVE_CODEX_HARNESS_DEBUG=1 \
  node --import tsx scripts/test-live.mts --quiet src/server/gateway/gateway-codex-harness.live.test.ts

GPT-5.6 native Codex matrix:

APUS_LIVE_CODEX_HARNESS_AUTH=api-key \
  APUS_LIVE_CODEX_HARNESS_TARGETS='openai/gpt-5.6-terra=ultra,openai/gpt-5.6-luna=max' \
  pnpm test:docker:live-codex-harness