b797085 — Pick-a-fandom dialog focus/keyboard flow. Focus lands in the search dropdown (driven by the dialog's @after-enter, not the flaky autofocus); Tab → new-fandom field where Enter creates; creating fills the dropdown + returns focus there; Enter accepts. Removed the @update:model-value auto-confirm that closed the dialog the instant a value was set. Focus returns to the tag input on confirm/cancel.
5201fab — Surface the image's ML (Camie) suggestions inline in the tag autocomplete dropdown as you type, de-duped against server hits, marked with an accent border + score chip. Picking one runs the same accept path as the Suggestions panel.
a73d932 — Time-box + self-resume the archive re-extract task (cursor + 600s chunk + re-enqueue), so a large backlog finishes across chunks instead of dying at the 30-min soft limit. Independent of the maintenance_long lane isolation.
394c7dc — Test fixture fix (patterned images to avoid the solid-color phash-collapse trap).
## What
Four commits stacked on dev, all CI-green:
- **`b797085`** — Pick-a-fandom dialog focus/keyboard flow. Focus lands in the search dropdown (driven by the dialog's `@after-enter`, not the flaky `autofocus`); Tab → new-fandom field where Enter creates; creating fills the dropdown + returns focus there; Enter accepts. Removed the `@update:model-value` auto-confirm that closed the dialog the instant a value was set. Focus returns to the tag input on confirm/cancel.
- **`5201fab`** — Surface the image's ML (Camie) suggestions inline in the tag autocomplete dropdown as you type, de-duped against server hits, marked with an accent border + score chip. Picking one runs the same accept path as the Suggestions panel.
- **`a73d932`** — Time-box + self-resume the archive re-extract task (cursor + 600s chunk + re-enqueue), so a large backlog finishes across chunks instead of dying at the 30-min soft limit. Independent of the `maintenance_long` lane isolation.
- **`394c7dc`** — Test fixture fix (patterned images to avoid the solid-color phash-collapse trap).
## CI
Green on dev head `394c7dc` (run 687).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Operator-specified flow for character-tag creation: focus starts in the
fandom search dropdown; Tab moves to the new-fandom field where Enter
creates; creating fills the dropdown and returns focus there; Enter in the
dropdown accepts the selection.
- Drive focus from the dialog's @after-enter (autofocus is unreliable inside
a v-dialog — the focus-trap steals it post-mount); FandomPicker exposes
focusSearch.
- Drop the @update:model-value auto-confirm that closed the dialog the instant
selectedId was set — that's what broke create-then-accept (creating set the
value and immediately confirmed). Enter now accepts (menu-closed + value),
while an open menu lets Vuetify pick the highlighted item first.
- Tab from search → new-fandom field; Enter there creates, then focus returns
to the dropdown for a single Enter-to-accept.
- Restore focus to the tag input after the dialog confirms/cancels so the
keyboard flow continues into the next tag.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The image's Camie suggestions now appear in the tag input's dropdown as you
type, filtered to the query and de-duped against the server autocomplete hits,
so the operator can pick a suggestion without hunting for it in the Suggestions
panel below (operator-asked 2026-06-07).
- Unified `rows` model (hits → matching suggestions → create row) so the
highlight index maps 1:1 to a row across all three sections; arrow/Enter/Tab
drive the whole list.
- Suggestion rows are marked (accent left-border + mdi-auto-fix score chip) and
show a "new" hint when the suggestion would create a tag.
- Picking a suggestion emits accept-suggestion → TagPanel runs the SAME accept
path as the Suggestions panel (creates raw tags, records acceptance, drops it
from the panel), then refreshes the chip rail.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
reextract_archive_attachments loaded ALL PostAttachments and ran in one pass up
to a 30-min soft limit, then died without re-enqueueing — a large archive
backlog would only ever partially process. And a naive re-run can't advance: an
already-extracted archive is still an archive on disk, so it'd re-extract the
same first batch forever.
Give it a real cursor + time-box + self-resume (mirrors normalize_tags_task,
operator-asked 2026-06-07: reasonable timeout, then re-queue so other work keeps
flowing):
- service scans attachments with id > after_id in ascending order, time-boxes
the chunk, and reports partial=True + resume_after_id (last scanned id).
- task passes a 600s budget and re-enqueues itself from the cursor until the
scan is exhausted. Routes on the maintenance_long lane.
- This is independent of the maintenance_long lane isolation (already shipped) —
that stops long tasks starving the quick maintenance queue; this stops the
re-extract itself dying on a big backlog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Solid-color members phash-collapse to distance 0, so the second archive's member
deduped away ("held no supported members") and members_imported was 0. Use
structurally distinct patterned jpegs so both members import — the resume cursor
mechanics were already correct.
Co-Authored-By: Claude Opus 4.8 (1M context) <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.
What
Four commits stacked on dev, all CI-green:
b797085— Pick-a-fandom dialog focus/keyboard flow. Focus lands in the search dropdown (driven by the dialog's@after-enter, not the flakyautofocus); Tab → new-fandom field where Enter creates; creating fills the dropdown + returns focus there; Enter accepts. Removed the@update:model-valueauto-confirm that closed the dialog the instant a value was set. Focus returns to the tag input on confirm/cancel.5201fab— Surface the image's ML (Camie) suggestions inline in the tag autocomplete dropdown as you type, de-duped against server hits, marked with an accent border + score chip. Picking one runs the same accept path as the Suggestions panel.a73d932— Time-box + self-resume the archive re-extract task (cursor + 600s chunk + re-enqueue), so a large backlog finishes across chunks instead of dying at the 30-min soft limit. Independent of themaintenance_longlane isolation.394c7dc— Test fixture fix (patterned images to avoid the solid-color phash-collapse trap).CI
Green on dev head
394c7dc(run 687).🤖 Generated with Claude Code
Solid-color members phash-collapse to distance 0, so the second archive's member deduped away ("held no supported members") and members_imported was 0. Use structurally distinct patterned jpegs so both members import — the resume cursor mechanics were already correct. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>