Repository navigation
Conversation
xiaoan17
requested review from
huangruiteng,
loopx-agent and
songoow
as code owners
October 29, 2026 04:13
xiaoan17
force-pushed
the
codex/host-adapter-settlement-step-vocabulary
branch
4 times, most recently
from
October 29, 2026 09:12
83e0b55 to
1861555
Compare
…lary The TypeScript host owner authors an ordered provider plan and the Python transport validates the plan it receives against the same sequence, but the two sequences were private hand-kept copies: a module-local const in host_todo_completion.ts and a module-local _STEP_KINDS in host_adapter_settlement.py. Neither was exported, so the semantic inventory could not see either carrier, neither the vocabulary registry nor the drift smoke could tie them together, and a divergence would have surfaced at runtime as "TypeScript host provider step order mismatch" after the plan had already been accepted and partly executed. Both sequences are now registered owners of the new cross-runtime vocabulary host_adapter_settlement_step_kind, so the drift smoke checks each of them against the registry on every run. The vocabulary is deliberately distinct from settlement_step_kind: that one names the turn settlement phases, whose validation phase is never executed, while every kind here is a command the host adapter runs. The registry meaning records that difference. The two owners keep different names per runtime, so no new multi-value twin appears: multi_value_twins stays 8/8 and every inventory budget is unchanged. Only the coverage floor grows, 28 to 29 vocabularies and 54 to 56 owner symbols, in the registry and its anchor together. New tests pin the two runtimes against each other directly and prove the transport still refuses a plan whose step order drifts. Validation: semantic-vocabulary-drift-smoke ok; the diff-scoped semantic advisory now sees both carriers and points them at the new vocabulary; semantic inventory, production and drift test suites pass; the MCP settlement, host vision and machine guard suites pass; the TypeScript host todo completion test passes and the control plane typechecks; loopx canary premerge --from-git-diff green. Signed-off-by: xiaoan17 <anbc1224@gmail.com>
xiaoan17
force-pushed
the
codex/host-adapter-settlement-step-vocabulary
branch
from
October 29, 2026 09:26
1861555 to
3781b77
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Scope
One vocabulary gets a typed owner.
The TypeScript host owner authors an ordered provider plan and the Python
transport validates the plan it receives against the same sequence, but the two
sequences were private hand-kept copies:
loopx/control_plane/turn_driver/host_todo_completion.ts— a module-localconst STEP_KINDSloopx/control_plane/host_adapter_settlement.py— a module-local_STEP_KINDSNeither was exported, so the semantic inventory could not see either carrier, and
neither
loopx/semantics/vocabulary_v0.jsonnor the drift smoke could tie themtogether. A divergence between them would have surfaced at runtime as
TypeScript host provider step order mismatch, after the plan had already beenaccepted and partly executed. The C4.3 settlement vocabulary confirmation
recorded exactly this gap.
What changes
host_adapter_settlement_step_kind, so the drift smoke checks each of themagainst the registry on every run.
settlement_step_kind: thatone names the turn settlement phases, whose
validationphase is neverexecuted, while every kind here is a command the host adapter runs. The
registry meaning records that difference, so the two are no longer
confusable.
appears:
multi_value_twinsstays 8/8 and every inventory budget isunchanged. Only the coverage floor grows, 28 → 29 vocabularies and 54 → 56
owner symbols, in the registry and its anchor in the same diff.
transport still refuses a plan whose step order drifts (that tripwire had no
test).
Evidence
examples/semantic-vocabulary-drift-smoke.py→ ok,coverage=vocabularies:29/29, owner_symbols:56/56,multi_value_twins=8/8,conflicting_values=16/16— nobudget moved.
points each at the new vocabulary:
reuse hint: host_adapter_settlement_step_kind (exact_values)plussettlement_step_kind (overlapping_values)— the C4.3 overlap is now amachine-visible hint instead of prose.
settlement, host vision and machine guard suites pass; the TypeScript host
todo completion test passes (15) and the control plane typechecks.
loopx canary premerge --from-git-diff --git-diff-base 2a2323756green(19 checks, 0 failures), surfaces
control_plane, docs_project_content, public_boundary, python.Coordination
#5677 extends this same vocabulary: it adds
delivery_contextanddirection_contextto both carriers and rewrites the surrounding plan schema.Whichever of the two PRs merges second must add those two values to the
registry entry (and its glossary row), because the registry values are what the
drift smoke checks the carriers against. This PR does not add them, because
they do not exist on this branch.
Unrelated observation
tests/architecture/test_semantic_production.py::test_real_return_producer_rejects_an_unregistered_result[turn_route-…driver.py-return LoopXTurnRoute.CONTRACT_ERROR]already fails on
main(2a2323756) — the registry still names aturn_routereturn producer whose literal
driver.pyno longer carries. PR #7621 carriesthat fix; this PR does not touch it.
Signed-off-by: xiaoan17 anbc1224@gmail.com
Rebase and re-validation (2026-10-29)
mainat9dcdc0bacd455a8cf6f6146f052ffc4df0f5d04a3781b77d1bfb3622820fde72568c76fb874d1ffdThis entry is independent of the merge order between #7617 and #7645: it adds no ledger file and does not touch the derived
STATUS.mdindex.All nine pull requests in this set were rebased onto
mainat9dcdc0bacd455a8cf6f6146f052ffc4df0f5d04aand merged together in a local worktree. The merged state passestests/architecture/,tests/canary/,tests/test_manager_context_roundtrip.py,tests/test_lark_native_reply_context.py,tests/control_plane/test_host_adapter_settlement_step_vocabulary.pyandtests/control_plane/test_host_adapter_settlement_partial_steps.py— 1805 passed, 0 failed.python scripts/generate_rfc_status_index.py --checkis clean.