5.3.7 Detail-rail custom fields UI — per-type cards + inline editors + "Show more fields" disclosure
Estimate: 35m · Depends on: 5.3.3, 5.3.5
The issue-view surface: extend CoreFieldsPanel (or a sibling CustomFieldsSection it composes) to render the customFields array from the 5.3.3 detail read, per the 5.3.5 design.
Build: value cards reusing the shipped FieldCard grammar (label + chevron + value line) below the built-ins; per-type display (text/number/date/select w/ archived mark/user w/ Avatar) and per-type inline editors (input, numeric, the shipped DatePicker, Combobox excluding archived options, the member picker w/ Unset) — each committing through setCustomFieldValueAction (5.3.3) with the inline 422 error state and router.refresh() on success (the rail's existing pattern); clearing returns the card to empty. "Show more fields (N)" disclosure for empty fields (expand/collapse; a field gaining a value moves above the line on refresh); with no definitions the rail renders byte-identical to today. Viewer read-only (no editors). The editors honour disabled while a patch is pending (the isPending rail convention).
A11y: the disclosure is a proper aria-expanded button; every editor labelled by its field label; errors announced inline (the rose-tint grammar); extends the detail-route strict axe sweep.
Acceptance criteria
- The rail matches
custom-fields.mock.htmlpanel-for-panel: all five types render + edit inline, archived-option display + exclusion rules hold, empty placeholder + clear path work, the disclosure shows/hides empty fields with the correct count, the no-definitions case leaves the rail unchanged. - Edits persist via the dedicated action with per-type validation errors inline (nothing persists on 422); the revision trail records each change; viewer sees read-only.
- Keyboard-complete editors + disclosure; strict axe sweep clean; token tiers only.
- Component/integration tests: per-type render/edit branches, the disclosure count, read-only; existing detail tests stay green;
pnpm test:coverageholds.
Context refs
design/work-items/custom-fields.mock.html+ notes (5.3.5) — THE layout authorityCoreFieldsPanel.tsx(FieldCard, thepatch/isPending/refresh pattern) — extend, don't fork- 5.3.3 (
customFieldsread +setCustomFieldValueAction); the shipped pickers (DatePicker,Combobox, member picker) - The 2.4.6 detail a11y sweep (extend scope)