Review: Board API: update_board_item should support title field
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Lineage
- [x] Repo
- [x] User Story
- [x] Context
- [x] File Targets
- [x] Acceptance Criteria
- [x] Test Expectations
- [x] Constraints
- [x] Checklist
- [x] Related
All required template sections present. Well-structured issue.
File Targets
- [x]
src/pal_e_docs/routes/boards.py— verified exists. However,update_board_item(line 611) andBoardItemUpdateschema (line 295 inschemas.py) already supporttitle. AC #1 is already satisfied at the API layer. - [ ]
src/pal_e_docs/services/board_sync.py— ISSUE: file does not exist. Sync logic lives insrc/pal_e_docs/routes/boards.py(functionsync_boardat line 251). File target is wrong. - [x]
src/pal_e_docs/routes/notes.py— verified exists; correctly marked as do-not-touch.
Missing File Target: MCP Layer
The actual gap is in pal-e-docs-mcp, not pal-e-docs. The MCP tool
update_board_item in pal-e-docs-mcp/src/pal_e_docs_mcp/tools/boards.py (line 209) does not expose a title parameter, even though both the SDK (pal-e-docs-sdk/src/pal_e_docs_sdk/boards.py line 136) and the API already support it. This is the root cause of the reported inability to update titles programmatically.Repo Placement
MISMATCH. The Forgejo issue is filed on
forgejo_admin/pal-e-docs. The fix has two parts:- sync_board title drift — correct repo (
pal-e-docs, inroutes/boards.py) - MCP title param — wrong repo. Fix belongs in
forgejo_admin/pal-e-docs-mcp
This means the issue either needs to be split into two Forgejo issues (one per repo), or scoped down to only the sync_board fix (since the API already works). The MCP gap needs its own issue on
pal-e-docs-mcp.Dependencies
- No blocking dependencies found on the board.
- Item #48 (MCP sprint tools cannot clear points/labels) is tangentially related to board API but not a blocker.
- The SDK already supports
title— no SDK change needed.
Acceptance Criteria
- AC #1 (
PUT /boards/{slug}/items/{id}accepts optional title): Already implemented. The endpoint is PATCH, not PUT — minor inaccuracy. Verified:BoardItemUpdate.titleexists atschemas.py:295, handler atboards.py:611. - AC #2 (sync_board detects title drift on phase items): Valid gap.
sync_boardlines 298-303 only check column drift. Note:sync_issuesalready handles title drift for issue-type items (lines 394-399), so the pattern exists and can be followed. - AC #3 (existing items without title changes are unaffected): Testable, valid criterion.
AC #1 should be rewritten to target the MCP layer, or removed if that becomes a separate issue.
Test Expectations
- Test command
pytest tests/ -k boardis valid. - Existing test
test_sync_sets_title_from_phase_notecovers initial title population but not title drift on re-sync. - A test for title drift detection on phase re-sync is the correct test to add.
- MCP-layer tests would need to live in
pal-e-docs-mcprepo, not here.
Blast Radius
sync_issuesalready handles title drift for issue-type items — no blast radius there.sync_boardonly affects phase-type items linked to plan notes. Low blast radius.- The MCP gap affects all MCP consumers (Claude agents). Until the MCP tool exposes
title, no agent can programmatically update board item titles despite the API supporting it.
Recommendation
Three specific actions before this ticket is READY:
- Fix file target: Replace
src/pal_e_docs/services/board_sync.pywithsrc/pal_e_docs/routes/boards.py(functionsync_boardat line 251). - Split or rescope: AC #1 is already done at the API/SDK layer. The real gap is the MCP tool in
pal-e-docs-mcp. Either (a) remove AC #1 and scope this issue to only the sync_board title drift fix, or (b) split into two issues — one for sync_board (pal-e-docs) and one for MCP title param (pal-e-docs-mcp). - Minor fix: AC #1 says "PUT" but the endpoint is PATCH. Correct the HTTP method.