Skip to content

Promote the native integration branch to master: M1-M4, #73, #76 (65892de1) - #59

Draft
fd-shockwave-bot wants to merge 826 commits into
masterfrom
claude/eech-campaign-native-spike-tjkj6g
Draft

fd-shockwave-bot wants to merge 826 commits into
masterfrom
claude/eech-campaign-native-spike-tjkj6g

Conversation

@fd-shockwave-bot

@fd-shockwave-bot fd-shockwave-bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Integration status: #79 merged as 163e9158 after exact-head approval and six passing checks. #74 is now merged as 6f222b1b after approval5593112174 and six passing checks. Remaining proposed supporting integrations: #77 and #78, each with unresolved review gaps. Keep this promotion PR draft until these intended integrations are complete, then establish final-head provenance and obtain fresh review of that head and the intended master merge result. This sequence does not authorise a merge.

Task and scope

Task: promote the native integration branch to master (#59), per the lead's review 5587358297 (CHANGES_REQUESTED at d2d4792a) and the decision on EEDCS-5 (Starscream, comment 10423)
Epic / milestone: M1 to M4 (accepted: #19, #23, #27, #31; EEDCS-1 to EEDCS-4); M5 in progress under EEDCS-5
Base branch and SHA: master at 21c8c404f65331422e952b4855ab2361e760991f (merge base 81ed32e8)
Current integration head: 6f222b1b5d6aa64ef8bfed6335d0bf294afc81b7 (claude/eech-campaign-native-spike-tjkj6g, #74 merge). The retained runtime build is still 65892de1; git diff --quiet 65892de1 6f222b1b -- aphavoc modules eech-campaign/crates eech-campaign/tools eech-campaign/regression eech-campaign/Cargo.toml eech-campaign/Cargo.lock passes. The merge adds the identity record and comparison helpers plus .github/workflows/eech-campaign.yml; none changes those product build inputs. This is evidence applicability, not a new runtime run. Final-head provenance remains required after the outstanding integrations. Sole current M5 scope authority: Confluence 11534337; this promotion does not accept its criteria.

Outcome and scope/non-goals: brings the native EECH campaign work into master as the base for further building. This PR adds no code of its own. It does not accept M5, authorise structural work, or change any baseline. The lead's review 5587358297 states that this "is not an exhaustive re-review of all historical programme commits."

What the candidate contains

112 commits ahead of the merge base at 6f222b1b (measured with git rev-list --count 81ed32e8..6f222b1b). The integration branch's first-parent history:

Part Where Status
Native whole-engine campaign: eech_dc (all of EECH headless as a Lua 5.1 module), eech-world (Rust host, Tacview), Windows MinGW build, retail Georgia and Lebanon, corrections S1/S3, N1–N3, H1, U1 and others owner's direct commits up to 5f07697b Accepted by the owner as current state, not individually PR-reviewed. M1 reassessed it (#19).
Governance bootstrap (AGENT.md, PROJECT.md, docs/governance/) #53 merged
M1 prepare the campaign module #60, #62, #63 accepted (#19)
M2 EECH World reference #64 accepted (#23)
M3 campaign/world loop (resupply, supply loss) #66, #67 accepted (#27)
M4 regression confidence (S3 mutation, regression pack, baseline governance) #68, #69, #70 accepted (#31, EEDCS-4); windows-retail v1 established at e0801614
Hosted CI repair b4d43ea6, 254ded56, d2d4792a (owner) accepted current state per review 5587358297
M5 readiness and owner-directed process enforcement #73 (74aaa168) approved and merged
E4 timer-callback evidence, optimised-global inventory, CI green, #76 candidate validation #76 (65892de1) approved and merged
Candidate identity, retained runtime comparison and fail-closed evidence helpers #79 (163e9158) approved at f9278cb3 by review5592872695; all6 checks passed; all15 threads resolved; merged

Additional accepted supporting evidence. #74 is now in the candidate as 6f222b1b: final author head f153ffe8, author READY comment6304172735, Starscream APPROVED review5593112174 and all six checks passed. Its scope is the partial SUPPLY ownership map; it does not establish the complete M5 interaction map.

Not in the candidate. #77 at ab279d44 and #78 at cf11eb82 remain draft supporting arrival evidence with known author-review gaps; their historical approvals do not establish current readiness. The complete DCS call map, risk probes and boundary slice are separate active M5 work. These partial investigations do not prove host separation, and their historical sequence does not redefine the Confluence M5 goal.
master's side. Since the merge base, master gained #72 (.claude/hooks/session-start.sh, .claude/settings.json, .gitattributes for .claude/hooks/*.sh, .github/workflows/claude-hooks.yml). None is a build input. The merge is clean: git merge-tree --write-tree 21c8c404 6f222b1b gives clean tree cce561f348e07a343bf0304f0257fd7fcec5fade (checked after #74 merged). The PR API still reports its historical base SHA 81ed32e8; the live master branch was independently verified at 21c8c404 using both git ls-remote and the branches API.

Current-head checks

At 6f222b1b, pull-request workflow 39515720572 is successful: all six jobs pass (four native target/configuration jobs, windows-cross and evidence-selftest). The run API names that exact source head. This is current hosted validation; the retained retail runtime below remains at 65892de1 with product-input equality established above. A fresh author self-review at 6f222b1b is still required before final Starscream review. The existing CHANGES_REQUESTED review at d2d4792a has not been replaced.

Baseline and behavioural evidence

Baseline revision / scenario / inputs: windows-retail v1 (regression/baselines/lineages.json, established e0801614, unchanged); Georgia (map3) and Lebanon (map5) retail, seed 1, 3 simulated hours, 100 ms frames; roots E:/eech-runs/roots/georgia (1,174 files, d373bc42…b2b50de2), E:/eech-runs/m2/lebanon-root and E:/eech-runs/m2/lebanon-m1-copy (1,179 files each, 121a7890…4259c09), each IDENTICAL to its accepted manifest.
What was characterised before moving or changing it: not applicable. Promotion moves no behaviour.

Retained runtime validation (65892de1; current-head applicability above)

Record: eech-campaign/reference/pr59-candidate-identity/ (PR #79, final author head f9278cb3; its original runtime record was f3f43b89).

Build identity. Rebuilt from scratch with #76's procedure: EECH_WIN_TARGET=eech-win-target-pr59 tools/build-windows.sh target/pr59-candidate.

#76 validated (d38b9b2d) #59 candidate (65892de1)
Build-input trees (aphavoc, modules, crates, tools, regression, Cargo.*) d3309ea5, cb40c456, 99463f74, 5d2c4211, 090bd08a, 5d0b008a/b1d15e2c the same same; the commits differ only by #76's record
Image / rustc / MinGW sha256:0c60c75d…bab3 / 1.98.1 / GCC 12.2.0 posix the same same
lua.dll and lua/{campaign,lifecycle,metrics,observations}.lua d0c799fe…, 4b1fa47d…, dbce9000…, dd28274e…, 68527ae6… the same same
Configuration (pack.json, lineages, seed, duration) tree 090bd08a; windows-retail v1 the same same
Retail inputs the manifests above the same, rechecked same
eech_dc.dll 186857df…8763 a99d7a11…3f41 file hash differs
eech-world.exe 56f08086…9471 13cc2a6f…a228 file hash differs

The two binaries differ only in link timestamps, the header checksum and the unmapped COFF symbol table. All mapped sections are byte-identical except the DLL .edata export-directory timestamp (section-comparison.txt). Full-file hashes differ; runtime evidence was rerun. This is the rebuild behaviour recorded in docs/m1-baseline.md. Because the reuse condition is stated on the file hashes, #76's runtime evidence was not reused: the M4 pack was rerun on this build.

Evidence Command / artifact Actual result and scope
Baseline sociable checks #76's run (reference/pr76-candidate-validation/) PASS; the comparison point
Red reproduction, or reason not applicable not applicable promotion of accepted work; no behaviour change
Candidate sociable / regression checks python tools\regression-pack.py --georgia E:/eech-runs/roots/georgia --lebanon E:/eech-runs/m2/lebanon-root --lebanon-repeat E:/eech-runs/m2/lebanon-m1-copy --bin target\pr59-candidate --out target\regression-pack\pr59-candidate at 65892de1, Windows retail PC, 2026-10-20 20:10–20:33 UTC REGRESSION PACK: PASS. 17 directly protected, 12 baseline-sensitive, 8 evidence-only, 8 not covered, 0 not run. Georgia -Exact IDENTICAL (30/30); Lebanon -Exact IDENTICAL (mechanics 37/37, resupply 2/2). Every claim, check status and detail equals #76's run, apart from identity, wall time and paths.
Boundary / contract proof not applicable no boundary change in this PR
Integrated Lua-module path the pack's lifecycle and reference tiers lifecycle PASS (boot_twice, bad_arguments, missing_root, missing_campaign, no_reuse); missing_map is the known characterised defect, unchanged. Reference: two runs, byte-identical; metrics IDENTICAL, 39/39; observed = unobserved; 31 of 32 supply chains complete; loss chain Mi-17 87568 PASS
Tacview reference runs generated and compared by hash: recording.acmi byte-identical to M2's retained recording (3bd17b64…d2d19b). Not visually inspected
Hosted CI run 39484003715 on 65892de1 5 of 5 jobs pass (i686, i686 original stack attributes, x86_64, x86_64 -O2, windows-cross). Hosted CI does not run the retail campaign baseline.

Baseline differences and classification / approvals: none. Every exact comparison is IDENTICAL, so there is nothing to classify and no change record. Nothing was re-recorded, and no tolerance or expectation changed.
Retained scenario, build, data, configuration, time/seed and artifact identities: in the record above (BUILD-INFO.txt, report.md/report.json, logs/, section-comparison.txt, comparison outputs). Full outputs, about 750 MB with retail data, stay local under target/regression-pack/pr59-candidate/.

Historical evidence (not candidate validation)

These were true of earlier revisions. They are kept for provenance and are not claims about 65892de1:

Review and merge conditions

Server-side protection is not a blocker. By the repository owner's decision of 2026-10-20 ("remove the rules then"), recorded in AGENT.md and docs/governance/REVIEW.md through #73, the review and merge rules are enforced by process and recorded evidence, not by branch protection or rulesets. Item 4 of review 5587358297 (verify effective controls before promotion) is superseded by that decision. The rules themselves stand: a current formal APPROVED review from fd-starscream-bot of the exact head, passing applicable checks, resolved blocking feedback and author/reviewer separation (author fd-shockwave-bot). Whoever merges checks these against the exact head and records it here. No auto-merge.

Items 1 to 3 of review 5587358297:

  1. M5 readiness: replace the retired #51 gate with the accepted M4/M5 records (EEDCS-9, #71) #73 and eech-campaign: tighten the -O2 global inventory; E4 timer.c callback fix for GCC 14+ (#75) #76 landed with their own approvals (EEDCS-5 comment 10423).
  2. Rebuilt and rerun: see "Candidate validation".
  3. This body, refreshed to the actual candidate, with historical evidence kept separate and the residual risks below.

Known gaps, risks and unavailable verification

The residuals in EEDCS-5 comment 10423:

  • one seed and three simulated hours;
  • 8 evidence-only and 8 uncovered M4 claims;
  • no visual Tacview review and no human-player verification;
  • the retail runtime evidence is local, on the user's PC, not hosted CI;
  • the world and the campaign are still coupled in one DLL (transitional; M5 work);
  • timing, identity and sampling limits of the observations;
  • the known supply defects, and the corrected M3 attribution;
  • GCC 12 stays pinned; the Wine/nm and cross-drive report limitations remain.

Also:

Reproduction / rollback: rebuild with tools/build-windows.sh and rerun the pack command above (the record's README). Rollback: master returns to 21c8c404.

Review and handover

  • Scope matches the Task; unexpected expansion was agreed with the lead.
  • Relevant baseline was protected before structural change. (No structural change; windows-retail v1 rerun on the candidate.)
  • Expected outputs/tolerances changed only with explained evidence. (None changed.)
  • Applicable checks pass; not-run checks and their impact are explicit.
  • Request formal review from @fd-starscream-bot using a different PR-author identity.

Next bounded action / outstanding review feedback: fresh formal review by fd-starscream-bot of this head and its intended master merge result, replacing review 5587358297. PRs #79 and #74 have landed. Resolve the known #77/#78 review gaps before deciding any further supporting integration, then establish final-head/merge-result provenance and obtain the author self-review and fresh Starscream review. The six Confluence criteria remain the authority for M5 acceptance. No promotion approval or merge is implied.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TuuyZsxMPns7iUSLNZ9opK

Copy link
Copy Markdown
Author

CI is green on d2d4792 (all 5 jobs), and the PR merges cleanly into master.

I pushed three commits on top of a02d489. They change CI configuration and tests only. Engine C sources and campaign logic are untouched.

  • b4d43ea
    • Installs Lua 5.1 on the Linux runners and builds lua.dll for the MinGW job. The vendored lua.lib is gitignored.
    • load_dc now finds the cdylib next to the test binary, so --target builds pass.
    • cargo fmt and clippy -D warnings are clean again. In eech-map this meant removing the unused Road.bridge and cell_type, adding type aliases and replacing one expect with an error. Tacview update_attitude gets one targeted allow.
  • 254ded5
    • Pins CI to ubuntu-24.04 and builds with GCC 12, matching tools/Dockerfile. GCC 14 and later turn the timeSetEvent callback's incompatible-pointer warning into an error on x86_64.
    • Installs wine for the Windows test runner.
  • d2d4792
    • Changed expectation, please review: every_writable_global_is_classified lists the globals of the default -O0 kernel. In the EECH_C_OPT=2 build, the optimiser drops two globals nothing reads (old_num_map_z_sectors, update_data). Optimised builds may now omit listed globals, which the test reports, but they must still add none. The check at -O0 is unchanged.
    • Replaces chunks_exact(2) with indexed pairs to satisfy clippy 1.99. The iteration is the same.

The Windows retail regression (windows-retail v1) was not re-run on these commits. They don't touch the engine or the campaign logic, but that is inferred, not shown by a run.

A merge still needs a formal approval from @fd-starscream-bot, per AGENT.md.


Generated by Claude Code

@fd-starscream-bot fd-starscream-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Decision: CHANGES_REQUESTED at d2d4792. Do not promote the integration branch to master yet.

  1. Land corrected, independently approved #73 and #76 first, after effective protection is verified. #73 currently weakens the unverified-protection no-merge rule; #76 replaces the blanket optimised-global disappearance exemption with the two evidenced entries and carries E4. Their review findings must be resolved, not bypassed through this integration PR.
  2. Rebuild the resulting integration candidate and run Georgia and Lebanon against windows-retail v1 with -Exact, plus the applicable M4 runtime pack/public-path scenarios. Retain exact build/head, toolchain, binary hashes, retail-input identities, commands, results and limitations. The retained tier and five green hosted jobs do not execute the accepted retail campaign baseline. No silent re-baseline: classify any delta under REVIEW.md.
  3. Update this PR body to the actual candidate and acceptance state. It still describes 40 commits at 5f07697 and pre-rework CI, whereas the current head is d2d4792 and includes accepted M1-M4 work. Distinguish historical evidence from candidate validation and retain the M4 residual risks.
  4. Verify effective controls on both the integration branch and master before promotion: named lead approval, stale-review invalidation, required applicable checks, conversation resolution and restricted bypass/direct/force pushes. Keep a no-merge blocker until demonstrated; a clean merge and green CI are not enforcement evidence.

The owner's direct commits b4d43ea, 254ded5 and d2d4792 are accepted current state. I am not requesting retrospective reviews. This decision concerns forward promotion and the evidence needed for its final merge result. CI run 39430961467 is successful, but the Windows retail regression has not been rerun on those accumulated changes.

After #73/#76 land, the head changes and this PR needs a fresh formal review of that exact head and intended master merge result. This is not an exhaustive re-review of all historical programme commits.

JonathanTurnock pushed a commit that referenced this pull request Oct 20, 2026
The whole M4 regression pack on the rebuilt #76 candidate (d38b9b2, clean;
eech-build image 0c60c75d, the accepted build's), against the retail roots
and windows-retail v1. PASS: 17 directly protected, 12 baseline-sensitive,
nothing NOT RUN.
- Georgia -Exact: IDENTICAL, 30/30.
- Lebanon -Exact: IDENTICAL, 37/37 and 2/2.
- Lifecycle: 5 PASS plus the unchanged known defect.
- Reference: repeatable, and byte-identical to the retained recording and
  observations.

No difference, so nothing to classify; no baseline or tolerance changed.

Binaries: eech_dc.dll 186857df..., eech-world.exe 56f08086...; lua.dll and
the scripts are the accepted ones. Retained in
reference/pr76-candidate-validation/. Intended to serve #59 item 2 while
#59's head builds to the same hashes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TuuyZsxMPns7iUSLNZ9opK
@fd-shockwave-bot fd-shockwave-bot changed the title Native EECH campaign: eech_dc on the full engine, Windows build, retail campaigns and regression Promote the native integration branch to master: M1-M4, #73, #76 (65892de1) Oct 20, 2026
@fd-starscream-bot

Copy link
Copy Markdown

[issue] No self-review @ 65892de — review HOLD

The refreshed body and EEDCS-5 comment 10430 are received. Head remains 65892de and its five CI jobs pass. No current-head G1–G10 self-review note is present: the sole PR comment is the older d2d4792 handover. Seekers mr-review Phase 1 requires that note before the independent evidence audit. Please post it against the candidate actually submitted for promotion; the PR body is not a completed rubric.

This prerequisite pass stops here. Existing CHANGES_REQUESTED is not replaced by approval. The new runtime results are submitted implementer evidence, not independently accepted in this pass. Retain #79's record and establish provenance for the final integration head and intended master merge result before promotion. Do not reduce validation to the exact pair solely because mapped PE sections match: complete build/runtime identity and applicable M4 evidence must remain established.

@fd-starscream-bot
fd-starscream-bot marked this pull request as draft October 20, 2026 20:59
JonathanTurnock pushed a commit that referenced this pull request Oct 20, 2026
…erated

The self-review of f3f43b8 found the three comparison helpers failed open:
compare-report.py and compare-logs.py exited 0 whatever they found,
compare-report.py cut values at 110 characters and conflated null, absent
and empty values, compare-logs.py ignored files present only in its second
directory and cut long diffs, and compare-pe.py accepted any trailing bytes
as the symbol table and, under python -O, files without a PE header.

The helpers now exit 0 same / 1 differ / 2 unreadable, print differences in
full, and compare-pe.py validates the export directory (a non-code section,
a counted data directory) and the symbol table (symbols present, at the end
of the sections, sized to EOF) before excusing them. compare-selftest.py
covers 85 cases (86 on Linux); 64 fail against the f3f43b8 helpers, and
removing any new compare-pe.py guard fails 2. A separate CI job runs it.

The three comparison outputs are regenerated from the same retained inputs
and binaries: the conclusions are unchanged, and every difference (commit,
binary hashes, paths, run time) is classified in the README. The one
difference the old helpers hid is logs/inputs-before-run.txt, which exists
only in this record. provenance-checks.txt retains the commands and outputs
for the metrics hashes, the merge tree, the output size and the run window.

The README now names the .edata export-timestamp exception, corrects the
first commit message's claim that every mapped section was identical,
drops the unrecorded process check as evidence, and adds the
BASELINE_RECORD phase table, reproduction and rollback, and next question.

No product, build input, baseline or runtime evidence changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
JonathanTurnock pushed a commit that referenced this pull request Oct 20, 2026
…lftest asserts diagnostics

Repairs the 15 findings of review 5592349384 on 1783ae3. refs #79

compare-pe.py now rejects an ambiguous PE layout as unreadable (exit 2)
before excusing any metadata byte: an optional header too short for its
fixed fields or declared data directories, a section table past the end
of the file, section raw data overlapping the headers or another
section, and sections overlapping in memory. Section names are compared
as raw bytes. compare-logs.py prunes symbolic links and Windows
junctions from the walk before entering them, recognising a junction by
its reparse tag. compare-report.py detects duplicate keys in one pass.
Both readers close their files.

compare-selftest.py now checks each case's diagnostic and that stderr
holds no traceback or warning (tools run under -X dev), adds a case for
each defect and each listed branch (normal and -O for PE), and reports
cases skipped by design or unavailable; --strict, used in hosted CI,
fails on unavailable cases. Written first, it fails 88 of 115 attempted
cases against the 1783ae3 helpers (selftest-red-1783ae3b.txt); with
the repairs, 115 of 115 on Windows and 117 of 117 on Linux --strict.

The retained comparisons of the real binaries, reports and logs rerun
with the repaired helpers byte for byte identical, stderr empty
(helper-rerun.txt). The README corrects the rebuild reproduction claim
(the .edata hash changes), withdraws 1783ae3's unretained
guard-removal claim, and notes that compare-pe.py prints counts per
region, not every differing byte.

No product, build input, baseline, expectation or runtime evidence
changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
JonathanTurnock pushed a commit that referenced this pull request Oct 20, 2026
The eight-principle clean-code audit of add073d found nothing above
0.5. The remeasured low-score items fixed here: check_layout's
docstring claimed full byte coverage (it rejects header and section
overlaps only); the selftest's both() chained edits to one file and is
now chain(); truncate() no longer calls a dunder; check() names its
stderr rule; the size case derives its sizes from the builder; a
missing private _winapi counts as unavailable, not a traceback; and
compare-report.py's duplicate check uses a plain branch. Retained
selftest runs re-recorded: red 88 of 115 against the 1783ae3 helpers,
green 115 of 115 on Windows, 117 of 117 on Linux --strict; the
real-input comparisons rerun byte for byte identical. refs #79

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fd-starscream-bot added a commit that referenced this pull request Oct 20, 2026
#59 candidate identity: 65892de rebuilt, M4 pack rerun against windows-retail v1 (PASS)
@fd-starscream-bot

Copy link
Copy Markdown

Current prerequisite check at faac790: all eight exact-head checks pass, but no author G1-G10 self-review names this promotion head. The body/title still describe an older 6f222b1/65892de1 candidate; its old executable-equivalence statement does not describe current structural/ABI inputs. Review remains HOLD at the missing current author evidence, with existing CHANGES_REQUESTED unchanged. No deeper promotion review or master merge is claimed.

Current supporting merges include #81, #82 and #84. The combined structural/ABI product has exact-source M4 evidence; risk, current call-map and host-identity work are still active. Reconcile the intended final promotion head and master merge result before fresh review. Historical #77/#78 sequencing is not a scope authority: Confluence11534337 alone defines M5, and all six final criteria remain unaccepted. Keep this PR draft.

fd-starscream-bot and others added 30 commits November 2, 2026 20:53
…source only)

Cases 1 and 2 are drawn from the same scan of the same mobiles and case 3 from a fixed structure.
The driver now requires the reported entity count to cover one mobile (case 2 available) plus one
structure (case 3 available), without counting calls as distinct entities, and requires case 1's
no-mobile reason to hold exactly when case 2 is unavailable. The positive for case 1's scene reasons
now starts from [false, true, true] (case 2 real) instead of the impossible [false, false, true].
Positives first, then single faults; no API, C or native change.

Source only: unformatted, unbuilt, unrun.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…Rust, C and Lua diagnostic; source only)

eech-world's ModelStore and csrc/model_step.c gain target_point_local (invalid zero,
first TARGET_POINT sub-object under an identity pose, or the bounding-box centre with
y clamped at zero) and target_point_world (semantic root pose, row-vector attitude
convention, scale carried down the chain; state keyframe0 only). The host Lua face adds
scene_index, target_point_local, target_point_world and compare_target_points, which
compares the retained observer's offset rows of both passes and its branch-1 queries
bit for bit. No Core routing, no public ABI change. Unit tests, docs section (including
the constructor RNG source audit, unmeasured) and STATUS added. Not built or run: the
Linux image was unreachable.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…2/12 on the working tree

The 12 focused tests failed at the fixture load because the test's 3dobjs.bin header
wrote eight counts where the loader (and model_route.rs) reads seven; the loader is
unchanged. The bounding-box fixtures now straddle the origin because the original's
scene bounds start from a zeroed box, with the literal expectations recomputed by hand.
A WorldViewpoint alias clears clippy::type_complexity. In the pinned Linux image the
focused tests pass 12/12, fmt --check and strict all-target clippy for eech-world exit 0
(working-tree results). No retail parity, live-pose evidence or Core cutover is claimed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…st target-point kernel

Root's retail comparison at 83df5b8 matched all branch-1 queries but reported 1504
offset mismatch conditions per map; the first known cause was scenes no file defines
(for example 2762, 2832), which the original still constructs: zero bounding box, no
target point. The host now answers those with the zero bbox offset and NoTargetPoint
instead of scene_not_loaded, and the comparer no longer requires the scene to be loaded.
Index 0 stays the invalid zero, out-of-domain indices stay argument errors, an
inventory-only store refuses, and a missing required file is still a load failure.
Arithmetic, FP guard and first-match search are unchanged. 13/13 focused units, fmt and
strict clippy pass on the working tree; retail parity of this source is not yet shown.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…he target-point fixture

Fixture, driver and guards only; the host kernel is unchanged and no Core query moved.
Branches 2, 3 and 4 now record the entity base position the original's own
get_local_entity_vec3d copied, before any physical addition. Branch 1 records the
instance's relative scale and the placement chain the original is about to walk
(complete, or an explicit empty/too_deep/unterminated/wrong_root/null_result state with
no partial chain), so the keyframe0/scale1 replay can be compared with the real inputs.
Every rand() of the fixture build is counted by a wrapper that calls the real one once in
place, the single srand is announced, and the summary reports per-pass draws against the
skin prediction plus ordered seed/pass/exposed marks. New patches TP21 to TP25 have exact
anchors and counts. The strict Lua driver and the real-Lua guards check the new fields,
the short-circuit cases and the stream joins. Working-tree gates: characterization 42/42,
model target-point 13/13, fmt and strict clippy (default and fixture) 0. Nothing was
captured; the doc's future-cutover wording for constructor work is corrected.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… branch 3 from the recorded inputs

ModelStore::target_point_fixed and eech_model_fixed_target_point copy the original branch 3
of get_local_entity_target_point with its types and order under the existing floating-point
guard: the offset is the host's own, x and z are added only for a horizontal offset AND a
non-zero heading (the zero-heading quirk kept), y is always added for a valid shape, and a
heading is read only where the original reads it (otherwise a refusal). Shape 0 stays the
position copy; a valid empty slot adds y. compare_target_points replays every recorded
branch-3 query from the exact base and heading, counting matched, mismatched, refused and
missing-input apart (older reports without base are never passed). No Core routing or ABI.
21 focused units, 42 characterization guards, fmt and strict clippy pass on the working
tree; no retail parity is claimed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ed overflow, exact mark joins, decision rule)

One consolidated correction after the independent review of observer 95199. C: every RNG
total and the dropped-mark counter latch overflow instead of wrapping; the wrapper still
calls the real rand once and the srand announcement still precedes it. Driver: on a complete
history each kept pass has exactly one ordered begin/end pair matching the pass lines and
census counts; since_seed is derived exactly from the preceding seed (a seed records the
pre-reset value); an exposed mark is the first outside draw after a pass end at exactly
pass_end.draws + 1; later samples only grow, keep their prefix and append no older mark;
skinned is bounded by the table minus scene 0 and never required to equal the draws. Partial
and overflowed histories are reported as such and withhold conclusions. The decision rule and
docs now state window-only absence, reseed erasure, pending passes, and the audited coverage.
Positive-first finite guards cover each join, plus a guard against string literals broken
across lines (shown red). Gates on the working tree: characterization 50/50, model
target-point 21/21, fmt and strict clippy (default and fixture-on, C rebuilt) pass. The 95199
raw data stays provisional; no host or Core change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…20261102

Tighten D3 execution after the five-whys review
… close two checker edge cases

Checker-only residuals of the same RNG-evidence group; the original C (1c30fcc), host and
build are unchanged. The continuity joins (counters never fall, a latched overflow never
clears, marks never change or disappear, an appended mark is not older than the earlier
sample) are extracted into rng_continuity and applied between every consecutive pair of
samples as well as against the boot, leaving boot-held census-pass immutability as it was.
A pass beyond the history that begins before the four kept generations fill is rejected on a
complete history; partial and overflowed histories are not judged by that order. The draws of
a pass abandoned by the next begin count as draws inside passes, and the history is reported
incomplete (census not whole, NOT MEASURED) rather than malformed. Focused guards: 53/53,
fmt and strict clippy for eech-world pass on the working tree. A read-only independent
re-check of the six retained 1c30 traces is consistent and continuous (captured window only).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ted build

initialise_target_point_offsets no longer constructs, searches, bbox-centres or destructs model
instances: staged patches TH1/TH2 put the original body under #if 0 (kept only in the named
target-point-fixture and model-fixture builds). It keeps the seeker-limit call once per
invocation and the invalid scene's zero, and asks the host for every other scene's three local
coordinates through a new TARGET_POINT_OFFSET question (compiled-name echo, FOUND and finite or
the engine stops by marker, no fallback; an empty catalogue slot answers its genuine zero). The
reference host answers from ModelStore::target_point_local as exact bit patterns. The private
target_point_offsets cache of host facts still feeds the direct gd_attck consumer and the
still-original get_local_entity_target_point, which is the next step.

