Files
board-viewer/.tasks/board-viewer-card-meta-fix.md
vitya 930e404545 feat(render): card owner pill + short ISO date span
closes board-viewer-card-meta-fix

Review found two acceptance fields missing from cards:
- project_owner was in JSON but never displayed
- last_commit_iso was only consumed for relative age; no absolute date

Now both rendered (server-side src/render.ts + client-side static/board.js
in sync), with 4 new TDD tests:
- renders owner pill when project_owner is set
- omits owner pill when empty
- renders short YYYY-MM-DD date when last_commit_iso is set
- omits date span when null

CSS: .badge.owner = transparent + border (visually distinct from solid
.badge.project), .date = small muted tabular-nums. Smoke-verified in browser.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 15:42:59 +03:00

48 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# board-viewer-card-meta-fix
## Goal
Card meta сейчас содержит **title + project + age**. Acceptance criteria `board-viewer-html-render.md` строка 19-24 явно перечисляет 5 полей:
- title (труб 80 chars) ✅
- project badge ✅
- **owner (если есть) — pill** ❌ (поле `project_owner` есть в TaskRecord и JSON, но не выводится)
- age (relative) ✅
- **last-commit-marker — короткий hash или дата** ❌ (есть только relative age от `last_commit_iso`, абсолютной даты/хэша нет)
html-render таска закрылась без этих полей — gap. Не было замечено при self-review (потому и нужен independent reviewer).
## Key files
- `src/render.ts:111-127``renderCard()` (server-side первая рендер-проходка)
- `static/board.js:76-89``renderCard()` (client-side rerender при toggle-grouping)
- `tests/render.test.ts` — добавить assertions для двух новых полей
- `static/board.css` — стиль для `.badge.owner` если нужно отличать визуально
## Acceptance criteria
- Card showing `project_owner` as a pill (CSS class `.badge.owner`), скрыт если поле пустое.
- Card showing last-commit-marker: minimum — ISO date `YYYY-MM-DD` (короткая дата, NOT relative). Hash недоступен из API без extra call → opt for date.
- Возможность размещения: либо как третий meta-span после age, либо как tooltip на age (`title="<iso>"`); решение имплементера.
- 2+ TDD tests:
- card with `project_owner` shows owner pill containing the value
- card with `last_commit_iso` shows date (e.g. `2026-05-22`) — separate from relative age
- Обе ветки (server-side `src/render.ts` + client-side `static/board.js`) синхронны.
## Decisions log
- 2026-05-22: задача из review-чекпойнта; severity=major (acceptance gap, не self-replied).
- Open: owner pill всегда показывать или только при variability (когда есть >1 owner в выборке)? — рекомендация: всегда показывать когда поле не null (нет смысла фильтровать на rendering этапе).
## Completed steps
- [x] RED+GREEN: 4 теста для owner pill + date span (renders/omits)
- [x] `src/render.ts` renderCard: owner pill + date span (short YYYY-MM-DD + tooltip с full ISO)
- [x] `static/board.js` renderCard синхронно
- [x] `static/board.css`: `.badge.owner` (transparent + border) + `.date` (small muted tabular-nums)
- [x] smoke-verified в браузере: top cards показывают `board-viewer` + `OpeItcLoc03` + `2026-05-22` + `25m`
## Notes
TDD obligatory — render логика, не visual. Тестируется через DOM-property assertions (как в `render.test.ts`).