Manifest T5c · Wave W5 · RFD-DOC-006. Covers ER-06, ER-23, ER-24, ER-28 and ER-38.
Every Deep Read finding offers three complete actions: Keep finding, Dismiss finding as not accurate, and Dismiss finding as not relevant. The verdict appears immediately and is stored in the browser fixture store. A rejected write restores the previous state instead of leaving a false success.
A superseded finding re-enters only when a prior not relevant record has the same stable finding identity but changed source content. It shows the prior author/date and a side-by-side quote diff. “Not accurate” remains terminal in the fixture.
record/doc/[documentId]/layout
→ DocumentPermalinkShell
→ DocumentStrip
→ SIDE CHECK ribbon // Original, Text and Insights
→ routed lens body
The ribbon is one slim, single-line semantic-danger band. It names both sides, never blames counsel, and expands the exact quote, page and confidence with a page-and-anchor evidence link. Every resolution names its full target: Change to Client's, Change to Opponent's, Change to Other, or Keep as Opponent's.
The Record adapter now preserves
DocumentListItem.declaredSide. A distinct SIDE column shows
the declaration; a disagreement renders a text-and-icon warning, never
colour alone. The warning links to the routed queue, and a shared
segmented filter narrows the register to Needs review.
The declared-side control remains available in every SIDE cell, so counsel can make an explicit-target manual correction after a toast expires. It updates immediately, rolls back on refusal, and offers a destination-named undo.
/record/side-review is a real App Router route with
layout-owned Record/SIDE review navigation. It can be deep-linked, opened
in a new tab, and addressed by agentSurface.
| Queue rule | Behaviour |
|---|---|
| Confidence floor | Only suggestions at or above 85% enter bulk actions. Lower-confidence rows require an individual decision. |
| Explicit bulk target | Bulk actions are grouped by destination: for example, Change all 3 to Client's. |
| Optimism + rollback | Rows leave immediately. Refused writes return only the failed rows. |
| Undo | The toast names the destination and writes each prior declared side back. A refused undo restores server-consistent queue state. |
The generated contract has a real, audited declared-side mutation, and every Change/Undo uses it. It does not yet expose side suggestions, confidence/evidence, finding dismissal reasons, or superseded identity history.
Those read models are therefore fixture-only and hard-gated to the established matter-16 UAT corpus. “Keep current side” and finding verdicts persist in a browser fixture store, including undo, rollback, declarer/resolver identity, timestamp, and the machine suggestion, until their generated audit contracts land. At wave cutover the fixture read/write helpers are deleted; they are never dual-served beside live suggestions.
60 file(s), +3205 / -314 lines
| Path | Role | + | - |
|---|---|---|---|
| messages/en.json | Config | +71 | -2 |
| messages/hi.json | Config | +71 | -2 |
| src/app/[locale]/(workspace)/matters/[matterId]/record/doc/[documentId]/insights/page.tsx | App route | +1 | -0 |
| src/app/[locale]/(workspace)/matters/[matterId]/record/doc/[documentId]/layout.tsx | App route | +6 | -0 |
| src/app/[locale]/(workspace)/matters/[matterId]/record/layout.tsx | App route | +21 | -0 |
| src/app/[locale]/(workspace)/matters/[matterId]/record/side-review/page.tsx | App route | +57 | -0 |
| src/app/api/internal/matters/[matterId]/documents/route.ts | App route | +56 | -0 |
| src/components/documents/register/register-cell.tsx | Component | +60 | -9 |
| src/components/documents/register/register-document-row.stories.tsx | Component | +19 | -1 |
| src/components/documents/register/register-document-row.tsx | Component | +38 | -8 |
| src/components/documents/register/register-side-cell.stories.tsx | Component | +65 | -0 |
| src/components/documents/register/register-side-cell.tsx | Component | +117 | -0 |
| src/components/documents/register/register-table.tsx | Component | +133 | -103 |
| src/components/documents/register/register-view.stories.tsx | Component | +45 | -10 |
| src/components/documents/register/register-view.tsx | Component | +130 | -36 |
| src/components/documents/register/saved-views-register.tsx | Component | +25 | -6 |
| src/components/documents/register/view-popover/icons.ts | Component | +2 | -0 |
| src/components/documents/side-check/record-mode-layout.stories.tsx | Component | +34 | -0 |
| src/components/documents/side-check/record-mode-layout.tsx | Component | +26 | -0 |
| src/components/documents/side-check/record-subnav.stories.tsx | Component | +24 | -0 |
| src/components/documents/side-check/record-subnav.tsx | Component | +41 | -0 |
| src/components/documents/side-check/side-check-review-context.ts | Component | +8 | -0 |
| src/components/documents/side-check/side-check-ribbon.stories.tsx | Component | +45 | -0 |
| src/components/documents/side-check/side-check-ribbon.tsx | Component | +174 | -0 |
| src/components/documents/side-check/side-check-story-fixtures.ts | Component | +37 | -0 |
| src/components/documents/side-check/side-review-queue.stories.tsx | Component | +39 | -0 |
| src/components/documents/side-check/side-review-queue.tsx | Component | +237 | -0 |
| src/components/documents/side-check/use-side-check-ribbon.ts | Component | +115 | -0 |
| src/components/documents/side-check/use-side-review-queue.ts | Component | +156 | -0 |
| src/components/documents/viewer/deep-read-finding-item.stories.tsx | Component | +38 | -0 |
| src/components/documents/viewer/deep-read-finding-item.tsx | Component | +77 | -0 |
| src/components/documents/viewer/deep-read-findings.tsx | Component | +68 | -46 |
| src/components/documents/viewer/deep-read-section.tsx | Component | +3 | -0 |
| src/components/documents/viewer/document-insights-dossier.tsx | Component | +43 | -36 |
| src/components/documents/viewer/document-insights-live.tsx | Component | +6 | -3 |
| src/components/documents/viewer/document-permalink-shell.tsx | Component | +24 | -3 |
| src/components/documents/viewer/finding-lifecycle-controls.stories.tsx | Component | +53 | -0 |
| src/components/documents/viewer/finding-lifecycle-controls.test.tsx | Component | +44 | -0 |
| src/components/documents/viewer/finding-lifecycle-controls.tsx | Component | +144 | -0 |
| src/components/documents/viewer/finding-lifecycle-story-fixtures.ts | Component | +17 | -0 |
| src/components/documents/viewer/section-finding-card.stories.tsx | Component | +9 | -4 |
| src/components/documents/viewer/section-finding-card.tsx | Component | +12 | -10 |
| src/components/documents/viewer/use-finding-lifecycle.ts | Component | +78 | -0 |
| src/components/matters/live-matter-documents-page.tsx | Component | +8 | -2 |
| src/lib/documents/finding-lifecycle-fixture.test.ts | Library | +95 | -0 |
| src/lib/documents/finding-lifecycle-fixture.ts | Library | +187 | -0 |
| src/lib/documents/register/adapter.ts | Library | +8 | -2 |
| src/lib/documents/register/columns.ts | Library | +27 | -4 |
| src/lib/documents/register/filters.test.ts | Library | +2 | -0 |
| src/lib/documents/register/fixtures.ts | Library | +2 | -0 |
| src/lib/documents/register/saved-view.test.ts | Library | +39 | -10 |
| src/lib/documents/register/saved-view.ts | Library | +25 | -5 |
| src/lib/documents/register/types.ts | Library | +11 | -1 |
| src/lib/documents/side-check-decisions.test.ts | Library | +51 | -0 |
| src/lib/documents/side-check-decisions.ts | Library | +98 | -0 |
| src/lib/documents/side-check.test.ts | Library | +57 | -0 |
| src/lib/documents/side-check.ts | Library | +78 | -0 |
| src/lib/kubb-client.ts | Library | +15 | -9 |
| src/lib/surface-registry/route-registry.ts | Library | +12 | -2 |
| tests/unit/lib/kubb-client.test.ts | Test | +21 | -0 |
Documents/SideCheck/SideCheckRibbon — mismatch and
read-only states.
Documents/SideCheck/SideReviewQueue — review-required and
outside-fixture empty states.
Documents/Register/RegisterDocumentRow/SideCheckWarning —
SIDE column warning.
Documents/Viewer/FindingLifecycleControls — pending and
superseded-re-entry quote diff.
All product copy is present in messages/en.json and
messages/hi.json. SIDE names reuse the existing reviewed
DocumentViewer.side vocabulary; the feature does not mint a
parallel party taxonomy.