Commit graph

12 commits

Author SHA1 Message Date
575fb3aaeb fix: add arrow-key roving tabindex nav and aria-pressed to triage views
KanbanBoard's board tabs implemented roving tabindex but never wired up
arrow-key navigation, making inactive tabs keyboard-unreachable. Adds
ArrowLeft/ArrowRight/Home/End handling that moves both selection and
focus between tabs, closing an unmet requirement from the original
design doc. Also adds aria-pressed to App's List/Board toggle buttons
so their active state is exposed to assistive technology, not just
conveyed visually via CSS class.
2026-07-14 17:51:43 -07:00
18cfd22db5 feat: add persisted List/Board view toggle to Chorus 2026-07-14 13:23:23 -07:00
cee0dcd36a fix: give each kanban board tab a persistent tabpanel for ARIA compliance
Inactive tabs' aria-controls pointed at an ID that only existed for the
active board, and the one existing tabpanel wrapped just the breadcrumb
text instead of the actual columns/cards. Render all four board panels
always in the DOM with v-show instead of v-if so every tab's
aria-controls resolves to a real, persistent panel wrapping its real
content, per the WAI-ARIA Tabs pattern.
2026-07-14 13:18:11 -07:00
634da8c309 feat: add mobile-first kanban board view for Chorus triage items 2026-07-14 13:13:06 -07:00
da0e703b44 fix: strengthen border and modality badge contrast to meet WCAG ratios 2026-07-14 13:09:50 -07:00
d75e6d3c49 feat: extract shared stage-list module and humanize stage labels in ItemModal 2026-07-14 13:05:16 -07:00
e8efb6566f feat: link the Chorus item in the bot's post-ingest reply 2026-07-14 11:07:09 -07:00
a3f438e243 feat: make ItemModal stage dropdown direction-aware for outbound leads 2026-07-13 22:40:20 -07:00
f8a853a80c chore: minor fixes from final review (Dockerfile reproducibility, Caddy directive, em dash)
M3: frontend/Dockerfile now copies package-lock.json and uses npm ci instead
of npm install, for reproducible builds.

M4: replace em dash with plain hyphen in manual_share.py's attachment-only
fallback text (standing style preference; ping.py title and
TriageList.vue's sender fallback were already fixed in prior commits).

M5: Caddyfile.snippet uses basic_auth instead of the deprecated basicauth
directive alias (Caddy 2.8+).

M1/M2/M6 (unused discord import removal, None-payload guard in
_extract_body, discord.NotFound guard in thread_ingest.py) were already
included in the preceding two commits since they touched the same files.
2026-07-13 15:01:46 -07:00
73fb67b3bf fix: cog re-registration, thread NotFound, follow-up date, and error/empty states
I1: move cog registration + tree.sync into ChorusBot.setup_hook (called once
before gateway connect) instead of on_ready (fires on every reconnect),
preventing duplicate cogs/listeners/poll loops after a gateway RESUME.

I2 (email_ingest.py, addressed alongside I1 for IMAP stability): none here,
handled separately.

I3/I4: TriageList.vue now renders a follow_up_date column so it actually
surfaces back to Donna. App.vue adds a "Show completed" checkbox bound to
includeDone, matching what docs/smoke-test.md step 7 already describes.

I5: add frontend/tests/ItemModal.spec.js covering stagesForType() options
for donation/other/unset types and the type-change stage reset regression.

I6: App.vue wraps loadItems/openItem in try/catch with a calm (no-panic)
error message, and shows calm empty-state copy when there are zero items.

Also fixes thread_ingest.py: standalone threads not started from a message
raise discord.NotFound on fetch_message; now caught and returns early.
2026-07-13 15:01:32 -07:00
f2709fc425 fix: match ItemModal stagesForType() to backend valid_stages_for() contract
stagesForType() returned OTHER_STAGES (including 'done') for the unset
type case, but backend stages.py::valid_stages_for(None) only allows
['new'] when type is unset. This let the UI offer 'Done' as a stage
option with no type selected, which the backend rejects with 422.

Also add a watch on type that resets stage to 'new' when the current
stage is no longer valid for the newly selected type, preventing a
stale invalid stage from being silently submitted.
2026-07-13 14:25:28 -07:00
13b41cc438 feat(frontend): add triage list, item modal, and theme 2026-07-13 14:21:45 -07:00