You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
E4-1: name the five anonymous structs and remove the write-only touchDetected #260
Declaration-only. No call site changes. Behaviour-neutral by construction, proven by symbol-set comparison (nm --print-size --defined-only before and after: identical set, sizes and types apart from the one deliberate removal).
Name the five anonymous single-instance structs so they can be declared extern from other translation units. extern cannot name a variable of anonymous struct type, and four of the five are in the cut set (inventory, section 5):
The file already names six other structs (FRAMHeader, GeocacheEntry, TZPreset, WeatherReading and others), so this is house style, not a new convention.
Remove touchDetected (src.ino:269, written at :1039 in touchISR(), never read). The one dead variable in the file, confirmed by relocation analysis after correcting the ISR-section attribution.
Hardware verification per FC rules, or the owner accepts the nm proof as sufficient for a declaration-only change. That is the owner's call and is recorded on this issue either way
Evidence: docs/god-object-inventory.md. Regenerate the figures with python scripts/reference-graph.py --appendix.
PR #266 is green (c087b06): discover, tests, build (feather_s3), compile-gate all SUCCESS; MERGEABLE/CLEAN.
Acceptance, item by item
criterion
evidence
pio run -e feather_s3 succeeds
local SUCCESS 41.85 s; CI SUCCESS
arduino-cli compile still succeeds while #161 is open
SUCCESS, 1,787,706 program / 106,372 RAM
nm set identical except touchDetected; sizes and types identical
573 → 572; removed: touchDetected only; added: none. touchISR T 16 → T 5 (the store went with the flag). Five structs: sizes unchanged, linkage b/d → B/D — see below
symbol-inventory.py reports 96 external-linkage
96 (was 97)
hardware verification, or owner accepts the nm proof
The two +36 figures are against pre-migration baselines. The migration replaced six credential literals with longer placeholders — "tsunami" → "REDACTED_SSID_1" and so on — which is +48 bytes of .rodata. +48 from the migration, −12 from this change, +36 net. All three environments agree, and the same-day like-for-like measurement is the −12.
The linkage flip is the mechanism, measured
The five named variables went from local (b/d) to global (B/D) in nm. A variable of unnamed type has internal linkage in C++; the linker had them TU-private all along despite plain names. That is whyextern could not name them, and the letter flipping is the proof that naming fixed it. Recorded in §5 of the inventory document in this PR, as a correction to the document's own classification.
Decision needed
This change moves no logic — the only code that changed is one store in an ISR whose result was never read. Per the acceptance criterion as written: do you accept the nm proof as sufficient for a declaration-only change, or do you want a flash-and-observe before merge? If the latter, note main cannot join WiFi until #99, so it means a flash with a local credential edit and a check that the device boots, reads sensors, and touch still responds (the ISR is empty; the interrupt is still attached; LVGL polls the controller regardless). Either answer is recorded here.
Owner decision, 2026-09-07: the nm proof is accepted as sufficient hardware verification for this declaration-only change. No flash-and-observe before merge. Recorded here per the acceptance criterion.
Activity
Strycher commentedon Sep 7, 2026
PR #266 is green (
c087b06): discover, tests, build (feather_s3), compile-gate all SUCCESS; MERGEABLE/CLEAN.Acceptance, item by item
pio run -e feather_s3succeedsarduino-cli compilestill succeeds while #161 is opennmset identical excepttouchDetected; sizes and types identicaltouchDetectedonly; added: none.touchISRT 16 → T 5 (the store went with the flag). Five structs: sizes unchanged, linkageb/d→B/D— see belowsymbol-inventory.pyreports 96 external-linkagenmproofSize, reconciled across three toolchains
The two +36 figures are against pre-migration baselines. The migration replaced six credential literals with longer placeholders —
"tsunami"→"REDACTED_SSID_1"and so on — which is +48 bytes of.rodata. +48 from the migration, −12 from this change, +36 net. All three environments agree, and the same-day like-for-like measurement is the −12.The linkage flip is the mechanism, measured
The five named variables went from local (
b/d) to global (B/D) innm. A variable of unnamed type has internal linkage in C++; the linker had them TU-private all along despite plain names. That is whyexterncould not name them, and the letter flipping is the proof that naming fixed it. Recorded in §5 of the inventory document in this PR, as a correction to the document's own classification.Decision needed
This change moves no logic — the only code that changed is one store in an ISR whose result was never read. Per the acceptance criterion as written: do you accept the
nmproof as sufficient for a declaration-only change, or do you want a flash-and-observe before merge? If the latter, notemaincannot join WiFi until #99, so it means a flash with a local credential edit and a check that the device boots, reads sensors, and touch still responds (the ISR is empty; the interrupt is still attached; LVGL polls the controller regardless). Either answer is recorded here.Strycher commentedon Sep 7, 2026
Owner decision, 2026-09-07: the
nmproof is accepted as sufficient hardware verification for this declaration-only change. No flash-and-observe before merge. Recorded here per the acceptance criterion.refactor(#260): name the five anonymous structs, remove the write-onl…
fix(#290): wake on the CTP_INT edge so the first tap wakes the panel