FYI: customer-row workbench ADR filed; shared-libs dedup captured as follow-up
Why
Delivery is adding a customer-centric workbench surface (delivery/adrs/ADR-0001-customer-centric-delivery-workbench.md, proposed 2026-05-16; originally filed as coordination/adrs/ADR-0017 and relocated to the Delivery repo the same day, since the decision is domain-internal). The surface takes the user-facing /workbench route and reshapes it from the current exception-row queue into a customer-row queue. Stages derive from the lock state machine in coordination/adrs/ADR-0006-credit-reservation-lock-state-machine.md plus Delivery-internal signals (attendance backlog, missing coach assignment, lock drift). Pictograms encode multi-dimensional state at a glance.
The ADR is explicit that shared-library extraction is out of scope for this pass. This memo captures the dedup opportunity so it is not lost.
What
The new Delivery customer workbench will reimplement, in Delivery vocabulary, several primitives that Sales already implements in sales/app/workbench/_components/workbench-crm-content:
- A stage-tabs filter (
WorkbenchStageFilterin Sales;SegmentedFilterin Delivery already). - A stage-tabs counter row with tone-mapped counters (
WorkbenchSummaryin Sales;SummaryCountersin Delivery already). - A grouped-card list with per-group title, hint, tone, and card collection (
WorkbenchLeadGroupsin Sales;QueueGroupsin Delivery already). - A scan-only card with title, subtitle, chips, detail, and drill-down href (Sales'
WorkbenchLeadCard; Delivery'sQueueCardData). - A multi-chip "pictogram row" on each card encoding state dimensions at a glance (Sales'
WorkbenchCadenceCues; Delivery's plannedPictogramRow).
Delivery's primitives are already in app/_components/workbench-ui.tsx and were authored to match the Workbench Pattern Standard's "share-shape" recommendation (pattern adoption with separate code, per the Dashboard spike report 2026-05-16-delivery-workbench-dashboard-spike-report).
The Workbench Pattern Standard §8 ("Domain primitives stay local") names the four conditions for shared-library extraction:
- Two or more domains need the same component behavior, not just the same pattern.
- The component can be named without importing one domain's vocabulary into another.
- Versioning and deprecation cost is lower than repeated local implementation.
- The shared package has an owner and a test surface.
The dedup observed here is genuine but does not yet meet the bar. Sales' primitives carry Lead-vocabulary in their names and DTOs (WorkbenchLeadGroups, WorkbenchLeadCard, WorkbenchCadenceCues); Delivery's carry generic-operator vocabulary by design. A shared package would either rename Sales' primitives or import Lead vocabulary into Delivery. Neither is desirable today.
Asks
None. This is an FYI memo on the open Workbench-pattern thread, filed alongside the relocated Delivery ADR so the dedup observation has a home in the corpus.
The §8 bar is rechecked as a trigger condition in the ADR's "Trigger to revisit" section. If a third operator surface in Delivery (e.g., a lessons-by-day workbench, a coach-roster workbench) lands and the primitives need to be parameterized rather than duplicated, the trigger fires and the four-condition test is rerun, with Sales pulled into the conversation at that point.
References
delivery/adrs/ADR-0001-customer-centric-delivery-workbench.md— the customer-row workbench decision (the active record after the 2026-05-16 relocation fromcoordination/adrs/ADR-0017).coordination/adrs/ADR-0017-customer-centric-delivery-workbench.md— the superseded stub left behind by the relocation; points at the active record.delivery/adrs/README.md— the convention that puts domain-internal ADRs in the Delivery repo rather than in the cross-domain corpus.- Workbench Pattern Standard (
coordination/standards/engineering/workbench-pattern.md) — the §8 four-condition bar. - Dashboard spike report (
coordination/memos/2026/2026-05-16-delivery-workbench-dashboard-spike-report.md) — the prior share-shape determination ("pattern adoption with separate code") that this memo carries forward. - Sales' workbench primitives (
sales/app/workbench/_components/workbench-crm-content.tsxand siblings) — the dedup target. - Delivery's workbench primitives (
delivery/app/_components/workbench-ui.tsx) — the local implementation that the customer-row workbench will build on.