Skip to content

T 087


uid: T-087 title: Records β€” restore double-click β†’ receipt detail drawer (regression after tab merger) status: done area: accounting-records created: 2026-06-21 updated: 2026-06-23 related: I-004


Why (owner, 2026-06-21, verbatim via I-004)

"Why is it that I can no longer open the receipt detail modal upon double clicking it? The behavior has changed, can you possibly reverse it back to how it was (the tab has gone thru a merger with the Service invoice tab previously, that might have changed the behavior)"

I-004 is the symptom record. This task is the structural fix on top.

Root cause (from I-004)

The Receipts↔Service-Invoices tab merger consolidated ReceiptsTab.tsx + VendorInvoicesTab.tsx into one components/records/ExpenseRecordsTab.tsx. The detail-drawer wiring was dropped entirely in that merge β€” ExpenseRecordsTab didn't import ReceiptDetailDrawer / VendorInvoiceDetailDrawer, and the double-click handler did window.open(fileUrl, '_blank') instead of setActiveId(r.id).

Fix

Re-introduce both drawers in ExpenseRecordsTab and route double-click back to the detail drawer keyed on the row's kind:

  • receipt rows β†’ ReceiptDetailDrawer (by un-prefixed recordId)
  • service-invoice rows β†’ VendorInvoiceDetailDrawer (lazily fetches the richer VendorInvoiceRow from /api/records/vendor-invoices and matches by recordId === VendorInvoiceRow.id per the feed mapping β€” avoids a lossy map that could wipe the fingerprint on the drawer's edit-save)

Raw-file open stays available via right-click β†’ "Open file in new tab" + the per-row PDF button; helper text updated to "double-click opens details".

Decision log

2026-06-21 β€” opened + fixed in a single commit

  • βœ… Attestation (Accounting (Diagnostics)): read AGENTS.md; scope-scanned the board β€” no existing task covers the modal-regression symptom. T-084 (sibling PR #777) is now scoped to fix (a) only after the split.
  • Source: Accounting (Diagnostics) Β· https://claude.ai/code/session_01G58Y71noihrYCDEDMexmea
  • What changed: opened ticket I-004 (symptom record) and this task T-087 (structural fix). Both files added in the same commit as the code fix on a new branch off nightly. The fix is the cherry- picked content of commit 8b0f8f33 (originally landed on claude/records-display-fixes-yxMLM as "fix(t-084b)" before the split β€” commit re-attributed to T-087 here).
  • Proposed by: the owner β€” "split the symptoms differently" + chose "Two new tickets, two tasks" (2026-06-21).
  • UID note β€” why T-087 (not T-085): PR #775 (the WOPC restructure branch) holds T-085 + T-086 from an earlier renumber today. Taking T-087 here (skipping T-085, T-086) avoids a guaranteed collision whichever PR merges second. The records-display branch's tasks/README jumps from T-085 β†’ T-088 to reflect the skip (a comment note will be added if the README structure supports inline notes; the jump itself is documented here).
  • Related: PR #777 (T-084 β€” vendor-invoice display name, the sibling split-out fix) + I-003 (its symptom record, opened on the records-display branch).

2026-06-23 β€” DONE (audit close-out)

  • βœ… Attestation (Accounting (Diagnostics)): read AGENTS.md; this is a status-audit close-out, not new scope.
  • Source: Accounting (Diagnostics) Β· https://claude.ai/code/session_01G58Y71noihrYCDEDMexmea
  • Verdict: the structural fix shipped β€” commit 42ba7de9 ("restore double-click β†’ detail drawer in ExpenseRecordsTab (closes I-004)"), merged via PR #779. Confirmed live on main: components/records/ExpenseRecordsTab.tsx imports ReceiptDetailDrawer + VendorInvoiceDetailDrawer and routes double-click to the keyed drawer. Status was left on doing after merge; flipped to done here.
  • Scope boundary: the separate image-placeholder symptom (cropped/original receipt images render as a picture icon) is its own ticket I-006 (β†’ T-096), still open β€” NOT part of T-087's restore-the-drawer-open scope. Closing T-087 does not close that.