Repository navigation
P1: Distinguish post-commit audit delivery failure from save rollback - #226
philipgreat merged 4 commits into
Conversation
|
Exact combined-head validation at 9389407 is now green: CI-only draft #227 passed Build and Test, examples, PostgreSQL/MySQL, SQL Server, and Business ID SQL Server (5/5). The feature-targeted #226 Example Gate also passed. Locally, the full teaql-runtime and teaql-sqlite reactor tests passed, with 37 Surefire XML reports and no failed/error suites. This is candidate evidence only; the fix still needs review into #216, then fresh #216 exact-head and post-merge main checks. |
|
Additional exact-head fault-injection review at 9389407: in GraphTraceSqliteTest, make the target GraphEntity throw from __internalSet("version") only during post-transaction reconciliation, then save a new CustomerOrder with SqliteCommittedMutationRecorder. The focused Maven test ran twice. In both runs the SQLite business row and one durable Outbox event were already present, but save propagated the ordinary "diagnostic reconciliation failure" exception instead of an explicit already-committed outcome. This is a controlled callback fault, not a claim that normal generated entities throw. The remaining gap is the dynamicReadbacks/completeLedgerPlan interval between transaction return and clearCurrentChangeSet; audit delivery is not the only post-commit failure point. Please consider a separate committed-but-reconciliation-failed result with reload-required semantics, and a regression test that proves the ledger cannot blindly replay. I have not changed this draft PR; the local diagnostic is uncommitted and the API decision on audit failure remains open. |
|
Follow-up candidate for the remaining post-commit entity-reconciliation interval is draft #228, stacked on this branch. Local RED-to-GREEN fault injection covers committed SQLite row + Outbox, explicit reload-required outcome, same-graph root/child retry denial, and independent graph save. The affected Maven reactor exits zero. This does not change the unresolved audit delivery API choice or approve #216. |
Fix proposal for #225, based on the exact committed-mutation PR #216 head 54d0f11. The source transaction and Outbox remain authoritative. After commit, reconcile all persisted graph members and clear the mutation ledger before audit callbacks; attempt every graph member and both audit sinks, then return a sanitized AUDIT_DELIVERY_AFTER_COMMIT error with failure count if any delivery fails. A repeated save of the same entity does not replay the mutation. Rust PR #255 already has this committed-outcome error contract. Local GraphTraceSqliteTest (33) and SqliteIntegrationTest (24) pass; full remote CI is separate. This is a draft against the feature branch, not a merge or approval of #216.