Home / Cardano Foundation / cardano-wallet
May 12, 9-10 PM (0)
May 12, 10-11 PM (0)
May 12, 11-12 AM (0)
May 13, 12-1 AM (0)
May 13, 1-2 AM (0)
May 13, 2-3 AM (0)
May 13, 3-4 AM (0)
May 13, 4-5 AM (0)
May 13, 5-6 AM (0)
May 13, 6-7 AM (0)
May 13, 7-8 AM (1)
May 13, 8-9 AM (1)
May 13, 9-10 AM (0)
May 13, 10-11 AM (1)
May 13, 11-12 PM (0)
May 13, 12-1 PM (0)
May 13, 1-2 PM (0)
May 13, 2-3 PM (0)
May 13, 3-4 PM (0)
May 13, 4-5 PM (0)
May 13, 5-6 PM (0)
May 13, 6-7 PM (0)
May 13, 7-8 PM (0)
May 13, 8-9 PM (0)
May 13, 9-10 PM (0)
May 13, 10-11 PM (0)
May 13, 11-12 AM (0)
May 14, 12-1 AM (0)
May 14, 1-2 AM (0)
May 14, 2-3 AM (0)
May 14, 3-4 AM (0)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (0)
May 14, 8-9 AM (0)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (0)
May 14, 3-4 PM (0)
May 14, 4-5 PM (0)
May 14, 5-6 PM (0)
May 14, 6-7 PM (0)
May 14, 7-8 PM (0)
May 14, 8-9 PM (0)
May 14, 9-10 PM (0)
May 14, 10-11 PM (0)
May 14, 11-12 AM (0)
May 15, 12-1 AM (0)
May 15, 1-2 AM (0)
May 15, 2-3 AM (0)
May 15, 3-4 AM (0)
May 15, 4-5 AM (0)
May 15, 5-6 AM (0)
May 15, 6-7 AM (0)
May 15, 7-8 AM (0)
May 15, 8-9 AM (0)
May 15, 9-10 AM (0)
May 15, 10-11 AM (0)
May 15, 11-12 PM (0)
May 15, 12-1 PM (0)
May 15, 1-2 PM (0)
May 15, 2-3 PM (0)
May 15, 3-4 PM (0)
May 15, 4-5 PM (0)
May 15, 5-6 PM (0)
May 15, 6-7 PM (0)
May 15, 7-8 PM (0)
May 15, 8-9 PM (0)
May 15, 9-10 PM (0)
May 15, 10-11 PM (0)
May 15, 11-12 AM (0)
May 16, 12-1 AM (0)
May 16, 1-2 AM (0)
May 16, 2-3 AM (0)
May 16, 3-4 AM (0)
May 16, 4-5 AM (0)
May 16, 5-6 AM (0)
May 16, 6-7 AM (0)
May 16, 7-8 AM (0)
May 16, 8-9 AM (0)
May 16, 9-10 AM (0)
May 16, 10-11 AM (0)
May 16, 11-12 PM (0)
May 16, 12-1 PM (0)
May 16, 1-2 PM (0)
May 16, 2-3 PM (0)
May 16, 3-4 PM (0)
May 16, 4-5 PM (0)
May 16, 5-6 PM (0)
May 16, 6-7 PM (0)
May 16, 7-8 PM (0)
May 16, 8-9 PM (0)
May 16, 9-10 PM (0)
May 16, 10-11 PM (0)
May 16, 11-12 AM (0)
May 17, 12-1 AM (0)
May 17, 1-2 AM (0)
May 17, 2-3 AM (0)
May 17, 3-4 AM (0)
May 17, 4-5 AM (0)
May 17, 5-6 AM (0)
May 17, 6-7 AM (0)
May 17, 7-8 AM (0)
May 17, 8-9 AM (0)
May 17, 9-10 AM (0)
May 17, 10-11 AM (0)
May 17, 11-12 PM (0)
May 17, 12-1 PM (0)
May 17, 1-2 PM (0)
May 17, 2-3 PM (0)
May 17, 3-4 PM (0)
May 17, 4-5 PM (0)
May 17, 5-6 PM (0)
May 17, 6-7 PM (0)
May 17, 7-8 PM (0)
May 17, 8-9 PM (0)
May 17, 9-10 PM (0)
May 17, 10-11 PM (0)
May 17, 11-12 AM (0)
May 18, 12-1 AM (0)
May 18, 1-2 AM (0)
May 18, 2-3 AM (0)
May 18, 3-4 AM (0)
May 18, 4-5 AM (0)
May 18, 5-6 AM (0)
May 18, 6-7 AM (0)
May 18, 7-8 AM (0)
May 18, 8-9 AM (1)
May 18, 9-10 AM (0)
May 18, 10-11 AM (6)
May 18, 11-12 PM (1)
May 18, 12-1 PM (2)
May 18, 1-2 PM (0)
May 18, 2-3 PM (0)
May 18, 3-4 PM (2)
May 18, 4-5 PM (0)
May 18, 5-6 PM (0)
May 18, 6-7 PM (0)
May 18, 7-8 PM (0)
May 18, 8-9 PM (0)
May 18, 9-10 PM (0)
May 18, 10-11 PM (0)
May 18, 11-12 AM (0)
May 19, 12-1 AM (0)
May 19, 1-2 AM (0)
May 19, 2-3 AM (0)
May 19, 3-4 AM (0)
May 19, 4-5 AM (0)
May 19, 5-6 AM (0)
May 19, 6-7 AM (0)
May 19, 7-8 AM (1)
May 19, 8-9 AM (0)
May 19, 9-10 AM (1)
May 19, 10-11 AM (4)
May 19, 11-12 PM (0)
May 19, 12-1 PM (2)
May 19, 1-2 PM (0)
May 19, 2-3 PM (0)
May 19, 3-4 PM (0)
May 19, 4-5 PM (0)
May 19, 5-6 PM (0)
May 19, 6-7 PM (0)
May 19, 7-8 PM (0)
May 19, 8-9 PM (0)
May 19, 9-10 PM (0)
23 commits this week May 12, 2026 - May 19, 2026
fix(5285): clean full-unit import warning
`TransactionLedgerSpec.buildLegacyParityTx` no longer references
`toCardanoLovelace` or `toCardanoStakeCredential` after the unsigned
builder migration moved its withdrawal and fee inputs onto ledger
types. Drop the two unused imports so the full-unit GitHub Actions
build (which sets `-Werror=unused-imports`) is green.

