| 01-federation-mesh-hardening |
19 |
lightning |
| lnd |
| invoices |
| route-hints |
| private-channels |
| wallet |
|
| phase |
provides |
| 01-federation-mesh-hardening |
The two existing LND invoice-creation call sites in core/archipelago/src/api/rpc/lnd/wallet.rs — the seller-side/peer-file flow and the wallet UI's Receive flow |
|
|
| build_invoice_request_body(): one place where an invoice body is minted, with `private: true` unconditional so LND embeds route hints for unannounced channels |
|
| wallet |
| lightning |
| paid-content |
|
| added |
patterns |
|
|
| Two call sites that must agree get one shared constructor plus one test on the constructor, rather than two near-identical literals and a hope. The duplicated json! literal is exactly how one site got fixed and the other didn't. |
|
|
| created |
modified |
|
|
| core/archipelago/src/api/rpc/lnd/wallet.rs |
|
|
| `private: true` is unconditional rather than conditional on 'does this node have only private channels'. It is harmless when public channels exist — LND still routes directly over a public channel when it can, and the hint is an unused alternate path — so the conditional would add a failure mode (mis-detecting channel state) to buy nothing. |
| Both call sites route through one constructor so a single test pins the field for both, and neither can silently drift back to `false`. |
|
|
| id |
description |
requirement |
verification |
human_judgment |
| D1 |
An invoice minted by the wallet UI's Receive flow embeds route hints for private/unannounced channels |
FED-08 |
| kind |
ref |
status |
| unit |
core/archipelago/src/api/rpc/lnd/wallet.rs#invoice_request_body_always_sets_private_true |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D2 |
The seller-side/peer-file invoice path embeds them too — the twin site does not drift |
FED-08 |
| kind |
ref |
status |
| other |
Both call sites (wallet.rs:330 and wallet.rs:554) call build_invoice_request_body; the json! literal exists in exactly one place |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D3 |
A payment actually arrives over a private channel on an affected node |
FED-08 |
| kind |
ref |
status |
| manual_procedural |
Post-OTA checkpoint on the affected node (archy-x250-mad2) — NOT RUN; the plan forbids deploying directly to a user device, so this is verified after the release lands |
deferred |
|
|
true |
|
|
20min |
2026-08-02 |
complete-pending-post-ota-checkpoint |