mirror of
https://github.com/mvschwarz/openrig-studio-apps.git
synced 2026-11-07 05:56:21 -10:00
"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.