Skip to content

Move tree and object collision queries into the host (EEDCS-49) - #109

Draft
fd-starscream-bot wants to merge 284 commits into
claude/eech-campaign-native-spike-tjkj6gfrom
codex/d3-object-tree-collision
Draft

fd-starscream-bot wants to merge 284 commits into
claude/eech-campaign-native-spike-tjkj6gfrom
codex/d3-object-tree-collision

Conversation

@fd-starscream-bot

@fd-starscream-bot fd-starscream-bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Move physical object/tree collision and environmental services into the host while EECH_DC retains campaign decisions and consequences. EEDCS-49 / EEDCS-21; authoritative M5 goal11534337 and migration ledger14548994 (current217). All ten D3 requirements remain required.

Current clean pushed HEAD8ec943fd53e32567b70756348045369500facb38 follows schema4 CODE594ef613 and metadata0e174. It replaces the terrain-only proof predicate with one genuine same-callback physical zero-duration step; campaign frame100ms/seed1/Lebanon/1500 bounds and accepted baselines/tolerances stay unchanged. Exact prestate/displacement, immutable latest receipt, earlier observed normal birth prefix, real NEED/READ/reask/movingTEST and genuine host pose effect remain required. No production solver/C/build change in this diagnostic correction.

Validation: six parent final checks/controller exited0; corrected16 Python tests and nine candidate-only refusal controls exited0. Meaningful old-gate RED retained.4024 inputs unchanged; qualified3815 compiled production/build/static rows plus inherited cfg(test) exception/two configs permit exact2fc97 runtime and prior35-frame default reuse. Root2cdc joins literal source/evidence/publication. ONE independent pass found the three-field Python parity gap; SAME closure02e743d58487aa5de56afccbaed4fc5b7bd9805f51ffd4353e2ef294ac11a8c0 closes it at SOURCE with no new findings. Exact8ec all three workflows/all nine CI jobs passed.

SAME exact launch987c1c6f173e5304ff126d553325a0b01247355ec20f51951f00c4b92af4092f binds plan40cef642/controller7f18/all10 artifacts/supervisor08b/specb160. Healthy1500 is RUNNING under original supervisor23508/controller23576/native3764, pre-input audit0. B can start only after full validated healthy PASS/native0 and exact prefix/callback/prestate. Actual completion remains pending; starter0 means launch only. Root audits actual waits, all1179 retail inputs and all5 configuration lists,97payloads/10artifacts and complete raw streams before actual-evidence review.

Actual Fable5.2 High orchestrated SAME Opus5.5 High; both API model IDs verified. Same local history resumed after correcting task-local CLI idle cap, with one source/cache owner and one independent Codex reviewer. Source/cache released; Root owns native/services/canonical. No auth/credential changes, automatic approval or self-merge.

Remaining: lawful natural moving public-path effect, whole required flags/height/hierarchy/raw TREE-FOREST-CLOUD removal/needed DCS mapping/final census/current full40/all8/four input roots/formal review/normal merge/whole-D3 audit. GenericNative1/prep2/all10 stay open. Old23ec UNREACHED, old3ab interrupted partial equality/unknownexit and old764 accepted olddefaultscope retain their scopes. No D4/D5/historical TypeScript port. This candidate is not whole physical delivery.

@fd-starscream-bot
fd-starscream-bot changed the base branch from claude/eech-campaign-native-spike-tjkj6g to codex/d3-target-point-services November 3, 2026 02:20
@fd-starscream-bot fd-starscream-bot changed the title Characterize object and tree collision queries (EEDCS-49) Move tree and object collision queries into the host (EEDCS-49) Nov 3, 2026
fd-starscream-bot and others added 4 commits November 5, 2026 08:53
…ecord and the DCS API provenance, and correct the entity batch's Linux evidence (metadata, docs and evidence only)

TREE: the independent final report (sha256 7ad1a698...) closes the finite TREE handoff and native authority; ten safe files are published with verified hashes, the
older CHANGES_REQUIRED and UNREACHED records are untouched. The card, the TREE doc and the single current STATUS summary say so, and keep whole Task 49, the
dependencies and D3 open.

Entity: the first batch's Linux logs piped Cargo into tail/grep without pipefail, so their status codes were not Cargo's (FAILED tests beside actual_exit=0, a failed
clippy invocation beside c1=0, a feature loop that built the default five times, a hash from a failed Git command). They are retained and not counted. The valid
evidence is a direct-exit gate: fourteen steps, each a direct child exit, all 0, with the Git blob identity of the 2908 code inputs equal before and after. The entity
doc no longer calls the gunship callers unreachable (reachability is unproved), states the required Core broad-phase/roster/live-pose retention explicitly, and
carries the verified DCS declaration shapes (candidate discovery, pose, existence, descriptor bounds) without claiming a hit/normal mapping.

No Rust, C, build input, baseline, scenario, seed, frame, duration or tolerance changed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… (metadata only)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s: never read, never sent, only the components the original assigned are written (ENV-ENTITY-CALLER-BUFFER-1)

The independent source pass over c510c55 returned CHANGES_REQUIRED with one P1: the question read the caller's prior intercept point and normal, but the original reads
neither, and a real caller (answer_weapon_step_lookup) passes an automatic face normal it never initialised. The literal report is kept (sha256 18dba44b...), not an approval.

The question is now the segment plus the candidate's pose (18 or 22 floats). The host reports a six-bit write mask (the normal is assigned on every helper call, the point only
after a plane crossing) and the computed words; the campaign's dialogue (new mb_hostentity.h, shared with an isolated C control) validates the whole reply and then writes only
the assigned components, normal first. A refusal leaves both buffers untouched. Normal-before-point order, partial writes on a miss, first-hit termination, cursor order, the
original arithmetic and the floating-point discipline are unchanged; callers are not initialised and no word is normalised.

Evidence: a direct-exit Linux gate (17 steps, every child exit read on the next line, all 0), the isolated control with outputs on unreadable pages and 21 refusals leaving both
buffers unchanged, three deliberately mutated adapters that each fail it (exit 101), and a source identity taken on the Windows checkout (filtered blob ids and raw bytes, equal
before and after; three pre-existing CRLF files are characterised, not normalised). No native, Windows or retail run. Broad phase, roster, live pose and flags stay in Core.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@fd-starscream-bot
fd-starscream-bot changed the base branch from codex/d3-target-point-services to claude/eech-campaign-native-spike-tjkj6g November 5, 2026 09:46
fd-starscream-bot and others added 23 commits November 5, 2026 09:55
…rols (Lua, tests and docs only; no compiled input changed)

lua/entity-authority.lua is a TEST-ONLY sibling of tree-authority.lua: host Lua -> the public module (weapon-fixture) -> host.model -> a REAL weapon launched through the
campaign's own call. The provider wrapper delegates every operation unchanged and may answer only an armed entity_collision question differently. It records the corrected
request (18 or 22 patterns, no caller outputs), the real reply (result, mask, whole vectors, a hit is 63, zero unassigned words, a name) and the weapon fixture's own counters
(contact_any_tests, contact_any_hits, precision_high).

Modes: control, forced_hit (mask 63 at the request's OLD end; the cohort's physical signature without the weapon ordinal), forced_miss (mask 56; valid MISS coverage, not a measured
physical change unless the control had hits), withheld_entity / bad_write_mask / bad_answer (exact markers at the anchored engine stop) and the explicit Original control
(fixture API present, entity caller reached, no host question: CAPABILITY RED). Source-derived branch preconditions: the weapon step asks the entity lookup only at high
precision (the existing configured VIEW_WEAPON input, global while armed, measured), and a candidate gets a narrow-phase question only if it is collidable (never a person) and
within radius + 10 m of the segment, so the case is the nearest non-person enemy of a launcher with an unguided ballistic weapon; zero questions is UNREACHED.

tests/entity_authority.rs (14 controls, the real driver in a real Lua state against scripted collaborators) found one witness defect on its first run (the signature joined a
missing terminal field before the terminal check); fixed. Direct-exit Linux gate: fmt, entity_authority 14/14, tree_authority 17/17 unchanged, strict clippy, all 0; code-input
identity (filtered and raw columns) equal before and after. Not run natively; the broad phase, roster, live pose and flags stay in Core.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…refresh the entity status (metadata only; no compiled or runtime input changed)

Safe literal copies of the same reviewer's FINITE_STATIONARY_ENTITY_HANDOFF_AUTHORITY_VERIFIED report and the 7ead34d build and ordinary-short receipts, a
derived counts/hash summary and a manifest under reference/d3-entity-collision/finite-authority/ (json is -text there; literal CRLF bytes kept). The private
Root audit is unchanged. STATUS, the active card and the entity document now say what ran and what did not (moving path, per-weapon attribution and the
physical scan remain open).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…NDIDATE (compiled C, Rust and the model-provider protocol; Linux-checked only, no native run)

