PR H: architecture note amendments (§5.1 trust / §9.2 settlement / §4.1 unwind) #12
Reference in New Issue
Block a user
Delete Branch "devin/1776876637-arch-note-amendments"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Docs-only. Captures the three normative amendments to the architecture note identified during the CurrenciCombo gap-analysis. Where this document conflicts with the original Draft 1.0 note, this document takes precedence.
Amendments
§5.1 Transaction Coordinator — trust model
Names the operator Workflow Authority; requires SoD between the Coordinator operator, the Identity and Authorization Service (§5.8), and the Ledger Anchor (§5.7); requires signed state transitions verifiable by all participants. CurrenciCombo reference topology: single-party hosted (issuing bank runs the Coordinator). Federated and neutral-utility topologies remain possible without changing the API surface.
§9.2 Commit rule — accepted ≠ settled
Replaces the loose “accepted completion evidence” clause with an explicit whitelist of settlement-grade messages:
pacs.002statusACSCcamt.025statusACSCcamt.054credit notification matching expectedEndToEndId+ amount + currencyMT910(credit) /MT900(debit) with matching ref + amountACCP/ACSP/PDNGdo not satisfy COMMIT. Transactions sit inVALIDATINGuntil settlement evidence arrives or the settlement-deadline timer expires →ABORTED. Directly wires to PR E's camt parsers and PR B's exception taxonomy.§4.1 Instrument irrevocability matrix
Acknowledges that an MT760/SBLC is irrevocable under UCP 600 / URDG 758 once the beneficiary's bank has acknowledged it.
UNWIND_PENDINGis a Coordinator state, not a guarantee that the underlying banking artefact reverses. Two matrices (instrument-leg, payment-leg) map the observable state atABORTEDto the available unwind action (withdraw / recall / counter-guarantee / return payment). Refines thereasonpayload on theABORTED → UNWIND_PENDINGtransition; no state-table change.Implementation impact (summary)
Each amendment cites concrete follow-up tickets; all are extensions on top of the landed PRs A–G, none regress:
WORKFLOW_AUTHORITY_NAME+ JWK URL in orchestrator env (§5.1).executionCoordinator.validatePlan()to PR E's camt parsers for ACCP/ACSP/ACSC/CRDT discrimination (§9.2).Timing.settlementDeadlineExpiredto the Exception taxonomy (§9.2).ABORTED → UNWIND_PENDINGreasonfield (§4.1).Series order
A → B → C → D → E → F → G → H (docs).
Base:
main. This PR is independent of the A–G stack and can be merged in any order.Three normative amendments identified during the gap-analysis and now captured as a standalone doc. Each amendment cites the implementation impact on PRs A-G and lists follow-up tickets that extend (not regress) the already-landed code. \u00a75.1 Transaction Coordinator trust model: - names the operator the Workflow Authority - requires SoD between Coordinator operator, Identity service, and Ledger Anchor - requires signed state transitions verifiable by participants - CurrenciCombo ref topology: issuing bank runs it (single-party hosted); federated and neutral-utility topologies are future work and can swap in without changing the API. \u00a79.2 Commit rule (accepted != settled): - enumerates the exact SWIFT/ISO-20022 messages that count as settlement: pacs.002 ACSC, camt.025 ACSC, camt.054 CRDT, MT910/MT900 - ACCP/ACSP/PDNG do NOT satisfy COMMIT; stay in VALIDATING until settlement evidence or timer expiry -> ABORTED - wires explicitly to PR E's camt parsers + PR B's exception taxonomy. \u00a74.1 Instrument irrevocability matrix: - UNWIND_PENDING is a Coordinator state, not a guarantee the underlying banking artefacts reverse - separate instrument-leg and payment-leg matrices based on observable progress (dispatched / acknowledged / accepted / settled) - irrevocable once instrument.acknowledged; only remaining control plane actions are accelerated expiry, counter-guarantee, or legal discharge - refines the reason payload on ABORTED -> UNWIND_PENDING; no transition-table change. Lands docs-only; no code change. Implementation follow-ups enumerated in "Summary of downstream tickets".