Parent: #139
Depends on: #140
Problem
Advanced custom-anchor flows need a durable boundary between commit, external signing, optional external broadcast, publish/log, and proof handling. Callers may commit a transfer, hand the anchor transaction to an external signer or broadcaster, restart, and later need to publish/log or recover proof metadata from the committed state.
The ADR defines this boundary as a persistable committed transfer package. This package should make the post-commit lifecycle explicit instead of relying on in-memory builder state.
Scope
- Define SDK-owned DTOs for a committed custom-anchor transfer package.
- Include committed anchor PSBT bytes, active virtual PSBT bytes, passive virtual PSBT bytes, change output index, locked UTXO metadata, input summaries, output summaries, proof update metadata, and publish/log metadata required for retry.
- Define which fields callers must persist before external signing or external broadcast.
- Define immutable plan/package lifecycle semantics: build returns an immutable plan, commit consumes a plan and returns a committed package, publish/log consumes a committed package plus final anchor PSBT bytes.
- Support retrying publish/log from the package after process restart when the backend operation is idempotent or exposes a duplicate-safe result.
- Ensure the package does not expose taprpc, taproot-assets, btcd PSBT structs, or other implementation types in public signatures.
Acceptance criteria
- The advanced builder returns a committed transfer package after commit.
- The package can be serialized or converted into host-owned storage DTOs without implementation types.
- Publish/log can be driven from a persisted package plus final anchor PSBT bytes.
- Pre-publish validation checks the final anchor PSBT against the committed package before calling the backend.
- Tests cover restart-style reconstruction from the committed package and retry behavior for publish/log failures where practical.
Parent: #139
Depends on: #140
Problem
Advanced custom-anchor flows need a durable boundary between commit, external signing, optional external broadcast, publish/log, and proof handling. Callers may commit a transfer, hand the anchor transaction to an external signer or broadcaster, restart, and later need to publish/log or recover proof metadata from the committed state.
The ADR defines this boundary as a persistable committed transfer package. This package should make the post-commit lifecycle explicit instead of relying on in-memory builder state.
Scope
Acceptance criteria