Blake's quick analysis, and Blake's name on every record
Two founder-UAT refinements. Blake gets his own face as the way into his quick analysis, and the clean legal name he generates becomes the record's primary name — the messy upload kept, never lost.
Part A — Blake's quick analysis (rename + hover face)
Blake's avatar sits on every row at low opacity — ambient proof he has read it — and comes to full strength under the cursor. It replaces the old generic scan glyph.
Dwell ~320ms (or click) and Blake's panel slides in. A cursor merely crossing the column never trips it.
The panel eyebrow reads Blake's quick analysis (was the grammatically-off "Blake read this").
Blake's analysis and the document Details remain two distinct drawers — no merge.
Part B — Blake's name is the record name
The Record cell shows Blake's card name. Every surface that shows a document name (row, Details title, bundle labels, exports) routes through one displayName() chokepoint, so they can never disagree.
Long names truncate in the fixed-width column; hovering the name shows a tooltip with the full, untruncated name.
A new hideable Original file column (hidden by default, toggled via ⚙ View → Fields) plus the Details panel both keep the file as uploaded.
No card name yet → registrar name → the original filename. A row is never nameless while Blake is still reading.
Real data path
GET /app/matters/{matter_id}/record/bootstrap → DocumentListItem.card.name.value → toRegisterDocument → displayName(). The card already rides the list payload (Story-2700), so no new request. DocumentListItem.filename feeds the Original-file column and Details.
Review path
| Surface | Expected proof |
|---|---|
| Record row · document name | Clicking Blake's legal name opens the "Blake's quick analysis" panel. |
| Record register (live) | Name column shows Blake's legal name; hover shows full name; ⚙ View → Fields reveals a toggleable "Original file" column carrying the raw upload. |
| Details drawer | Title = Blake's name; original filename mono underneath, unchanged otherwise. |
display-name.test.ts | Card name → registrar name → filename precedence, and blank card names treated as absent. |
Files changed
48 file(s), +2479 / -186 lines
| Path | Role | + | - |
|---|---|---|---|
| openapi/app-api.json | Config | +450 | -2 |
| openapi/permission-map.json | Config | +27 | -3 |
| src/components/documents/register/register-blake-interaction.test.tsx | Component | +38 | -28 |
| src/components/documents/register/register-blake-trigger.stories.tsx | Component | +0 | -57 |
| src/components/documents/register/register-blake-trigger.tsx | Component | +0 | -44 |
| src/components/documents/register/register-document-cell.tsx | Component | +0 | -2 |
| src/components/documents/register/register-document-row.stories.tsx | Component | +1 | -2 |
| src/components/documents/register/register-document-row.tsx | Component | +0 | -1 |
| src/components/documents/register/register-document-title.tsx | Component | +1 | -1 |
| src/components/documents/register/register-row-quick-actions.stories.tsx | Component | +7 | -10 |
| src/components/documents/register/register-row-quick-actions.tsx | Component | +14 | -15 |
| src/components/documents/register/register-table.stories.tsx | Component | +0 | -1 |
| src/components/documents/register/register-table.tsx | Component | +0 | -4 |
| src/components/documents/register/register-view.tsx | Component | +0 | -4 |
| src/gen/client/appPreviewMemberDeactivation.ts | Generated contract | +63 | -0 |
| src/gen/client/appPreviewMemberFirmRoleChange.ts | Generated contract | +66 | -0 |
| src/gen/client/index.ts | Generated contract | +2 | -0 |
| src/gen/hooks/index.ts | Generated contract | +16 | -0 |
| src/gen/hooks/useAppPreviewMemberDeactivation.ts | Generated contract | +131 | -0 |
| src/gen/hooks/useAppPreviewMemberDeactivationSuspense.ts | Generated contract | +133 | -0 |
| src/gen/hooks/useAppPreviewMemberFirmRoleChange.ts | Generated contract | +141 | -0 |
| src/gen/hooks/useAppPreviewMemberFirmRoleChangeSuspense.ts | Generated contract | +142 | -0 |
| src/gen/index.ts | Generated contract | +79 | -0 |
| src/gen/schemas/firmMemberMutationResponse.json | Generated contract | +188 | -0 |
| src/gen/schemas/firmMemberTeamChangePreviewResponse.json | Generated contract | +104 | -0 |
| src/gen/schemas/firmMemberTeamConsequence.json | Generated contract | +73 | -0 |
| src/gen/schemas/firmMemberTeamConsequenceOutcome.json | Generated contract | +7 | -0 |
| src/gen/schemas/firmMemberTeamConsequenceUserRef.json | Generated contract | +25 | -0 |
| src/gen/types/AppDeactivateMember.ts | Generated contract | +3 | -3 |
| src/gen/types/AppPreviewMemberDeactivation.ts | Generated contract | +71 | -0 |
| src/gen/types/AppPreviewMemberFirmRoleChange.ts | Generated contract | +76 | -0 |
| src/gen/types/AppUpdateMemberFirmRole.ts | Generated contract | +3 | -3 |
| src/gen/types/FirmMemberMutationResponse.ts | Generated contract | +63 | -0 |
| src/gen/types/FirmMemberTeamChangePreviewResponse.ts | Generated contract | +29 | -0 |
| src/gen/types/FirmMemberTeamConsequence.ts | Generated contract | +48 | -0 |
| src/gen/types/FirmMemberTeamConsequenceOutcome.ts | Generated contract | +17 | -0 |
| src/gen/types/FirmMemberTeamConsequenceUserRef.ts | Generated contract | +26 | -0 |
| src/gen/types/index.ts | Generated contract | +33 | -0 |
| src/gen/zod/appDeactivateMemberSchema.ts | Generated contract | +3 | -3 |
| src/gen/zod/appPreviewMemberDeactivationSchema.ts | Generated contract | +88 | -0 |
| src/gen/zod/appPreviewMemberFirmRoleChangeSchema.ts | Generated contract | +95 | -0 |
| src/gen/zod/appUpdateMemberFirmRoleSchema.ts | Generated contract | +3 | -3 |
| src/gen/zod/firmMemberMutationResponseSchema.ts | Generated contract | +67 | -0 |
| src/gen/zod/firmMemberTeamChangePreviewResponseSchema.ts | Generated contract | +32 | -0 |
| src/gen/zod/firmMemberTeamConsequenceOutcomeSchema.ts | Generated contract | +17 | -0 |
| src/gen/zod/firmMemberTeamConsequenceSchema.ts | Generated contract | +44 | -0 |
| src/gen/zod/firmMemberTeamConsequenceUserRefSchema.ts | Generated contract | +25 | -0 |
| src/gen/zod/index.ts | Generated contract | +28 | -0 |