Board card detail drawer (traceability triangle) + remove orphaned Tailwind + wrap long titles #116
Labels
No labels
domain:backend
domain:devops
domain:frontend
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ldraney/pal-e-app#116
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Feature
Lineage
Standalone — discovered 2026-05-03 during Lucas review of
board-westside-mcpUX. Three visual/UX defects on the kanban page bundled into one ticket because they all touch the same Svelte file and splitting would create merge churn for no benefit.Repo
forgejo_admin/pal-e-appUser Story
As a platform owner, I want to see the full traceability triangle (story / arch / spec / PRs) for any board card I click in pal-e-app, so that I can navigate from any ticket to why it exists, what part of the system it touches, and what code came from it — without leaving pal-e-app or hand-grepping Forgejo.
Full story note (with success metric and AC):
story-pal-e-app-board-card-traceabilityContext
Today the board page (
src/routes/boards/[slug]/+page.svelte) renders cards as opaque tokens.note_slug→ render as<a href="/notes/{slug}">, click navigates to the linked note (works).note_slug→ render as<div>, click callstapItem()which only setsselectedItemfor the tap-to-move flow. There is no detail view. The.mobile-hintdiv ("Tap a column to move ...") appears, but the card's actual data (labels, type, column, linked Forgejo issue) is invisible to the user.Every board item already carries
story:X/arch:X/type:Xlabels enforced by thecreate_board_itemhook. The data is in the database. The UI just doesn't surface it. This ticket closes that gap.Two adjacent defects discovered during the same investigation, bundled because they share the file:
class="fixed inset-0 z-50 flex items-center justify-center"on the Create-Item and Delete-Item modals. Tailwind is NOT installed (vite.config.tshas onlysveltekit(), no PostCSS, no UnoCSS). The classes produce no CSS — modals render as inline block divs in normal page flow with no overlay, no centering, no z-index..card-titleinsrc/app.css:759has nooverflow-wrap. Underscored identifiers (e.g.draft_tournament_email) are treated as unbreakable tokens and overflow narrow columns.File Targets
Files to modify:
src/routes/boards/[slug]/+page.svelte— add inline drawer markup (or extract to component, see below); change cardonclickto open drawer instead oftapItem(); replace Tailwind utility classes on Create/Delete modal wrappers with raw CSS classes; remove thetapItem/tapColumn/selectedItemstate OR migrate it inside the drawer's "Move to Column" sectionsrc/app.css— addoverflow-wrap: anywhereto.card-title(line 759); add.card-drawer,.card-drawer-backdrop,.card-drawer-section,.card-drawer-label-chip,.modal-overlaystyles using existing design tokenssrc/lib/components/BoardCardDetail.svelte— new component encapsulating the drawer; keeps the page file thinFiles NOT to touch:
src/lib/api-client.ts— no API changes; backend already returns everything (labels,note_slug,forgejo_issue_url,item_type,column)Acceptance Criteria
transform: translateXtransition); does not navigate away from the board page<span class="badge badge--{item_type}">type badge, current column name, every label as a clickable chipstory:X→/notes/story-{board's project_slug}-{X}(e.g.story-pal-e-app-board-card-traceability)arch:X→/notes/arch-{X}if globally canonical (perconvention-architecture-ids), else/notes/arch-dataflow-{project_slug}as fallbacktype:X→ no link, visual chip onlyscope:X, etc.) → visual chip onlyforgejo_issue_urlset → "View Forgejo Issue ↗" link in drawer (opens in new tab)note_slugset → "Open Linked Note →" link in drawer (in-app navigation)doMoveItemand closes the drawer.card-titlewraps long unbreakable tokens (verify visually with the existing card "Scaffold westside-mcp + draft_tournament_email tool")var(--color-surface),var(--color-border),var(--color-text),var(--radius-md),var(--radius-lg),var(--shadow-lg),var(--transition-fast)Test Expectations
https://pal-e-app.tail5b443a.ts.net/boards/board-westside-mcp, click the "Scaffold westside-mcp + draft_tournament_email tool" card, verify drawer opens with full traceability content, verify all label chips resolve to live notesfeedback_frontend_iterationConstraints
tailwindcsspackage, no utility classes anywhere in this PR's diff. Perfeedback_no_tailwind. If you spot any other Tailwind classes elsewhere in+page.svelte(e.g.flex,gap-4on form rows), leave them for a separate ticket but list them in the PR description under "Discovered scope."app.css. Do not hardcode hex colors or px values for spacing..touch-ghostand.mobile-hintclasses in the file's<style>block are the reference for drawer styling —position: fixed,var()tokens, CSStransitionfor slide-in.role="dialog",aria-modal="true",aria-label="Card details: {title}". Focus moves to drawer's close button on open and returns to the card on close. Backdrop is a<button>witharia-label="Close drawer".Checklist
mainfeedback_frontend_iteration— code review alone does not pass this PR)Related
pal-e-app— project this affectsstory-pal-e-app-board-card-traceability— user story driving this workconvention-architecture-ids— definesarch:labels the drawer surfacesarch-dataflow-pal-e-app— needs Components-table update for "Board Renderer" (separate follow-up ticket)feedback_no_tailwind,feedback_traceability_triangle,feedback_block_component_model,feedback_frontend_iterationDiscovered scope (separate backlog tickets, not this PR):
arch-dataflow-pal-e-appComponents table to add "Board Renderer" entry pointing at this drawer pattern.convention-admin-surface-uicodifying the drawer pattern (raw CSS vars, label-as-link, traceability triangle visible) for cross-project reuse.westside-adminadmin row surfaces (CRUD pages: players, teams, users, schedule, commerce) — feedsstory-westside-admin-admin-row-crud.Scope Review: APPROVED
Review note:
review-1133-2026-05-03All three defects verified to live in
src/routes/boards/[slug]/+page.svelte(with.card-titleinsrc/app.css:759). Bundling rationale holds — splitting forces three sequential PRs against the same Svelte file. File targets, line numbers (476, 572, 759, 285), and all cited CSS vars (--color-surface,--color-border,--color-text,--radius-md,--radius-lg,--shadow-lg,--transition-fast) verified present. No Tailwind/PostCSS invite.config.ts— orphaned-classes claim is correct. No.card-drawer/.modal-overlaycollision. Story notestory-pal-e-app-board-card-traceabilityexists with full AC.arch:sveltekit-ssris canonical perconvention-architecture-ids. No blocking dependencies on the board.13 AC items technically trips the
>5 ACdecomposition heuristic, but ~10 are sub-aspects of the single drawer feature; remaining 3 are 1-line edits. Estimated agent time within the 5-min rule. No decomposition needed.One follow-up
[SCOPE]recommendation (non-blocking): add aboard-card-traceabilityentry to theproject-pal-e-appuser-stories section so the story note is reachable from the project page. The story note exists and is linked from this issue, so the dev agent isn't blocked — this is a Dottie/Ava follow-up.Ticket can move backlog → todo.