Files
mvschwarz 5d75813a96 Providers: the reset you type is now saved AND read back — two bugs, not one
"It doesn't save the calendar, it keeps it for a second then reverts." Two
independent defects stacked, and the second was invisible behind the first.

ONE: THE WRITE ROUTE WAS NOT ROUTED. The surface calls five fleet verbs; the
provider declared TWO. /api/fleet/account, /assign and /switch resolved to
"no such contract route" and 404'd. So every write this app makes -- set a reset,
set capacity, rename an account -- was failing, and the surface said nothing,
because a failed write looks exactly like a write that has not been polled back
yet.

THE ASYMMETRY THAT HID IT, worth naming: a verb declared REQUIRED but unserved
refuses to boot, loudly and at startup. A verb SERVED but undeclared fails at call
time, silently. The manifest only catches the direction that was never the risk
here. Both manifests now list all five.

TWO: THE VIEW NEVER READ THE OVERRIDE BACK. The merge block resolves label and
capacityLeft from overrides and stops, so a typed reset was written to
overrides.json and then ignored -- the row kept rendering the value derived from
samples. On screen that is indistinguishable from a failed save: it holds until
the next poll, then appears to revert. It never reverted; it was never displayed.

A typed reset now wins outright. Not decided on recency like capacity is: capacity
has two honest sources and a fresh measurement can supersede an old typed figure,
but a reset is typed precisely BECAUSE the derived one is wrong.

AND MY OWN CHECK WAS VACUOUS, which is why the first fix looked complete. I
"verified the Pacific round-trip" by re-saving a picker at its CURRENT value and
observing no change -- and no change is exactly what a 404 produces. A no-op test
cannot distinguish a correct conversion from a save that never happened. Setting a
DIFFERENT value is what exposed both bugs, thirty seconds later.

Verified end to end at the shape the founder reported: set 2026-08-27T18:15 in the
picker, correct ISO in overrides.json, still showing after the 30-second poll that
used to revert it.

131/131.
2026-08-04 19:53:47 -07:00
..