Conversation
capability_monitor_fallback restated WORK_LANE_CONTRACT_SCHEMA_VERSION as its own module-level constant, and task_orchestration imported the owner on line 12 then spelled the value inline 350 lines later. Both now project the owner's constant. Signed-off-by: karenchuu <25980598+karenchuu@users.noreply.github.com>
The guard keeps three shapes pinned: module-level bindings, payload literals (the form a name-keyed inventory cannot see), and the two deferred sites by file and count so they cannot go stale silently. Signed-off-by: karenchuu <25980598+karenchuu@users.noreply.github.com>
same_runtime_forks 11 -> 10, same_runtime_fork_definitions 25 -> 23 and schema_version_same_runtime_forks 2 -> 1, measured on this revision with the drift smoke and re-anchored in the registry and the smoke anchor together. Signed-off-by: karenchuu <25980598+karenchuu@users.noreply.github.com>
|
CI triage for exact head The failed checks are the same mainline failures seen on neighboring PRs and do not point to this PRs five changed files:
This PR changes the two work-lane contract consumers, its new architecture guard, and semantic budget metadata; none of the failing implementation or test paths are part of its diff. The branch is currently two commits behind This comment explains the red checks only; it is not an approval. The PR still needs exact-head review after the branch update. |
Goal And Delivered Outcome
inventory_ratchetsnote inloopx/semantics/vocabulary_v0.json: "Both the number of affected names and the number of definitions are budgets, so a third spelling of an already-conflicting name is still a regression."control_plane/work_items/work_lane.py:35andcontrol_plane/work_items/capability_monitor_fallback.py:12) and three were inline payload literals (control_plane/quota/task_orchestration.py:362,control_plane/quota/live_decision.py:318,control_plane/quota/unsettled_host_turn.py:348).task_orchestration.pyalready imported the owner constant on line 12 and then restated the same value inline about 350 lines later, which is also why the name-keyed inventory reports one fork group where the tree really holds five.work_lane.pyis the only module that binds the name and the only module underloopx/that spells the value;capability_monitor_fallback.pyandtask_orchestration.pyproject the owner's constant; the new guard fails on a private copy, on a new inline literal, and on a deferred entry that goes stale. Theregression_parityrow shows the generated inventory now reportssame_runtime_forks=10/10,same_runtime_fork_definitions=23/23andschema_version_same_runtime_forks=1/1.mainatf49b4a008.Scope And Continuation
capability_monitor_fallback.pybecame an import of the owner, the inline literal intask_orchestration.pyreads the constant that file already imported, and both counted budgets plus the schema-version budget were re-anchored to the values measured on this revision. The product change is two lines added and two removed, with the six anchor lines moving in the same diff; the semantic inventory movessame_runtime_forks11 -> 10,same_runtime_fork_definitions25 -> 23 andschema_version_same_runtime_forks2 -> 1, withsame_runtime_forks_semanticunchanged at 9 because[A-Z][A-Z0-9_]*_SCHEMA_VERSIONis a module-local convention name.quota/live_decision.py:318andquota/unsettled_host_turn.py:348still restate the value inline. Both files are being changed by in-flight PRs Refactor/event driven control plane #3200, fix(scheduler): inject capability registry instead of importing catalog from control_plane #4023, refactor(quota): resolve fallback advice from one typed snapshot #4061 and fix(quota): fence settlement by exact GoalRef #5340, so converting them here would merge-conflict for no evidence gain; they are declared by file and count in the guard'sDEFERRED_INLINE_RESTATEMENTS, so a new site, a fixed site that keeps its declaration, or a silently widened set all fail. The remaining counted*_SCHEMA_VERSIONtwin isSNAPSHOT_SCHEMA_VERSION(capabilities/issue_fix/repository_snapshot.py:14andcapabilities/issue_fix/metrics_projection.py:16), which cross-validate each other's payloads with that same literal and is deliberately left for its own PR. Tests, examples and docs keep their own copy of the expected value on purpose: if they read it from the owner, a wrong owner would have nothing to fail against.Validation
5e9c5ad08unitpassedtests/architecture/test_work_lane_contract_schema_version_single_owner.py: 8 passed, covering the binding scan, the payload-literal census, the deferred declaration set, consumer wiring through all three fallback branches plus the orchestration projector, and the generated inventory.integrationpassedtests/architectureplustests/canary: 1097 passed, 0 failed.staticpassedpython -m ruff checkclean on all changed files;python -m ruff format --diffreports the same two pre-existing files on base and head, so no format finding is introduced; configuredpython -m mypysucceeded for 19 source files;git diff --checkclean.real_entrypointpassedexamples/control_plane/work-lane-contract-smoke.pyandexamples/control_plane/quota-plan-smoke.pyboth passed on the tested revision.regression_paritypassedsame_runtime_forks=11/11 -> 10/10,same_runtime_fork_definitions=25/25 -> 23/23andschema_version_same_runtime_forks=2/2 -> 1/1.premergepassedloopx canary premergeover the exact five changed files completed 19 checks with 0 failures, 0 warnings and no manual hold; the public-boundary scan reported clean for all five paths.work_lane_contract_v2(guard red). Survived, and why it is equivalent: adding a second payload literal inside the owner module passes every test, because the owner would still be the single module deciding the value - the census excludes the owner path by design, and the same-module restatement is a readability issue rather than a second owner.work_lane_contract_v2left the eight focused contract tests green, because that suite compares against its own restated literal - same-value restatements are invisible behaviourally, which is the reason the census is structural. Second,tests/control_plane/test_work_lane_contract_core.pyand the two smokes above ran against a worktree without a compiled Chat bundle, which this change does not touch. No backend, persisted state or wire payload changes: every projected payload keeps the byte-identical value.uv pip install -e ".[test]") instead ofuv sync --extra test, with Node 22.23.2 on PATH and the repository's npm dev dependencies installed, both required by the drift smoke.Frontend / Visual Evidence
Type of Change
LoopX Area
Shared-authority RFC fixture impact
N/A. This PR does not claim progress against the shared Goal Authority or TypeScript migration RFCs.
Boundary Checklist
none.Signed-off-bytrailer (git commit -s).Technical Direction
single-sourcecarrier cleanups.Notes For The Reviewer
vocabulary_v0.jsonandBUDGET_ANCHORin the drift smoke) move in this single diff, as the smoke's own error message requires.same_runtime_forks10 -> 9 andsame_runtime_fork_definitions23 -> 21 re-measured on the integrated base; the values quoted above are measured againstf49b4a008.