Skip to content

Commit 2820ac0

Browse files
committed
release: v2.0.0-rc.1
Moves the 19 [Unreleased] entries under a dated heading. 32 commits since beta.5, no open issues or PRs. Also closes the raw-flash backend scoping study. Both conditions it was held on resolved against it: the crash it might have fixed was diagnosed as a power event (everything on a shared PoE-fed 24 V supply reset together, reset_reason: poweron), and the commit cost it targeted was fixed by the sidecar header in #45 without a format break. Kept for the LittleFS cost model and the dead theories, marked CLOSED rather than deleted.
1 parent 9ab72d0 commit 2820ac0

2 files changed

Lines changed: 26 additions & 18 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [2.0.0-rc.1] - 2026-08-09
11+
1012
### Added
1113
- **LilyGO T-CAN485 support, for Home-Assistant-only installs.** A board with no PSRAM can now run a sensors-only build — `tigo_monitor` without `tigo_server` — and feed every value to Home Assistant over the native API. PSRAM was never a requirement of the monitor itself: the device and node tables run about 600 bytes per optimizer, so twenty of them cost ~12 KB of the ~180-200 KB an ESP32 has free once WiFi is up. It is the web server that needs PSRAM, and it stays out of these configs. `boards/esp32-lilygo-t-can485.yaml` sets up the board's built-in isolated RS485 transceiver (GPIO21/22, plus the three enable lines LilyGO's own example drives high at boot), and `boards/example-t-can485.yaml` is ready to flash. The Config Builder offers it too, restricted to exactly this shape: selecting it hides the CCA, cloud and display options, because every one of them is a web-server feature, and clears them if you had them set on another board. What you give up: the dashboard, the REST API, on-flash history, CCA/cloud import, and BLE.
1214
- **Docs screenshots generate themselves.** The guides now show the real device UI — dashboard, history, topology, node table, diagnostics — rendered during the docs build by driving the actual `app.html` against synthetic API responses. No firmware, no hardware, and nothing committed: the images are rebuilt from the current UI every time, so they cannot drift from it. All data is invented, with IPs and MACs from the IETF documentation ranges and a reserved fake-serial prefix, enforced by a test so a real serial, SSID or address can't reach a published page.

docs/superpowers/specs/2026-08-06-raw-flash-backend-scoping.md

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Raw-flash backend for esp_tsdb — scoping study
22

3-
**Status:** scoping only. Not a proposal to build. No decision implied.
3+
**Status:** CLOSED 2026-08-09 — decided against. Kept for the cost model and the
4+
dead theories, not as a live proposal.
45
**Date:** 2026-08-06
56
**Question:** do we need littlefs, or can esp_tsdb write directly to a flash partition?
67

@@ -12,9 +13,18 @@ format break**, and the performance case is already largely won by the sidecar
1213
header (21.4 s → 196 ms + 757 ms per commit). Estimated cost is **2.5–3 weeks
1314
of engineering plus a week of soak**.
1415

15-
The recommendation is to hold until the open crash has a diagnosed cause. If
16-
the crash is flash- or cache-related, this becomes the fix and jumps the queue.
17-
If not, it is a large investment in a number that has stopped hurting.
16+
**Outcome.** Both conditions this was held on have since resolved against it:
17+
18+
- The crash was diagnosed on 2026-08-08 as **environmental, not flash**. A storm
19+
took down everything on a shared PoE-fed 24 V supply, and the device reported
20+
`reset_reason: poweron` — a cold start, not a panic or watchdog. Nothing here
21+
would have prevented it.
22+
- The commit cost was fixed a different way. The sidecar header (merged in #45)
23+
took a commit from 21.4 s to 633 ms median without a format break, which is
24+
the bulk of what raw flash was for.
25+
26+
So this is a large investment in a number that has stopped hurting, to maybe fix
27+
a crash that turned out to be a power problem. Not proceeding.
1828

1929
## Why littlefs is the source of the pain
2030

@@ -133,26 +143,22 @@ The performance case is mostly spent. The sidecar already took commits from
133143
is no longer a problem, and it costs a format break plus re-earning the
134144
crash-safety properties littlefs gives us for free.
135145
136-
The case that *would* justify it is the unexplained reset at 23.5 h uptime
137-
(2026-08-05 16:32:34). Raw flash cuts total flash-busy time by orders of
138-
magnitude, so if the crash is flash- or cache-related this becomes the actual
139-
fix rather than an optimisation. But that cause is currently **undiagnosed** —
140-
there is no coredump partition and the boot banner was missed. A watcher is now
141-
running to capture the reset reason on the next event.
142-
143-
Committing 3 weeks of storage-layer rewrite to maybe fix an undiagnosed crash
144-
is backwards. Diagnose first.
146+
The case that *would* have justified it was the unexplained reset at 23.5 h
147+
uptime (2026-08-05 16:32:34). That has since been diagnosed as a power event,
148+
not a flash one — see the Outcome section above. Diagnosing first was the right
149+
call: the instrumentation that answered it (`reset_reason` in `/api/status`) cost
150+
an afternoon, against the three weeks this would have taken.
145151
146152
## Knock-on
147153
148-
The rolling-files plan
149-
(`docs/superpowers/plans/2026-08-04-panel-rolling-files.md`, 9 tasks) is a
150-
littlefs workaround. If raw flash goes ahead, that plan is **deleted rather
151-
than implemented**. Both should be held on the same signal.
154+
The rolling-files plan was a littlefs workaround for the same eviction cliff.
155+
The sidecar header addressed the dominant cost without it, so it was never
156+
written up as a task list and is not needed.
152157
153158
## Open questions
154159
155-
- Does the reset reason implicate flash/cache? Decides everything above.
160+
- ~~Does the reset reason implicate flash/cache?~~ **Answered 2026-08-09: no.**
161+
`reset_reason: poweron`, and everything else on the same supply reset with it.
156162
- Migration: in-firmware converter, or export/reflash/import? Affects the
157163
2-day estimate and whether a serial reflash is needed.
158164
- One partition per database, or sub-allocation within the existing 3 MB

0 commit comments

Comments
 (0)