get_line_of_sight_collision_entity in the ordinary module no longer decides anything about a candidate. The campaign walks the sector window and lists in the original's order,
skips the source and target and offers each flagged entity with the facts it read (offer_candidate_to_host). The host decides, through the new model operation ENTITY_CANDIDATE
(mb_hostmodel.h; reference host csrc/entity_candidate_step.c, the original's expressions): the sector's tallest-structure skip, the branch (mobile, fixed, city, a building listed in a
sector), the moving test, the sweep ends, the radius + 10 m broad phase, a city's box and a fixed candidate's placement. The campaign performs the destructive UPDATED getter and the terrain
face-normal question exactly when the host names them, offers a city's buildings in list order and then asks the existing ENTITY_COLLISION with the host-derived pose. The question is a
pure function of 42 facts; no entity identity crosses and the host keeps nothing. The original branch of en_cllsn.c stays byte for byte under #else for the collision-fixture profile.

Evidence: a differential of the original scan (transcribed) against the host-decided scan over 400 generated worlds with an equal transcript of UPDATED reads, terrain questions and
narrow-phase poses; five kernel mutants fail it; the isolated C control exercises the campaign's real half of the dialogue (170 expectations); the compile guard now covers the scan.
The first gates found and fixed a bridge type error, formatting and lint findings in the new tests, and a count in host_callbacks.rs left stale by the previous witness commit (a Lua
script was added there without updating it; that batch's focused gate did not run the suite). The campaign's scan loop itself is engine C that only a native run exercises.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…Linux gate record (metadata only; no compiled input changed)

The frozen source is 2d1a162 (ENTITY_CANDIDATE). The card moves to the native ordinary short against 80fd as the first unmet gate and opens
entity-candidate-native-authority (the changed-answer witness for the new decisions is not written yet). The enumeration of candidates stays
REQUIRED in Core with its concrete missing fact named (the sector order is campaign history the host has no copy of).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…dent source review of 4205456 (compiled C, Rust and the model-provider protocol; Linux-checked only, no native run)

ENV-ENTITY-CANDIDATE-PRECONDITION-1 (P1): the candidate facts are staged in the order the original needed them. The first question carries the segment, the mobile flag, the
sector's tallest structure height and a mobile candidate's shape, position and motion; a non-mobile candidate in a sector below the segment is skipped there by the host, so its
fixed flag, shape, position, heading and align flag are never read, a direct city building needs no scene and no model is looked up. The host asks for the next stage only when
the branch reaches it (NEED_FIXED, then NEED_PLACEMENT after the broad phase). The scene's radius is the host's own model data and is looked up only by a branch that reaches its
broad phase; a scene it cannot give then is a named refusal, never a default. The campaign's offer moves into the shared header mb_hostoffer.h so that en_cllsn.c (real getters) and
the C control (scripted entities that log every getter) run the same code. 44 facts, 7 states.

ENV-ENTITY-CANDIDATE-REPLY-1 (P2): the finite classifier takes a pointer and reads the raw word, so no untrusted float is passed or loaded before it is refused (signalling NaN
added to the refusal cases); the candidate has its own entity_candidate.identity label and the closed narrow phase keeps entity_collision.identity.

Controls RED before the correction through the real provider and ModelStore and the real shared C exchange; after it a positive-first C control (216 expectations), the same cases
through provider and store, a differential that includes entities with no usable scene, and five mutants RED. The gate is 16 direct-exit steps, all 0.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… review, STATUS, the active card and the safe Linux gate record (metadata only; no compiled input changed)

Publishes the independent source review of 4205456 (CHANGES_REQUIRED, LF bytes unchanged, SHA-256 1a64667b...) beside the finite-authority records, and records that both
finding groups are corrected in fb3163f with direct-exit evidence. The card moves to same-reviewer clearance of the changed material, then Root's build, the ordinary short
with wall time and the still-unwritten ENTITY_CANDIDATE changed/withheld witness. Nothing native has run for any of it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…efore any getter (ENV-ENTITY-CANDIDATE-REPLY-1 residual; shared C predicate and its control only, Linux-checked, no native run)

check_candidate_reply now accepts NEED_PLACEMENT only for a candidate that has a scene and is a mobile candidate, a building listed under a city (whose collision flags are read
during the placement, so its fixed facts are intentionally not given) or an ordinary fixed candidate whose fixed facts say it is one, and whose placement was not already given.
A city, a building listed directly in a sector, an entity that is neither mobile nor fixed and a candidate without a scene are stopped at entity_candidate.state before the offer
reads a heading, an align flag or an attitude, and before any narrow phase. Scene-less SKIP and NEED_FIXED stay valid and no radius or height arithmetic is added to Core.

The real shared exchange and offer controls gain the coherent positives first and then each malformed role (exchange level, and offer level asserting exactly which getters ran);
RED against the parent, GREEN after, three mutants of the predicate RED. Schema, kernel, Rust and the closed narrow phase and TREE are unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…TUS, the active card and the safe narrow-scope gate record (metadata only; no compiled input changed)

Publishes the independent follow-up of 6db5f53 (LF bytes unchanged, SHA-256 e525d881...) and records the bounded fix 1ccc9e2 with its validation scope stated plainly:
formatting, the real shared C dialogue control, the source guard, a weapon-fixture build and strict engine-sys clippy, all direct exit 0, RED against the parent and three mutants RED.
The 16-step matrix of fb3163f is retained as PARENT evidence only and is not a result of this head. Nothing native has run.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… status (metadata only; no compiled or runtime input changed)

The same independent reviewer's report (LF, SHA-256 673c0d93...) is SOURCE_CLEAR_FOR_PLANNED_NATIVE_VALIDATION with findings=[] for runtime 1ccc9e2, closing
ENV-ENTITY-CANDIDATE-PRECONDITION-1 and ENV-ENTITY-CANDIDATE-REPLY-1. The two earlier CHANGES_REQUIRED reports stay literal at their identities. The parent fb3163f
matrix stays parent evidence only. Candidate native authority, conformance, whole Task 49 and D3 are not accepted; the public changed/withheld witness is the next fact.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… entity-authority.lua and its driver controls (Lua, tests and docs only; no compiled input changed)

The existing TEST-ONLY witness gains six modes for the real ENTITY_CANDIDATE operation (44 facts, 7 states): the natural control (unchanged) now counts and classifies the armed candidate
questions; candidate_real is the paired control (real candidate answers, the existing forced-hit entity_collision answer held as a declared, configured secondary input) and must reach the
narrow phase and a physical hit; candidate_skip answers every candidate a valid skip with the SAME configured secondary input and must prevent every narrow-phase question and hit; withheld_candidate,
bad_candidate_state and bad_candidate_identity stop at exactly entity_candidate.callback / .state / .identity. Zero candidate questions is UNREACHED; the Original profile's expected red names both counts.
The checked output, cohort, WordCodec, exact engine-fatal recognition and view input are reused unchanged and every other operation is delegated byte for byte.

Seven new driver controls run the real Lua against scripted collaborators that apply the shared dialogue's rules; five mutants of the witness fail them. fmt, entity_authority 21/21, tree_authority 17/17,
host_callbacks 82/82 (the reference-script inventory is unchanged at 62) and strict eech-world clippy all exit 0. No shipping input differs from 1ccc9e2.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…safe Linux gate record (metadata only; no compiled or runtime input changed)

The test-only public changed/withheld authority witness (entity-authority.lua blob 0457417..., SHA-256 473bc07c...) is written and controlled in d39a14a; no shipping input differs from
1ccc9e2. STATUS keeps ONE current summary and the card moves to Root's ONE natural healthy control first, then the paired and refusal modes and the Original control, then the ordinary
short with wall time. The controls are scripted collaborators: nothing native has run, and the enumeration, roster, live pose and every other required coupling stay open.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…riven cursor over the campaign's own sector lists (compiled C, Rust and the model-provider protocol; Linux-checked only, no native run)

get_line_of_sight_collision_entity hands the ENUMERATION to the host through the new model operation ENTITY_SCAN (reference host csrc/entity_scan_step.c, the original's expressions): the
segment's min and max, the 150 m widening and the clamp to the map as sector indices, x outer / z inner, each list read from its tail, the exclusion of the source and the target, the offer of
each entry to the unchanged ENTITY_CANDIDATE dialogue and the end of the scan at the first hit. The campaign's driver is mb_hostscan.h, shared with the C control and bound to the real sector
lists in en_cllsn.c; the original window and loops stay byte for byte under #else.

Design: a host-driven cursor, not a roster. The first hit ends the scan, so the heap's insertion and relink order is the result; the campaign serves the entry the host names and reports the
one fact only the heap can state (source or target), nothing is copied and no pointer or index crosses, and the host is stateless. The heap stays the named transitional backing
dependency: it is not called ownership or independent authority, and the roster, semantic identities, synchronisation, live pose and city-child enumeration remain required.

Characterised on the clean 4b3ec84 first. A differential of the ORIGINAL scan over a 4 x 4 map against the host-driven scan (400 worlds x 6 segments), the C control (315 expectations) on
the real driver and exchange, kernel, bridge, engine and provider controls, and seven mutants RED. The 16-step gate is all exit 0. The moving public path is not measured.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…afe Linux gate record (metadata only; no compiled or runtime input changed)

The entity scan's enumeration (window, order, exclusions, first hit) is the host's through ENTITY_SCAN in 8b85230; the heap stays the named transitional backing dependency and the
roster, semantic identities, synchronisation, live pose and city-child enumeration stay required. The card moves to independent review of the new material, then Root's native
ordinary short with wall time, the Candidate witness on the new binaries and a still-unwritten ENTITY_SCAN witness. The moving public path is not measured and its native
prerequisite (candidate_need_updated > 0) is named. Nothing native has run.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e corrected evidence scope (metadata and documentation only; no compiled or runtime input changed)

The independent source review (LF, SHA-256 1a856a53...) is SOURCE_CLEAR_FOR_PLANNED_NATIVE_VALIDATION with no findings for runtime 8b85230, published unchanged with Root's source binding (4523 bytes, 8864de06...).
Corrected scope: 2915 raw inputs are exact to Git; the three unchanged tests/lua tree-geometry controls are working CRLF against committed LF (separate from the three known Core filtered-id exceptions);
all 18 changed files are raw-exact, and the actual changed-path count is 18, not 19. The Linux "nothing native" means no Windows or retail campaign (the C controls executed); the hosted comment about
Core enumeration in en_cllsn.c is historical and is left for the next production C change; the differential is a transcription. Scan native authority, conformance, the moving path, Task 49 and D3 are not accepted.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ority.lua (no shipping input changed; Linux scripted controls only, no native run)

Extends the existing lua/entity-authority.lua and tests/entity_authority.rs (no new script: the host_callbacks inventory stays 62).
Modes: natural control (scan, candidate, narrow phase and caller all positive), paired scan_real / scan_none under the same configured
entity_collision hit, withheld_scan (entity_scan.callback), bad_scan_state at BEGIN (entity_scan.state), bad_scan_cursor on an eligible
real FIRST (entity_scan.cursor), and the Original profile as the expected CAPABILITY RED. Every alteration is built from a well-formed
question and real reply; a witness error cannot pose as an Engine refusal.

Linux checks: fmt, entity_authority 28, tree_authority 17, host_callbacks 82, strict eech-world clippy, all direct exit 0.
Five mutants of the witness fail entity_authority. The compiled C, Rust, bridge and API are byte-identical to 8b85230.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e safe Linux gate record (metadata only; no compiled or runtime input changed)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ation of each mobile candidate against the host's Movers record of its identity (compiled C, Rust, the model-provider protocol and the public witness; Linux-checked only, no native run)

The host-sourced live pose of rostered collidable mobiles is the next required extraction, and its collaborator contract is not decidable from source:
which mobile offers have a host identity, whether each has a record, whether the campaign's mirror is bit for bit the record at an offer, and whether a
vehicle's motion vector (the campaign computes it as attitude row 2 times speed) is the record's. ENTITY_POSE asks exactly that, observationally.

Beside the original's reads the offer of a mobile candidate asks the host once at the offer (position, motion vector) and once at the placement (attitude)
with the semantic host identity; the host reports class (recorded, unrecorded, retired, unknown, no_id), the record's kind and the difference bits, from
the ONE Movers registry the movement callbacks step (shared by handle, never copied). Nothing decides from the answer: no read, count or order of the
dialogue changed, its shape is checked and a violation stops by marker. The public witness (entity-authority.lua, no new script) counts the observations,
keeps the (stage, type, alive, class, kind, difference) histogram and has three refusal modes.

Linux: 16-step gate child exits 0 (66 result rows, 1220 tests), the isolated dialogue control 344 expectations (29 new), sixteen mutants all killed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nux gate record (metadata only; no compiled or runtime input changed)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
: integer formula (no FPU), stage-specific reply masks, the whole 128-byte identity domain, no NUL bytes, honest read and scope documentation (compiled C, Rust and the public witness; Linux-checked only, no native run)

The review's five findings, all in one batch:
1. Movers::observe multiplied the record's attitude row 2 by its speed with ordinary float arithmetic inside a model callback that has no floating-point
   protection: it could raise sticky flags the Core sees, trap under unmasked exceptions and classify by the caller's rounding. The product is now computed in
   integers (round toward zero, exact 48 bit significand product truncated) and the observed words travel as bit patterns, never as floats. Proven bit for bit
   against the processor's own round-toward-zero product over about 3 million operand pairs, and the whole observation proven to leave MXCSR exactly as found for
   every rounding mode, sticky-flag pattern and with all exceptions masked and unmasked (a float-multiply mutant dies by SIGFPE).
2. The real shared C reply checker now validates the stage's masks: an attitude difference at the offer stage (no attitude is read there) and a held-vector
   difference together with "none held" are malformed; the positive controls use valid masks and each fault is refused singly through the real checker.
3. The roster's identity domain is 1 to 128 bytes: the request carries it in its own field (the 127 byte cap that silently skipped a valid 128 byte identity is
   gone; a longer one cannot exist and is refused by marker). The bridge, provider, witness and C control carry and test 128 byte and multi-byte identities whole.
4. The two literal NUL bytes the C control introduced are textual backslash-zero again; every changed file is checked against the base for NUL and CRLF deltas.
5. Documentation states exactly what the observation adds (type, alive, roster identity: three read-only metadata reads, counted and asserted by the control),
   that the physical-getter transcript is not an all-getter proof, and that only non-city mobile candidates of a sector list are observed. The witness now
   classifies pre-launch offers too and sums the facts the cutover needs (pose_fact_*) in one healthy run; it claims no writer attribution or coverage of
   routes the run does not reach.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
fd-starscream-bot and others added 30 commits November 8, 2026 04:48
… step

Lead216: the exact23ec schema3 capture completed UNREACHED because every
candidate's completed routed MOVE lawfully carried no terrain, so the +500 m
terrain input cannot exist on that path. Schema4 instead clones ONLY
delta_seconds=0 once on the SAME completed MOVE callback and lets the genuine
solver compute the result, which must equal the actual pre-position and differ
from the healthy one.

The witness copies every consumed MOVE field before delegate (pose, step time,
speed inputs, waypoint, map volume, tacview, terrain presence); healthy
eligibility requires dt>0, terrain absent, pre-speed>=0, pre-position inside
the map volume, actual nonzero displacement and the latest same-ID writer at
NEED. B verifies identity, ordinals, the delivered birth prefix and all
consumed fields before any effect. Lua contract, independent Python
validator, controller, tests and docs consume the same contract; outcome
codes grow to 27 with schema3 terrain codes retired.

Real reference-host movement/SharedMovers/model/FlagStore controls: old gate
RED (code 11 on the lawful terrain-absent MOVE), schema4 healthy/zero-step
GREEN through the real solver, ineligible and at-callback refusal cases.
Facade default/observer profiles pass. No compiled production C/Rust/API/
build/Cargo change; card records blocker ENV-PUBLIC-SESSION-ZERO-STEP-
DISPLACEMENT-1 and reconciles the two source-closed findings. UNREVIEWED.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Packet code-publication.json joins all 4024 census rows of code commit
594ef61 to the POST map (4021 raw-equal plus the three inherited
tree-geometry Lua filter qualifications) and every packet file to its Git
blob; publication-manifest.json binds the packet. Card and STATUS record the
code commit and freeze SHA-256. Metadata only; no source or check replay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ator

Fixes review finding ENV-PUBLIC-SESSION-SCHEMA4-CANDIDATE-PARITY-1 (review
0e61b0da, Root binding 2cdc0dc3): the Python candidate-to-selection join
omitted latest, prestate and delegated, which the Lua contract joins. A
reference whose decoded actual-candidate receipt disagreed with its selection
could pass the validator and the controller's pre-B gateway.

Old validator RED: 9/9 candidate-only mismatches (three fields through
healthy validate, controller healthy_reference and zero-step validate, the
selection untouched) accepted. With the three joins all 9 are refused before
any B root/output/child; 16 Python tests pass. Whole field-map parity: 31
fields identical in Python and Lua, 29 joined identically, mode and
test_request deliberately unjoined in both. All Lua/Rust/fixture/compiled
inputs are byte-equal to 0e174, so its Cargo/Lua/facade receipts are reused,
not re-run. Packet zero-step-parity-correction; finding stays OPEN until the
same reviewer closes it. UNREVIEWED.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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