Review: Drop legacy boards table (v3)
Verdict: READY
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- Standalone, kanban unification
- [x] Repo -- forgejo_admin/pal-e-api (corrected from v2)
- [x] User Story -- Platform owner, legacy table removal
- [x] Context -- Final cleanup after consumer migration
- [x] File Targets -- 4 source files + 8 test files + alembic migration
- [x] Cross-Repo Blast Radius -- pal-e-app 2 files, alias approach documented
- [x] Acceptance Criteria -- 6 items, all verifiable
- [x] Test Expectations -- pytest command specified
- [x] Constraints -- Pre-migration backup, consumer confirmation, cross-repo note
- [x] Checklist -- Standard 3 items
- [x] Related -- project-pal-e-docs, unlocks recursive kanban
- [x] Notes for Betty Sue -- arch:board-api label request
Traceability
- [x] story:kanban-daily-review label -- kanban unification story
- [ ] arch:board-api label -- MISSING on board item #318. Issue body notes it needs adding. Recommend adding before moving to next_up.
- [x] Forgejo issue -- forgejo_admin/pal-e-api#199, open
File Targets
Source files:
- [x]
src/pal_e_docs/models.py-- verified: Board class at line 235, board_id on BoardItem at line 257 - [x]
src/pal_e_docs/schemas.py-- verified: BoardCreate at line 231, BoardUpdate at line 236 - [x]
src/pal_e_docs/routes/boards.py-- verified: 703 lines, heavily Board/board_id-dependent throughout - [x]
alembic/versions/-- verified: directory exists, existing migrations present
Test files (all 8 verified to exist):
- [x]
tests/test_boards.py - [x]
tests/test_board_sync.py - [x]
tests/test_board_issue_sync.py - [x]
tests/test_private_projects_boards.py - [x]
tests/test_pagination_activity.py - [x]
tests/test_note_type_enum.py - [x]
tests/test_retype_migration.py - [x]
tests/conftest.py
Cross-repo (pal-e-app):
- [x]
src/lib/api-client.ts-- verified:board_id: number;at line 40 - [x]
src/routes/+page.svelte-- verified:boardMap[item.board_id]at line 139
Repo Placement
OK. Issue filed on forgejo_admin/pal-e-api (correct). Cross-repo impact on pal-e-app documented with backward-compat alias approach. pal-e-docs-sdk and pal-e-mcp have zero board_id references -- no blast radius there.
Dependencies
- Board item #314 "Add 'board' to NoteType" -- done
- Board item #315 "Add board_note_id FK + data migration" -- done
- Board item #316 "Update board API for board notes" -- done
- Board item #317 "Update MCP + SDK + hooks for board-as-note" -- done
All prerequisite migration tickets are in the done column. Dependency chain is satisfied.
Acceptance Criteria
6 AC, all agent-verifiable. Test command
pytest tests/ -v is real. AC #4 now correctly reflects the alias+deprecation-header approach (contradiction from v2 resolved). No missing criteria.Blast Radius
Checked pal-e-app (2 files, documented), pal-e-docs-sdk (0 refs), pal-e-mcp (0 refs). The backward-compat alias prevents breaking pal-e-app. A follow-up pal-e-app ticket to migrate off the alias is implied but not yet created -- acceptable as discovered scope after this PR lands.
Decomposition
13 files across 1 repo, 6 AC. Estimated agent time: borderline (large refactor of 700-line routes file + migration + 8 test files). However, the changes are tightly coupled -- dropping the Board model, rewriting routes, and updating tests MUST land atomically to avoid broken intermediate states. A database migration cannot be split across PRs. No decomposition needed -- atomic scope justifies the size.
V2 Fix Verification
- [x] Repo header corrected:
forgejo_admin/pal-e-api(was pal-e-docs) - [x] Phantom notes.py removed from File Targets
- [x] AC #4 rewritten: alias + X-Deprecated-Field header (was contradictory removal)
- [x] Notes for Betty Sue section added with arch:board-api label request
Recommendation
[LABEL]Addarch:board-apilabel to board item #318 before moving to next_up (per Notes for Betty Sue)
All v2 issues resolved. Scope is solid. One housekeeping label remains.