DIGITAL STEALTH CARE · CHANGELOG

Digital Stealth Care, release by release.

Every release and feature, dated, newest first. The bugs, the incidents told in full and the lessons behind them are one filter away, in the state they are really in.

  bug states shown as they are, never rounded up

  releases, features and fixes on one timeline

How fixes are checked

By using the software. A fix is checked in daily use on the real hardware; if it doesn’t hold, the bug gets a new report rather than a quiet edit, so a relapse stays on the record. Every row is shown in the state it is in.

Changelog · every release and feature, dated · fixes one filter away

Releases, features and milestones show first. Switch on bugs, incidents and lessons with the filters to see the whole record: bugs are shown in the state they are in, and nothing here is rounded up.

loading entries
Entries come from this site's own records. States are copied from the tracker, never improved.

Below the timeline: the newest 60 entries as a plain list. Every entry and write-up also has a page of its own.

CHANGELOG · THE NEWEST 60, AS A PLAIN LIST

Newest first, for when the timeline above is not running. Use the timeline’s search and filters for everything else.

18 Sep 2026  ·  Milestone · CannaLib, DSC, Site · Released

Journey and log become one timeline

Write-ups are now journey entries. One vertical timeline, newest first, with a column per product; /log/ opens it filtered to write-ups.

18 Sep 2026  ·  Decision · CannaLib, DSC, Site · Released

75 held entries published, details withheld

Entries never cleared for private details are now on the timeline with title, date and state only. Their details are not served anywhere.

17 Sep 2026  ·  Publish · DSC, Site · Verified

Copy pass; old DSC help retired

Stale versions, limits and repo links fixed across 12 pages. /dsc/help/ and /dsc/manual/ now redirect into the guide, and /dsc/build/ was rewritten from the v4 firmware.

17 Sep 2026  ·  Feature · DSC, Site · Released

/dsc/ rebuilt as a product page

The DSC home was regenerated from the capabilities list: 15 feature areas, screenshots and clips from the public demo, a makers wall and a searchable equipment table.

17 Sep 2026  ·  Publish · DSC, Site · Released

/dsc/supported/: the equipment directory

A searchable directory of 3,095 products from 710 brands, 2,580 of them recognised automatically, built from DSC-KitLib 0.8.0.

17 Sep 2026  ·  Bug fixed · DSC, Site · Verified · High

Firmware page listed bugs instead of releases

Divi 5's loop keeps only one taxonomy filter, so /dsc/firmware/ dropped 'Kind = Release' and showed the 12 newest DSC bug entries. It now filters on Release alone.

17 Sep 2026  ·  Publish · DSC, Site · Verified

User guide re-verified for 9.0.0

All 75 guide pages were checked against the 9.0.0-AlphaPi code, corrected where they disagreed, and restamped 'verified for 9.0.0'.

17 Sep 2026  ·  Publish · CannaLib, DSC, Site · Released

55 bench logs from the last ten days

55 write-ups dated to the nights they happened (7 to 17 Sep), illustrated only with demo screenshots, charts of recorded numbers and our own photos.

16 Sep 2026  ·  Feature · DSC, Site · Released

Release manifest and library hosting

A public release manifest for hub update checks, and the site now hosts DSC-KitLib and DSC-NuteLib releases with a manifest hubs can update from.

15 Sep 2026  ·  Feature · DSC, Site · Released

DSC alpha sign-up; releases hosted here

An alpha sign-up form on /dsc/alpha/, and DSC releases are hosted on this site instead of GitHub. The next release is named on the page.

15 Sep 2026  ·  Decision · DSC, Site · Released

The DSC user guide lives on the site

The DSC-Brain user guide (nine sections, about 70 pages) is maintained at /dsc/guide/ from now on. The old Notion copy is frozen.

15 Sep 2026  ·  Feature · DSC, Site · Operational

Version stamps follow the test kit

