Explore: focus-everywhere + provenance in rail; tag-gaps cleanup #134

Merged
bvandeusen merged 3 commits from dev into main 2026-06-26 21:40:57 -04:00
Owner

Three CI-green dev commits:

  • e3855a5 — remove the frontend-orphaned cluster tag-gaps route + BulkTagService.tag_gaps + tests (the gallery bulk editor's other methods stay).
  • c8a8e23 — return focus to the tag input after every action: navigation (neighbour/breadcrumb/random/seed, hardened nextTick→rAF so the grid re-render can't steal it), tag add/remove, and the rename + fandom-assignment dialogs (@after-leave). Applies to the modal too.
  • e34f79f — show Provenance in the Explore rail above Tags (post title/description often names the character); ProvenancePanel gains optional imageId/image props, modal unchanged.

Green on dev (runs 1534 / 1535 / 1536).

🤖 Generated with Claude Code

Three CI-green dev commits: - **`e3855a5`** — remove the frontend-orphaned cluster tag-gaps route + `BulkTagService.tag_gaps` + tests (the gallery bulk editor's other methods stay). - **`c8a8e23`** — return focus to the tag input after every action: navigation (neighbour/breadcrumb/random/seed, hardened nextTick→rAF so the grid re-render can't steal it), tag add/remove, and the rename + fandom-assignment dialogs (`@after-leave`). Applies to the modal too. - **`e34f79f`** — show Provenance in the Explore rail above Tags (post title/description often names the character); `ProvenancePanel` gains optional imageId/image props, modal unchanged. Green on dev (runs 1534 / 1535 / 1536). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bvandeusen added 3 commits 2026-06-26 21:40:48 -04:00
chore(tags): remove orphaned cluster tag-gaps route + service method
CI / lint (push) Successful in 2s
CI / frontend-build (push) Successful in 18s
CI / backend-lint-and-test (push) Successful in 29s
CI / integration (push) Successful in 3m16s
e3855a5ae0
The cluster tag-gap feature's only UI (Explore's TagGapPanel) was removed in the
3-pane rework, leaving the backend that fed it with no caller. Surgical removal:

- drop the POST /api/images/cluster/tag-gaps route (cluster_tag_gaps)
- drop BulkTagService.tag_gaps (+ the now-unused `import math`)
- drop the tag_gaps tests (test_bulk_tag_service, test_api_bulk_tags)

BulkTagService's common_tags / bulk_add / bulk_remove stay — they still back the
gallery bulk editor. Pure deletion, no behaviour change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(explore/tags): return focus to the tag input after every action
CI / lint (push) Successful in 3s
CI / frontend-build (push) Successful in 19s
CI / backend-lint-and-test (push) Successful in 27s
CI / integration (push) Successful in 3m18s
c8a8e23050
Explore is a rapid walk-and-tag surface, so focus must keep returning to the tag
input with no extra click (operator-asked 2026-06-26). Two gaps closed:

- Navigation hardening: refocus on every focused-image change (neighbour click,
  breadcrumb, Random image, seed) now runs nextTick → requestAnimationFrame, so
  it lands AFTER the post-navigation re-render/paint instead of being stolen
  back by the neighbour-grid re-render.
- All tag actions refocus, in both Explore and the modal: tag add (existing/new)
  and remove now hand focus back like accept-suggestion already did; and the
  rename + fandom-assignment dialogs refocus on @after-leave (fires after
  Vuetify's own focus-return to the activator, so ours wins).

TagAutocomplete's mobile guard is preserved throughout (no soft-keyboard pop on
touch). Modal behaviour gains the same stickier focus — consistent, low-risk.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(explore): show Provenance in the tag rail (post often names the character)
CI / lint (push) Successful in 2s
CI / frontend-build (push) Successful in 21s
CI / backend-lint-and-test (push) Successful in 25s
CI / integration (push) Successful in 3m18s
e34f79fc56
The post title/description frequently names the character, so surface it while
tagging in Explore (operator-asked 2026-06-26). ProvenancePanel gains optional
imageId/image props (default = modal store, so the modal is unchanged) since
provenance is its own system loaded by id; ExploreView renders it above TagPanel
in the right rail, hosted on the anchor. Self-collapses when the image has no
provenance.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bvandeusen merged commit 66593ab895 into main 2026-06-26 21:40:57 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/FabledCurator#134