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.
Only successful mutations contribute their history and business events. 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
Validationcovered
Permissiongap: FND-PFM-MTD-074
Edgecovered
Failurecovered
Boundarycovered
Concurrencycovered
Invariantcovered
Interactioncovered
Test Scenarios
19 scenarios proving CAP-PFM-MTD-012; 15 bound to an existing test.
01Object status gates record writestransitionapinegativetest
Draft and archived objects and retained records exist.
Steps
[
{
"do": "Attempt draft creation, read an archived-object record and perform each write action on it.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/e2e/custom-object-records.e2e.spec.js#refuses every write of it with 409 and changes nothing"
}
]
Expected
Creation and writes fail while identity reads remain available.
Data
Draft and archived objects and retained records exist.
[
{
"do": "Submit invalid, unknown and archived properties.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#names the object’s label in that refusal, never \"custom records\" (D4)"
}
]
Expected
Refusals identify the property and object label without echoing rejected values.
[
{
"do": "Create without it and clear it on update.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses a record without a property required by the API"
}
]
[
{
"do": "Save an insured boat without its survey date, save an unrequired case and submit a hidden value.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses a sail area on a vessel that is not a sloop, the property being hidden"
}
]
Expected
The unmet requirement and changed hidden value fail; the optional case succeeds.
[
{
"do": "Create with omitted values, supplied values and blank inputs.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#defaults a date to the tenant’s today, and a text to its literal"
}
]
Expected
Defaults fill absent information while explicit valid values prevail.
[
{
"do": "Reference missing, foreign, wrong-object and archived targets.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses a manufacturer that is a boat"
}
]
Expected
Invalid targets are refused while compatible existing targets succeed.
[
{
"do": "Submit the same normalized text on another record, change the holder and try the released value.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses a hull number another boat holds, naming the property and the boat"
}
]
Expected
The duplicate fails without a save; the changed value releases the old reservation.
Primary and secondary naming properties are configured.
Steps
[
{
"do": "Submit an internal line break, boundary line breaks and a multiline unrelated value.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses a create whose secondary display property holds one, naming the property, and writes no record"
}
]
Expected
Internal naming breaks fail, boundaries are trimmed and unrelated multiline information survives.
Data
Primary and secondary naming properties are configured.
An object has primary and secondary naming fields and a prefix.
Steps
[
{
"do": "Create records with populated and absent naming values and oversized names.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/unit/record-rules.spec.ts#is the number with the object’s prefix when the display property holds nothing"
}
]
Expected
Names combine available components or the prefixed number and are bounded without splitting a character.
Data
An object has primary and secondary naming fields and a prefix.
[
{
"do": "Patch one value, clear another with null and replace with an incomplete property map.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#clears every property a replacement leaves out"
}
]
Expected
Patches retain omitted properties and replacement clears omitted live properties.
[
{
"do": "Save the first edit and submit the second stale edit, then try an update-locked record.",
"provenance": "test",
"source": "react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S06.spec.ts#PLAT-M5-S06: two registrars edit one boat; the second is told and nothing is lost"
}
]
Expected
The stale and locked edits fail without overwriting the committed record, and the console retains the unsaved work.
[
{
"do": "Create or patch another record to the same identifier.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses a create under an external id another record of the object holds, naming sys_external_id"
}
]
Expected
Both requests fail and identify the external-identifier conflict.
[
{
"do": "Save valid file sources and attempt missing or unsavable sources.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#names a create’s missing upload at properties.<key>, without the address sent"
}
]
Expected
Valid files are managed in the record folder; failures identify the property without revealing the address.
[
{
"do": "List with filters and limits, read a record and create or edit records.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/e2e/custom-object-records.e2e.spec.js#audits the read of a record as a view"
}
]
Expected
Lists contain appropriate ordered pages, reads include links and view audits, and mutation audits disclose actions rather than values.
A stored value has a conditional visibility driver.
Steps
[
{
"do": "Patch only the driver to hide the property.",
"provenance": "proposed",
"source": "services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:requireRecordRules"
}
]
Expected
The save retains the untouched value.
Data
A stored value has a conditional visibility driver.
An archived record is unlocked and has no restricting links.
Steps
[
{
"do": "Delete it using its current version.",
"provenance": "proposed",
"source": "services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:deleteRecord"
}
]
Expected
The record is removed despite its archive state.
Data
An archived record is unlocked and has no restricting links.
[
{
"do": "Store a decimal and evaluate a value beyond safe scaled range.",
"provenance": "test",
"source": "services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#stores a decimal with its scaled integer shadow"
}
]
Expected
The decimal stores its exact integer shadow and the unsafe result produces no shadow.
An active object has a file property, a conditional rule and an owner type.
Steps
[
{
"do": "Prepare a file, save valid properties, create the owner link, inspect record history and events, then reject a conditional-property save.",
"provenance": "proposed",
"source": [
"services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#names a create’s missing upload at properties.<key>, without the address sent",
"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/services/persistence/associations.integration.spec.js#refuses a record associated with itself"
]
}
]
Expected
Compare committed record and link effects with the rejected save’s unchanged history and event counts.
Data
An active object has a file property, a conditional rule and an owner type.
Source
services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#names a create’s missing upload at properties.<key>, without the address sent,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/services/persistence/associations.integration.spec.js#refuses a record associated with itself
19A failed owner change preserves the earlier content savefailurebrowsernegativeproposed
A saved boat has an owner and an editable property.
Steps
[
{
"do": "Save a model correction, allow removal of the previous owner link, refuse the new owner link and reload the boat.",
"provenance": "proposed",
"source": "specs/platform/metadata/design/workflows/WF-PFM-MTD-006-change-a-custom-record-s-owner-after-its-save.md:hops"
}
]
Expected
The corrected model remains saved and the owner replacement has not completed; retry uses the current content and link state.
Data
A saved boat has an owner and an editable property.