The test kit reports the versions it is actually running every 15 minutes, and the DSC stamps on the site read that report instead of hand-typed numbers.

14 Sep 2026  ·  Bug fixed · DSC · Verified · Low

Root page “thereabouts” idle-probe reading has no independent staleness check

FIX 2026-09-06 (code landed, unverified on live): soil_tests.list_probe_stations() now returns thereabouts_updated_at (source pot last_seen) and thereabouts_stale (>15 min, indepen

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

flash-fleet-remote.sh and bake-firmware.sh still use docker exec dsc-hub-esphome (container removed by deploy)

Details withheld while the issue is live.

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

master does not typecheck — MediaStorageCard uses a badge tone that does not exist

FIXED 2026-09-12 in 9e7fb49 (merged 226083b, pushed; not yet deployed). Both StatusChip tone="teal" uses in MediaStorageCard (the SAVING HERE chip at :41 and the done-job tone at :

14 Sep 2026  ·  Bug fixed · DSC · In progress · Low

Inspector ‘Limited history’ chip ignores the brain’s recorded:false – a series that has never been written is labelled as thin instead of ‘Not recorded by the b

FIXED in PR #259: get_entity_history forwards 'recorded'; useHistory/useEntitySeries expose it; the inspector and history drawer show 'Not recorded yet' (with a tooltip) when track

14 Sep 2026  ·  Feature · DSC · Verified · Low

Explicit “show/hide system rows” toggle on journal views

FIX 2026-09-06 (code landed, unverified on live): JournalEntryList gains a hideSystem prop (filters source==='system' before collapse) and shows 'N system rows hidden'. JournalScop

14 Sep 2026  ·  Feature · DSC · Verified · High

No lamp role for a plug — adopting the 4×8 light plug has nothing to bind to

The operator's 4x8 lamp is on a smart plug not yet in DSC-HUB. The Tuya local lane is live on the Pi (tuya available/running, device_count 0) and smart_plug is can_actuate: true, s

14 Sep 2026  ·  Bug fixed · DSC · Verified · Low

Possible leftover “pots” language in CropScheduler copy (rendered on Climate)

FIX 2026-09-06 (code landed, unverified on live): CropScheduler.tsx intro copy 'Each tent tracks its own stage rail and pots' → '...stage rail and plants'. Only visible-copy 'pots'

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

Settings > General is prose; subtitle promises ‘kit language and operator notes’ that do not exist

The General tab rendered two paragraphs and a versions block with no control. Pass S1 (2026-09-07): General removed; /settings/general redirects to Preferences; versions live under

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

The brain test suite reaches out to the live hub at 10.42.0.10

Details withheld. Title and state only.

14 Sep 2026  ·  Bug fixed · DSC · Verified · High

Probe N/P/K and *_raw history is unreachable: recorder writes pot metric ‘nitrogen’ / ‘moisture_pct_raw’, /history resolves ‘soil_nitrogen’ / ‘soil_moisture_raw

FIXED in PR #259 (merged 2026-09-14, master a500003): history_ops.resolve_entity_metric consults ENTITY_FLEET_MAP for pot seats and routes the generic probe shape through esphome_c

14 Sep 2026  ·  Feature · DSC · Verified · Low

Formalize the snapshot-backfill admin endpoint, or retire it

PARTIAL 2026-09-06 (code landed, unverified on live): kept the endpoint (it's a legit one-time migration for pre-snapshot-column rows) and formalized its contract — backfilled valu

14 Sep 2026  ·  Feature · DSC · In progress · Medium

Operator-chosen tent pressure: a slider for the target regime (positive / neutral / negative) and how strong the pressure difference should be, per tent or syst

OPERATOR-RAISED 2026-09-14, building on PR #240 (mass_balance_ok is now signed: exhaust-dominant is fine, only over-pressure beyond a fixed tolerance is a fault). The operator want

14 Sep 2026  ·  Bug fixed · DSC · Verified · Low

Pot-moisture “dry” threshold line is a bare hardcoded constant with no live setting to bind to

FIX 2026-09-06 (code landed, unverified on live): the Root pot-moisture chart 'dry' line is now bound to global_modifiers.moisture_dry_pct (default 30, clamp 5–80). Brain: added to

14 Sep 2026  ·  Bug fixed · DSC · Verified

History audit: 7-day charts collapsed to the newest ~25 h (list_history LIMIT 2000) — /history now buckets the whole window

Live Pi: hours=168 returned exactly 2000 points from 09-06 04:49 to 09-07 05:50 — the newest 2000 samples at ~2 s cadence, so every 7-day view showed ~a day. Fix on feat/dashboard-

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

An imported-but-unconfigured Tuya device reads OFFLINE, which looks like a network fault

Importing a tinytuya devices.json registers every device with type = '' (import deliberately never guesses a type) and, for any device the wizard's LAN scan did not reach, ip = ''.

14 Sep 2026  ·  Bug fixed · DSC · In progress · Medium

Zigbee canopy and Tuya tank readings are never written to fleet_history by their lanes – they only reach history via the 60 s computed recorder (change or 5 min

FIXED in PR #259: history_ops.record_lane_row / record_canopy write at receipt from zigbee_mqtt.on_message and TuyaLane.ingest (seat = 'zigbee' / 'tuya', metric = the entity id the

14 Sep 2026  ·  Feature · DSC · Verified · Low

Surface the live SPA bundle hash/version in Settings

FIX 2026-09-06 (code landed, unverified on live): vite.config.ts bakes import.meta.env.VITE_DSC_SPA_BUILD = '[+dirty] · ' (via execSync at config eva

14 Sep 2026  ·  Feature · DSC · In progress · Medium

VPD charts with history that read against correct VPD ranges (sleek): reference zones, time-in-zone, temperature × RH VPD map

Operator ask 2026-09-14 (before bed): proper VPD charts with history, sleek, reflecting correct VPD ranges. LANDED PR #246 (6ba5921). Reference zones <0.4 humid / 0.4–0.8 propagati

14 Sep 2026  ·  Milestone · CannaLib, DSC, Site · Released

The journey opens

The trackers' history went public as dated events: every release, bug, lesson and decision, each shown in the state its tracker records.

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

Trend-chart threshold bands are inconsistently drawn – band prop only recolors the line, doesn’t show a visible band

FIX 2026-09-06 (code landed, unverified on live): viz/charts.tsx MultiLineChart now draws a faint shaded markArea for a per-series band (HEX.neon @ 0.06 opacity), matching what the

14 Sep 2026  ·  Bug fixed · DSC · Verified

History audit: recorded hub switches / setpoints / flags and the brain’s computed entities were unreachable or never persisted

switch.dsc_hub_demand rows existed but only grow_mat was mapped, so Heater/Cool/Hum/Dehum inspectors reported tracked:false; number.dsc_hub setpoints, mode switches and hub binarie

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

AC / clone mister shown OUT (capacity offline) while inventory says in service: dash_computed reads the input_boolean compose helpers, not fleet inventory

Found on the simulated rig: with the mister and AC in service in fleet_inventory (Kit page: '9 of 9 devices in service', 'Clone mister idle'), the 2x4 Overview tile still shows 'C-

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

Moisture rate was first-minus-last over 6 h, so a probe reinstall (air 1 % -> soil 68 %) read as +66 %/h ‘wetting’ and forced dryback to 0.00 % for six hours (‘

Operator screenshot 2026-09-14: moisture 67.9 %, DRYBACK 0.00 %, 'Rate 66.37', 'dry-back -0 % since the last wet point'. The rate took the first and last rows in a 6 h window; with

14 Sep 2026  ·  Feature · DSC · Verified · Low

Visual “pending vs confirmed” indicator on EntityToggle

FIX 2026-09-06 (code landed, unverified on live): EntityToggle now derives pending = pendingOn != null && busOn !== pendingOn and renders it — dashed pulsing border (.is-pending),

14 Sep 2026  ·  Feature · DSC · Verified · Medium

Chart timespan chips: add a gear beside the chips that lets the operator add/remove spans (1 m, 5 m, 15 m, 7 d…) instead of the fixed 1h/6h/24h/48h + Cycle/Ph

Details withheld. Title and state only.

14 Sep 2026  ·  Bug fixed · DSC · Verified · Low

Live and Fleet primary nav tabs share the same accent color (–dsc-blue)

Fixed, and worse than first reported: .dsc-tab--live.active/.dsc-tab--fleet.active both used var(--dsc-blue) (equal-specificity collision), but a later .dsc-tab.active rule (dsc.cs

14 Sep 2026  ·  Bug fixed · DSC · Verified · High

Light desk sunrise / sunset / min-dark-hours writes never reached the hub (stored as brain helpers)

Found during Pass S2 (2026-09-07). HUB_NUMBER_ENTITY_TO_OID only listed 13 writable numbers; number.dsc_hub_sunrise_duration, _sunset_duration and _min_dark_hours (plus every other

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

DHT disagreement trips on a healthy grow: it compares tent, room and clone spans, which differ by design (lit tent +4 °C over a night room, domed clones +15 % R

Found on the dev bed (simulated rig) with ordinary values: 4x8 lit at 24.5 °C, room at night 20.3 °C, 2x4 21.4 °C / 73 % RH vs room 57 %. _dht_disagree_raw takes the span (max − mi

14 Sep 2026  ·  Bug fixed · DSC · Verified · Low

Root probe cards show the same firmware flag twice: ‘SENSOR FAULT’ and ‘PROBE DARK’ are both !probe_online

sensor_fault_bs in the pot firmware is literally 'return !id(probe_online)', so raising both labels showed one fact twice on every card. Fixed in PR #259: 'sensor fault' is only ad

14 Sep 2026  ·  Feature · DSC · Verified · Low

Climate band gauges duplicated in full between Overview and Climate

FIX 2026-09-06 (code landed, unverified on live): Overview no longer renders the full ArcGauge band matrix — shows a per-zone coloured-chip glance and point

14 Sep 2026  ·  Feature · DSC · Verified · High

Ingest orchestrator with adaptive cadence: persistent ESPHome subscriptions, change-driven records, and an ‘actively reading’ burst mode (1 s) for probes after

Details withheld. Title and state only.

14 Sep 2026  ·  Bug fixed · DSC · Verified · Low

Card title register is inconsistent across pages (single words vs full sentences)

FIX 2026-09-06 (code landed, unverified on live): normalised the register-breakers to short sentence-case noun phrases: 'Efficacy · buying kW because the lung could not transfer' →

14 Sep 2026  ·  Bug fixed · DSC · Verified · High

Air-path numbers imply critical over-pressure — the two allocation bases were being shown side by side

Operator read intake 278 CFM against dump 7 + recirc 6 and concluded the environment must be at critical over-pressure. Diagnosed 2026-09-08: the four readings on the card are the

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

Clone dark-period violation has no debounce: one computed snapshot with the SF1000 on and the 2×4 window binary missing records a violation, a grow-log line and

Found on the dev bed: a 05:51 'Clone dark-period violation — SF1000 on outside the 2x4 window' notable appeared although the 2x4 runs Independent 05:00–23:00, i.e. the lamp was ins

14 Sep 2026  ·  Bug fixed · DSC · Verified · High

Pot firmware ‘Modbus Probe Online’ stays false (and ‘Sensor Fault’ true) on a healthy probe: on_online only fires on the offline->online edge, so a probe that a

Details withheld. Title and state only.

14 Sep 2026  ·  Feature · DSC · Verified · Low

Dash (Legacy) is an un-retired debug dump duplicating Overview

FIX 2026-09-06 (code landed, unverified on live): retired Dash (Legacy). App.tsx routes /ops/home and /ops/dash both to ; routes.ts LEGACY_REDIRECTS /

14 Sep 2026  ·  Feature · DSC · Verified · Low

Pot numeric values are re-recorded on every ~10 s poll although the probe only refreshes every 60 s – ~6 duplicate rows per reading per metric, while values tha

FIXED in PR #259: every seat's numerics go through record_history_throttled with a 60 s heartbeat (RECORD_HEARTBEAT_S in esphome_client), so an unchanged probe value lands once a m

14 Sep 2026  ·  Bug fixed · DSC · Verified · Low

Inline fontSize numbers not routed through the new –dsc-fs-* type scale

Details withheld while the issue is live.

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

Flow Sankey overflows its panel — right-hand node labels clipped off the card edge

The Sankey is drawn wider than the section it sits in: the terminal Outdoors/Room node labels are cut in half at the container's right edge and the diagram bleeds past the card. Ne

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

Humidifier/heater ineffective alerts use the wrong band: they read RH/temperature targets from compose helpers the hub never writes, so they always fall back to

Found while fixing the dehumidifier alert gap. The hub's RH/temperature setpoints live in its controls (number.dsc_hub_rh_target_min/max, number.dsc_hub_target_temp), but the ineff

14 Sep 2026  ·  Bug fixed · DSC · Verified · High

Every drawer/dialog form loses focus to the ✕ after each keystroke and scrolls the page: SlideDrawer and DecisionLayer focus traps re-run on every parent render

Operator report 2026-09-14 (camera edit drawer, 'seems to happen almost everywhere'): typing de-focuses the textbox to the corner ✕ after every letter, the view jumps to the top, a

14 Sep 2026  ·  Feature · DSC · Verified · Low

Compact DashBandsGrid on Overview to a per-zone in-band/drifting/alert row

FIX 2026-09-06 (code landed, unverified on live): DashBandsGrid gains a compact prop; OverviewPage passes it. Compact render = one row per zone (4×8 / 2×4 / Room / Root), each a se

14 Sep 2026  ·  Feature · DSC · In progress · Low

Session watchdog restarts a seat repeatedly while the device is rebooting for an OTA (pot2 hit 6 restarts during its 8.2.0.0 flash) – looks_dead treats Reconnec

Details withheld. Title and state only.

14 Sep 2026  ·  Bug filed · DSC · New · Low

Kit update check always fails since the repo went private: GitHub releases lookup returns HTTP 404, so the brain can never say an update is available

Details withheld. Title and state only.

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

Hub-entity writes take up to ~60s to reflect in /fleet; no pending indicator

PARTIAL 2026-09-06 (code landed, unverified on live): EntityToggle now shows the optimistic flip as PENDING — .is-pending dashed pulse + italic 'ON…/OFF…' + 'waiting for the hub to

14 Sep 2026  ·  Bug fixed · DSC · Verified · High

Air Path map is unreadable — crossing edges, links drawn through node boxes, floating unattached labels

Operator: 'Airpath really needs a revisit, it is a complete mess and no longer really means anything.' In the current render the Room->4x8 bundle and the purple recirc line cross e

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

A dead or railed probe raises no alert: probe offline (pot1) and moisture railed to 0 % (pot2) only set binary_sensor.dsc_probe{n}_reading_dark, which is not in

Dev-bed sweep cases dead_probe and pot2_moisture_railed: the only change was reading_dark after ~43–58 virtual min; no operator alert, active alert count unchanged. Root steering a

14 Sep 2026  ·  Bug fixed · DSC · Verified · Medium

Typed drafts wiped every 2 s in the seat drawer, the Assignment rows and the journal entry editor: draft-reset effects depended on a prop OBJECT that the fleet

Found in the sweep the operator asked for after the focus-trap bug (2026-09-14). The Devices page rebuilds inventoryRows from the fleet snapshot on every /ws/fleet push (2 s), so t