Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .graphifyignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,26 @@ cmd/migration-check/testdata/
# Frontend tooling config -- one node per JSON key, no architecture signal
web/tsconfig.json
web/components.json
web/package.json

# Tests and generated code: ~60% of graph edges were test plumbing (testing.T,
# NewTestPool) and sqlc output, drowning real architecture. Source is findable by name.
*_test.go
*.test.ts
*.test.tsx
internal/db/sqlc/

# Per-plan execution logs for every phase; CONTEXT/RESEARCH/UI-SPEC keep the decisions
.planning/phases/*/*-PLAN.md
.planning/phases/*/*-SUMMARY.md
.planning/phases/*/*-REVIEW.md
.planning/phases/*/*-REVIEW-FIX.md
.planning/phases/*/*-UAT.md
.planning/phases/*/*-PATTERNS.md
.planning/phases/*/*-VERIFICATION.md
.planning/phases/*/*-SECURITY.md
.planning/phases/*/*-VALIDATION.md
.planning/phases/*/*-DISCUSSION-LOG.md

# Maintenance: when a milestone completes, add that milestone's phase
# directory under .planning/milestones/ to this list before the next
Expand Down
1 change: 1 addition & 0 deletions .planning/STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ _Closed 2026-09-05: Phase 16 gap G-16-1 (n1-boot guard-adoption skip) — quick
| 261007-lc4 | Phase 24 comment cleanup: comment-only trim to 1-3 line why-notes with one doc ref, fixed inaccurate WithTags/merge-trigger/buildTagSuggestions comments, removed plan narration | 2026-10-07 | be98a62 | [261007-lc4-phase-24-comment-cleanup](./quick/261007-lc4-phase-24-comment-cleanup/) |
| 261011-gq7 | Amend Phase 26 CONTEXT and UI-SPEC with grill decisions Q1–Q10 (derived selection, outcome-only bulk responses + refresh, ordered-lock bulk tag attach, single-statement remove/preferences, pending-alert disclosure) and add withdraw-pending-events todo | 2026-10-11 | 6408d28 | [261011-gq7-amend-phase-26-docs-with-grill-decisions](./quick/261011-gq7-amend-phase-26-docs-with-grill-decisions/) |
| 261011-moj | Amend Phase 26 CONTEXT and UI-SPEC with UI review U1–U4 (route-level confirm + close→clear→focus order, scroll-padding focus clearance, one-row phone bar, remove-tag Undo) | 2026-10-11 | 9ac478c | [261011-moj-amend-phase-26-ui-spec-and-context-with-](./quick/261011-moj-amend-phase-26-ui-spec-and-context-with-/) |
| 261019-jkv | Refactor phase 26 bulk UI: shared preference options, popover and outcome-messages modules, useBulkSelection hook | 2026-10-19 | 66e1990 | [261019-jkv-refactor-phase-26-bulk-ui-preferenceopti](./quick/261019-jkv-refactor-phase-26-bulk-ui-preferenceopti/) |

### Roadmap Evolution

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Quick 261019-jkv: phase 26 bulk UI cleanup

Source: architecture review + grilling (candidates 1 and 2). Branch refactor/phase-26-bulk-cleanup.
Each step is one commit; gate = prettier --write/--check, pnpm test (web only, no Go changes).

1. lib/preferenceOptions.ts: shared option lists + EVENT_TYPE_ORDER; PreferencesDelta defined once in api.ts.
2. BulkPreferencesPopover.tsx + lib/useBarClearance.ts extracted from BulkActionBar.tsx.
3. lib/bulkOutcomeMessages.ts: pure toast data + table tests; route switched over.
4. lib/useBulkSelection.ts: selection, remove-confirm, handlers, Undo, focus out of routes/watchlist.tsx.
Comments in touched files: 1-3 lines, one design-doc ref, no opaque tags.
CONTEXT.md: add bulk selection, effective selection, bulk outcome.
Existing integration tests stay unedited and green.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
status: complete
---
# Quick 261019-jkv: phase 26 bulk UI cleanup

Four refactor commits on refactor/phase-26-bulk-cleanup, no behavior change; all 793 web tests pass, existing integration tests unedited.

- preferenceOptions.ts shared by the card and bulk bar; PreferencesDelta defined once in api.ts.
- BulkPreferencesPopover and useBarClearance extracted (BulkActionBar 585 -> 330 lines).
- bulkOutcomeMessages.ts: pure toast data with table tests.
- useBulkSelection.ts: selection, remove confirm, handlers, Undo, focus (watchlist.tsx 1065 -> 711 lines).
- CONTEXT.md: bulk selection, effective selection, bulk outcome.

Not done: embedded SPA bundle (internal/webassets) not rebuilt; integration cases duplicated by the new pure tests were kept, not deleted.
12 changes: 12 additions & 0 deletions CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,15 @@ _Avoid_: filter (that narrows the existing watchlist)
**Note**:
The single plain-text annotation on a watchlist entry. It goes away when the artist is removed from the watchlist, and the remove toast's Undo restores it.
_Avoid_: notes (there is only one), comment, memo

**Bulk selection**:
The set of watchlist entries the user has checked for one bulk action (add or remove tag, change preferences, remove). It is never trimmed when a filter hides an entry, so it can hold entries that are not currently shown.
_Avoid_: multi-select, batch

**Effective selection**:
The bulk selection restricted to the entries currently visible. Every bulk action, the bar's count and Undo work on this set, so a hidden entry is never changed by accident.
_Avoid_: visible selection, active selection

**Bulk outcome**:
What a bulk request reports back: the entries it **applied** to, and the entries it **skipped** with a reason (the artist is at the tag cap, or the entry is already gone). A skip is a result, not an error; the whole request only fails if nothing could be attempted.
_Avoid_: partial failure, result set
Loading
Loading