Repository navigation
Conversation
…buckets (#106) Two refill defects that compounded. RETRIES REDREW EVERYTHING. Every retry drew all six buckets, against a destructive drawPool, so one permanently-empty bucket drained the five healthy ones on every attempt. The working set now keeps a per-bucket status (ok, failed, empty, pending) and exposes retry(), which draws only the buckets still owed something. prime() and topUp() still draw all six: the opening pass and a low-local-supply top-up want the whole spread. A bucket whose rows all lack coords now counts as empty, since it contributed nothing; a flush marks every bucket pending, since their rows went with it. A FLUSH HAD TWO REPAIRS. The flush handler nulled the range, backgroundFill then painted gauges against null, and maybeTopUp rebuilt the range on its own while the old axis labels stayed up. Now onFlush only marks the frame stale, both refills settle through settleRefill(), and a stale frame goes to one recover(): cancel the fade, refresh axes ordered by the pool's axisIds, clear current/seen, re-prime the deficient buckets, then frame() (freeze, reset position, repaint). enterStage uses the same frame(). A recovery that cannot finish stays stale and the background loop retries it on its backoff. Also fixes renderGauges, which cleared the horizontal container but not the vertical one, so any re-render stacked a second y gauge. Tests: four working-set tests (empty bucket never redrains healthy ones, failed bucket retried until it answers, coord-less rows count as empty, flush re-owes every bucket) and three controller tests that drive the same flush through the top-up path and the background-fill path and require identical end state. All seven fail on main. Closes #106 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AJidCEAViZHt3GXCmHrurf
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
dewpt | c749762 | Oct 11 2026, 09:27 PM |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AJidCEAViZHt3GXCmHrurf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Schmug · project thread
Before: every refill retry redrew all six buckets against the destructive
drawPool, so one bucket that stayed empty drained the five healthy ones on every attempt. When the axis set changed, the flush was repaired two different ways.backgroundFillpainted gauges against a null range, whilemaybeTopUprebuilt the range on its own and left the old axis labels on screen.After: a retry draws only the buckets still owed something. A flush is repaired by one routine, whichever refill saw it, and the gauge labels always match the axes the coords were scored against.
How:
working-set.js:retry()draws only failed, empty and pending buckets.prime()andtopUp()still draw all six.drift.js:onFlushonly marks the frame stale.settleRefill(), which sends a stale frame to onerecover(). It runs in the order the issue gives: cancel the fade, refresh the axes and order them by the pool'saxisIds, clearcurrent/seen, re-prime the deficient buckets, thenframe()(freeze the range, reset position, repaint).enterStageuses the sameframe(), and its prime retries now useretry().renderGaugescleared the horizontal container but not the vertical one, so any re-render stacked a second y gauge. Recovery exposed this.Tests:
All seven fail on main.
npm run typecheckis clean.npm test: 895 passing, 0 failing (43 files).Closes #106
🤖 Generated with Claude Code
https://claude.ai/code/session_01AJidCEAViZHt3GXCmHrurf
Generated by Claude Code