Obligation 10: The coverage finding records the missing scenario.
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.
The service boundary preserves dependent deletion evidence and cleanup. 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
Transitiongap: FND-PFM-MTD-081
Validationgap: FND-PFM-MTD-081
Permissioncovered
Edgecovered
Failuregap: FND-PFM-MTD-081
Boundarycovered
Concurrencygap: FND-PFM-MTD-081
Invariantcovered
Interactioncovered
Test Scenarios
10 scenarios proving CAP-PFM-MTD-019; 9 bound to an existing test.
01Deletion policies agree on both sidesruleapinegativetest
[
{
"do": "Delete each endpoint.",
"provenance": "test",
"source": "services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#refuses with SQLSTATE AE409 and the message the TypeScript refusal has, removing nothing"
}
]
Expected
Detach preserves the other record, cascade removes dependent custom records, restrict protects current links and ended links never block deletion.
Chains span the supported depth and exceed it, with another chain containing a lock.
Steps
[
{
"do": "Delete each head.",
"provenance": "test",
"source": "services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#refuses a chain of eleven with SQLSTATE AE409 and removes nothing of it"
}
]
Expected
Supported chains are removed while excessive or locked chains fail without partial deletion.
Data
Chains span the supported depth and exceed it, with another chain containing a lock.
A deployed CRM contact owns a custom boat under a cascading owner type.
Steps
[
{
"do": "Delete the owner through CRM and request the boat and its associations through Platform.",
"provenance": "test",
"source": "services-platform:tests/acceptance/custom-objects/deployed/associations/CO-ACC-0256.spec.js#step 3: Fulmar answers 404 and its associations are gone"
}
]
Expected
The owner deletion succeeds, the boat is not found and its associations are gone.
Data
Deployed CRM endpoints have cascading and restricting links.
A custom record has values, assets and observable history and event storage.
Steps
[
{
"do": "Delete its owner through endpoint policy.",
"provenance": "test",
"source": "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
Dependent cleanup, audit, revisions and events match direct record deletion.
Data
A custom record has values, assets and observable history and event storage.
Deletion functions have authorized and unauthorized role contexts.
Steps
[
{
"do": "Call under another workspace or an ungranted database role.",
"provenance": "test",
"source": "services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#refuses another tenant than the transaction’s with 42501, removing nothing"
}
]
Expected
Both calls fail without removing relationships.
Data
Deletion functions have authorized and unauthorized role contexts.
An owner has records of draft or archived custom objects.
Steps
[
{
"do": "Delete the owner under cascading and restricting types.",
"provenance": "test",
"source": "services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#cascades to a record of an archived custom object, deleting it"
}
]
Expected
Cascade removes the archived-object record and restriction preserves the protected record.
Data
An owner has records of draft or archived custom objects.
The survivor and duplicate have overlapping pair and primary links.
Steps
[
{
"do": "Merge duplicate endpoints.",
"provenance": "test",
"source": "services-platform:modules/associations/tests/integration/db/associations-merge.integration.spec.js#ends m’s association that repeats s’s, giving it s’s id, and leaves s’s as it was"
}
]
Expected
Links name the survivor, colliding or self-links end and an extra primary loses its designation.
Data
The survivor and duplicate have overlapping pair and primary links.
Custom records reference duplicate contacts or organizations.
Steps
[
{
"do": "Merge them and inspect values and history.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/db/custom-object-records-merge.integration.spec.js#names the surviving contact in every property that named a merged one"
}
]
Expected
References name survivors and revisions retain the earlier values.
Data
Custom records reference duplicate contacts or organizations.
The duplicate has links and references, including collisions and near-limit counts.
Steps
[
{
"do": "Read its plan, apply it and apply it again.",
"provenance": "test",
"source": "services-platform:modules/associations/tests/integration/db/associations-merge.integration.spec.js#counts the associations held by m, and says how many end instead of moving"
}
]
Expected
Counts match movements and endings, repetition moves nothing and the per-record cap does not reject the merge.
Data
The duplicate has links and references, including collisions and near-limit counts.
A native owner has a cascading custom record with attachments and values.
Steps
[
{
"do": "Delete the owner within its service transaction and inspect the dependent record, assets, revisions and event order.",
"provenance": "proposed",
"source": [
"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",
"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)",
"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 the deletion of the record a cascade takes, with its own object’s number, and the association’s"
]
}
]
Expected
Compare cleanup and attribution with an equivalent direct custom-record deletion.
Data
A native owner has a cascading custom record with attachments and values.
Source
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,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),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 the deletion of the record a cascade takes, with its own object’s number, and the association’s