Integration CI: tighten the -O2 inventory and fix timer.c for GCC 14+ (E4) #75
Description
Task and scope
Epic / milestone: #35, M5 — Establish host interchangeability.
Delivery PR: #76 (ci/integration-green) → claude/eech-campaign-native-spike-tjkj6g.
Rescoped 2026-10-20 (user-approved). The original outcome, integration CI green, was met upstream: 254ded56 (GCC 12 pin, wine) and d2d4792a (eech-map lint, -O2 inventory). All 5 jobs are green at d2d4792a. This Task now delivers two things:
- Inventory tightening.
d2d4792askips the global-state "gone" assertion whenever the kernel is optimised. Here only the two evidenced[elidable]globals (old_num_map_z_sectors,update_data) may be absent atEECH_C_OPT≠ 0. Any other disappearance fails, and at-O0every listed symbol must exist. - E4, a
timer.c:274source fix.windows_timer_interruptand thetimeSetEventuser data takeDWORD_PTR, so GCC 14+ builds the engine on x86-64 without relying on the GCC 12 pin. Runtime behaviour is unchanged on i686 (identical code) and x86-64 (the headlesstimeSetEventnever calls back).
CI and build hygiene only. It changes no campaign behaviour, golden output, regression baseline, tolerance or accepted claim. No warning is suppressed, and no test is skipped or deleted. The CI GCC 12 pin is kept; removing it is a separate decision.
History of the failures (reproduced from CI logs)
| Head | Job | Failure | Resolved by |
|---|---|---|---|
b4d43ea6 |
x86_64 ×2 | timer.c:274 incompatible pointer type (GCC 15, ubuntu-26.04) |
254ded56 (GCC 12 pin); source fix E4 in #76 |
b4d43ea6 |
windows-cross | the wine launcher was missing ("No such file") |
254ded56 |
254ded56 |
x86_64 Lints | clippy 1.99 chunks_exact_to_as_chunks in eech-map |
d2d4792a |
254ded56 |
x86_64 EECH_C_OPT=2 |
inventory: two globals elided at -O2 |
d2d4792a (skip at -O > 0); tightened to the two [elidable] globals in #76 |
Acceptance question
Is E4 a correct, behaviour-preserving fix, shown red without it and green with it on a newer GCC? Is the inventory exemption limited to the evidenced symbols? Are all 5 jobs green, and does the retained regression pack pass?
Activity
fd-shockwave-bot commentedon Oct 20, 2026
Handover (2026-10-20, fd-shockwave-bot)
ci/integration-greenat2c4cc5ae. Base:claude/eech-campaign-native-spike-tjkj6gat254ded56. The brief namedb4d43ea6, but254ded56(GCC 12 pin, wine) landed before this work started, so this Task works forward from it. PR eech-campaign: tighten the -O2 global inventory; E4 timer.c callback fix for GCC 14+ (#75) #76 → integration branch; Task Integration CI: tighten the -O2 inventory and fix timer.c for GCC 14+ (E4) #75 under Epic [Epic][M5] Prove host interchangeability while preserving the reference baseline #35 (M5).pack.jsonchange. This puts M5's refactoring under checks that actually run: the workflow had never passed (0 of 28 runs).b4d43ea6, x86_64:timer.c:274. The original passes aDWORD-parameter callback where the compat shim declaresLPTIMECALLBACKwithDWORD_PTRparameters. GCC 14+ makes that an error.254ded56fixed it with GCC 12, not this PR.b4d43ea6, windows-cross: "No such file": the cargo runnerwinewas not installed (onlywine64). Also fixed by254ded56.254ded56, x86_64 Lints: clippy 1.99's newchunks_exact_to_as_chunksin eech-map. This PR usesas_chunks::<2>().254ded56, x86_64EECH_C_OPT=2: GCC 12-O2elides two write-only statics,old_num_map_z_sectorsandupdate_data, and the inventory's "gone" check failed on them. This PR marks exactly those two manifest entries[elidable]. An optimised kernel may omit only them. At-O0all symbols must exist, and the unclassified check is unchanged.every_writable_global_is_classified ... okin each job.python tools\regression-pack.py --retained-onlyexits 0, with all 14 retained checks PASS (verdict "INCOMPLETE (retained tier only)", by design). A broader Windows runtime regression was not run and is not warranted: nothing ineech_dc.dlloreech-world.exechanged, and no crate depends on eech-map.[elidable]evidence covers GCC 12-O2only.nmcannot spawn under Wine (pre-existing).regression-pack.pycrashes onrelpathwhen--outis on another drive.timer.cengine patch (callback parameters toDWORD_PTR; behaviour-neutral on i686; the shim never calls back) so the build no longer depends on the GCC 12 pin.rust-version = "1.80". It is not inherited, and eech-map needs 1.88 now (1.87 before this PR).[-]Integration CI green at b4d43ea6[/-][+]Integration CI: tighten the -O2 inventory and fix timer.c for GCC 14+ (E4)[/+]fd-shockwave-bot commentedon Oct 20, 2026
Handover (2026-10-20, fd-shockwave-bot), superseding the earlier handover
Branch / commit:
ci/integration-greenat303103d2. It is merged with the integration headd2d4792a(94432391), and the integration branch has not moved since. Commits:2c4cc5ae,94432391(merge, inventory tightening),303103d2(E4).Scope (rescoped, user-approved):
EECH_C_OPT≠ 0 only the two[elidable]globals may be absent.timer.c'stimeSetEventcallback and user data takeDWORD_PTR.CI and build hygiene only; no campaign behaviour change.
Characterised: the generated code for
timer.cwith and without E4, compiled with GCC 12 and the engine's flags. i686 is identical. On x86-64 the only difference is that the pointer is no longer truncated (the headlesstimeSetEventnever calls back).Red / green for
timer.c:b4d43ea6). Locally, on94432391without E4: GCC 14.2.0 (rust:trixie) and GCC 15.3.0 (gcc:15), bothtimer.c:274:66: error: … [-Wincompatible-pointer-types].cargo testpasses on GCC 14.2.0. The-O2inventory passes 2 of 2 on GCC 14.2.0 and 15.3.0.CI: run 39440605895 at
303103d2, 5 of 5 green (x86_64 incl. Lints, x86_64 OPT=2, i686, i686 original-stack, windows-cross).Regression:
python tools\regression-pack.py --retained-onlyexits 0, with 15 of 15 retained checks PASS. (The earlier handover said 14; it is 15.)Boundaries: none discovered or changed. Baseline differences: none.
Limitations:
eech_dc.dll, but only in code that is never reached.[elidable]is evidenced for GCC 12, 14 and 15 only.regression-pack.pyfails onrelpathacross drives.Lead decisions:
-Exactregression is wanted.Review status: review re-requested from @fd-starscream-bot. Not approved; not merged.
Next bounded action: address the lead's review.
fd-shockwave-bot commentedon Oct 20, 2026
Handover (2026-10-20, fd-shockwave-bot), superseding the handover of 14:43 UTC
Branch / commit:
ci/integration-greenataa110ffa.74aaa168, with M5 readiness: replace the retired #51 gate with the accepted M4/M5 records (EEDCS-9, #71) #73, in433871fa. The integration head has not moved since.433871fa(the merge; governance only, no build input),d38b9b2d(E4 evidence and review wording),aa110ffa(candidate validation record).Scope: unchanged.
[elidable]inventory rule, as accepted by the lead.timer.cfix: "no behavioural change" for the headless product only.No campaign behaviour change; the GCC 12 pin is kept.
Review 5587346957: every point answered in the PR comment above.
Evidence retained in the repository:
eech-campaign/reference/e4-timer-callback/: red/green on GCC 14.2 and 15.3, the -O2 inventory, the GCC 14 x86_64 suite, and i686/x86_64timer.odisassembly with pinned images and exact commands.eech-campaign/reference/pr76-candidate-validation/: the whole M4 pack on the rebuilt Windows candidate.Red / green: red
94432391fails attimer.c:274:66on GCC 14 and 15; green303103d2builds on both. i686 code is identical (292 lines); the x86_64 changes are classified.Runtime: finished; nothing in progress.
d38b9b2d, 16:30–16:49 UTC, ran on the retail PC with no other EECH process running.-Exactare IDENTICAL to windows-retail v1; 17 directly protected and 12 baseline-sensitive claims PASS; nothing NOT RUN.Binaries:
eech_dc.dll186857df…,eech-world.exe56f08086…(acceptedeech-buildimage0c60c75d). The record is intended to serve Promote the native integration branch to master: M1-M4, #73, #76 (65892de1) #59 item 2 while Promote the native integration branch to master: M1-M4, #73, #76 (65892de1) #59's head builds to these hashes.Checks:
d38b9b2d(run 39457908937) and ataa110ffa(run 39461065299).govcheck.py: 0 failures.Boundaries: none changed. Baseline differences: none.
Limitations:
nmskip, and the pack's cross-drive path crash.Review status: review re-requested from @fd-starscream-bot. Not approved; not merged.
Next bounded action: the lead's review of
aa110ffa. After eech-campaign: tighten the -O2 global inventory; E4 timer.c callback fix for GCC 14+ (#75) #76 lands, Promote the native integration branch to master: M1-M4, #73, #76 (65892de1) #59's rebuilt head can be checked against the hashes above.Merge pull request #76 from flying-dice/ci/integration-green