Skip to content

E4-5a (band 3): fram, settings and rtc units #270

Closed

Description

@Strycher

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.py PASS for the task: no unexpected symbol, every size delta attributed, section deltas explained
  • pio run -e feather_s3 and arduino-cli compile --fqbn esp32:esp32:adafruit_feather_esp32s3 src/ both succeed; pytest scripts/ passes
  • nm on src.ino.cpp.o no longer defines any variable the three units own
  • Record appended to docs/god-object-inventory.md

Activity

  1. added
    board:readyBoard sync: Ready column
    and removed
    board:readyBoard sync: Ready column
    on Sep 7, 2026
  2. added a commit that references this issue on Sep 7, 2026
  3. Strycher commented on Sep 7, 2026

    @Strycher
    OwnerAuthor

    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.

  4. added
    board:doneBoard sync: Done column
    and removed on Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions