Repository navigation
E4-5a (band 3): fram, settings and rtc units #270
Description
Epic: #212 · Parent: #264 — band 3, split per domain as its body anticipated ("expect this to be split into one child task per domain once band 2 has landed and the harness is proven"). Created under the standing grant the owner gave on 2026-09-07; the composition is for review.
First of five band-3 children. Three units, each taking its state with it (no globals.h, Q6 ruling), in this order because each includes the previous:
| unit | owns | functions |
|---|---|---|
fram |
fram, framHeader, framAvailable, struct FRAMHeader |
framReadHeader, framWriteHeader, framFormat, initFRAM |
settings |
useMetricUnits, useFahrenheit, use12Hour, tzDisplayName, tzSelectedIndex, posixTZ, tftBrightness, tftSleepMs, oledSleepMs, settingsLoadedFromSD |
applyTimezone, mktimeUTC, formatTimeStr, loadSettings, saveSettings, saveSettingsToFRAM, loadSettingsFromFRAM, factoryReset, findTimeoutIndex |
rtc |
rtc, rtcAvailable |
initRTC, syncRTCFromSystemTime |
settings persists through FRAM, so it includes fram.h; syncRTCFromSystemTime calls mktimeUTC, so rtc includes settings.h. Twelve of the 34 remaining cut-set variables leave src.ino here (the settings nine, plus fram, framHeader, framAvailable).
Not moved: framFlushToSD flushes the battery and weather buffers, so it consumes two domains this task does not publish; it stays until the weather child lands.
Why not webServer first, as the text of #264 says. The relocation graph after band 2 shows webServer referenced only by the 23 web handlers, initWebServer and loop, with initWiFi calling initWebServer. A web unit moved before the domains its handlers read would need those handlers declared in a header while they stay in src.ino — the reach-back pattern the ruling forbids — or would own one variable and no code. The cut set says which variables must be owned; the graph says the order they can be. Web goes last, when everything it reads is published, and the acceptance of #264 ("every one of the 35 defined in exactly one unit") is met at that point.
Acceptance
-
scripts/verify_extraction.pyPASS for the task: no unexpected symbol, every size delta attributed, section deltas explained -
pio run -e feather_s3andarduino-cli compile --fqbn esp32:esp32:adafruit_feather_esp32s3 src/both succeed;pytest scripts/passes -
nmonsrc.ino.cpp.ono longer defines any variable the three units own - Record appended to
docs/god-object-inventory.md
Activity
refactor(#270): E4 band 3a -- fram, settings and rtc leave src.ino as…
Strycher commentedon Sep 7, 2026
Merged in #275 (43e569a) under the owner's standing grant of 2026-09-07. Proof and the calls made for review are in docs/god-object-inventory.md section 10 and the PR body.