Category coverage identifies the kind of proof present. Detailed transition, permission and invariant obligations and unbound proposals remain in the coverage finding until their individual cases are accounted for.
Refused cascades leave no partial mutation, history or event effects. The structured interaction rows identify the related capabilities exercised and any remaining gap. Cross-capability workflow seams remain subject to the detailed coverage audit.
Coverage
Rulecovered
Transitioncovered
Validationgap: FND-PFM-MTD-075
Permissioncovered
Edgegap: FND-PFM-MTD-075
Failurecovered
Boundarygap: FND-PFM-MTD-075
Concurrencygap: FND-PFM-MTD-075
Invariantgap: FND-PFM-MTD-075
Interactioncovered
Test Scenarios
11 scenarios proving CAP-PFM-MTD-013; 9 bound to an existing test.
01Publication state tracks publication timeruleapinegativetest
A publishable record and a nonpublishable object exist.
Steps
[
{
"do": "Publish, move to another state and try publishing the nonpublishable record.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses publication on an object that is not publishable"
}
]
Expected
Time is populated during publication and cleared outside it; unsupported publication fails.
Data
A publishable record and a nonpublishable object exist.
[
{
"do": "Archive it, list records, try archival again and restore it.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#archives a record with everything kept"
}
]
Expected
Ordinary browsing excludes it, data remains, repeated archival fails and restoration returns the retained information.
A record has values, unique reservations and files.
Steps
[
{
"do": "Delete at its current version.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#deletes a record with its values and unique values"
}
]
Expected
Record and owned rows disappear and files are detached for retirement.
Data
A record has values, unique reservations and files.
[
{
"do": "Try deleting the protected record.",
"provenance": "test",
"source": "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"
}
]
[
{
"do": "Delete the builder and inspect every dependent record.",
"provenance": "test",
"source": "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"
}
]
[
{
"do": "Delete its root and inspect event order.",
"provenance": "test",
"source": "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)"
}
]
Expected
Link removals precede dependent record deletions and the originating deletion is last.
[
{
"do": "Delete the owner through its cascade.",
"provenance": "test",
"source": "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)"
}
]
Expected
The dependent record is removed despite its object state.
[
{
"do": "Publish, archive, restore and delete and inspect audit events.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#records the publication and its state in the audit events"
}
]
Expected
Each action is audited and publication records its resulting state.
An administrator opens an ordinary and a protected boat.
Steps
[
{
"do": "Publish, archive and restore, then attempt protected deletion.",
"provenance": "test",
"source": "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"
}
]
Expected
Supported actions succeed and the deletion confirmation identifies the restricting link.
Data
An administrator opens an ordinary and a protected boat.
A root reaches two custom records and one has a restricting link.
Steps
[
{
"do": "Attempt root deletion, compare record values, revisions and events, remove the restriction and retry.",
"provenance": "proposed",
"source": [
"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",
"services-platform:modules/custom-objects/tests/integration/services/history/custom-object-record-history.integration.spec.js#answers the association, the update and the creation, newest first",
"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",
"services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#leaves the same audit rows, events, revisions and no record, as the record store does"
]
}
]
Expected
Inspect the complete refusal and successful cleanup separately.
Data
A root reaches two custom records and one has a restricting link.
Source
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,services-platform:modules/custom-objects/tests/integration/services/history/custom-object-record-history.integration.spec.js#answers the association, the update and the creation, newest first,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,services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#leaves the same audit rows, events, revisions and no record, as the record store does
11Every publication state can be selected from each current statetransitionapiproposed
A publishable active object has a separate unlocked record for each source and target state pair.
Steps
[
{
"do": "Set each record to its source state, reread its version and select the target state; include all sixteen pairs and reread the record, audit and events.",
"provenance": "proposed",
"source": "specs/platform/metadata/design/state-models/STATE-PFM-MTD-006-custom-record-publication.md"
}
]
Expected
The selected state and publication time satisfy the cited obligation for each pair; selecting the existing state adds no business event.
Data
Sixteen records covering the four-by-four publication matrix.