Skip to content

Tabbed module record drawers — Production Readiness Audit ​

FieldValue
Date2026-10-12
StatusGo for production
ScopePlatform-wide list peeks: ModuleRecordSheet / EntityRecordSheet tabbed view (renderTabs) with shared RecordSheet*Panel helpers; Open full page escape hatch; billing docs remain view-peek only for create/edit
CompanionModule development · Shared layout · CHANGELOG

Executive summary ​

List drawers are upgraded from thin peeks to tabbed drawers (Leads parity). Agents can work Overview / Notes / Follow-ups / Activity (and module-specific tabs such as Comments, Lines, Timeline) without leaving the list. Dedicated routes remain canonical for deep links, notifications, and complex work.

Go / No-Go: Go.

GateResult
Platform freeze (reuse EntityRecordSheet / ModuleRecordSheet; no parallel shell)Pass
Hybrid list standard (renderTabs + Open full page; billing create/edit page-primary)Pass
Shared panel helpers (RecordSheetNotesPanel, Follow-ups, Activity, Fields)Pass
No Backend migrate / no new permissionsPass
Docs + CHANGELOG same deliveryPass
Playwright headed one-session (validation → create → tabs → note → full page)Pass — npm run test:e2e:sheets:headed

Findings ​

Closed (audit remediations) ​

IDSeverityFindingResolution
A1MediumThin peeks forced full-page hops for notes / follow-ups / activityrenderTabs on module record sheets + shared panels
A2MediumContact/company/task peeks still stubbed after Leads sheet shipPlatform-wide tabbed sheets in Frontend PR
A3LowNo headed one-session coverage for tabbed drawerse2e/tests/sheets/tabbed-record-drawers.headed.spec.ts + test:e2e:sheets:headed
A4LowProduction readiness page missing for this shipThis page + VitePress nav + changelog link

Accepted (intentional / ops — not defects) ​

IDSeverityNotes
R1InfoBilling line-item documents stay view peek only for create/edit (page-primary)
R2InfoLeads Notes tab keeps MentionComposer (#lead-sheet-note); other modules use #sheet-note-{entity} textarea panels
R3OpsDeploy Frontend after production build; hard-refresh SPA. No Backend migrate

What shipped ​

Frontend ​

  • ModuleRecordSheet renderTabs + dynamic tab grid on EntityRecordSheet
  • Shared src/components/common/record-sheet-panels.tsx (+ billing read-only note helper)
  • Module *-record-sheet.tsx peeks converted to tabs (Leads, Contacts, Companies, Tasks, and remaining modules)
  • Playwright: test:e2e:sheets:headed (one login; Leads / Contacts / Companies / Tasks)

Docs ​

  • Module-development / shared-layout hybrid-sheet guidance for renderTabs
  • User-guide peek copy updates
  • This readiness page + changelog

Test evidence ​

bash
# From EloSync-Frontend (system Chrome if Playwright browser missing)
$env:E2E_BROWSER_CHANNEL='chrome'
npm run test:e2e:sheets:headed

Expected: 5 passed (login + Leads + Contacts + Companies + Tasks) under one shared browser context.

Go-live checklist ​

  1. Merge Frontend + Docs PRs
  2. Wait for Frontend production build → build-artifacts
  3. Forge-deploy SPA from build-artifacts (not main)
  4. Hard-refresh tenant SPA; spot-check Leads + Contacts list peek tabs
  5. No Backend migrate; no db:seed

Official documentation for the EloSync SaaS Platform.