Skip to content

CAP-PFM-MTD-013Retire or Publish Custom Records

Markdown

CAP-PFM-MTD-013

Retire or Publish Custom Records

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
Records administrators need deliberate lifecycle actions for custom records.Cascades can reach dependent custom records and roll back if a safeguard refuses any member.
Surfaces
consoleapi
Preconditions
The owning custom object is active.
Postconditions
Lifecycle actions leave audits, and deletion removes owned values and links while detaching assets.
Intent sources
services-platform:docs/proposals/custom-objects/09-decisions.md#D-19 (Andrew, 2026-10-18: archive under the delete key)services-platform:docs/milestones/PLAT-M5-custom-records.md#PLAT-M5 B1, B5, D3services-platform:docs/milestones/PLAT-M6-custom-record-relationships.md#Changes requested (2026-10-21, "All or nothing")services-platform:docs/milestones/plans/PLAT-M5-plan.md#PLAT-M5-S07

Controls

23 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-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-003 TC-PI-005 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-records.publishapirecord
platform.custom-records.deleteapirecord

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Publishable records begin in draft and accept draft, pending-review, published or unpublished states; entering publication sets its time, leaving it clears the time and nonpublishable objects reject publication.
lifecycleservice, databasetest
02must prove
Confirmed
Record archival retains values, files and links while excluding ordinary-list entries and refusing edits, publication and repeated archival until restoration; deletion remains available for an active object.
lifecycleservicetest
03must prove
Confirmed
Permanent deletion requires the current version, removes record and owned value reservations and detaches files for retirement.
lifecycleservice, databasetest
04must prove
Confirmed
A restricting link in force prevents deletion without removing anything, including a link whose end date is still current or future.
origin: services-platform:docs/milestones/plans/PLAT-M6-plan.md#5. D2 (Andrew, 2026-10-21: in force until it ends)
validationservice, databasetest
services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses to delete a record an open restricting association names, and removes nothing
05must prove
Confirmed
Cascading deletion follows linked custom records through the same safeguards to a maximum depth of ten and rolls back the entire deletion when any member is refused.
origin: services-platform:docs/milestones/PLAT-M6-custom-record-relationships.md#Changes requested (Andrew, 2026-10-21: "All or nothing")
invariantservice, database, consoletest
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S08.spec.ts#PLAT-M6-S08: an insured boat cannot be deleted and a builder's deletion takes its boats except the refused one
06must prove
Confirmed
Deletion announcements order link removals first, cascaded records from deepest to shallowest next and the originating record last.
origin: services-platform:docs/milestones/PLAT-M5-custom-records.md#PLAT-M5 B1 (Andrew, 2026-10-19: "Dependants first")
policyservice, databasetest
services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#writes every dependant’s event before the record it depended on: the associations, then the cascade deepest first (B1)
07must prove
Confirmed
Owner cascades still delete records of archived or draft objects even though direct deletion from those objects is refused.
origin: services-platform:docs/milestones/PLAT-M5-custom-records.md#PLAT-M5 B5 (Andrew, 2026-10-19: "Rule applies anyway")
policyservice, databasetest
services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#applies the owner’s cascade to a record of an archived custom object (B5: the rule applies whatever the type’s state)
08must prove
Confirmed
Publication, archival, restoration and deletion record audit events in their transaction, including the chosen publication state.
policyservicetest
09must prove
Confirmed
Authorized record-page actions offer publication, unpublication, archival, restoration and confirmed deletion, explaining restricting links in a refused deletion confirmation.
policyconsoletest
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07: publish, archive and restore from the boat page; History names each revision and who made it
10
Confirmed
Direct store deletion consults an optional external deletion check, but no integration registers it and cross-service deletion does not consult it.
policyservicedocumented
services-platform:docs/associations.md#The contract for another service (CRM's contact and organization deletes)

Scenarios

IdGivenWhenThenProvenance
01A records administrator opens the first boat record.Publish it, archive it and restore it.The actions succeed and History identifies their revisions and authors.test
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07: publish, archive and restore from the boat page; History names each revision and who made it

Edge Cases

IdGivenWhenThenProvenance
02A builder cascades to boats and one boat has restricting insurance.Try deleting the builder, then repeat after the insurance ends.The protected deletion removes nothing; after the protection ends, the builder and its dependent boats are removed.documented

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.