Gaps
What these fixtures show nullroute does not do, or does differently. None of these is hidden by a test: each is asserted as it is.
- Caravan and Electrum wallet files are refused. They carry extended keys and a policy but no descriptor, and this module reads descriptors and the Coldcard format only. Sparrow reads both.
- Specter DIY's
addwallettext and aReceive:-labelled descriptor are refused. Both wrap a descriptor this device would read on its own. - The first address in a BSMS file is compared, and was not until 27
October 2026. It used to be surfaced as an unverified claim with the
comparison left to the user, and nullroute read
multisig-9.bsmsandmultisig-address-mismatch.bsms, which Sparrow refuses for the mismatch. Both are refused now (INV-COORD-7), and so ismultisig-5.bsms, whose address is /0/0's beside restrictions that start at /2/*. - A BSMS file without a first address is read (
multisig-14.bsms,multisig-7.bsms), though BIP-129 says the line must be there. With nothing to compare, this device's own first address is what the signers confirm with each other. - BSMS restrictions other than /0/,/1/ are expanded as given and the second is labelled change, which BIP-129 does not say. Fixed descriptors on other chains are read as one fixed address. Sparrow refuses all of these.
- A descriptor is read as written. The 2020 Specter exports have no
wildcard and the multisig one uses
multi(). Sparrow reads them as an account with receive and change branches and assortedmulti(); nullroute and Core read one fixed address and the keys in the order given. The two programs derive different addresses fromspecter-multisig-wallet.json. Current Specter Desktop writes its receive descriptor, with/0/*and a checksum (Wallet.account_mapat cryptoadvance/specter-desktop5d3d5b91e614991c2dedb87c0e0e608e2c6382ae), so a current export has a wildcard to read. - Keystone's zpub and uppercase fingerprint are kept as written. The checksum is recomputed over that text, so it differs from the checksum of the same descriptor written with an xpub and a lowercase fingerprint.
- No file here comes from Nunchuk or from Sparrow's current descriptor
export. Nunchuk exports BSMS, which is covered as a format but not by a
file Nunchuk wrote. Sparrow's current descriptor export puts
#headings above its descriptors; that layout was misread as a Coldcard file, and is tested indescriptor.coordinator.test.tswith a file reconstructed from Sparrow's exporter source at the pinned commit, not captured.
Rendered from spec/interop/README.md, the same bytes that ship with the code. SHA-256 b13c292915c8fb50b9d62c7c64e284864faa181ac8982a113e8f90bbd41e7b56