Review: Integrate playground kanban into pal-e-app

review-298-2026-03-28 Doc

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type — Feature
  • [x] Lineage — Standalone
  • [x] Repo — present but STALE (says forgejo_admin/pal-e-app, repo renamed to forgejo_admin/pal-e-docs-app)
  • [x] User Story — present
  • [x] Context — present
  • [x] File Targets — present but contains stale reference (see below)
  • [x] Acceptance Criteria — present (4 criteria)
  • [x] Test Expectations — present (3 items)
  • [x] Constraints — present
  • [x] Checklist — present
  • [x] Related — present

Traceability

  • [x] story:kanban-daily-review — present on board item #298
  • [ ] arch:X — MISSING. Should be arch:frontend (consistent with sibling board items #469, #471, #472, etc.)
  • [x] Forgejo issue — forgejo_admin/pal-e-docs-app/issues/47, open

File Targets

  • [x] src/routes/boards/[slug]/+page.svelte — verified: exists, 1195 lines, already has drag-and-drop, optimistic updates, column rendering, type badges, auth gating
  • [x] src/app.css — verified: exists
  • [ ] src/routes/boards/[slug]/+page.server.ts (DO NOT TOUCH) — ISSUE: file does NOT exist. App was migrated to adapter-static (PR #57, issue #53). Data loading is client-side via onMount in the .svelte file. This "do not touch" reference is stale and will confuse the agent.

Repo Placement

Issue body says forgejo_admin/pal-e-app but the repo was renamed to forgejo_admin/pal-e-docs-app (issue #87, PR #90). The Forgejo redirect handles this transparently, but the issue body should be updated to avoid confusion. Local checkout at ~/pal-e-app still uses the old directory name.

Dependencies

  • [ ] Board item #297 ("Playground: kanban prototype", issue #46) — PENDING. Still in_progress on board-pal-e-docs. This ticket's Context section explicitly states: "Depends on playground kanban prototype being approved by Lucas." The playground prototype (~/pal-e-docs-playground/note-board.html, 132 lines) exists but has not been approved. This ticket CANNOT move to next_up until #297 reaches done.
  • [x] Board item #318 ("Drop legacy boards table", issue #199) — in next_up, no conflict. Board page should not depend on the legacy table.
  • [x] Board item #522 ("Validate: alembic upgrade head") — in todo, API schema changes. No direct conflict for a CSS restyling ticket.

Acceptance Criteria

  • "Board view matches playground-approved design" — testable by visual comparison, but playground must be approved first (dependency blocker)
  • "Real API data renders correctly" — ALREADY IMPLEMENTED. Current +page.svelte loads and renders real API data via client-side fetch.
  • "Drag-and-drop works with optimistic updates" — ALREADY IMPLEMENTED. Lines 67-87 show optimistic update logic with itemsByColumn state.
  • "Auth gating: board mutations require login" — ALREADY IMPLEMENTED. Line 32: isAuthenticated derived state controls mutation visibility.
Assessment: AC 2, 3, and 4 describe functionality that ALREADY EXISTS in the 1195-line board page. The only real AC is #1 — visual restyling to match the playground design. The AC should be rewritten to describe the actual delta (CSS/layout changes) and add a non-regression criterion for existing functionality.

Blast Radius

  • src/lib/columns.ts — shared column utilities used by the board page. Changes to column rendering could affect other consumers (e.g., ProjectLayout.svelte).
  • src/lib/api-client.ts — board API functions already integrated. No blast radius unless API contract changes.
  • src/lib/components/ProjectLayout.svelte — references boards in project view. If board card styling changes, project layout may need matching updates.
  • Rollback is straightforward — CSS-only changes to a single page.

Decomposition Assessment

2 file targets, 1 repo, 4 AC (though 3 already exist). Once scoped correctly to CSS/layout restyling only, the real work is: copy playground CSS classes into app.css and restyle the board page markup to match. Estimated agent time under 5 minutes. No decomposition needed — but AC must be refined first to reflect the actual delta.
No independent subtasks to parallelize. Single-agent, single-PR work.

Recommendation

  • [BODY] Fix repo reference: forgejo_admin/pal-e-app to forgejo_admin/pal-e-docs-app
  • [BODY] Remove stale "do not touch" reference to src/routes/boards/[slug]/+page.server.ts — file does not exist (app uses adapter-static with client-side loading)
  • [BODY] Rewrite AC to reflect actual delta: AC 2/3/4 already exist. Real AC should be "board page CSS/layout matches playground-approved design" and "existing drag-drop/auth/API functionality preserved (no regressions)"
  • [BODY] Add explicit dependency note: "Blocked by issue #46 (playground kanban prototype) — must reach done before this ticket moves to next_up"
  • [LABEL] Add arch:frontend label to board item #298
  • [SCOPE] Clarify: is this a full rewrite of +page.svelte (1195 lines) or a CSS-only restyling? The current page has extensive working logic. "Copy-paste from playground + data bindings" undersells the existing 1195-line implementation. The playground is 132 lines of static HTML; the app page is 1195 lines of working Svelte with drag-drop, filters, optimistic updates. The real task is likely "restyle the existing board page to match the playground CSS" — not a copy-paste replacement.