---
id: SCR-PFM-MTD-016
title: Custom record page
route: /console/{tenantId}/objects/{objectKey}/{recordId}
surface: console
product_area: platform
module: metadata
revision: 1
status: draft
design_intent: confirmed
origin: PLAT-M5 D3 (readable, read-only) and D17 (record views), Product Accepted 2026-10-20; PLAT-M6 S08 and S12
  for the related cards
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
purpose: Staff read a custom entry, take permitted lifecycle actions and inspect its changes. The generated record
  view presents the current property contract.
supports:
- JNY-PFM-MTD-001
- JNY-PFM-MTD-002
- JNY-PFM-MTD-005
- CAP-PFM-MTD-012
- CAP-PFM-MTD-013
- CAP-PFM-MTD-014
permission: platform.custom-records.read at the object's scope; .publish, .delete and .history for the actions and
  timeline
entry_from:
- SCR-PFM-MTD-014
- SCR-PFM-MTD-018
- A link from a reference property or a search result
exits_to:
- SCR-PFM-MTD-017
- Linked records' pages
- SCR-PFM-MTD-014 after deletion
displays:
- field: The record's values, number, name, publication state and archive state
  source: getCustomObjectRecord (audited as a view)
- field: Sections and labels
  source: describeObject (objects.<plural>)
- field: The record's timeline, revisions and actors
  source: listCustomObjectRecordHistory, getCustomObjectRecordRevision, listCustomObjectRecordHistoryActors
- field: Related and owned records
  source: SCR-PFM-MTD-018
actions:
- label: Edit
  operation_id: 'none: opens the edit form'
  permission: platform.custom-records.update
  confirm: false
- label: Publish or unpublish
  operation_id: publishCustomObjectRecord
  permission: platform.custom-records.publish
  confirm: true
- label: Archive
  operation_id: archiveCustomObjectRecord
  permission: platform.custom-records.delete
  confirm: true
- label: Restore
  operation_id: restoreCustomObjectRecord
  permission: platform.custom-records.delete
  confirm: true
- label: Delete
  operation_id: deleteCustomObjectRecord
  permission: platform.custom-records.delete
  confirm: true
states:
- loading
- error
- not found
- read-only (draft or archived object, or no change permission)
- inactive (archived record)
- 'stale (changed since read: Reload)'
validation:
- BR-CAP-PFM-MTD-013-01
- BR-CAP-PFM-MTD-013-02
- BR-CAP-PFM-MTD-013-04
- BR-CAP-PFM-MTD-013-09
- BR-CAP-PFM-MTD-012-11
- BR-CAP-PFM-MTD-014-03
patterns:
- record-view engine (generated record view)
- AsyncConfirmDialog for every state action
- stale version alert
- history timeline
- object gate
component: components/console/custom-objects/custom-record-screen.tsx, record-action-panels.tsx
evidence:
- 'react-console at baf6dae3: app/(console)/console/[tenantId]/objects/[objectKey]/[recordId]/page.tsx; components/console/custom-objects/custom-record-screen.tsx,
  record-action-panels.tsx, stale-version.tsx, object-gate.tsx; lib/custom-objects/related.ts (restricted delete
  sentence)'
controls: [TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-DAT-001, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-002, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Custom record page

## What the Screen Is For

Staff read a custom entry, take permitted lifecycle actions and inspect its changes. The generated record view presents the current property contract.

## What It Shows and Lets People Do

Actions depend on granted reach and state. Publish, archive, restore and permanent delete require confirmation; restriction errors explain links preventing deletion, and history shows attributed revisions.

## States and Errors

Service refusal stays in the confirmation. A stale version offers reload. Records beneath inactive categories render read-only, and unavailable records return not found.

## Patterns It Must Respect

The existing record-view engine combines generated content, asynchronous confirmations, history presentation and the shared stale-version alert.
