Repository navigation
Promote the native integration branch to master: M1-M4, #73, #76 (65892de1) - #59
fd-shockwave-bot wants to merge 826 commits into
Conversation
|
CI is green on I pushed three commits on top of
The Windows retail regression ( A merge still needs a formal approval from @fd-starscream-bot, per AGENT.md. Generated by Claude Code |
fd-starscream-bot
left a comment
There was a problem hiding this comment.
Decision: CHANGES_REQUESTED at d2d4792. Do not promote the integration branch to master yet.
- 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.
- 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.
- 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.
- 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.
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
|
[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. |
…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>
…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>
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>
|
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. |
…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>
…-target-point-services
…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.
Integration status: #79 merged as
163e9158after exact-head approval and six passing checks. #74 is now merged as6f222b1bafter 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 atd2d4792a) 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:
masterat21c8c404f65331422e952b4855ab2361e760991f(merge base81ed32e8)Current integration head:
6f222b1b5d6aa64ef8bfed6335d0bf294afc81b7(claude/eech-campaign-native-spike-tjkj6g, #74 merge). The retained runtime build is still65892de1;git diff --quiet 65892de1 6f222b1b -- aphavoc modules eech-campaign/crates eech-campaign/tools eech-campaign/regression eech-campaign/Cargo.toml eech-campaign/Cargo.lockpasses. 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
masteras 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 withgit rev-list --count 81ed32e8..6f222b1b). The integration branch's first-parent history: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 others5f07697bAGENT.md,PROJECT.md,docs/governance/)e0801614b4d43ea6,254ded56,d2d4792a(owner)74aaa168)65892de1)163e9158)f9278cb3by review5592872695; all6 checks passed; all15 threads resolved; mergedAdditional accepted supporting evidence. #74 is now in the candidate as
6f222b1b: final author headf153ffe8, 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
ab279d44and #78 atcf11eb82remain 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,mastergained #72 (.claude/hooks/session-start.sh,.claude/settings.json,.gitattributesfor.claude/hooks/*.sh,.github/workflows/claude-hooks.yml). None is a build input. The merge is clean:git merge-tree --write-tree 21c8c404 6f222b1bgives clean treecce561f348e07a343bf0304f0257fd7fcec5fade(checked after #74 merged). The PR API still reports its historical base SHA81ed32e8; the livemasterbranch was independently verified at21c8c404using bothgit ls-remoteand 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 at65892de1with product-input equality established above. A fresh author self-review at6f222b1bis still required before final Starscream review. The existing CHANGES_REQUESTED review atd2d4792ahas not been replaced.Baseline and behavioural evidence
Baseline revision / scenario / inputs: windows-retail v1 (
regression/baselines/lineages.json, establishede0801614, unchanged); Georgia (map3) and Lebanon (map5) retail, seed 1, 3 simulated hours, 100 ms frames; rootsE:/eech-runs/roots/georgia(1,174 files,d373bc42…b2b50de2),E:/eech-runs/m2/lebanon-rootandE:/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 headf9278cb3; its original runtime record wasf3f43b89).Build identity. Rebuilt from scratch with #76's procedure:
EECH_WIN_TARGET=eech-win-target-pr59 tools/build-windows.sh target/pr59-candidate.d38b9b2d)65892de1)aphavoc,modules,crates,tools,regression,Cargo.*)d3309ea5,cb40c456,99463f74,5d2c4211,090bd08a,5d0b008a/b1d15e2csha256:0c60c75d…bab3/ 1.98.1 / GCC 12.2.0 posixlua.dllandlua/{campaign,lifecycle,metrics,observations}.luad0c799fe…,4b1fa47d…,dbce9000…,dd28274e…,68527ae6…pack.json, lineages, seed, duration)090bd08a; windows-retail v1eech_dc.dll186857df…8763a99d7a11…3f41eech-world.exe56f08086…947113cc2a6f…a228The 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
.edataexport-directory timestamp (section-comparison.txt). Full-file hashes differ; runtime evidence was rerun. This is the rebuild behaviour recorded indocs/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.reference/pr76-candidate-validation/)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-candidateat65892de1, Windows retail PC, 2026-10-20 20:10–20:33 UTC-ExactIDENTICAL (30/30); Lebanon-ExactIDENTICAL (mechanics 37/37, resupply 2/2). Every claim, check status and detail equals #76's run, apart from identity, wall time and paths.recording.acmibyte-identical to M2's retained recording (3bd17b64…d2d19b). Not visually inspected65892de1-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 undertarget/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:5f07697b: Georgia 30/30 and Lebanon 39/39 against the then-baselines, Lebanon played to a conclusion (red at 50.4 simulated hours), and the 24-hour AddressSanitizer runs that found H1 and U1;docs/m1-baseline.md,docs/m2-reference.md,docs/m3-*.md,docs/m4-*.md);d38b9b2d(reference/pr76-candidate-validation/).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.mdanddocs/governance/REVIEW.mdthrough #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:
Known gaps, risks and unavailable verification
The residuals in EEDCS-5 comment 10423:
Also:
regression/*.json) are stale and are not accepted evidence;Reproduction / rollback: rebuild with
tools/build-windows.shand rerun the pack command above (the record's README). Rollback:masterreturns to21c8c404.Review and handover
Next bounded action / outstanding review feedback: fresh formal review by fd-starscream-bot of this head and its intended
mastermerge 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