pipeline ux: actionable errors, inbox sorting, danger stop buttons, overlapping checkmarks
Build and Push Docker Image / build (push) Successful in 2m10s

- clickable error count in header shows file names + error messages
- inbox sort dropdown (scan time / name, asc / desc)
- inbox movies no longer minimal (show available badges)
- stop buttons use solid danger style, descriptive labels (Stop Scan, Stop Job, Stop Sorting)
- double checkmarks overlap like WhatsApp read receipts
- processInbox logs start/completion to stdout for Docker visibility
- fix byTitle in language-resolver test, bump to 2026.04.21.1

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-21 08:58:08 +02:00
parent 203c1aa154
commit 9d65dd12be
27 changed files with 430 additions and 215 deletions
+6 -6
View File
@@ -279,13 +279,13 @@ app.post("/job/:id/cancel", (c) => {
* see it, leaving the item stranded until the user manually approves.
*/
export function clearQueue(db: ReturnType<typeof getDb>): number {
const rows = db
.prepare("SELECT item_id FROM jobs WHERE status = 'pending'")
.all() as { item_id: number }[];
const rows = db.prepare("SELECT item_id FROM jobs WHERE status = 'pending'").all() as { item_id: number }[];
for (const { item_id } of rows) {
db.prepare(
"UPDATE review_plans SET status = 'pending', reviewed_at = NULL, sorted = 0, auto_class = NULL WHERE item_id = ? AND status != 'running'",
).run(item_id);
db
.prepare(
"UPDATE review_plans SET status = 'pending', reviewed_at = NULL, sorted = 0, auto_class = NULL WHERE item_id = ? AND status != 'running'",
)
.run(item_id);
db.prepare("DELETE FROM jobs WHERE item_id = ? AND status IN ('pending', 'done', 'error')").run(item_id);
}
return rows.length;