# 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=""`); решение имплементера. - 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`).