Founder law: the founder sees the complete machine payload before deciding what to hide, move, or reformat. Curated reading views stay; direct payload disclosure is added below them and is visible by default.
generated response object → AllFieldsDisclosure → JSON.stringify(payload, null, 2) → every returned key and value, without a field allowlist
The shared disclosure also replaces the older family-specific JSON renderer, so Family, Insights, and Text use one exact serialization path.
| Lens | Curated view retained | Complete disclosure added |
|---|---|---|
| Insights | Judge summary, semantic sections, findings, and attention map. |
The original DeepReadEnvelope: schema and document ids,
extraction version, summary, privilege flag, complete coverage
receipt, examined receipts, row privilege and trace data, plus every
section, attention, finding, assertion, evidence, confidence, anchor,
offset, and typed assertion-object field.
|
| Text | Readable machine copy, named sections, table rendering, and outline. | All three untouched generated responses: Text view ids, version, page count, and full text; Anchor view ids, version, pages, page numbers, blocks, anchor ids, geometry, offsets, confidence, kind, text, and explicit table cell coordinates, spans, confidence, and text; plus the Sections view document id, extraction run id, complete section nodes, boundaries, layout tags, and nested children. |
The disclosure is not behind a closed accordion. Its scrollable field dump is in the normal page flow. Before a payload exists, the shared component names that state instead of rendering an unexplained blank panel. The integrated Insights “Not yet read” and loading states show that explicit empty disclosure. Text keeps all responses visible during loading, empty, error, and extraction-version mismatch states, including any partial data that did arrive.
This change uses the committed generated contracts without running
codegen. The current DeepReadEnvelope does not define
comparator verdicts, model_sessions, or timestamps. Those
values therefore cannot be rendered by this app until the upstream
OpenAPI contract carries them.
No UI field mapping needs to change when that generated contract expands: the complete admitted envelope object is serialized directly. The same rule applies to future Text, Anchor, and Sections response fields.
12 file(s), +548 / -197 lines
| Path | Role | + | - |
|---|---|---|---|
| messages/en.json | Config | +13 | -1 |
| messages/hi.json | Config | +13 | -1 |
| src/components/documents/all-fields-disclosure.stories.tsx | Component | +45 | -0 |
| src/components/documents/all-fields-disclosure.test.tsx | Component | +43 | -0 |
| src/components/documents/all-fields-disclosure.tsx | Component | +44 | -0 |
| src/components/documents/family/family-all-fields.tsx | Component | +8 | -27 |
| src/components/documents/viewer/deep-read-story-fixtures.ts | Component | +156 | -0 |
| src/components/documents/viewer/document-insights-dossier.stories.tsx | Component | +7 | -99 |
| src/components/documents/viewer/document-insights-dossier.tsx | Component | +102 | -45 |
| src/components/documents/viewer/document-machine-copy-view.stories.tsx | Component | +28 | -3 |
| src/components/documents/viewer/document-machine-copy-view.tsx | Component | +88 | -21 |
| src/components/documents/viewer/use-document-sections.ts | Component | +1 | -0 |
Documents/AllFieldsDisclosure — complete nested payload and
not-available-yet states.
Documents/Viewer/InsightsDossier — complete envelope
fixture, no-findings, not-yet-read, and loading states.
Documents/Viewer/MachineCopyView — current extraction with
blocks, geometry, confidence and table cells; empty, loading, and
version mismatch states.
agentSurface entries remain authoritative and no route
registry regeneration is needed.
pnpm lint pnpm test pnpm build pnpm check:routes pnpm storybook:build git diff --check