Skip to content

ADR 0017: Record pages and local demo data

  • Status: Accepted for the local prototype
  • Date: 2026-11-02

Use a dedicated page for record creation and editing at the existing record URLs. Keep the application sidebar and Breadcrumb visible and reuse one form for both flows. Group Keyword/classification, business fields and technical metadata; use the full shared content width with at most two responsive columns and full-width Keyword/multiline controls. Header, tabs, form, tables and action bar share the same page edges as the Dashboard and object lists. Form groups reuse the settings section surfaces with legends, responsive padding and spacing instead of redundant separators. Multiple Category choices wrap horizontally rather than leaving a large blank grid cell. The default proposal follows standard fields then definition creation order. ADR 0025 makes groups/order configurable and new elements Unassigned; administrative field lists remain alphabetical. No schema rebuild is needed for display order.

Place Back to overview and the object-type badge on the same row, followed by the record title and short section explanation. Save/Create and Reset use one sticky bottom action bar on Details so long forms keep their actions reachable. After a submit attempt, the bar names up to three missing required fields (with a remaining count), otherwise indicating an unsaved or unchanged draft. Editing supports Reset; creation supports returning/cancelling without writes. Existing version/validation/pending guards and Command/Ctrl+Enter remain authoritative. New-record Save replaces new with its UUID. Return to the originating same-workspace list or Dashboard with URL filters/pages and focus preserved; linked creation can return to its validated source record under ADR 0019. Direct links fall back to the object’s list. Existing records offer Details, Dossier and Journal tabs, plus the Primary-only Tree while Projects is active; new records offer Details with an explanation that the other views become available after creation. All tabs share the page; switching tabs must retain unsaved form state. Show Created at/by and Updated at/by above the journal entries. Keep only identity, object technical name and version in Technical details. Use the shared Journal data table and formatted record values under ADR 0023. Formatted multiline previews and inactive field values are separate standard Collapsible sections, closed initially. Technical details use the same disclosure composition. New-record help explains required-field markers, empty custom choices say No selection and the record Journal labels its change-kind filter Changes. A future quick-edit Sheet may reuse the form; it is not part of this change.

Supply an explicit fictional local fixture through the existing application layer. Use Contacts, Projects, Cases, Tasks, Vehicles, Contracts, Devices and explained Access checks, plus an inactive lifecycle sample. Supply one account per existing role, English contents/default language, bilingual definition labels, all implemented custom field types and persisted relationships through the shared application layer. Keep generated credential receipts and UUID plans private. Do not manufacture relationship fields or claim domain modules are implemented. See Local demo data.

An explicitly requested development reset discards test contents and initializes the current empty model under ADR 0028. Administrator provisioning and optional fictional seed data are separate normal installation steps.

Records have room for later dossier/tree views without duplicating forms. Form drafts remain local and unsaved across tab switches. Existing API/MCP content permissions are unchanged. The demo seed refuses to overwrite workspaces; tests use isolated PostgreSQL and cover data, column order, history, duplicate-seed refusal and unique planned primary parents.

Record forms edit numeric strings using the effective regional decimal and grouping separators. Validate grouping, integer range, decimal precision/scale and currency codes at the field, expose accessible errors and block invalid saves. Convert valid drafts to exact canonical decimal strings only at the shared API boundary; never parse via floating point, round excess precision or change backend storage/validation. Reset restores the original localized draft. Optional empty amounts become null. Backend rules remain authoritative for every client.

Loading and loaded record pages share the header, tab region and bottom action frame. Unknown module state uses a neutral tab placeholder; known field metadata supplies applicable form groups without guessing a Contact kind. Fresh Contact forms show required markers immediately and validation errors after leaving the relevant field or attempting submission. Invalid drafts never reach the writer. Custom multiple-choice and multiple user/group-reference fields share a bounded checkbox menu with retained inactive values and keyboard navigation; Classification retains its dedicated layout. Built-in format guidance is optional, while authored descriptions remain visible.