Repository navigation
fix(admin): tell a hung art build from an interrupted one, and say why a build waits - #85
Merged
Merged
Conversation
…s job (#79) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A build whose heartbeat is over 10 minutes old while a worker still holds its job read "Interrupted. Build it again…" beside a disabled button. It now reads as building with no heartbeat for N minutes and says to restart the app, as a stalled refresh reads as running. The button stays disabled, the page keeps polling and no failed-job link shows, as for the refresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… does (#79) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
While a failed build's own job waited in the queue to run again (a rate limit, a busy database), the art index read plain "Queued.". It now reads "Queued to retry. The last build failed: …" with a "Retrying at" fact, as the refresh does. A build queued fresh, or by another job, stays "Queued.". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
, #80) Spec 015 goes to 1.3.0 (glossary, AC-4.1, AC-4.10, new AC-4.11 and AC-4.12, FR-2, Error Scenarios) and spec 011 to 1.2.1 (AC-3.11's art line). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…kill too (#79) A graceful restart releases the held job and the build carries on. After a crash or a kill the job stays held until its process is pruned, and the build then reads interrupted. The summary and the status line say both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"Retrying at" took the earliest scheduled build job, which could be another job's while the reason was the failed build's own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ob is held (#79) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the art line say Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ll (#79) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 14, 2026
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.
The art index panel on
/admin/catalognow tells a hung build from an interrupted one, and says why and until when a build waits to retry.Closes #79
Closes #80
What changed
MTG::ArtBuild#stalled?), not interrupted. The panel says it is building with no heartbeat for N minutes and what a restart does, instead of "Build it again" beside a disabled button. The button stays disabled, the page keeps polling and there is no failed-job link, as for a stalled refresh. A stale build whose job has failed or gone still reads "Interrupted", as PR fix(admin): show a crashed art build as interrupted at once #75 made it.catalog:statussays the same.Catalog::Operation::Queue#retry_attakes an optional job id, so a failure is given as the reason only for that build's own retry. It names no collectible; the refresh's use is unchanged.CLAUDE.mdanddocs/design-system/components/AdminCatalog.mdmatch.Decisions for you
Verification
bin/ci: passed on the final commit (the pre-push run).sleep: on a graceful stop the job went back to ready in 5 of 5 runs, so the re-run carries on. Its follow-ups (the wording after a hard kill, the retry time taken from the build's own job, one more case, two comments) are the last five commits.Known limits and follow-ups
main, and pinned by an existing spec./admin/jobs, the panel reads plain "Queued." This matches the refresh.catalog:statusstill prints the failed build while its retry waits; the class comment says where the page and the status line differ.docs/roadmap.mdstill lists A hung art build reads "Interrupted" with a disabled button #79 and Art index panel hides the reason and time while its retry waits #80 as open.🤖 Generated with Claude Code