Skip to content

CAP-PFM-MTD-008Manage Shared Forms and Record Layouts

Markdown

CAP-PFM-MTD-008

Manage Shared Forms and Record Layouts

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleMetadata and Organization-defined RecordsRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Presentation definitions let a workspace organize how eligible records are read and edited.Assigned definitions cannot be removed until their uses are changed.
Surfaces
consoleapi
Preconditions
The target supports the relevant presentation capability or is a live custom object.
Intent sources
services-platform:docs/layouts.md#2. The purpose is the authorizationservices-platform:docs/layouts.md#4a. Two console forms (Andrew, 2026-10-11: create and edit forms)services-platform:docs/standards/custom-field-capability.md#4. What enabling custom fields requires (console and portal forms and layouts)services-platform:docs/proposals/custom-objects/09-decisions.md#D-09 (custom object purposes share Platform keys)

Controls

25 controls apply, from the corpus control catalogue.

TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-CRY-004 TC-DAT-001 TC-DAT-003 TC-DAT-004 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-003 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

Permissions

KeyChecked atScope
platform.layouts.readapitenant
platform.layouts.createapitenant
platform.layouts.updateapitenant
platform.layouts.deleteapitenant
crm.contact-layouts.read, .create, .update, .delete and the other purpose owners' administration keysservicetenant
crm.contacts.read, crm.organizations.read, committees.committees.read, platform.custom-records.read (consumption)servicetenant
platform.custom-objects.read, .create, .update, .delete (administration of custom object purposes)servicetenant

Business Rules

13 rules, 11 to be proved before approval. A rule's product intent is derived from its origin: 13 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
A presentation definition stores a trimmed name of one to two hundred characters, optional description, fixed purpose and an opaque JSON object of at most 256 kibibytes that is returned without interpretation.
validationapi, service, databasetest
services-platform:modules/layouts/tests/integration/services/persistence/console-page-layouts.integration.spec.js#refuses a layout larger than the stated maximum, telling the person the limit and the size
02must prove
Confirmed
A replacement or patch cannot change the purpose and reports the stored and requested purposes when they differ.
invariantservicetest
services-platform:modules/layouts/tests/integration/services/persistence/console-page-layouts.integration.spec.js#refuses a replacement that names another purpose, naming both the stored one and the request’s
03must prove
Confirmed
Reading accepts the purpose administration read key or record consumption key, while writes require the appropriate purpose administration key defined by the record owner.
origin: services-platform:docs/layouts.md#2. The purpose is the authorization
permissionapitest
services-platform:modules/layouts/tests/e2e/console-page-layouts-api.e2e.spec.js#answers 403 to a caller who may read contacts but not administer their layouts
04must prove
Confirmed
Unreachable definitions return not found for reads and writes, disappear from lists and produce an empty purpose-filtered list.
origin: services-platform:docs/layouts.md#What a refused caller is told
permissionapitest
services-platform:modules/layouts/tests/e2e/console-page-layouts-api.e2e.spec.js#answers 404 for a definition of a purpose the caller may not read, rather than confirming it exists
05must prove
Confirmed
Creation rejects an unregistered purpose before purpose permission evaluation, and a Platform staff wildcard cannot substitute for the purpose owner keys.
validationapitest
services-platform:modules/layouts/tests/e2e/console-page-layouts-api.e2e.spec.js#answers 400 for a purpose this build does not register, naming it
06must prove
Confirmed
Custom-object purposes use shared definition administration and record-read keys, require a draft or active object in the workspace and become unreadable when that object is archived.
permissionapi, servicetest
services-platform:modules/layouts/tests/e2e/custom-object-forms.e2e.spec.js#answers 404 for a stored form once its custom object is archived
07must prove
Confirmed
Replacement and patch require the current version, update locks block modifications and delete locks block removal.
validationservicetest
08must prove
Confirmed
Definition lists default to fifty entries, cap at two hundred, order by name and use a cursor that is rejected when malformed.
policyapi, servicetest
09must prove
Confirmed
The owning save registers presentation use in five assignment slots, whose database references reject missing definitions or mismatched workspace, kind or purpose.
invariantdatabasetest
services-platform:modules/layouts/tests/integration/db/layout-assignments.table.integration.spec.js#refuses an assignment naming a definition of the wrong kind, because each slot’s column references one table
10must prove
Confirmed
Create and edit assignments may select either two different console forms or the same console form.
origin: services-platform:docs/layouts.md#4a. Two console forms (Andrew, 2026-10-11)
policydatabasetest
services-platform:modules/layouts/tests/integration/db/layout-assignments.table.integration.spec.js#holds a different console form for creating a record and for editing one, each under its own column
11must prove
Confirmed
An assigned definition cannot be deleted until its referring records or settings are changed, and concurrent assignment and deletion cannot leave an invalid reference.
invariantservice, databasetest
services-platform:modules/layouts/tests/integration/services/persistence/console-page-layouts.integration.spec.js#names every referring row, in a stable order, when more than one assigns it
12
Confirmed
The contact form designer persists console forms in Platform and reports unsupported content when opening a stored form rather than discarding it.
policyconsoleobserved
13
Confirmed
The contact page-layout designer stores drafts and published layouts in browser storage instead of Platform presentation storage.
policyconsoleobserved

Scenarios

IdGivenWhenThenProvenance
01A contact type and default settings both assign the same layout.Try deleting that layout before and after clearing its assignments.The initial refusal identifies both uses; deletion succeeds after their removal.documented
services-platform:docs/layouts.md#5. Deleting a definition

Edge Cases

IdGivenWhenThenProvenance
02A caller can read contacts but cannot administer their layouts.Read a layout and attempt to edit it.Reading succeeds while the edit receives a forbidden response.test
services-platform:modules/layouts/tests/e2e/console-page-layouts-api.e2e.spec.js#answers 403 to a caller who may read the definition but not administer it

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.