204 lines
5.5 KiB
Markdown
204 lines
5.5 KiB
Markdown
# Codex Native Runtime - Phase 1 Sign-off Evidence
|
|
|
|
Captured on 2026-04-19.
|
|
|
|
This file records the repo-visible evidence package for the Phase 1 exit gate described in:
|
|
|
|
- [codex-native-runtime-integration-decision.md](./codex-native-runtime-integration-decision.md)
|
|
|
|
## Verdict
|
|
|
|
Phase 1 internal unlock preparation is now complete.
|
|
|
|
What this proves:
|
|
|
|
- `codex-native` can be enabled intentionally through the internal unlock policy
|
|
- old Codex lanes remain the default and `auto` still resolves to the old adapter/API world
|
|
- lane-specific rollout states are explicit and honest:
|
|
- `locked`
|
|
- `ready`
|
|
- `authentication-required`
|
|
- `runtime-missing`
|
|
- those states now survive all the way through:
|
|
- orchestrator runtime status
|
|
- bridge parsing
|
|
- dashboard/runtime copy
|
|
- settings/runtime copy
|
|
- provisioning summaries
|
|
|
|
What this does **not** mean:
|
|
|
|
- `codex-native` should become the default Codex lane
|
|
- `auto` should start resolving to `codex-native`
|
|
- broader approval, plugin, or interactive parity claims are now safe
|
|
- limited internal unlock has already started
|
|
|
|
That is Phase 2 territory.
|
|
|
|
## Command Package
|
|
|
|
### `agent_teams_orchestrator`
|
|
|
|
Executed:
|
|
|
|
```bash
|
|
bun test src/services/runtimeBackends/codexBackendResolver.test.ts \
|
|
src/services/runtimeBackends/registry.agentTeams.test.ts \
|
|
src/services/runtimeBackends/registry.codexNativeStates.test.ts
|
|
```
|
|
|
|
Observed result:
|
|
|
|
- `14 pass`
|
|
- `0 fail`
|
|
|
|
Executed:
|
|
|
|
```bash
|
|
bun run signoff:codex-native-phase1
|
|
```
|
|
|
|
Observed result:
|
|
|
|
- exit code `0`
|
|
- five live CLI rollout scenarios verified:
|
|
- `locked`
|
|
- `internal-unlock-ready`
|
|
- `authentication-required`
|
|
- `runtime-missing`
|
|
- `auto-fallback-stays-old-lane`
|
|
|
|
### `claude_team`
|
|
|
|
Executed:
|
|
|
|
```bash
|
|
pnpm exec vitest run \
|
|
test/main/services/runtime/ClaudeMultimodelBridgeService.test.ts \
|
|
test/main/services/runtime/providerAwareCliEnv.test.ts \
|
|
test/main/services/runtime/ProviderConnectionService.test.ts \
|
|
test/renderer/components/runtime/providerConnectionUi.test.ts \
|
|
test/renderer/components/runtime/ProviderRuntimeBackendSelector.test.ts \
|
|
test/renderer/components/runtime/ProviderRuntimeSettingsDialog.test.ts \
|
|
test/renderer/components/team/dialogs/ProvisioningProviderStatusList.test.ts \
|
|
test/renderer/components/cli/CliStatusVisibility.test.ts \
|
|
test/main/services/parsing/CodexNativePhase0Smoke.test.ts
|
|
```
|
|
|
|
Observed result:
|
|
|
|
- `9` files passed
|
|
- `83` tests passed
|
|
- `0` failures
|
|
|
|
## Live CLI Rollout Evidence
|
|
|
|
Runner:
|
|
|
|
```bash
|
|
runtime status --provider codex --json
|
|
```
|
|
|
|
Observed live scenarios:
|
|
|
|
### Locked
|
|
|
|
- selected backend: `codex-native`
|
|
- resolved backend: `codex-native`
|
|
- provider status: `Codex native runtime ready`
|
|
- native option:
|
|
- `selectable=false`
|
|
- `available=true`
|
|
- `state=locked`
|
|
- `audience=internal`
|
|
- `statusMessage=Ready but locked`
|
|
|
|
### Internal unlock ready
|
|
|
|
- selected backend: `codex-native`
|
|
- resolved backend: `codex-native`
|
|
- provider status: `Codex native runtime ready`
|
|
- native option:
|
|
- `selectable=true`
|
|
- `available=true`
|
|
- `state=ready`
|
|
- `audience=internal`
|
|
- `statusMessage=Ready for internal use`
|
|
|
|
### Authentication required
|
|
|
|
- selected backend: `codex-native`
|
|
- resolved backend: `null`
|
|
- provider status: `Codex native runtime not ready`
|
|
- native option:
|
|
- `selectable=false`
|
|
- `available=false`
|
|
- `state=authentication-required`
|
|
- `audience=internal`
|
|
- `statusMessage=Authentication required`
|
|
|
|
### Runtime missing
|
|
|
|
- selected backend: `codex-native`
|
|
- resolved backend: `null`
|
|
- provider status: `Codex native runtime not ready`
|
|
- native option:
|
|
- `selectable=false`
|
|
- `available=false`
|
|
- `state=runtime-missing`
|
|
- `audience=internal`
|
|
- `statusMessage=Codex CLI not found`
|
|
|
|
### Auto fallback stays on the old lane
|
|
|
|
- selected backend: `auto`
|
|
- resolved backend: `api`
|
|
- provider status: `Resolved to OpenAI API`
|
|
- native option remains visible for internal rollout:
|
|
- `selectable=true`
|
|
- `available=true`
|
|
- `state=ready`
|
|
- `audience=internal`
|
|
- `statusMessage=Ready for internal use`
|
|
|
|
This is the explicit proof that internal unlock availability does **not** mutate `auto` resolution.
|
|
|
|
## App-facing Truth Proof
|
|
|
|
Covered by green targeted tests:
|
|
|
|
- `test/main/services/runtime/ClaudeMultimodelBridgeService.test.ts`
|
|
- `test/main/services/runtime/providerAwareCliEnv.test.ts`
|
|
- `test/main/services/runtime/ProviderConnectionService.test.ts`
|
|
- `test/renderer/components/runtime/providerConnectionUi.test.ts`
|
|
- `test/renderer/components/runtime/ProviderRuntimeBackendSelector.test.ts`
|
|
- `test/renderer/components/runtime/ProviderRuntimeSettingsDialog.test.ts`
|
|
- `test/renderer/components/team/dialogs/ProvisioningProviderStatusList.test.ts`
|
|
- `test/renderer/components/cli/CliStatusVisibility.test.ts`
|
|
|
|
These tests prove:
|
|
|
|
- internal unlock state survives bridge parsing
|
|
- internal unlock env survives provider-aware child env building
|
|
- dashboard and settings do not flatten native rollout states into generic `Connected via API key`
|
|
- locked/runtime-missing/auth-required states stay visible in user-facing copy
|
|
- provisioning summaries keep native rollout state visible
|
|
|
|
## Phase 1 Exit Gate Conclusion
|
|
|
|
✅ The Phase 1 exit gate is satisfied.
|
|
|
|
The lane can now be enabled intentionally by internal users, while:
|
|
|
|
- old Codex lanes remain the safe default
|
|
- `auto` still avoids `codex-native`
|
|
- degraded or blocked native states remain explicit and honest
|
|
|
|
⚠️ The lane should still remain:
|
|
|
|
- non-default
|
|
- explicitly internal
|
|
- rollout-gated
|
|
- conservative in capability claims
|
|
|
|
The next step is **Phase 2 - limited internal unlock**, not broad rollout.
|