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-5 (band 3): own the 35-variable cut set, one unit per domain, in removal order #264
The bulk of the Epic. Appendix B lists the 35 external-linkage variables that must become deliberate ownership interfaces before the file separates into domains on its own. The file is one connected component until they do (inventory, section 3.5).
Taken in removal order, webServer first (24 users, the most-referenced variable in the file, absent from every previous plan). Each variable moves into the unit that owns it and is published through one header. No globals.h at any point (Q6, owner ruling).
Domains as the fan-in table groups them: web, GPS, peripheral availability, units and timezone, UI state, geocache, sensors (env, sht, imu, mag), display sleep, FRAM, battery. Expect this to be split into one child task per domain once band 2 has landed and the harness is proven. The split is proposed then, not now.
Two hinges the full table shows and fan-in does not: removing tftSleepMs (#21) drops the largest cluster from 101 to 82; removing oledAvailable (#35) drops it from 45 to 25.
Requires E4-1 (four of the five named structs are in this set) and E4-4 (the callers of logging must be free to move).
Acceptance
After the last domain lands, python scripts/reference-graph.py shows the largest shared-state cluster under 40 functions
Every one of the 35 is defined in exactly one unit; nm on src.ino.cpp.o no longer defines them
Per-domain nm comparison and hardware verification per FC rules
Evidence: docs/god-object-inventory.md. Regenerate the figures with python scripts/reference-graph.py --appendix.
All five children (#270–#274) are merged. The acceptance, measured on main after #279:
nm on src.ino.cpp.o defines none of the 35 cut-set variables.
python scripts/reference-graph.py: 3 external-linkage variables remain (the button-debounce state, touched only by handleButtons), 78 authored functions, 77 touching no shared state of the file, cut set 0, largest cluster 1.
Per-band nm proofs are in docs/god-object-inventory.md §10–§14.
The third acceptance line — hardware verification per FC rules — is yours: nothing in band 3 was flashed. Left open for that reason; closing is the owner's call.
One deviation from the text of this issue, for the record. It says "taken in removal order, webServer first" and "one child task per domain". The five children (#270–#274) were cut by dependency layer instead, and the web unit went last: the relocation graph after band 2 showed webServer referenced only by the 23 web handlers, initWebServer and loop, with initWiFi calling initWebServer, so a web unit before the domains its handlers read would have needed those handlers declared in a header while they stayed in src.ino — the reach-back pattern the no-globals.h ruling forbids. The cut set says which variables must be owned; the graph says the order they can be. Reasoning in #270's body and docs/god-object-inventory.md §10; the decision log is docs/e4-session-2026-09-07.md §3.1.
Closed on the owner's word 2026-09-08: band 3 merged (#270-#274), the cut set lives one unit per domain on main, and the units ran on hardware on the UM FeatherS3D via #280/#288.
Activity
Strycher commentedon Sep 7, 2026
🤖 Auto-promoted to Ready — all dependencies resolved (#260, #263 closed).
refactor(#273): E4 band 3d -- oled, display, ui_state and touch leave…
Strycher commentedon Sep 7, 2026
All five children (#270–#274) are merged. The acceptance, measured on
mainafter #279:nmonsrc.ino.cpp.odefines none of the 35 cut-set variables.python scripts/reference-graph.py: 3 external-linkage variables remain (the button-debounce state, touched only byhandleButtons), 78 authored functions, 77 touching no shared state of the file, cut set 0, largest cluster 1.nmproofs are indocs/god-object-inventory.md§10–§14.The third acceptance line — hardware verification per FC rules — is yours: nothing in band 3 was flashed. Left open for that reason; closing is the owner's call.
Strycher commentedon Sep 8, 2026
One deviation from the text of this issue, for the record. It says "taken in removal order,
webServerfirst" and "one child task per domain". The five children (#270–#274) were cut by dependency layer instead, and the web unit went last: the relocation graph after band 2 showedwebServerreferenced only by the 23 web handlers,initWebServerandloop, withinitWiFicallinginitWebServer, so a web unit before the domains its handlers read would have needed those handlers declared in a header while they stayed insrc.ino— the reach-back pattern the no-globals.hruling forbids. The cut set says which variables must be owned; the graph says the order they can be. Reasoning in #270's body anddocs/god-object-inventory.md§10; the decision log isdocs/e4-session-2026-09-07.md§3.1.docs(#212): the E4 session record, the proofs, and the facts CLAUDE.m…
Strycher commentedon Sep 8, 2026
Closed on the owner's word 2026-09-08: band 3 merged (#270-#274), the cut set lives one unit per domain on main, and the units ran on hardware on the UM FeatherS3D via #280/#288.