Skip to content

CAP-PFM-MTD-006Configure Field Requirements and Exposure

Markdown

CAP-PFM-MTD-006

Configure Field Requirements and Exposure

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
Fields need behaviour appropriate to the organization process and audience.Dependent properties can prevent a custom-object field from being archived.
Surfaces
consoleapi
Preconditions
The target field exists and remains unarchived.
Intent sources
services-platform:docs/proposals/custom-objects/09-decisions.md#D-10 (exposure levels), D-20 (refuse the archive)services-platform:docs/milestones/PLAT-M5-custom-records.md#D-20 and PLAT-M5 D6 (build the deferred definition rules)services-platform:docs/milestones/plans/PLAT-M5-plan.md#PLAT-M5-S04, PLAT-M5-S05, PLAT-M5-S09

Controls

26 controls apply, from the corpus control catalogue.

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-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.custom-fields.readapitenant
platform.custom-fields.updateapitenant

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Rules are replaced as a complete set of five possible kinds, with one entry per kind; omitted kinds disappear and the default staff exposure needs no stored entry.
policyservice, databasetest
02must prove
Confirmed
Conditions may reference other fields of the same type using compatible operators, cannot reference their own field and must fit sixteen kilobytes; rejected sets leave existing rules intact.
validationservice, databasetest
services-platform:modules/metadata/tests/integration/services/persistence/custom-fields.rules.integration.spec.js#refuses a condition naming a field the object does not have, and leaves the rules unchanged
03must prove
Confirmed
Uniqueness rules are supported only for custom objects and are refused with a duplicate-value count until existing records satisfy uniqueness.
validationservicetest
04must prove
Confirmed
Defaults accept a compatible literal, the workspace current date, the portal caller contact or the caller organization token, and incompatible defaults are refused.
validationservicetest
05must prove
Confirmed
Exposure selects the widest permitted readership along the staff, owner, portal and public ladder, with broader levels including narrower audiences and invalid levels rejected.
policyservicetest
services-platform:modules/metadata/tests/unit/custom-object-properties.spec.ts#refuses an exposure off the ladder before the description is read
06must prove
Confirmed
A custom-object property named by another property condition cannot be archived until those dependencies are changed; the refusal identifies each dependent field and rule without deleting them.
origin: services-platform:docs/proposals/custom-objects/09-decisions.md#D-20 (Andrew, 2026-10-18: "Refuse the archive")
validationservicetest
services-platform:modules/metadata/tests/integration/services/persistence/custom-fields.rules.integration.spec.js#refuses the archive naming each dependent property and rule, and leaves the field and the rules unchanged
07must prove
Confirmed
Field archival deletes that field’s own rules atomically, and rule replacement is unavailable while the field is archived.
lifecycleservicetest
08must prove
Confirmed
Writing a field rule advances the workspace query-description stamp in the same transaction.
policydatabasetest
services-platform:modules/metadata/tests/integration/db/custom-field-rules.table.integration.spec.js#moves the tenant’s query description stamp when a rule is written
09must prove
Confirmed
The archive dependency safeguard applies to custom objects; a registered-type field can be archived despite another field condition naming it.
policyservicetest
services-platform:modules/metadata/tests/integration/services/persistence/custom-fields.rules.integration.spec.js#does not apply to a native object: a contacts field its rule depends on is archived

Scenarios

IdGivenWhenThenProvenance
01Survey Due depends on the Insured selection.Save an insured boat without its survey date, then remove the insured selection and save.The insured save requires the date and the other save succeeds.test
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S04.spec.ts#PLAT-M5-S04: Survey Due is required only when Insured is ticked

Edge Cases

IdGivenWhenThenProvenance
02The Survey Due condition references Insured.Attempt to archive Insured.The dependency refusal identifies the condition.test
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S09.spec.ts#PLAT-M5-S09: archiving a property another rule depends on is refused, naming the rule

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.