78 lines
4.0 KiB
JSON
78 lines
4.0 KiB
JSON
{
|
|
"$comment": [
|
|
"NTF-024 — what each support grade requires, as executable artifacts rather than prose.",
|
|
"A grade in support-matrix.md is a promise about production behaviour. The workflow that was",
|
|
"supposed to back those promises ran a unit subset on PR, a job named 'restart recovery' that",
|
|
"ran no restart, and a provider sandbox job whose entire body was two echo statements behind",
|
|
"continue-on-error. So the strongest claim in the document rested on the weakest evidence in",
|
|
"the pipeline, and nothing connected the two.",
|
|
"verifyNotificationEvidence reads this file, checks that every claim marked satisfied names",
|
|
"test classes that exist, and refuses a grade whose claims are not all satisfied."
|
|
],
|
|
"claims": {
|
|
"durable": {
|
|
"requires": "PostgreSQL migration, CRUD against the real schema, and survival of a restart",
|
|
"status": "satisfied",
|
|
"lane": ":adapter:outbound:persistence-jpa:jpaPlatformContractTest",
|
|
"evidence": [
|
|
"adapter/outbound/persistence-jpa/src/postgresqlIntegrationTest/java/dev/caskeleton/adapter/outbound/persistence/notification/RecipientClaimContractTest.java",
|
|
"adapter/outbound/persistence-jpa/src/postgresqlIntegrationTest/java/dev/caskeleton/adapter/outbound/persistence/notification/ProjectionFactDurabilityContractTest.java",
|
|
"adapter/outbound/persistence-jpa/src/postgresqlIntegrationTest/java/dev/caskeleton/adapter/outbound/persistence/notification/ServingStateContractTest.java"
|
|
]
|
|
},
|
|
"multi-worker-safe": {
|
|
"requires": "two workers racing the same claim against a real database, with lease fencing",
|
|
"status": "satisfied",
|
|
"lane": ":adapter:outbound:persistence-jpa:jpaPlatformContractTest",
|
|
"evidence": [
|
|
"adapter/outbound/persistence-jpa/src/postgresqlIntegrationTest/java/dev/caskeleton/adapter/outbound/persistence/notification/RecipientClaimContractTest.java",
|
|
"adapter/outbound/persistence-jpa/src/postgresqlIntegrationTest/java/dev/caskeleton/adapter/outbound/persistence/readiness/PostgreSqlRecipientLeaseFencingIntegrationTest.java"
|
|
]
|
|
},
|
|
"callback-supported": {
|
|
"requires": "signature verification, duplicate suppression, and an event that arrives before its attempt is stored",
|
|
"status": "satisfied",
|
|
"lane": ":adapter:outbound:persistence-jpa:jpaPlatformContractTest",
|
|
"evidence": [
|
|
"adapter/outbound/persistence-jpa/src/postgresqlIntegrationTest/java/dev/caskeleton/adapter/outbound/persistence/notification/LateEventBindingContractTest.java",
|
|
"application-core/src/test/java/dev/caskeleton/application/notification/platform/callback/CallbackIngestionAtomicityTest.java"
|
|
]
|
|
},
|
|
"recoverable": {
|
|
"requires": "a process-kill matrix covering each dispatch phase, proving no delivery is lost or duplicated",
|
|
"status": "satisfied",
|
|
"lane": ":adapter:outbound:persistence-jpa:jpaPlatformContractTest",
|
|
"evidence": [
|
|
"adapter/outbound/persistence-jpa/src/postgresqlIntegrationTest/java/dev/caskeleton/adapter/outbound/persistence/notification/WorkerCrashRecoveryContractTest.java"
|
|
]
|
|
},
|
|
"provider-wire-qualified": {
|
|
"requires": "a real provider sandbox call producing an immutable, uploaded evidence artifact with a correlation id",
|
|
"status": "unsatisfied",
|
|
"lane": null,
|
|
"evidence": [],
|
|
"gap": "The provider-sandbox job runs two echo statements behind continue-on-error. No request has ever left the process, so no provider protocol is qualified against its real endpoint."
|
|
}
|
|
},
|
|
"grades": {
|
|
"Stable": [
|
|
"durable",
|
|
"multi-worker-safe",
|
|
"callback-supported",
|
|
"recoverable",
|
|
"provider-wire-qualified"
|
|
],
|
|
"Contract implemented / runtime unqualified": [
|
|
"durable",
|
|
"multi-worker-safe",
|
|
"callback-supported"
|
|
],
|
|
"Optional stable": [
|
|
"durable"
|
|
],
|
|
"Extension": [],
|
|
"Experimental": []
|
|
},
|
|
"matrixDocument": "docs/notification/support-matrix.md"
|
|
}
|