Tasks: T010, T011, T012, T013
feat(5285): migrate unsigned Shelley tx builder
Move the unsigned Shelley transaction body builder onto ledger types so
`mkUnsignedTx` no longer routes through `Cardano.createTransactionBody`
or `Cardano.TxBodyContent`.

The shared ledger builder now lives in a new acyclic sibling module
`Cardano.Wallet.Shelley.Transaction.Unsigned`. Both
`Cardano.Wallet.Shelley.Transaction` and
`Cardano.Wallet.Shelley.Transaction.Ledger` import it without
re-introducing the legacy cycle that `Transaction.Ledger -> Transaction`
required for `signTransaction`/`txConstraints`. `mkUnsignedTx` takes
ledger `[TxCert era]` and `Withdrawal` directly, constructs the body
with `buildLedgerTxRaw`/`mkLedgerTx`, and extracts the `Cardano.TxBody`
shape from the ledger tx so existing signing call sites keep their API
surface untouched (signing rewrite remains scoped to #5289).

`Cardano.Wallet.Transaction.Delegation` and
`Cardano.Wallet.Transaction.Voting` are deleted; their last call sites
use the ledger-native helpers
`certificateFromDelegationActionLedger` /
`certificateFromVotingActionLedger` exported by
`Transaction.Unsigned`, and the cabal `exposed-modules` block is
updated accordingly. Dijkstra remains unsupported exactly as today, and
no files under `lib/integration/**` are touched.

Tasks: T010, T011, T012, T013
feat(5288): script-witness support in Transaction.Ledger (#5291)
## Resolves

- #5288 — script-witness support in `Transaction.Ledger`.
- Parent: #5243 (transaction-layer cardano-api removal).
- Blocks: #5285.

## Status

Ready for review.

Implementation commit: `3cb6e7ae9bd954a47a23bcadd4f40cb11e0fa541`.
Finalization commit: `309f58bb9ff589135cd85a558e937d96c07965d5`.
CI warning fix: `8c717bf2a8a6139381533fa0772516c6934a5d2d`.

## Delivered Scope

`Cardano.Wallet.Shelley.Transaction.Ledger` now accepts the
script-witness surface currently consumed by legacy `mkUnsignedTx`:

- `swNativeInputs :: Map TxIn (Script KeyHash)` — native spending
witnesses.
- `swStakingScript :: Maybe (Script KeyHash)` — staking-credential
script for withdrawals and certificates.
- `swMintingSources :: Map AssetId ScriptSource` — local mint scripts
and reference-input mint policies.
- `swReferenceScript :: Maybe (Script KeyHash)` — output-attached
reference script.

The default `noScriptWitnesses` preserves the existing production call
sites in `mkTransaction` and `constructUnsignedTxLedger`. `mkUnsignedTx`
and `mkUnsignedTransaction` are intentionally unchanged; their migration
remains #5285.

The new builder mirrors the legacy body/witness shape, including
reference-input minting and the legacy one-witness-per-token-policy
merge for local mint scripts.

## Tests

Added `Cardano.Wallet.Shelley.TransactionLedgerSpec` coverage for:

- six enumerated Conway parity scenarios: native input script, staking
script, local mint, reference-input mint, output reference script, and
mixed witnesses,
- `prop_buildLedgerTx_matches_mkUnsignedTx_on_script_witnesses` with 100
QuickCheck cases,
- body-CBOR equality and `witsTxL . scriptTxWitsL` equality between
legacy and ledger-native builders.

## Local Verification

Fresh local gate at implementation HEAD
`3cb6e7ae9bd954a47a23bcadd4f40cb11e0fa541` before the final `gate.sh`
removal commit:

```text
./gate.sh
Cardano.Wallet.Shelley.TransactionLedger: 27 examples, 0 failures
prop_buildLedgerTx_matches_mkUnsignedTx_on_script_witnesses: OK, passed 100 tests
HLint: No hints
exit 0
```

The exact earlier failing property seed was also rerun before the full
gate:

```text
--seed 1404754578
1 example, 0 failures
OK, passed 100 tests
```

CI-warning repair at `8c717bf2a8a6139381533fa0772516c6934a5d2d` was
verified locally with the same Nix surfaces as the failed GitHub job:

```text
git diff --check
exit 0

nix build --quiet .#unit-cardano-wallet-unit
exit 0

nix build --quiet .#cardano-wallet .#cardano-node .#cardano-cli .#local-cluster .#integration-exe .#test-local-cluster-exe .#unit-cardano-wallet-unit .#unit-cardano-numeric .#unit-cardano-wallet-primitive .#unit-cardano-wallet-secrets .#unit-cardano-wallet-test-utils .#unit-cardano-wallet-launcher .#unit-cardano-wallet-network-layer .#unit-cardano-wallet-application-tls .#unit-cardano-wallet-blackbox-benchmarks .#unit-delta-chain .#unit-delta-store .#unit-delta-table .#unit-delta-types .#unit-std-gen-seed .#unit-wai-middleware-logging .#unit-benchmark-history .#wallet-key-export .#wallet-key-export-test
exit 0
```

Finalization audit at `309f58bb9ff589135cd85a558e937d96c07965d5`:

```text
OK: every commit passes the message gate; tasks.md is complete.
git show --check HEAD: clean
```

No files under `lib/integration/**` are touched by this branch.

## Non-goals

- No migration of `mkUnsignedTransaction` itself (#5285).
- No new Dijkstra-era behaviour (#5209).
- No changes under `lib/integration/**`.
- No removal of the `cardano-api` build-dep (#5290).
- No changes to transaction signing (#5289).

## Live-boundary Check

The live-boundary diagnostic returns "none" for this slice: the parity
proof compares CBOR bytes of two pure builders over hand-rolled
selections; no node/database/API boundary is in the picture (see
`plan.md` "Live-boundary check").
docs(5288): externalise subagent brief, make property mandatory
- Move the subagent brief out of tasks.md into
  specs/008-script-witness-parity/briefs/T010-T013.md so the
  task list stays scannable. tasks.md now points at the brief
  rather than embedding it.
- Add T013 (US3): one QuickCheck property
  prop_buildLedgerTx_matches_mkUnsignedTx_on_script_witnesses
  over random (SelectionOf TxOut, ScriptWitnesses) pairs within
  documented generator bounds. The property is acceptance-gating;
  withMaxSuccess 100; same equality assertions as the six
  enumerated cases.
- Revise research.md D6 (property was "optional"; now mandatory)
  and plan.md "Tests" (was "optional/deferred"; now mandatory)
  so all artifacts agree.
docs(5288): spec script-witness parity for Transaction.Ledger
Document the parity contract between the legacy `mkUnsignedTx`
(cardano-api builder) and the extended `Transaction.Ledger`
builder for native-script inputs, staking script, mint/burn
script sources, and output reference scripts. Byte-equivalence
on six representative scenarios is the acceptance criterion;
non-script behaviour and `ledgerMintPlumbingSpec` invariants
from #5287 remain green. `mkUnsignedTransaction` itself is
explicitly out of scope (tracked by #5285), as are signing
(#5289), Dijkstra-era extensions (#5209), and cardano-api
dependency removal (#5290).
Route signed tx through ledger constructor (#5285) (#5286)
Stacked follow-up for issue #5285, based on
[#5287](https://github.com/cardano-foundation/cardano-wallet/pull/5287)
/ branch `007-ledger-minting`.

## What changed

This PR now contains one narrow API-removal source slice:

- `Cardano.Wallet.buildAndSignTransaction` uses
`Cardano.Wallet.Shelley.Transaction.Ledger.mkTransaction`.
- The obsolete `Cardano.Wallet.Shelley.Transaction.mkTransaction`
cardano-api wrapper was removed.
- The ledger constructor was renamed from `mkTransactionLedger` to
`mkTransaction` now that it owns the production signed path.
- The #5285 and #5287 spec artifacts were aligned with the real state:
mint plumbing is present; script-witness parity remains the blocker for
the unsigned body-builder migration and cert-helper deletion.

## Still out of scope

- `mkUnsignedTransaction` still uses the cardano-api body builder.
- `Transaction/Voting.hs` and `Transaction/Delegation.hs` are not
deleted yet, because their remaining caller still needs the full
unsigned body-builder migration first.
- Script-witness support remains the next blocker.

## Local verification

- `rg -n "mkTransactionLedger" . -S` -> no matches
- `rg -n "\\bmkTransaction\\b"
lib/wallet/src/Cardano/Wallet/Shelley/Transaction.hs -S` -> no matches
- `fourmolu --mode check lib/wallet/src/Cardano/Wallet.hs
lib/wallet/src/Cardano/Wallet/Shelley/Transaction.hs
lib/wallet/src/Cardano/Wallet/Shelley/Transaction/Ledger.hs` -> pass
- `hlint lib/wallet/src/Cardano/Wallet.hs
lib/wallet/src/Cardano/Wallet/Shelley/Transaction.hs
lib/wallet/src/Cardano/Wallet/Shelley/Transaction/Ledger.hs` -> `No
hints`
- `git diff --check` -> pass
- `nix build
.#legacyPackages.x86_64-linux.hsPkgs.cardano-wallet.components.library
--no-link` -> exit 0

Refs: #5285, #5243, #5237, #5287.
Plumb mint values through ledger tx builders (#5243) (#5287)
## Summary

Implements the smallest first slice toward unblocking
[#5285](https://github.com/cardano-foundation/cardano-wallet/issues/5285)
Story 1: the ledger-native transaction builders no longer silently drop
minting.

This PR now includes both the spec artifacts and implementation for
[#5243](https://github.com/cardano-foundation/cardano-wallet/issues/5243):

- adds `toLedgerMintValue :: TokenMap -> TokenMap -> MultiAsset`,
netting wallet mint/burn maps into signed ledger quantities and dropping
zero entries and empty policy buckets
- threads explicit `MultiAsset` mint values through `buildLedgerTx` and
`buildLedgerTxRaw`
- extracts `txAssetsToMint` / `txAssetsToBurn` from `TransactionCtx` for
`mkTransactionLedger`
- extends `constructUnsignedTxLedger` to accept mint/burn maps and
updates the `Cardano.Wallet` call sites
- keeps script-witness support out of scope; that remains the documented
next blocker before non-empty mint transactions can validate on-chain

Follows PR
[#5286](https://github.com/cardano-foundation/cardano-wallet/pull/5286),
which documented why #5285 Story 2 has to land before Story 1.

## Artifacts

- `specs/007-ledger-minting/spec.md` — user stories, requirements,
success criteria, out-of-scope
- `specs/007-ledger-minting/plan.md` — design decisions and
implementation plan
- `specs/007-ledger-minting/research.md` — existing builder/converter
findings
- `specs/007-ledger-minting/data-model.md` — mint/burn netting rules and
invariants
- `specs/007-ledger-minting/contracts/ledger-mint-translation.md` —
converter and builder contracts
- `specs/007-ledger-minting/tasks.md` — planned task breakdown
- `specs/007-ledger-minting/quickstart.md` — reviewer commands

## Verification

- [x] `cabal test cardano-wallet-primitive:test -O0 -v0
--test-show-details=streaming --test-options='--match
toLedgerMintValue'` — 8 examples, 0 failures; each property passed 1000
tests
- [x] `cabal test cardano-wallet-unit:unit -O0 -v0
--test-show-details=streaming --test-options='--match explicit'` — 3
examples, 0 failures
- [x] `fourmolu --mode check` on touched Haskell files
- [x] `git diff --check`
- [x] `rg 'mempty -- TODO: minting support' lib/wallet/src` returns zero
matches
- [x] `rg '^toLedgerMintValue' lib/primitive` returns matches in
`Convert.hs`
- [x] FR-008 guard: `git diff origin/master --
lib/wallet/src/Cardano/Wallet/Shelley/Transaction/Ledger.hs | rg -i
'ScriptSource'` returns zero matches

## Out of Scope

- Script witnesses for mint scripts
- The `mkUnsignedTransaction` migration itself, tracked under #5285
- Dijkstra-era support in `mkLedgerTx`, unchanged from the existing
Conway-only behaviour
docs(5285): correct Story 1 scope — Wallet.hs is already migrated
Pre-flight grep on the implementation pass showed lib/wallet/src/Cardano/
Wallet.hs already imports certificateFrom{Delegation,Voting}ActionLedger
from Cardano.Wallet.Shelley.Transaction.Ledger and its 4 callsites at
2729, 2738, 3533, 3542 already use the *Ledger variants. The Phase-0
research had it wrong; plan.md, quickstart.md, and tasks.md inherited
the error. Spec.md was correct (line 18 already named the single
caller).

Slice scope shrinks from 'edit two files + delete two + cabal prune' to
'edit Shelley/Transaction.hs + delete two + cabal prune'. SC-001/SC-002,
FR-003, and the byte-equivalence proof are unaffected.
docs(5285): defer Story 1 — blocked transitively on Story 2
Implementation pre-flight on dce6abbbf1 showed that swapping the cert
callsites in Shelley/Transaction.hs to the *Ledger variants does not
compile: mkUnsignedTransaction passes the cert lists into
constructUnsignedTx (the cardano-api body builder) at line ~834, which
expects [ApiCert.Certificate (CardanoApiEra era)]. The *Ledger builders
return [Ledger.TxCert era]. The two are not interchangeable at this
callsite.

Cardano/Wallet.hs works on *Ledger because it routes through
constructUnsignedTxLedger — a different code path. The original Phase-0
inventory missed which body builder consumed the certs in
Shelley/Transaction.hs.

Net: Story 1 is blocked transitively on Story 2 (the body-construction
migration to constructUnsignedTxLedger), which is itself blocked on the
minting + script-witness AC in #5243. When Story 2 lands, the helper
deletion + cabal prune fold into Story 2's commit; there is no
standalone Story 1 PR. PR #5286 becomes documentation-only.

Files updated:
- spec.md: Story 1 marked BLOCKED on Story 2; assumption section corrected.
- plan.md: Status block reflects all three stories deferred; Vertical
  Slice Contract rewritten so Story 1 folds into Story 2.
- research.md: new §G "Cert flow in Shelley/Transaction.hs — what
  blocks Story 1" with the GHC error and the call-graph analysis.
- data-model.md: Story 1 row corrected to note it is not downstream-
  compatible at the Shelley/Transaction.hs callsites today.
- contracts/module-interface-invariants.md: helper-deletion invariants
  re-pegged to Story 2.
- quickstart.md: stub explaining the deferral and what to do when
  Story 2 unblocks.
- tasks.md: no work tasks; the prior T001-T014 are removed in favour of
  a deferral notice.

Refs: #5285, #5243, #5237
docs(5285): plan, research, data-model, contracts, quickstart
Phase 0 + Phase 1 speckit artifacts for issue #5285.

- plan.md (109 lines): three vertical slices, constitution check clean,
  Story 1 unblocked, Stories 2-3 blocked on Transaction.Ledger
  prerequisite ACs in #5243.
- research.md: full cardano-api symbol inventory in
  Shelley/Transaction.hs (~40 symbols across 4 imports), per-Story
  grouping, ledger replacements located.
- data-model.md: cardano-api -> ledger type map per Story.
- contracts/module-interface-invariants.md: exports that MUST stay
  signature-stable across all three slices.
- quickstart.md: ordered implementation walkthrough for Story 1
  (the unblocked slice; 5 callsites in Shelley/Transaction.hs,
  4 in Cardano/Wallet.hs, plus cabal prune and helper deletion).
feat(5243): plumb ledger minting through tx builders
Add toLedgerMintValue for wallet mint/burn TokenMaps and feed the signed ledger MultiAsset through mkTransactionLedger, constructUnsignedTxLedger, buildLedgerTx, and buildLedgerTxRaw.

The converter properties cover totality, empty input, mint-only, burn-only, netting, phantom-key absence, empty-bucket absence, and disjoint roundtrip. The builder specs cover buildLedgerTx and both buildLedgerTxRaw input branches.

Verification:

cabal test cardano-wallet-primitive:test -O0 -v0 --test-show-details=streaming --test-options='--match toLedgerMintValue'

cabal test cardano-wallet-unit:unit -O0 -v0 --test-show-details=streaming --test-options='--match explicit'

hlint lib

fourmolu --mode check touched Haskell files

git diff --check
feat(5243): plumb ledger minting through tx builders
Add toLedgerMintValue for wallet mint/burn TokenMaps and feed the signed ledger MultiAsset through mkTransactionLedger, constructUnsignedTxLedger, buildLedgerTx, and buildLedgerTxRaw.

The converter properties cover totality, empty input, mint-only, burn-only, netting, phantom-key absence, empty-bucket absence, and disjoint roundtrip. The builder specs cover buildLedgerTx and both buildLedgerTxRaw input branches.

Verification:

cabal test cardano-wallet-primitive:test -O0 -v0 --test-show-details=streaming --test-options='--match toLedgerMintValue'

cabal test cardano-wallet-unit:unit -O0 -v0 --test-show-details=streaming --test-options='--match explicit'

fourmolu --mode check touched Haskell files

git diff --check
docs(5285): defer Story 1 — blocked transitively on Story 2
Implementation pre-flight on dce6abbbf1 showed that swapping the cert
callsites in Shelley/Transaction.hs to the *Ledger variants does not
compile: mkUnsignedTransaction passes the cert lists into
constructUnsignedTx (the cardano-api body builder) at line ~834, which
expects [ApiCert.Certificate (CardanoApiEra era)]. The *Ledger builders
return [Ledger.TxCert era]. The two are not interchangeable at this
callsite.

Cardano/Wallet.hs works on *Ledger because it routes through
constructUnsignedTxLedger — a different code path. The original Phase-0
inventory missed which body builder consumed the certs in
Shelley/Transaction.hs.

Net: Story 1 is blocked transitively on Story 2 (the body-construction
migration to constructUnsignedTxLedger), which is itself blocked on the
minting + script-witness AC in #5243. When Story 2 lands, the helper
deletion + cabal prune fold into Story 2's commit; there is no
standalone Story 1 PR. PR #5286 becomes documentation-only.

Files updated:
- spec.md: Story 1 marked BLOCKED on Story 2; assumption section corrected.
- plan.md: Status block reflects all three stories deferred; Vertical
  Slice Contract rewritten so Story 1 folds into Story 2.
- research.md: new §G "Cert flow in Shelley/Transaction.hs — what
  blocks Story 1" with the GHC error and the call-graph analysis.
- data-model.md: Story 1 row corrected to note it is not downstream-
  compatible at the Shelley/Transaction.hs callsites today.
- contracts/module-interface-invariants.md: helper-deletion invariants
  re-pegged to Story 2.
- quickstart.md: stub explaining the deferral and what to do when
  Story 2 unblocks.
- tasks.md: no work tasks; the prior T001-T014 are removed in favour of
  a deferral notice.

Refs: #5285, #5243, #5237