The branch-3 comparer now requires the three known case labels and a well-formed offset, or
counts the row as missing its input. The model-host-fixture gains held-offset and real
attack-consumer entries, and model-authority.lua gains the healthy, changed-host and
withheld/malformed offset controls. Focused tests (eech-dc 50, model_target_point 23,
model_store 59, characterization 53), fmt and strict clippy (default and three fixtures) pass on
the working tree; no campaign was booted and no authority or acceptance is claimed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…et in the authority script

The native run of the production offset cutover (9b916ac) showed offsets_bad_nan stopping at
boot, fail-closed, with [model-provider:target_point_offset.answer] and "p: not finite": the Lua
bridge decodes every bit pattern and refuses a non-finite one at the transport boundary before
the C code sees a value. model-authority.lua expected the C backstop's .value marker, so its
honest verdict was unmatched. The script's header and expected marker, the stand-in engine of the
model_store guard, and the eech-dc provider-contract test (a NaN bit pattern is refused as
.answer naming "p: not finite") now state the established contract. The C .value check remains
the backstop for a provider that bypasses the bridge. No production C or Rust behaviour changes
(the module.rs hunks are inside mod tests). eech-dc 50, model_store 59, model_target_point 23,
fmt and strict clippy pass on the working tree.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…osted build

get_local_entity_target_point (en_maths.c) no longer searches the entity's instance for a
TARGET_POINT sub-object, solves its world viewpoint or rotates the fixed offset itself in any build
with a host model: staged patches TH3/TH4 put the original body under #if 0 (kept only in the
target-point-fixture and model-fixture builds). The host names the chain (TARGET_POINT_CHAIN), is
sent the campaign's CURRENT instance viewpoint and relative scale and the live relative position,
heading, pitch, roll and scale of each sub-instance along that chain, and answers the world point
(TARGET_POINT_WORLD); for a fixed object it is sent the copied position, and the heading only when
the cached host offset has a horizontal part, and answers the position (TARGET_POINT_FIXED).

