{ "$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" }