Feature-integration correction follow-up for Feature 13 (PR #110) at head a05d57c. Maestro task 4fc551f0-3c11-4c15-b638-f2c08a28eb29.
F13-05 (HIGH): the deck API reported only a pending or running batch, so a batch that failed while Discover was closed was invisible on the next load - an emptied deck showed "All caught up" with no error or retry. The deck now reports the latest relevant failed batch as well, and Discover shows that failure with a working Retry. Tests cover a fresh page load after an AI failure and after an interrupted batch, with empty and non-empty decks.
Checks: gofmt, go vet, go test -race -count=1 ./..., CGO_ENABLED=0 go build ./..., make sqlc-check (no drift), web typecheck + tests + build, docker build . - all passing.
Feature-integration correction follow-up for Feature 13 (PR #110) at head `a05d57c`. Maestro task `4fc551f0-3c11-4c15-b638-f2c08a28eb29`.
- F13-05 (HIGH): the deck API reported only a pending or running batch, so a batch that failed while Discover was closed was invisible on the next load - an emptied deck showed "All caught up" with no error or retry. The deck now reports the latest relevant failed batch as well, and Discover shows that failure with a working Retry. Tests cover a fresh page load after an AI failure and after an interrupted batch, with empty and non-empty decks.
Checks: gofmt, go vet, go test -race -count=1 ./..., CGO_ENABLED=0 go build ./..., make sqlc-check (no drift), web typecheck + tests + build, docker build . - all passing.
Fixes the Feature 13 review findings on the Discover deck (Maestro task
4fc551f0-3c11-4c15-b638-f2c08a28eb29):
- F13-01: a batch failure (start, poll or job) is shown with its Retry
whatever the deck has, so a replenish that fails while cards remain is
no longer silent until the deck runs out.
- F13-02: GET /api/v1/suggestions/deck reports the batch pending or
running (active_batch, read in the deck's snapshot), and a decision
that calls for a replenish returns the job of the batch it started or
joined. The page follows a newly reported active batch, so a reopened
page or a second session shows skeleton cards while the batch runs
instead of "All caught up".
- F13-03: ← / → leave the deck alone while it is inert behind a modal
(the Quest log sheet or its confirmation).
- F13-04: a one- or two-card deck keeps all three depths: skeleton cards
stand in for the missing ones while a batch finds more Side quests,
blank stack-edge cards while none is coming.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deck returned a pending or running batch's job id without checking that
the job was still queued or running, so after a restart failed the job
the page polled a dead job as the active batch. Deck and startBatch now
share activeBatch, which runs FailOrphanedSuggestionBatches before
reading the active batch; Deck therefore uses a write transaction.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The deck reported only a pending or running batch, so a Discover page
opened after a batch failed (or was interrupted by a restart) had no job
to follow and showed "All caught up" or the remaining cards with no
error. GET /api/v1/suggestions/deck now also returns failed_batch: the
newest batch when it failed, read in the same snapshot after orphaned
batches are failed, so at most one of active_batch and failed_batch is
set and a later batch supersedes the failure. The page follows the
failed batch's job like the active one, so its failure shows with the
existing Retry, which asks for a new batch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After Discover showed failed batch j1, another session could finish a
newer batch. The deck then reported neither an active nor a failed batch,
as the server suppresses a failure a later batch supersedes, but the page
kept following j1 and its error stayed shown (or, before j1's first poll,
"Finding new side quests…" did, and the error arrived later).
Each new read of the deck is now reconciled: one reporting neither batch
stops following a job known to have failed, by its poll or by the deck's
previous read. A followed job that succeeded is still left followed, so
its end is read as before.
The replenish-failure test's stub now reports its failed batch on the
deck, as the server does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Feature-integration correction follow-up for Feature 13 (PR #110) at head
a05d57c. Maestro task4fc551f0-3c11-4c15-b638-f2c08a28eb29.Checks: gofmt, go vet, go test -race -count=1 ./..., CGO_ENABLED=0 go build ./..., make sqlc-check (no drift), web typecheck + tests + build, docker build . - all passing.
a05d57cinto task branch 6d36a7a10cIndependent Codex gpt-6-sol review: CHANGES_REQUIRED for this exact commit.
Independent Codex gpt-6-sol review: APPROVED for this exact commit.