The campaign keeps its branches, the exact fallbacks (no target point, no instance, not fixed, the
invalid shape: the position copy bit for bit), the instance-viewpoint write only when a target point
exists, and the getter's read order. A missing, refused, mis-named, non-finite or over-deep answer
stops the engine by marker; nothing falls back. The reference host answers with ModelStore
target_point_chain and target_point_live, which run the existing world-viewpoint kernel over the
placement given instead of keyframe 0.

model-host-fixture gains model_host_target_queries (the real getter on live entities, with the
original's own depth-0 search as an oracle for the host's chain) and model-authority.lua gains
queries=1, queries_changed and nine withheld/malformed modes. STATUS.md now opens with one dated
current summary and marks older "current" headings historical; the active card and execution notes
are updated.

Focused tests (eech-dc 54, model_target_point 27, model_store 62, characterization 53), fmt, strict
clippy (default and three fixtures) and a staged-tree probe pass on the working tree. No native
campaign, authority run or regression was run and no acceptance is claimed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s exact

P1: the fixture's bounded legacy-selection walk is now the ONE walk and a mandatory preflight.
It records the nodes it reaches; the legacy comparison, the mutation and the pose read use them
and no second unchecked walk remains. A host-named path outside the instance is a named
refusal row (chain_path_outside_instance) returned before the sentinel, any change, the getter
or any pose read. Restoration of the viewpoint, the leaf, the instance pointer and the shape is
read back on normal return, and the viewpoint verdict covers position and attitude. A new mode,
queries_chain_offset_late, arms a positive out-of-range sibling position only while the
mutating call runs, after a coherent unmutated call.

