Skip to content

CAP-PFM-MTD-015Deliver Committed Record and Link Events

Markdown

CAP-PFM-MTD-015

Deliver Committed Record and Link Events

Markdown
  • DocumentDraft
  • Product intentProposed
  • 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
Other Rhythm workflows need reliable notification of relevant custom-record changes.A nightly sweep removes eligible old ledger entries without deleting events still waiting for dispatch.
Surfaces
job
Intent sources
services-platform:docs/milestones/PLAT-M7-custom-record-loads-reports-events.md#Scope (Proposed; architecture approved 2026-10-18)services-platform:docs/proposals/custom-objects/09-decisions.md#2. Choices taken as internal (event names)

Controls

26 controls apply, from the corpus control catalogue.

TC-AVL-004 TC-AVL-005 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-DAT-004 TC-IAM-001 TC-IAM-006 TC-LOG-004 TC-LOG-005 TC-MON-001 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-004 TC-PI-005 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
system (no user permission key; events are written by the record and link writes)servicetenant

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Proposed
Record lifecycle and property mutations and link creation, ending or deletion append their event in the mutation transaction, while refused or rolled-back writes append nothing.
invariantservice, databasetest
services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.events.integration.spec.js#publishes nothing when the transaction that wrote the record rolls back, in the ledger or the queue
02must prove
Proposed
Record events identify the object, record, prefixed number, name, publication state and author, with update events listing changed property keys in sorted order.
calculationservicetest
03must prove
Proposed
Unchanged property values, external-identifier-only changes, repeated publication states and link updates that do not end the link produce no business event.
policyservicetest
04must prove
Proposed
Events retain a ledger entry and waiting work until dispatch destinations accept their messages; any refused destination leaves work for another run without removing the ledger fact.
lifecycleservicetest
05must prove
Proposed
Consumption sends the event to native subscribers or its versioned external-router contract to the router and reports only failed messages for redelivery.
policyservicetest
services-platform:modules/custom-objects/tests/integration/services/dispatch/business-events.integration.spec.js#answers the one message whose destination refused, so SQS offers that one again
06must prove
Proposed
The nightly ninety-day sweep retains events still referenced by waiting queue rows; workspace reset or deletion purges the workspace events.
no proof recorded yet
lifecycleserviceobserved
07must prove
Proposed
Deletions announce link removals and cascaded records before the records they depend on.
policyservice, databasetest
services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.events.integration.spec.js#publishes the deletion of the record a cascade takes, with its own object’s number, and the association’s
08
Proposed
Platform has no native subscribers yet, and CRM merge moves or endings of links produce no business event.
policyservicedocumented
09must prove
Proposed
Retention sweeps refuse durations below one day or durations that are not whole numbers.
validationservicetest

Scenarios

IdGivenWhenThenProvenance
01A registrar submits a valid boat create.Commit it and compare a refused create.The committed create leaves its creation event and dispatch work with the actor recorded; the refusal leaves no event.test

Edge Cases

IdGivenWhenThenProvenance
02No destination subscribes to an event.Run dispatch.No delivery is sent and the waiting queue entry is removed.test

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.