Repository navigation
fix(web): unreadable synced rows drop instead of crashing; stale tabs reload onto a new build - #2340
Merged
Merged
Maple Review Bot / Maple / review
succeeded
Nov 7, 2026 in 3m 16s
Confidence 10/10 · No issues found
🟢 Confidence 10/10 · safe to merge. No defect in the non-throwing row decode or the reload guard; the riskiest part, the once-per-commit reload, is pinned by the new shell tests.
no findings · tests covered · risk medium · 2/2 new units observable
Synced rows this build cannot decode now drop and are reported instead of throwing out of live-query callbacks, and a stale tab probes /version.json on a chunk-load failure or dropped row, reloading a hidden tab with no unsaved work at most once per deployed commit. Safe to merge.
liveRowDecoderdecodes a whole row toOption, dropping and reporting unreadable rowsrowsTo*helpers filter dropped rules, incidents and API keys at every call site- Chunk-load and undecodable-row signals probe
/version.jsonin aStaleBuildProbespan - A hidden tab with no unsaved work reloads once per deployed commit; blocked storage falls back to the banner
Production impact
Production traffic of the changed files (last 7 days)
| File | Calls/day | Busiest operations |
|---|---|---|
apps/web/src/shell/version.ts |
309 | GET /version.json 155/day, 0.1% errCheckDeployedCommit 154/day, 0.0% err |
Telemetry this change adds and removes (1)
- ➕ span name
StaleBuildProbe·apps/web/src/shell/version.ts:118
What was checked
- Both sides of the commit comparison come from the same
COMMIT_SHA(.github/workflows/deploy-prd-instance.yml:34), soisNewercompares like for like - An unheard drop is not spent:
reportedis only written when a listener exists (live-row.ts:40), pinned byalerts.test.ts:308 isBlockingreaches the probe through subscription dependencies, so opening a blocking page restarts the stream (subscription.ts:250)
Observability coverage: 2 of 2 changes observable
| Change | Kind | Observable | Evidence |
|---|---|---|---|
Stale-build recovery stream in the web shell (staleBuildRecovery) |
background stream / browser probe | yes | StaleBuildProbe span with maple.stale_build.{trigger,detail,newer,reloading} plus a structured Effect.logWarning("Stale-build signal") (version.ts:103-124) |
Dropped live row reporting (onUndecodableRow) |
failure path inside live-query callbacks | yes | Every drop reaches the shell listener, which logs and probes with maple.stale_build.* (version.ts:146-158, 152) |
d78026a · Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.
Loading