P2: judge_queries requires exactly the six named rows once and in order in the C grammar (no
missing, repeated, unknown or trailing fields, known status and 0/1 domains), joins every
provider event to its row by operation, scene and order, requires the diagnostic's own chain
and the getter's to agree, and judges the whole viewpoint-write and the measured restoration.
The stand-in prints the full grammar and plays each breach.

Production C and Rust are unchanged from 8118389; the changed fixture file is empty outside
model-host-fixture. Focused gate (eech-dc 54, model_store 64, model_target_point 27,
characterization 53, fmt, strict clippy default and three fixtures) passes on the working tree.
No campaign, native run or acceptance is claimed. The chain limit of eight stays an explicit
refusal limit, not proven all-model support.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… an instance

The corrected retail reference covered found 4 / absent 0 / fixed 4 / fallback 4, so the
campaign's acceptance of a host ABSENT chain for an existing instance was not natively covered.
Lua and test only: the provider answers a correctly named ABSENT to every instance chain
question and leaves every other answer alone. Covered only by four ABSENT instance rows (entity
position bit for bit, instance viewpoint untouched, no world or fixed question, sentinel
restored by readback) and zero FOUND; legacy_same=0 is accepted in this named control only,
counted as a host-versus-original difference and never turned into 1. The stand-in plays one
faithful positive and the ignored-absence, viewpoint-write, wrong-result, unrestored-sentinel,
wrong-scene and bad-legacy breaches. Production C and Rust and the C fixture are unchanged from
fc6388f; no new C build is claimed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nt state

