Skip to content

Complete Codex conversation-domain typed surface#220

Merged
VolkerChristian merged 7 commits into
masterfrom
codex/phase-a1-1-conversation-domain
Jul 24, 2026
Merged

Complete Codex conversation-domain typed surface#220
VolkerChristian merged 7 commits into
masterfrom
codex/phase-a1-1-conversation-domain

Conversation

@VolkerChristian

@VolkerChristian VolkerChristian commented Jul 23, 2026

Copy link
Copy Markdown
Member

Phase A1.1: stable conversation-domain typed surface

This is the single draft PR and feature branch for the complete A1.1 architectural milestone. It will remain draft, open, and unmerged while all six dependency-aware commits are built and verified.

Start state

  • Actual base: a226e3df5efd55b5dbef12cb1760674388909d7c (matches the prompt's expected master)
  • A1.0 merge commit cfc129ec879c70fc09c165035f6d1390f61289b8: verified ancestor
  • PR Establish Codex typed API foundation and operation contracts #218: verified merged
  • Branch: codex/phase-a1-1-conversation-domain
  • Baseline tree: clean
  • Resources: 28 logical CPUs / 62 GiB RAM; validation parallelism: 12

Required six commits

  1. 6953b9205d900c72cdb0a3389b0c8ff9037bfd79 — Audit and freeze Codex A1.1 implementation batches
  2. 8007d602915a402f9c29661e162142990060c744 — Add Codex conversation union and value foundations
  3. 8fc94aa93fffb11038984f81f11d9a23878eb230 — Complete Codex ThreadItem and ResponseItem models
  4. 61f0ffd16781d9c465b7c983e3055591c938377b — Complete Codex thread and turn operations
  5. bb43f4f022fe5b1fe354c98b089d0991313be3eb — Complete Codex A1.1 notifications and preservation
  6. b087c1931ea348df330d323599087aefc1490d96 — Close and verify the Codex A1.1 slice

Corrected A1.1 taxonomy

The denominator is exactly 151 registry identities:

Category Count
Client-request method identities 22
Server-notification method identities 37
ThreadItem discriminator identities 18
ResponseItem discriminator identities 16
Nested tagged-union identities 58
Total 151

There are also exactly 22 paired successful-result roots. They are implementation obligations, not additional registry identities; this PR never reports 173 as the A1.1 denominator. A1.1 has zero client notifications, server requests, and server responses.

Classification: StablePublicRoot 59, StableItemRoot 34, SharedCommon 26, RootOwnedNestedUnion 16, SharedWithinSlice 16. Module ownership: ThreadsTurnsSessions 125, Common 26.

Mechanically frozen start: 26 Partial / 125 NotImplemented. Starting global metrics: 16 Complete / 34 Partial / 289 NotImplemented / 48 NotApplicable. Expected exact closure after Commit 5: A1.1 151 Complete / 0 Partial / 0 NotImplemented; global 167 Complete / 8 Partial / 164 NotImplemented / 48 NotApplicable. The exact residual partial set remains initialize, initialized, error, model/rerouted, account/chatgptAuthTokens/refresh, and the three approval/input server requests.

Operation map and result contracts

All operations remain on the grouped typed facade and reuse the one RawProtocol engine:

Wire method Public method Result kind/type
thread/archive typed::Threads::archive Unit
thread/compact/start typed::Threads::startCompaction Unit
thread/delete typed::Threads::remove Unit
thread/fork typed::Threads::fork Concrete ThreadForkResponse
thread/goal/clear typed::Threads::clearGoal Concrete ThreadGoalClearResponse
thread/goal/get typed::Threads::getGoal Concrete ThreadGoalGetResponse
thread/goal/set typed::Threads::setGoal Concrete ThreadGoalSetResponse
thread/inject_items typed::Threads::injectItems Unit
thread/list typed::Threads::list Concrete ThreadListResponse
thread/loaded/list typed::Threads::listLoaded Concrete ThreadLoadedListResponse
thread/metadata/update typed::Threads::updateMetadata Concrete ThreadMetadataUpdateResponse
thread/name/set typed::Threads::setName Unit
thread/read typed::Threads::read Concrete ThreadReadResponse
thread/resume typed::Threads::resume Concrete ThreadResumeResponse
thread/rollback deprecated typed::Threads::rollback Concrete ThreadRollbackResponse
thread/shellCommand typed::Threads::shellCommand Unit
thread/start typed::Threads::start Concrete ThreadStartResponse
thread/unarchive typed::Threads::unarchive Concrete ThreadUnarchiveResponse
thread/unsubscribe typed::Threads::unsubscribe Concrete ThreadUnsubscribeResponse
turn/interrupt typed::Turns::interrupt Unit
turn/start typed::Turns::start Concrete TurnStartResponse
turn/steer typed::Turns::steer Concrete TurnSteerResponse

Result-kind total: 7 Unit / 15 Concrete. No sessions() facade is planned.

Frozen notification/item/union surface

Notifications (37): item/agentMessage/delta, item/commandExecution/outputDelta, item/commandExecution/terminalInteraction, item/completed, item/fileChange/outputDelta, item/fileChange/patchUpdated, item/mcpToolCall/progress, item/plan/delta, item/reasoning/summaryPartAdded, item/reasoning/summaryTextDelta, item/reasoning/textDelta, item/started, thread/archived, thread/closed, thread/compacted, thread/deleted, thread/goal/cleared, thread/goal/updated, thread/name/updated, thread/realtime/closed, thread/realtime/error, thread/realtime/itemAdded, thread/realtime/outputAudio/delta, thread/realtime/sdp, thread/realtime/started, thread/realtime/transcript/delta, thread/realtime/transcript/done, thread/settings/updated, thread/started, thread/status/changed, thread/tokenUsage/updated, thread/unarchived, turn/completed, turn/diff/updated, turn/moderationMetadata, turn/plan/updated, turn/started.

ThreadItem (18): agentMessage, collabAgentToolCall, commandExecution, contextCompaction, dynamicToolCall, enteredReviewMode, exitedReviewMode, fileChange, hookPrompt, imageGeneration, imageView, mcpToolCall, plan, reasoning, sleep, subAgentActivity, userMessage, webSearch. using Item = ThreadItem remains.

ResponseItem (16, distinct from ThreadItem): agent_message, compaction, compaction_trigger, context_compaction, custom_tool_call, custom_tool_call_output, function_call, function_call_output, image_generation_call, local_shell_call, message, other, reasoning, tool_search_call, tool_search_output, web_search_call.

Nested families (58): AgentMessageInputContent 2, AskForApproval 4, CommandAction 4, ContentItem 3, DynamicToolCallOutputContentItem 2, FunctionCallOutputContentItem 3, LocalShellAction 1, PatchChangeKind 3, ReasoningItemContent 2, ReasoningItemReasoningSummary 1, ResponsesApiWebSearchAction 4, SandboxPolicy 4, SessionSource 7, SubAgentSource 5, ThreadStatus 4, UserInput 5, WebSearchAction 4.

Full schema-definition closure

The 100 stable seed definitions reach exactly 164 named definitions and 698 nested schema paths.

  • Definition dispositions: 127 PublicHandwrittenType, 26 OpenStringEnum, 10 ReusedExistingType, 1 StrongIdentifier.
  • Definition direction: 29 encode-only, 121 decode-only, 14 bidirectional.
  • Schema-path direction: 107 encode-only, 554 decode-only, 37 bidirectional.
  • Path dispositions: 92 public, 76 private codec, 14 protocol-defined opaque JSON, 360 reused scalar/container, 156 strong identifier.
  • Presence matrix: 4 defaulted values, 413 required values, 5 required-nullable, 15 optional values, 218 optional-nullable tri-state fields.
  • Cross-slice ownership: 122 A1.1-local, 39 A1.1-owned/forward-shared, exactly 3 prior-slice reuse (CodexErrorInfo, NonSteerableTurnKind, TurnError).
  • Dependency batches: B2 12 definitions / 26 identities; B3 32 / 50; B4 72 / 38 plus all 22 results; B5 48 / 37.

Every path has an exact C++ owner/member/base/wrapped type mapping. The only opaque JSON positions are the 14 paths explicitly authorized by the vendored protocol schemas.

Fixture and mutation plan

Frozen obligations: 173 positive roles, 104 current positive records, 83 planned fixtures; 810 required-field removals; 477 optional omissions; 435 omitted/null/value nullable cases for each state; 1,287 wrong-type cases (1,279 applicable, 8 explicitly opaque); 151 future discriminators; 118 applicable missing discriminators; 4 applicable discriminator conflicts; 130 applicable malformed-known cases; 55 identity-specific future-open-enum occurrences. The independent Draft-07 fixture path remains the authority.

At the Commit 5 boundary the indexed corpus contains 3,714 records: 1,415 positive and 2,299 negative. All A1.1 positive obligations are current; the 798-record notification production report contains 161 positive and 637 exact negative records.

The A1.0 Unit regression copies ThreadArchiveResponse, adds a property, proves the contract becomes Concrete, and proves the reviewed seven-Unit identity ratchet fails. It does not impose the false inverse on Concrete schemas.

Public/API and dispatch design

Public types, grouped facade names, compatibility aliases/forwarders, strong IDs, open string enums, tri-state values, and explicit direction-specific unknown alternatives are handwritten. Private repetitive codec descriptors are generated and checked in. Production dispatch always begins at the exact canonical ProtocolSurfaceRegistry row; generated reports/descriptors are not a second runtime authority. One transport, JSONL engine, ID allocator, pending registries, generation boundary, cancellation/order mechanism, occurrence-token mechanism, and observer sets remain.

Unknown future discriminators/open-enum values are ForwardCompatibility; malformed known payloads are MalformedKnownPayload / ProtocolWarning. Diagnostics retain identity/path without payload secrets, and typed decoding does not fail the connection.

Commit 2 implementation result

Commit 2 closes the exact dependency-planned B2 batch: 26/26 SharedCommon identities are CompleteAskForApproval 4, CommandAction 4, DynamicToolCallOutputContentItem 2, PatchChangeKind 3, SandboxPolicy 4, UserInput 5, and WebSearchAction 4. The staged A1.1 state is now 26 Complete / 26 Partial / 99 NotImplemented; staged global metrics are 42 Complete / 34 Partial / 263 NotImplemented / 48 NotApplicable. No later-batch identity was promoted.

The B2 closure contains 12 named definitions: 9 PublicHandwrittenType, 2 OpenStringEnum, and 1 StrongIdentifier; directionality is 7 bidirectional / 5 decode-only. It introduces the reusable OptionalNullable<T> tri-state, strong path/range/value types, direction-specific aggregates, raw-retaining explicit unknown alternatives, and open ImageDetail / NetworkAccess values. TurnInput remains a compatibility alias for canonical UserInput; existing turn encoding delegates to the shared codec.

The generated private descriptor artifact maps exactly 26 canonical ProtocolSurfaceKey values to 26 distinct production targets (13 bidirectional, 13 decode-only; 3 scalar-string, 1 externally tagged, 22 internally tagged). Validation now rejects missing/duplicate/wrong targets, descriptor/row category-domain-field drift—including coherent row+descriptor drift—stale descriptors, shape/direction mismatches, false completeness, demotion, and retained targets after row removal with exact diagnostic-code multisets.

The indexed corpus now has 482 records: 352 positive and 130 negative. B2 adds/exercises 26 base alternatives, 21 optional-omitted cases, 12 explicit-null cases, six known open-enum values, seven future discriminators, two future enum fixtures, 44 required/discriminator removals, and 65 nested/discriminator wrong-type mutations. All 15 bidirectional omitted/null supplements re-encode exactly; future open-enum values, including the schema-valid empty string, round-trip without inventing a closed-enum restriction. Aggregate mutation accounting is 1,373 required-field rejections, 1,360 wrong-type rejections plus 13 protocol-unconstrained exclusions, and 1,126 accepted optional omissions.

Commit 3 implementation result

Commit 3 closes the exact dependency-planned B3 batch: 50/50 identities are Complete — all 18 ThreadItem alternatives, all 16 distinct ResponseItem alternatives, and 16 dependency-closed nested alternatives across AgentMessageInputContent 2, ContentItem 3, FunctionCallOutputContentItem 3, LocalShellAction 1, ReasoningItemContent 2, ReasoningItemReasoningSummary 1, and ResponsesApiWebSearchAction 4. The staged A1.1 state is now 76 Complete / 18 Partial / 57 NotImplemented; staged global metrics are 92 Complete / 26 Partial / 221 NotImplemented / 48 NotApplicable. No B4/B5 identity was promoted.

The B3 closure contains 32 named definitions: 22 PublicHandwrittenType and 10 OpenStringEnum; directionality is 31 decode-only / 1 bidirectional. ThreadItem and ResponseItem have distinct generated private target families and direction-specific unknown alternatives. Production decoding starts at the exact canonical registry row; the registry/descriptor validator now covers missing, duplicate, swapped, category/domain/field drift, descriptor-only and row-only drift, coherent drift, demotion, stale target, removed row, and false completeness with exact diagnostic-code multisets.

The indexed corpus is now exactly 1,324 records: 654 positive / 670 negative, with 1,325 packaged JSON files including index.json. B3 adds exact known/unknown/malformed coverage for every item/nested alternative, 257 applicable wrong-nested-type cases, 24 helper positives, 24 future/empty open-enum cases, and exactly seven audited protocol-opaque B3 leaf positions. Numeric tests lock int32, int64, uint32, and uint64 bounds and fractional rejection. The 39 B3 definition factories plus both item-local MessagePhase factories have exact value and isKnown() ratchets.

The ten newly known, A2-unmodeled ThreadItem alternatives preserve their prior UnknownItem observability. Stable-ID items remain on ItemUpserted with exact raw/common metadata and the byte-equivalent Frontend Protocol v1 metadata-only snapshot; ID-less items retain the existing bounded, original-size-accounted, recursively redacted extension fallback. The existing eight item reducers retain their prior semantics. No frontend or application production file changed in this commit.

Commit 4 implementation result

Commit 4 closes the exact dependency-planned B4 batch: 38/38 identities are Complete — all 22 stable client requests plus SessionSource 7, SubAgentSource 5, and ThreadStatus 4. The staged A1.1 state is 114 Complete / 12 Partial / 25 NotImplemented; staged global metrics are 130 Complete / 20 Partial / 189 NotImplemented / 48 NotApplicable. The residual rows are exclusively the 37 B5 notifications; no unrelated slice changed.

All 19 thread operations and three turn operations use the grouped facade and the one existing RawProtocol. The exact contracts are 7 Unit / 15 Concrete. One Unit type is shared; TurnInterruptResult remains its compatibility alias. The six pre-existing operation families retain exact source-compatible overloads; canonical start, list, and read use constrained forwarding templates to avoid brace-init ambiguity. Deprecated thread/rollback remains explicitly exposed. There is no sessions facade, second engine, pending map, worker, frontend operation, or BackendCommand.

The B4 closure is exactly 72 definitions: 50 PublicHandwrittenType, 11 OpenStringEnum, 10 ReusedExistingType, and 1 StrongIdentifier; directionality is 5 bidirectional / 38 decode-only / 29 encode-only. Its 227 schema paths comprise 210 properties, 14 array elements, and three map values with 99 required, three optional, 104 optional-nullable, and four defaulted positions.

Production evidence contains exactly 22 operation descriptors; 1,166 result records (403 valid / 763 negative); 73 aggregate/value records; 60 B4 union records; and four active-flag records. All 1,303 referenced fixtures and all 25 production-source records match their recorded paths, byte counts, and SHA-256 values.

Commit 4 validation boundary:

  • GCC 15.3 Debug configure with tests/apps: pass; full build at parallel 12: pass.
  • Focused operation/codec/registry/fixture/facade boundary: 17/17 pass.
  • The first pushed C4 CI run built successfully but timed out the expanded fixture infrastructure at its old 180-second ceiling (261/262 passed); the timeout was amended to 300 seconds, its guarded operation report regenerated, and the detached full-build/focused boundary rerun before force-updating this same branch.
  • Staged installed consumer, source package, and Frontend Protocol v1 guards: pass.
  • Backend and backend-client Unix acceptance tests initially hit sandbox EPERM on temporary AF_UNIX bind and passed unsandboxed: 2/2.
  • Independent API/engine and evidence reviews: pass; exact canonical B4 tree reproduced after history repair.
  • Production diff under src/ai/openai/codex/frontend/, src/apps/codex-backend/, and src/apps/codex-backend-client/: empty.
  • AppServerClient remains two pointers, typed::Client one pointer; git diff --check: pass.

Test-integrity accounting for Commit 4: 20 test files changed (+5,422/-117), including 18 component/installed files (+5,371/-114); tests/policy/ is unchanged and the installed consumer adds five lines. Four focused tests are new. No A0/A1.0 regression was deleted, renamed, merged, or weakened; existing protocol, reducer, codec, fixture, surface, registry, and facade assertions remain and gain exact contract, raw-retention, field-path, descriptor, compatibility-signature, and diagnostic-code coverage.

Commit 5 implementation result

Commit 5 closes the exact dependency-planned B5 batch: 37/37 server-notification identities are Complete. The final A1.1 exact ratchet is 151 Complete / 0 Partial / 0 NotImplemented / 0 NotApplicable; global metrics are 167 Complete / 8 Partial / 164 NotImplemented / 48 NotApplicable. No unrelated slice was promoted.

The B5 closure is exactly 48 named definitions and all 37 stable inbound notifications have complete public payload types, raw envelope retention, exact registry-first dispatch, and generated private codec descriptors. The descriptor table has 39 server-notification targets: the exact 37 A1.1 rows plus the two residual typed A1.0 rows error and model/rerouted. Stable realtime inbound methods are typed; experimental outbound realtime methods remain absent.

The notification production report contains exactly 798 records: 161 positive and 637 negative (37 base, 65 optional omission, 57 nullable state, 2 required-nullable, 279 missing-required, and 358 wrong-type records). The full indexed corpus is 3,714 records: 1,415 positive / 2,299 negative, with 3,715 packaged JSON files including index.json.

All existing 12 modeled reducer arms remain unchanged. The 25 newly typed, A2-unmodeled notification methods route explicitly through preserveUnmodeledTypedEvent(...) to bounded CodexExtensionReceived state with registry identity, bounded raw payload, diagnostic, legacy optional decode error, original-size accounting, and existing snapshot-boundary redaction. High-volume realtime audio/transcript deltas use this same bounded path and do not accumulate unbounded state.

Commit 5 validation boundary:

  • GCC 15.3 Debug configure with tests/apps: pass; full build at parallel 12: pass.
  • Focused notification/registry/fixture/backend/frontend/facade boundary: 16/16 pass.
  • Backend/backend-client Unix acceptance boundary: 4/4 pass after the sandbox's expected AF_UNIX-bind EPERM was rerun with host permissions.
  • Canonical registry, generated descriptors, operation and notification reports, fixture generation/check/independent Draft-07 validation, audit/closure, docs, exact final ratchets, and git diff --check: pass.
  • Independent production and adversarial reviews: pass; exact 151/0/0/0 and 167/8/164/48 metrics reproduced.
  • Production diff under src/ai/openai/codex/frontend/, src/apps/codex-backend/, and src/apps/codex-backend-client/: empty. No outbound realtime or guardian operation was exposed.

Test-integrity accounting for Commit 5: 9 test files changed (+2,015/-41), including two new focused notification tests; tests/policy/ and tests/installed/codex/ are unchanged. No A0/A1.0 regression was deleted, renamed, merged, or weakened. Existing event-decoder partial fixtures remain as explicit malformed-known exact-code cases, while schema-complete fixtures add typed-field/raw-retention assertions; registry, fixture, audit, coverage, and CMake tests retain prior assertions and add exact B5 target, field-path, mutation, preservation, bounds, and diagnostic-code ratchets.

Commit 6 closure result

Commit 6 contains no scheduled runtime implementation. It adds the generated exact 151-key closure report, exact documentation-list guards, cumulative test-integrity accounting, installed API/layout coverage, source-package offline regeneration, and a literal CPack binary-package audit. The only production-tree change is listing the already-generated private ServerNotificationCodecDescriptors.inc in the target source inventory; it remains private and uninstalled.

The installed audit pins exactly 27 public Codex headers, compiles representative new thread operations, turn steer, Unit, complete Thread/Turn, ThreadItem, ResponseItem, shared unions, all canonical notification alternatives, distinct unknown alternatives, and intentional deprecated compatibility APIs. It proves AppServerClient remains two pointers and typed::Client one pointer, and that all three Codex libraries retain SOVERSION 1.

The source package retains 3,715 fixture files (3,714 indexed records), 13 evidence files, and seven offline tools, then re-runs schema/source integrity, contracts, descriptors, operation/notification coverage, audit/type closure, fixture generation/check/validation, and the final closure report from the extracted archive. The binary audit produces exactly three Codex component TGZ archives and verifies the exact 27-header and three .so.1 inventories while rejecting schemas, evidence, fixtures, generators, tests, docs, private descriptors, JSON, Python, and C++ source.

Commit 6 validation boundary:

  • GCC 15.3 Debug configure with tests/apps: pass; full build at parallel 12: pass.
  • Focused closure/package/API/registry/codec set: 25/25 pass in 112.46s.
  • Vendored schema/contracts/Draft-07/full fixture-mutation set: 6/6 pass; exhaustive fixture infrastructure 163.21s.
  • Unix/frontend/application/raw-integration set: 8 pass, typed credential/quota integration skipped through the established gate.
  • Direct source evidence, contracts, registry, all descriptor/report generators, audit/type closure, final closure report, docs, fixture check/validation, and git diff --check: pass.
  • Source package final-tree rerun: pass in 69.11s; binary TGZ audit: pass in 9.75s; staged installed consumer: pass in 12.07s.
  • Registered inventory at this boundary: 267 total tests, 96 Codex-labeled; both new tests are present.
  • Test-integrity delta: 7 test files, +446/-15; component/Codex 1 file +16/-0; policy unchanged; installed consumers 2 files +96/-9. Cumulative base-to-C6: 31 test files +14,156/-216, component/Codex 25 +13,549/-203, policy byte-identical, installed 2 +150/-7.
  • No test was deleted, renamed, merged, disabled, or weakened; timeout-only changes retain all assertions.

Backend/frontend boundary

Implementation preserves all existing modeled reducers. New typed but A2-unmodeled notifications use the bounded extension-preservation path; newly typed items preserve the existing ItemUpserted/metadata-only snapshot path with the bounded extension fallback for ID-less items. There is no new BackendCommand, canonical-state meaning, frontend command/event/snapshot field, remote operation, or security decision. Frontend Protocol v1/schema and codex-backend-client behavior remain unchanged. No SOVERSION changed; AppServerClient and typed::Client retain their PIMPL layouts.

Commit 1 validation boundary

  • Clean GCC 15.3 Debug configure with tests/apps: pass (pinned dependency fetch required network approval).
  • Full build, parallel 12: pass.
  • ctest -N: 253 tests; CodexA11AuditToolTest present as test 173.
  • Focused audit/contracts/generated/source-package/staged-install set: 5/5 pass.
  • Codex label: all 81 runnable tests pass; 4 AF_UNIX tests initially hit sandbox EPERM and passed unsandboxed; CodexTypedAppServerIntegrationTest skipped through its established credential/quota gate.
  • Deterministic audit generation/check: pass; start-state SHA-256 1614414e…c705, plan d95e81e8…1045, closure 89ce92cf…8d22.
  • Exact audit mutation codes include taxonomy/identity/result/status/assignment/contract/batch/closure/fixture plus DirectionalityMismatch, DiscriminatorLiteralMismatch, CrossSliceOwnershipMismatch, OptionalNullableMappingMismatch, StrongIdentifierMappingMismatch, CppPathMappingMismatch, and CppDefinitionMappingMismatch.
  • git diff --check: pass.

Test-integrity accounting for Commit 1: no A0/A1.0 test was deleted, renamed, merged, or weakened. The operation-contract test adds the exact Unit mutation. Source-package and staged-installed-consumer tests retain their old assertions and add exact private/source evidence guards. The audit test is new and asserts exact diagnostic multisets. CMake only registers the new test.

Commit 2 validation boundary

  • Fresh GCC 15.3 Debug configure with tests/apps: pass; full build at parallel 12: pass.
  • ctest -N: 254 registered tests; CodexConversationCodecTest is present.
  • Full Codex label after final review fixes: 83/83 accounted for, 82 passed and the established credential/quota-gated CodexTypedAppServerIntegrationTest skipped; raw non-credential App Server handshake passed.
  • Focused B2 codec/registry/fixture/audit/compatibility checks: pass. Staged installed consumer: 1/1 pass. codex-backend and codex-backend-client build: pass.
  • Offline source/provenance, operation contracts, registry, descriptors, fixtures generate/check/validate, A1.1 audit/closure, docs, and source-package checks: pass.
  • Registry negative tests assert exact intrinsic diagnostic-code multisets; independent review findings on future open-enum encoding, closure ownership, coherent descriptor drift, and supplement coverage were fixed before commit.
  • Frontend Protocol v1 byte-identity test: pass. The only frontend production diff is mechanical aggregate construction in BackendAdapter.cpp (+31/-10); there is no app production diff and no frontend representation change.
  • git diff --check: pass.

Test-integrity accounting for Commit 2: 12 test files changed, +1,610/-35; no policy test changed. No A0/A1.0 test was deleted, renamed, merged, or weakened. Existing fixture/surface guards retain their prior assertions and add deterministic B2 corpus/descriptor mutations; registry tests retain all prior exact-code checks and add bidirectional canonical-key guards; TurnCodec retains wire assertions while using canonical value types; installed consumers retain prior API checks and add representative tri-state/open-enum/unknown/compatibility coverage. The 35 removed lines are count updates, replacement of partial compatibility construction, or superseded weak count expectations; behavioral and exact diagnostic assertions are stronger.

Commit 3 validation boundary

  • GCC 15.3 Debug configure with tests/apps: pass; full build at parallel 12: pass.
  • Full Codex label: 86/86 accounted for, 85 passed and the established credential/quota-gated CodexTypedAppServerIntegrationTest skipped; raw non-credential handshake and all AF_UNIX acceptance paths passed.
  • Focused item/union/registry/coverage/backend parity set: 8/8 pass. Registered schema/audit/fixture set: 5/5 pass. Direct A1.1 audit, descriptor, fixture generate/check/validate, and git diff --check: pass.
  • Staged installed consumer: 1/1 pass. Source-package audit: pass. codex-backend and codex-backend-client build: pass.
  • Frontend Protocol v1 byte identity: pass. Production diff under src/ai/openai/codex/frontend/, src/apps/codex-backend/, and src/apps/codex-backend-client/: empty.
  • Independent adversarial review: green after closing schema-width, per-root union reachability, container mutation, malformed-discriminator, exact enum-factory, source-change documentation, registry negative-matrix, and BackendCore parity findings.
  • Test-integrity accounting: 14 test files changed (+3,719/-158), including 12 under tests/component/codex/ (+3,694/-156); tests/policy/ and tests/installed/codex/ are unchanged. Three focused tests are new. No A0/A1.0 regression was deleted, renamed, merged, or weakened; migrated tests retain behavior/raw/nullable/boundary assertions and strengthen unknown-vs-malformed checks to exact kind/severity/surface/path.

Final validation on rewritten head

Final head: b087c1931ea348df330d323599087aefc1490d96.

  • Clean GCC 15.3 Debug configure/build with tests and apps, parallel 12: pass.
  • ctest -N: exactly 267 registered tests. Full suite: 266 passed / 0 failed / 1 skipped in 304.56s. Codex label: 95 passed / 0 failed / the same 1 skipped in 280.17s.
  • The skip is the established typed real-App-Server gate: SNODEC_RUN_CODEX_TYPED_INTEGRATION=1 was unset because the test may consume credentials/quota. The raw non-credential App Server integration passed.
  • Four AF_UNIX tests initially failed only with sandbox bind() EPERM; the exact host-permission rerun passed all four.
  • Installed consumer: 1/1 pass. Current-head source-package plus closure evidence: 2/2 pass. codex-backend and codex-backend-client targets: pass. git diff --check: pass.
  • Current Clang 21.1.8 focused A1.1 build and matrix: 24/24 pass. Clang exposed -Wswitch-enum/-Wnrvo portability defects in the new B2-B4 codecs; they were fixed in their owning commits and all guarded coverage evidence was regenerated. A full Clang apps build remains unavailable because byte-identical, pre-A1.1 frontend/Codec.cpp and snodec-control/ConfigActions.cpp trigger Clang 21 -Wnrvo under project -Werror; those out-of-scope files were not altered.
  • ASan plus integrated LSan, Clang 21.1.8: 26/26 pass, zero address/leak findings. LSan required a host run because it cannot operate under the sandbox ptrace restriction.
  • UBSan, Clang 21.1.8: 21/21 pass, zero findings. Both sanitizer lanes used the Clang shared sanitizer runtime because project DSOs enforce --no-undefined.
  • Full offline integrity set: 15/15 pass, including source/provenance, operation contracts, generated artifacts, independent Draft-07 validation, exhaustive fixture/mutation infrastructure, both production-coverage guards, registry guards, grouped-facade guard, closure/docs, and Frontend Protocol byte identity.
  • Package audits: source package pass; three binary TGZs contain exactly 27 intended public headers and three .so.1 libraries, with zero private/source-only artifacts.
  • Rewritten Commit 2 through Commit 6 were pushed sequentially to this same branch and each triggered Actions. Rewritten C2/C3/C4 runs completed successfully. The intermediate C5 run failed only its pre-closure source-package inventory and an overloaded 300-second exhaustive-fixture timeout while the five runs were concurrent; its build and all other tests passed. Those closure/package updates belong to C6, and the final C6 run completed successfully. Final CI run 30069256036 completed successfully on final head b087c1931ea348df330d323599087aefc1490d96; its single gcc-debug job and every checkout/dependency/configure/build/test/finalization step passed (2026-07-24 05:22:26–05:46:25 UTC). Hosted CTest reported 267 registered, 0 failed, and 2 skipped: the raw integration because the runner has no codex executable on PATH, and the typed integration behind its credential/quota gate. The same raw non-credential integration passed locally where the pinned executable was available.

Current limitations / explicitly out of scope

All six logical commits, all mandated local validation, and final GitHub Actions run 30069256036 are complete and successful. A1.2–A1.4, A2, A3, Context UI, MQTT, REST, WebSocket, Qt, and other application integration are not implemented here. Experimental outbound realtime methods remain absent. No destructive/shell operation will be run against a real user environment.

Codex has not merged this PR.

@VolkerChristian
VolkerChristian force-pushed the codex/phase-a1-1-conversation-domain branch 2 times, most recently from 32b25c1 to 71bd25d Compare July 24, 2026 03:46
@VolkerChristian
VolkerChristian force-pushed the codex/phase-a1-1-conversation-domain branch from 725edf0 to 8007d60 Compare July 24, 2026 05:20
Signed-off-by: Volker Christian <me@vchrist.at>
@VolkerChristian
VolkerChristian marked this pull request as ready for review July 24, 2026 07:54
@VolkerChristian
VolkerChristian merged commit 9f7b295 into master Jul 24, 2026
1 check failed
@VolkerChristian
VolkerChristian deleted the codex/phase-a1-1-conversation-domain branch July 24, 2026 09:28
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