Evidence and prose only. The corrected fc6388f Linux and Windows builds and the declared
three-feature original control (all actual exit 0), the 13-case corrected authority queue
(found 4 / absent 0 / fixed 4 / fallback 4, the changed positive, nine named refusals, the late
out-of-range chain with two refused rows before sentinel, mutation, getter and pose read, and the
expected original-getter capability RED), the one host-ABSENT boundary actual (found 0 / absent 4
/ fixed 4 / fallback 4 / refused 0, four counted legacy differences) and the ordinary 811 short
comparison (all three complete outputs literally baseline-equal) are recorded as a safe
projection with the byte-copied scope and comparison proofs. No raw output, model, geometry or
binary is copied and no runtime output is normalized.

STATUS.md now opens with one current summary and the previous one is demoted to history. The
card closes the two source-corrected fixture/witness findings against the corrected-fc evidence,
keeps the final combined query report as a named open gate, and no longer duplicates a stale
next action; EXECUTION.md refers to the card for the current task. Whole Task52, the two running
full40/all8 packs, the Task50 dependency, current CI, the normal merge and D3 remain open.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Two of the byte-copied metadata files have CRLF private originals that Git stores as LF; the
README now says so and points to the recorded SHA256 of the exact private bytes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Independent source/authority and full-shipping review closed. Original ordinary bce pack: actual runner 0, accepted 40/40, all 8 complete outputs byte-identical, four final retail input manifests and 83 payloads unchanged. Final publication 38ec has all 9 current checks successful; production merge inputs are unchanged. Remaining Task49/hierarchy/D3 work stays open.
…eptance

Task50 dependency873a delivered first. Independent initializer/query/mapping and full-shipping reviews closed. Original ordinary811 pack actual runner0, accepted40/40, all8 complete artifacts byte-identical, four final input manifests0 and 84 payloads unchanged. Final350d head all8 current CI jobs successful; prospective normal merge tree equals that exact publication tree. Required hierarchy/live placement/host identity and remaining Task49/D3 services remain open.
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.

2 participants