Rusty Russell (632): Makefile: update so we know next version is v25.12 GitHub: Update pull request template with next release dates. tools: insist on lowdown for zipfile. tools: fix indentation. tools/build-release.sh: always append version to SHA256SUMS file. build-release.sh: do make -j inside docker image. tools/build-release.sh: don't assume you need sudo to run docker. doc: make sure v prefix is always on the version. doc: remove recommendation to wait a week for point release. doc: rc1 build-release instructions. doc: Ensure that you can build release *before* pushing tags. build: suppress amount checking in fuzzing tests. build: fix build with no sqlite3 support. pyln-testing: catch special CI string so we can have non-BROKEN CI warnings. pytest: fix flake in tests/test_bookkeeper.py::test_bookkeeping_missed_chans_leases pytest: fix flake in reckless install timeout. pytest: fix flake in test_coinmoves_unilateral_htlc_fulfill / test_coinmoves_unilateral_htlc_timeout pytest: clean up JSON sql test. pytest: fix test_xpay_fake_channeld flake pytest: fix broken message in test_even_sendcustommsg. pytest: use rustcorp.com.au for BIP353 test. pytest: fix flake in test_splicing.py::test_route_by_old_scid libwally: upgrade to 1.5.1 ccan: update to get ccan/io shutdown fix. connectd: simplify logic, and add a "reconnected" message. connectd: fix race where last msg can still get lost. dualopend: handle ANNOUNCEMENT_SIGNATURES from peer. gossmap: routine gossmap_disable_mmap() to force read() calls. gossmap: disable mmap on any read error. gossmap: refresh map even if size hasn't changed. gossipd: remove gossmap_fetch_tail. common: remove unused push bit. gossip: add COMPLETED bit to mark records which are complete. pyln-client: update ancient gossmap in test_gossmap tests. devtools: create conversion tool for old gossip stores. unit tests: update all the gossmaps to have the GOSSIP_STORE_COMPLETED_BIT set. pyln-client: update the gossmaps in test data to have the GOSSIP_STORE_COMPLETED_BIT set. gossip_store: wait for completed bit on reading. gossmap: use gossmap_disable_mmap() on corruption. gossipd: save gossip store writes, try them again (and fsync) if we get a read issue. configure: remove now-unneeded HAVE_PWRITEV. BOLT12: Remove years from recurrence. BOLT12: Remove `start_any_period` from recurrence_base. BOLT12: Update recurrence to latest spec draft. offers: use param_check() for more thorough parameter validation. offers: allow quantity_max = 1 tools: I cannot spell recurrEnce. common: fix bolt12 quotes to bring them up-to-date. plugins/fetchinvoice: allow use of expired offers *for recurrence*. plugins/fetchinvoice: extract recurrence invreq_metadata routine. plugins/fetchinvoice: extract bip353 parsing to param helper. plugins/fetchinvoice: allow send_message() to say "don't expect a reply" plugins: `cancelrecurringinvoice` command. plugins/offers: handle invoice_request with invreq_recurrence_cancel wire: update to slight spec neating. offers: remove `blinding` from decode JSON-RPC. lightningd: remove blinding field from onion_message_recv hook. lightningd: remove --experimental-quiesce and --experimental-offers doc: pretty! bookkeeper: test (failing!) for rebalances on restart. bookkeeper: fix reloading of rebalances. wallet: don't show htlcs from closed channels in listhtlcs. wallet: don't delete old htlcs when we forget a channel, do it on startup. pytest: test that we don't delete htlcs as soon as channel closed, wait for restart. wallet: don't insert duplicate chain_moves entries after accounts.db migration. wallet: unit test for duplicate detection in wallet_save_chain_mvt. wallet: find and remove any duplicates from the bug we just fixed. wallet: unit test the migration dedup code. Revert "update makefile to remove hsm_encryption" pytest: test for malformed reply from first hop when using injectpaymentonion. lightningd: handle unparsable onion from first hop when using injectonionmessage. wallet: print progress reports for large account migration. lightningd: explicit db arg to wait_index_increase so we can use it in migrations. wallet: fix migration speed for postgres. ccan: update to latest. connectd: close connection properly after dev-disconnect `+`. pytest: fix flakes in feerates. configure: set SED to gsed (MacOS et al) or sed (GNU). libplugin: remove redundant destructor which causes exponential slowdown on large numbers of requests. plugins/sql: add payment_hash index to channelmoves table. bookkeeper: only read listchannelmoves 1000 entries at a time. pytest: test (failing) for bkpr-listincome filtering times on onchain events. bookkeeper: save last timestamp to avoid another query in find_consolidated_fees. bookkeeper: honor start and ent times when consolidating onchain fees. pytest: more flakes with "lucky sigs" in coinmoves. pytest: print useful information if we don't get our channelmoves/chainmoves lightningd: fix scb remote_to_self_delay information. Makefile: helper to print the binary sizes. Makefile: create a library containing common, wire and bitcoin objects. Makefiles: remove redundant dependencies, and have objects depend on their Makefile. global: remove unnecessary includes from headers. devtools/reduce-includes.sh: don't remove our own .h from .c file includes. global: remove unnecessary includes from C files. common/node_id: runtime assertion override, not separate compile time for fuzzing. common: remove take() leak if new_initial_channel() fails. common: assert that they don't call setup_tmpctx() twice. tests/fuzz: fix include order. fuzz: fix build undr FreeBSD. Makefile: run fuzzing corpora as normal unit tests in non-fuzzing mode. fuzz/fuzz-hsm_encryption: don't run as unit test under valgrind. plugins: fix %*.s typo. plugins: make fatal errors neater. common: export helper membuf_tal_realloc. common: add json_dup_contents() to duplicate toks and buffer. plugins: remove unused json_buffer / json_toks members from libplugin-pay. common/jsonrpc_io: helper routines for reading JSON from sockets. libplugin: use jsonrpc_io for reading replies to our async commands. libplugin: wean ld_command_handle off referncing plugin->buffer. libplugin: use jsonrpc_io for stdin from lightningd. lightningd: wean parse_request off referencing jcon->buffer. lightningd: use jsonrpc_io for reading JSON commands. common: add brace hack for jsonrpc_async_parse. lightningd: wean pligun_log_handle/plugin_notify_handle/plugin_response_handle off plugin->buffer. lightningd: use jsonrpc_io for plugin JSON commands. libplugin: use jsonrpc_io logic for sync requests too. pytest: test for splicing while channel is not announced yet. lightningd: cancel watching original funding when we switch to the new one via splice. lightningd: fix crash in channel_control. pytest: add test that we notice height change of sendpsbt with no change. wallet: make sure to watch all txids in transactions table. memleak: make notleak() work even before memleak is initalized. common: add new_htable() macro to allocate, initialize and setup memleak coverage for any typed hash table. lightningd: try harder to ensure uniqueness in --dev-save-plugin-io names. bitcoin: remove unused scriptpubkey_opreturn_padded. autogenerate-rpc-examples.py: add examples for listchainmoves and listchannelmoves. lightningd: remove unused `start_time` field in bitcoind_getfilteredblock. tests: use timemono not time_now() for duration measurement. lightningd: fix compilation for older compilers. common: tal_wally_discard() fuzz: translate fuzz-hsm_encryption to fuzz-hsm_secret. ccan: update to get improved grab_file API, and adapt code. common/hsm_secret: remove grab_file_contents now it has inspired grab_file_raw! common: trivial changes from review. pytest: don't ask for p2tr addresses on liquid. clnrest: change utoipa to my GH branch with daywalker90's deterministic PR merged. external/lowdown: remove. external/libsodium: remove Remove litecoin support. GitHub: add --durations=10 to pytest runs. pytest: test for blockheight entries in bookkeeper being saved across restart. bookkeeper: fix restoration of derived wallet blockheights on restart. pytest: test for askrene infinite loop with maxparts set. askrene: fix infinite loop if refine_flows() cuts down our last flow with 1 remaining before maxparts. askrene: implement 10-second deadline. pytest: test for parallel bookkeeper queries. bookkeeper: fix assert() which happens with parallel queries. common: remove tal_check() call on libwally allocations. pytest: test for bcli crash with huge PSBTs. plugins/bcli: use -stdin to feed arguments, in case we have a giant tx. pytest: test that we correctly mark a payment part failed if we cannot queue it to the channeld for the peer. lightningd: fix case where injectpaymentonion failure results in listsendpays "pending". bookkeeper: don't flood logs if we have many channelmoves all at once. sql: only create sql indices after initial load of data. tests: don't assume newaddr returns bech32 by default. wallet: make `p2tr` the default address for newaddr. fuzz/fuzz-handle_onion_message.c: fix header order. fuzz: fix compilation. connectd: return reason, connect time to lightningd on connection results. connectd: report ping latencies (from ping probes) to lightningd. connectd: at disconnected, tell lightningd how long we were connected. connected: tell lightningd if we didn't find an address we could even *try* to connect to. lightningd: add networkevents to wait API. lightningd: db infrastructure for network events. lightnind: add connectd's reported events to the db. lightningd: implement listnetworkevents. sql: add support for listnetworkevents lightningd: `delnetworkevent` support autoclean: clean network events (30 days by default). lightningd: don't allow invoices with 640 byte descriptions. autoclean: don't increment num_cleaned when record wasn't even a candidate. pytest: test for xpay waiting when the destination complains about blockheight. xpay: wait, if final node gives us an indication we're behind on blockheight. CI: Remove non-working FreeBSD test. pytest: add test that we fixup "pending" payments which don't actually have HTLCs. lightningd: db migration to clean up any pending payments where theres no htlc. common: add randbytes() wrapper to override cryptographic entropy: $CLN_DEV_ENTROPY_SEED global: replace randombytes_buf() with randbytes() wrapper. pseudorand: make the results in deterministic mode per-caller. gossipd: remove --dev-gossip-time setting, we'll use CLN_DEV_SET_TIME. connectd, gossipd, pay, bcli: use timemono when solely measuring duration for timeouts. common/clock_time: wrapper for time_now() so we can override it. global: use clock_time in place of time_now(). lightningd: introduce some changes for dual open id randomness even with CLN_DEV_ENTROPY_SEED. wallet: make utxo order deterministic if CLN_DEV_ENTROPY_SEED set. topology: in deterministic mode, only return one best candidate for listincoming. lightningd: add --dev-ignore-idb to not complain about bitcoind in initialblockdownload. pyln-testing: introduce canned blocks support to bitcoind fixture. fuzz: when running as unit tests, allow -v and [corpus...] args. common: fix bad formatting for DNS-type wireaddr. lightningd: fix access to bcli plugin once it's freed. common: add amount_msat_deduct / amount_msat_deduct_sub. askrene: remove overzealous cache of channel_data. askrene: fix error path if we fail sanity checks. askrene: fix use-after-free if remove_htlc_min_violations fails. askrene: remove max_deliverable cache from increase_flows. askrene: use flows array directly in remove_excess. askrene: remove indexes from refine_flows except for increase_flows() askrene: make increase_flows() use the raw flows array. askrene: Remove index indirection from squash_flows, simplify sorting. askrene: clean up renamed functions. askrene: make increase_flows function more generic. askrene: handle maxparts parameter values 1 and 0. askrene: implement reduce_num_flows in refine, using increase_flows(). askrene: remove now-unused bottleneck_idx from flow_max_deliverable. askrene: neated flow array handling, by freeing flows we discard. pytest: test to demonstrate that reservations of "private" channels overlap. askrene: add optional layers to reservations. xpay: don't place global reservations on generated channels. pytest: Test that we don't try to pay too many htlcs at once through an unknown channel. xpay: restrict maxparts to 6 for non-public nodes, but remove it if we can't route. schemas: allow *CLOSED* state in channel_state_changed notification. lightningd: deprecate "message": null in channel_state_changed notifications. pytest: add tests for channel_state_changed into the CLOSED state. offers: make find_best_peer take a feature bitmap. pytest: test for signing a signed PSBT. common: don't abort() if wally_psbt_output_taproot_keypath_add() fails. lightningd: allow another gossip state transition. pytest: test case where we crash before bitcoind gets the opening tx. lightningd: save funding_psbt in channel, database. sendpsbt: update channel psbts if this is a channel PSBT. lightningd: re-xmit funding txs on startup. pytest: test failure if we crash after fundchannel_complete but before sendpsbt. lightningd: expose funding PSBT (if we have it) in JSON API. spender: look for unsigned PSBT on awaiting channels on startup, and re-send. lightningd: save funding PSBT to database if we're to withhold it. lightningd: add withheld flag to listpeerchannels and listclosedchannels. lightningd: immediately close without broadcast whenever we close a withheld channel. lightningd: don't rebroadcast withheld channels' funding_psbt on restart. lightningd: add withhold option to fundchannel_complete. lightningd: remove withheld flag when we see sendpsbt. pytest: test withhold parameter to fundchannel_complete. lightningd: another gossip transition corner case. pytest: fix flake when htlc_timeout_tx gets short sig: pytest: fix flake in test_connect_ratelimit connectd: don't complain if lightningd is unresponsive while doing dev-memleak. lightningd: fix race with mutual connect. bookkeeper: fix printing of bad JSON results. pytest: fix changed msg on plugin failure. plugins/sql: remove size limit. plugins/sql: print times taken to do list comand, populate table, and create index. bookkeeper: no longer read listchannelmoves 1000 entries at a time. Revert "bookkeeper: don't flood logs if we have many channelmoves all at once." pytest: latency and speed test on large coinmoves. lightningd: don't copy hooks array into hook request, simply don't shrink it. lightningd: avoid race when runtime-added plugins register hooks. lightningd: log when we have to defer hook registration. lightningd: don't loop through all commands every time one finishes. common: remove tracing exponential behaviour from large numbers of requests. common: avoid allocations for small numbers of traces. pytest: increase test_generate_coinmoves to 2M entries. lightningd: handle large numbers of command outputs gracefully. JSONRPC: use a bigger default buffer. lightningd: support "filters" in plugins manifest to restrict when hooks are called. lightningd: add support for filters on "rpc_command" hook. libplugin: allow plugins to register optional filters for each hook they want. libplugin: don't wait for clean_tmpctx() to free requests as we process them. xpay: use filtering on rpc_command so we only get called on "pay". pyln-client: support hook filters. lightningd: allow filtering on custommsg hook too. commando, chanbackup: use custommsg hooks. common: increase jsonrpc_io buffer size temporarily to aggrevate perf issues. common: optimize json parsing. ccan: update to get io_loop fairness. lightningd: don't process more than 100 commands from a JSONRPC at once. lightningd: don't process more than 100 commands from a plugin at once. plugins/sql: use modern data style, not globals. sql: if we use `dev-sqlfilename`, don't bother syncing it to disk. sql: use wait RPC so we don't have to check listchannelmoves/listchainmoves each time. lightningd: optimize find_cmd. bookkeeper: restore limit on asking for all channelmoves at once. sql: limit how many chainmoves/channelmoves entries we ask for at once. pytest: increase test_generate_coinmoves to 5M entries. pytest: test for 1M JSONRPC calls which don't need transactions. db: don't start transactions unless we really need to. Python: update pyproject.toml so we can run tests/benchmarks.py. pyln-testing: don't assume we're doing debug logging for fundwallet and line_graph helpers. tests/benchmark.py: tune nodes a little. pytest: move test_coinmoves.py::test_generate_coinmoves and test_plugin.py::test_spam_commands to benchmark.py libplugin: add spamlistcommand db: don't actually create an explicit transaction for read commands. lightningd: print last method we called if we abort processing loop. CHANGELOG.md: fix header format for rc1 doc: include delnetworkevent in generated documentation, and grpc. CI: don't run configure on *host* for release. connectd: don't log at INFO level for known issue. lightningd: print UNUSUAL log message if a command is very slow. wire: add explicit-length fromwire_peektype variant. wallet: add optional sql and functions to downgrade db. wallet: separate migration table into its own source file. global: use lightning-hsmtool not hsmtool. check-bolt: move to devtools, clean up tools/ tools/lightning-downgrade: tool to downgrade (offline) v25.12 to v25.09. wallet: separate datastore access functions for the lightning-downgrade tool to access. askrene: move datastore wire functions into separate file for lightning-downgrade to use. lightningd-downgrade: downgrade askrene's layer info too. pytest: add failing downgrade test. doc: add a manual page. CI: add test that we can downgrade the node and run it under v25.09. doc: generate documentation for askrene-bias-node. tools: remove accidentally-committed obsolete hsmtool binary. pytest: test for watching utxos over restart reorg. wallet: make sure we re-watch outpoints after blocks are rolled back. lightningd: scan back to seek missing UTXOs. pytest: add test that we correctly scan back for missed UTXOs. CHANGELOG: update for 25.12rc3 lightningd: fix crash on fixup scan if block unavailable. lightningd: fix db constraint error when fixing up old blocks. doc: document the direction field in listpeerchannels. pytest: add test to demonstrate gossip_store misordering node announcements. gossipd: make sure we correctly move node announcement when *no* channel preceeds it in the gossip store. gossipd: don't need hsm fd any more. gossipd: move timestamp_reasonable into gossmap_manage.c. common: fix ubsan trigger in param test. pytest: don't run tests marked slow_test at all if VALGRIND and SLOW_MACHINE. CI: remove reruns on all failures. connectd: fix race when we supply a new address. pytest: fix real reason for warning issue in test_route_by_old_scid. pytest: remove test_lockup_drain. pytest: restore and fix disabled test test_excluded_adjacent_routehint. pytest: expect slow commands with giant commando test pytest: fix test_bitcoin_backend_gianttx flake. pytest: note that we also trigger CI failure on this "That's weird" messages. pytest: fix flake in test_coin_movement_notices pytest: enable test_offline. pytest: fix feerate check in test_peer_anchor_push pytest: test the askrene doesn't use local dying channels. gossipd: don't shortcut dying phase for local channels. pytest: remove channel upgrade tests. pytest: move benchmark in test_connection.py to tests/benchmarks.py pytest: give test_xpay_maxfee longer, as it can time out under CI. pytest: fix timing flake in test_invoice_expiry. ci: don't run shard 2/12 ubsan without parallel. pytest: disable remaining flaky and skip markers to see what else fails. pytest: don't run test_hook_in_use under VALGRIND on CI. lightningd: fix occasional memleak when we detach subd from channel. pytest: fix flake if rune tests are slow. pytest: get more\ information when test_funding_v2_cancel_race fails. pytest: make sure node order is stable before querying in test_gossmap_lost_node pytest: reduce test_funding_v2_cancel_race nodes under CI. pay: don't notify using uninitialized hint field. pytest: don't get upset at slow multi-input signing under valgrind. pytest: explicitly test failed case exposed by race. lightningd: fix error code on waitsendpay on old errors. pytest: fix flake race in test_even_sendcustommsg. pytest: mark test_connection.py::test_disconnect_opener flaky. pytest: mark reckless install test flaky. pytest: work around pay flakiness. lightningd: don't complain if gossipd tells us about dead channel on startup. hsmd: check *all* anchor inputs for short sigs. pytest: fix flake in test_coinmoves_unilateral_htlc_timeout pytest: fix coinmoves flake, where routing credit/debit can appear in either order. pytest: fix bad gossip flake in test_buy_liquidity_ad_check_bookkeeping lightning-hsmtool: support extracting the mnemonic from hsm_secret. common: expose validate_mnemonic so the option can use it. lightningd: allow --recover / recover JSON RPC to take mnemonic. pytest: another flake in test_important_plugin. pytest: fix reconnect flake in test_route_by_old_scid pytest: don't record IO when we kill nodes lightningd: fix bogus memleak report. pytest: don't rely on sleep to ensure wait commands have been submitted. pytest: disable autoreconnect on test_sql to avoid reconnect race. pytest: fix flake in test_gossip_query_channel_range askrene: don't crash if refining flow which has capacity greaater than max it should have. plugins/pay: don't crash if erring index is past route array end. lightning-hsmtool: fix dumponchaindescriptors for mnemonic hsm_secrets. hsmd: fix derivation for non-taproot addresses in modern mnemonic (25.12+) nodes. wallet: use correct derivation for elements when using mnemonic hsm_secret. git: correctly mark contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py for binary diffs. libplugin: fix 'i-promise-to-fix-broken-api-user' parsing. doc: fix end deprecation date of `max_htlc_value_in_flight_msat`. Makefile: update next and prev versions now we've released. connectd: remove unused flag to connect_init. hsmd: remove unused "sign_local_htlc_tx" function which onchaind used to use. lightningd: remove the "listpeers.features.option_anchors_zero_fee_htlc_tx" option. lightningd: remove `decodepay`. lightningd: remove tx and txid fields from close response. lightningd: removing comment insisting plugin hooks are an array of objects, not names. lightningd: remove support for long-deprecated old-style feerate responses. plugins: don't try to fetch max-locktime-blocks. gossmap: don't log every time we don't like a cupdate. connectd: don't be That Node when someone is gossipping crap. lightningd: move log_prefix and log_entry struct definitions into log.c. getlog: fix schema. logging: switch to a simple ringbuffer. pytest: make sure to use old_hsmsecret on downgrade tests. pytest: test names for new nodes. pytest: parameterize test_payerkey and test_exposesecret. pytest: parameterize test_showrunes. pytest: use hsmtool's getsecret instead of deprecated getcodexsecret, parameterize test_recover_command. wallet: conduct unit tests with both bip86 and bip32. pytest: add askrene layer creation bench. askrene: speed up when using large number of layers. pytest: also make sure askrene doesn't suffer when reloading many layers on startup. Makefile: improve print-binary-sizes to be more meaningful. patch configure-check-function-sections.patch Build: add function sections. configure: remove gratuitous CSANFLAGS print. common: tighten restrictions on periods, as per latest draft. pytest: test for crash when enableoffer called on a used single-use offer. pytest: test for amountless offer with currency. common: enforce currency-requires-amount check. decode: don't treat every failure as a rune. common: remove unused type field. common: remove legacy onion translation. pytest: fix flake in test_sql. pytest: mark renepay's self-pay test flaky pytest: make test_connect_ratelimit more robust connectd: unify IO logging calls. pytest: allow pushed after onchain_fee in test_bookkeeping_missed_chans_pushed lightningd: fix spurious memleak in peer_connected_serialize. pytest: fix flake in test_even_sendcustommsg pytest: fix flake in test_channel_lease_unilat_closes pytest: fix channeld_fakenet divide by zero bug. pytest: speed up channeld_fakenet tests. Makefile: add "canned-gossmap" target pytest: update "real gossip map" tests to a recent snapshot. pytest: speed up test_sql significantly. pytest: fix test_xpay flake. pytest: make hold_timeout.py test plugin release on a prompt, not timeout. CI: reduce parallelism for pytest. pytest: reproduce crash when node disconnects between hooks: lightningd: don't assume peer existrs in peer_connected_serialize. devtools: enhance dump-gossipstore to show some details of messages. pytest: fix bogus test_gossip_store_compact_noappend test. devtools/gossmap-compress: generate better scids. gossmap: reduce load times by 20% tools: delete gossip_store of needed for downgrade even if db hasn't changed. gossip_store: add UUID entry at front of the store. common/gossmap: use the UUID record on reopen. gossipd: write uuid record on startup. common: move gossip_store_wire.csv into common/ from gossipd/ gossmap: add callback for gossipd to see dying messages. gossmap: keep stats on live/deleted records. gossipd: use gossmap to load the dying entries. gossipd: don't gather dying channels during compaction. gossipd: don't compact on startup. devtools/gossmap-compress: create latest gossip_store version gossipd: put the last_writes array inside struct gossip_store. common: expose gossip_store "header and type" single-read struct. gossipd: lightningd/lightning_gossip_compactd gossipd: code to invoke compactd and reopen store. gossipd: compact when gossip store is 80% deleted records. gossipd: reset dying_channels array after compact. gossipd: dev-compact-gossip-store to manually invoke compaction. pytest: test for crash when we have dying channels and compact the gossip_store. pytest: test for bkpr_listbalances after emergencyrecover. bkpr: limp along if we lost our db. pytest: fix flae int test_fetchinvoice_autoconnect. pytest: remove now-invalid test. pytest: add fixture for checking packet sizes. CI: run tests in the `wireshark` group so we can test packet sizes connectd: refactor outgoing loop. connectd: refactor to break up "encrypt_and_send". connect: switch to using io_write_partial instead of io_write. connectd: don't toggle nagle on and off, leave it always off. devtools/gossipwith: don't count "padding" pings towards max-messages count. connectd: pad messages with dummy pings if needed to make size uniform. connectd: don't flush messages unless we have something important. connectd: only do lazy transmission for *definitely* non-urgent messages. connectd: use membuf for more efficient output queue. libplugin: add command_finish_rawstr() for when we're simply repeating an entore response. bitcoin: hash_scid and hash_scidd public functions. askrene: make minflow() static, and remove unused linear_flow_cost. askrene: fork before calling the route solver. askrene: add child_log function so child can do logging. askrene: move routines only accessed by the child process into child/. askrene: move fmt_flow_full from askrene.c into flow.c. askrene: move fork() entry point into its own file. askrene: make children use child_log() instead of rq_log. askrene: remove non child-friendly fields from struct route_query. askrene: expose additional_costs htable so child can access it. askrene: move route_query definition and functions into child/. askrene: have child make `struct route_query` internally. askrene: actually run children in parallel. askrene: limit how many children we have. askrene: make "child.c" to be the explicit child entry point. askrene: close files in child to isolate against bugs. pytest: rework test_real_data and test_real_biases to be parallel. common: fix `bad cupdates` count in gossmap.c pytest: fix flake in test_important_plugin node failure. pytest: make global exclusion for "That's weird: Request X took Y msec" under valgrind. pytest: fix flakes in test_onchain_reestablish_reply and test_reestablish_closed_channels pytest: fix flake in test_gossip_force_broadcast_channel_msgs pytest: fix timeout flake in test_dataloss_protection pytest: make test_no_delay more robust. pytest: fix flake involving partial lines. pytest: fix flake in test_gossip_store_compact_while_extending and test_gossmap_lost_node pytest: really fix race in test_buy_liquidity_ad_check_bookkeeping pytest: fix test_sendpay_grouping regex. pytest: fix flake in test_reconnect_remote_sends_no_sigs Build: don't use HAVE_FUNCTION_SECTIONS for update-mocks. lightningd: don't assert if plugin crashes early. libplugin: support multi options. lightningd: add payment-fronting-node option. lightningd: honor `payment-fronting-node` when making bolt11 invoices. offers: encapsulate globals in plugin_get_data() lightningd: honor `payment-fronting-node` when making bolt12 offers. offers: modify find_best_peer() to only select from fronting nodes if set. offers: honor `payment-fronting-nodes` when creating invoices. offers: honor `payment-fronting-nodes` when creating invoice_requests. offers: allow explicit fronting nodes for an offer. offers: only use blinded path nodes from offers when creating invoice for invoice_request. CI: use nproc + 1 for pytest parallelism.. Makefile: don't build the sources in make check-source. CI: Don't explicitly invoke .github/scripts/install-bitcoind.sh connectd: teach dev_report_fds about Tor fds CI: do cargo test --all as part of post-build step CI: don't use /tmp/old-cln, use a local dir. CI: Don't do release target build, create "small" profile Makefile: clean up a little. Makefile: mark more things as intermediaries. plugins: neaten rust plugins, make them intermediate objects. Makefile: make testpack.tar.gz from (almost) all changed files. Makefile: support overriding of CC and CARGO for catching unintended builds. CI: avoid rebuilds on downloads using testpack.tar.gz. CI: make downgrade and slow integration tests depend on check-compiled-source step. CI: use more optimized builds sometimes. pytest: mark test_partial_payment_restart slow. CI: use -O1 optimized builds for sanitizer and valgrind runs. CI: Make 12 not 10 valgrind tests, and 6 not 12 sanitizer tests. CI: split gcc+sqlite3 tests into 6 runners. CI: Use variable to make group counts neater. CI: Use -O3 builds for Liquid integration tests. CI: Speed up 'min-btc-support' by compiling clang with -O3. CI: add more output to apt-get commands, to try to determine source of random delays. CI: cache the apt packages, protoc and bitcoind/elements downloads. CI: Don't manually install bitcoind again. CI: Remove setup useradd line, use eatmydata CI: shorten job names. pytest: don't invoke the pcap test every session. CI: Disable flakiness tracking. currencyrate: rename to cln-currencyrate, change options to currencyrate-add/disable-source. doc: document default currencyconvert sources. pytest: fix flake in test_misc. common: add a new WILL_SEND flag to HTLC states. channeld: simplify pending_updates() using HTLC_F_WILL_SEND channeld: allow outgoing messages through even if they have send STFU. CCAN: import version with htable_lock. lightningd: use htable lock/unlock to ensure we don't add to htables while iterating. lightningd: remove redundant `txid` arg in depthcb_update_scid. tx: make bitcoin_tx_output_get_amount_sat() return amount_sat. lightningd: make caller to deptch_update_scid fetch the location in the block lightningd: bail out on splice if scid doesn't fit. lightningd: use inflight->locked_scid instead of db lookup when splice locked. lightningd: fix type of splice_depth_cb, remove never-working splice_inflight_txwatch. lightningd: make wallet_extract_owned_outputs return bool, optionally output numbers. chaintopology: don't use txfilter, rely on wallet_extract_owned_outputs. wallet: remove txfilter. bitcoin: hoist script_with_len out of wallet/ into here. common: make encode_scriptpubkey_to_addr take explicit len. lightningd: add generic scriptpubkey watches. lightningd: support watch-for-blockdepth primitive. lightningd: change watch_scriptpubkey and watch_blockdepth not to insert exact duplicates. lightningd: use scriptpubkey, not watch_txid for initial spotting of the funding tx. lightningd: split out separate function for "depth == 0". lightningd: use a blockdepth callback instead of a watch_txid. lightningd: explicitly unwatch funding scriptpubkey when channel finally closed. lightningd: make dualopend's opening_depth_cb use depthcb_update_scid. lightningd: use scriptpubkey and blockdepth watches instead of tx watches for dual funding. lightningd: use scriptpubkey watch and block depth watch for splicing. lightningd: save short_channel_id in inflight struct as soon as it gets mined. lightningd: use scriptpubkey watches not txid watches for inflights on closing. pytest: test for currencyrate median code when values are cached. currencyrate: fix cached currencies to still use median. currencyrate: don't sleep for as long in background task. currencyrate: make oracle store and serve the BTC price, not msat per fiat unit. currencyrate: expose get_median_rate and do conversion in front-end for currencyconvert. currencyrate: change `currencyrates` to `listcurrencyrates` which is more CLN-ish. currencyrate: implement currencyrate command. doc: add missing schema for currencyconvert API. pytest: clean up test_currencyrate.py using wait_for_logs() bkpr: add `bkpr-currency` option to record currency rates on each event. bookeeper: add currencyrate to bkpr-listaccounts if we recorded it. bookkeeper: keep up with new entries if we're doing currency conversion. bookkeeper: avoid wasteful refresh races. libplugin: hand command, not plugin, to parsing functions. bookkeeper: make bookkeeper-currency dynamic. patch fix.patch common: add mkdatastorekey helper to make string arrays. common: add simple unit test for mkdatastorekey. plugins: simplify datastore interfaces now callers have mkdatastorekey. bookkeeper: persist currency conversions in the datastore. bkpr: warn if currency rate request is for old event. bookkeeper: save currencyrate ranges, not individual values. bookkeeper: expose currencyrate_str and bkpr_of so report.c can access them. bookkeeper: use iso4217 check, scale and print correct minor units. cli: remove \ in simple format. bookkeeper: implement flexible "bkpr-report" command. msggen: add currencyconvert, currencyrate and listcurrencyrates. common: add tal_free_if_taken() helper for common case. common: add (and use) status_unusual_once and status_broken_once helpers. gossipd: put common size restrictions on all maps. connectd: limit incoming traffic to 1MB per second. plugins/sql: remove unneeded TODO entries. pytest: add sql change test. sql: rename indices_created var to populated. plugins/sql: use td->last_created_index directly, don't stash it in dbq. sql: keep persistent watches on tables. plugins/sql: keep track of last `updated_index` value in tables. plugins/sql: rename `update_stmt` to `insert_stmt`. plugins/sql: add a delete_statement to toplevel tables with created_index values. plugins/sql: support updates for tables with `created_index` values. decode: print htlc_minimum_msat / htlc_maximum_msat in blinded paths. pytest: demonstrate the weird 0 htlc_maximum_msat problem. createonion: add `force_paths` parameter. offers: set `force_paths` on offer if fronting nodes are used. offers: when creating an invoice for an offer, only reuse fronting paths. offers: use amount hints in find_best_peer for blinded paths. pytest: test that we refuse incoming open requests if we have no feerates. lightningd: refuse to let a peer open a channel if we have no fee estimates. lightningd: don't hand 0 to dualopend as anchor feerate if we cannot estimate fees. common: allow current_feerate under 253 in marginal_feerate(). connectd: remove DNS seeds entirely. pytest: fix flake in test_easy_splice_out_into_channel bkpr-report: make ? work as expected on amount fields. bkpr-report: enhance tag syntax from {tag:replacement} to {tag?if-set:if-not-set} doc: provide realistic example for bkpr-report. sql: fix crash for large channelmoves tables. CHANGELOG.md: reformat for consistency, combine some lines. CHANGELOG.md: import v25.12.1 CHANGELOG.md, remove duplicate entries. doc: update release-checklist to make CHANGELOG.md more coherent. CHANGELOG.md: sort entries into rough coolness order! connectd: add "use_uniform_writes" per-peer helper. connectd: keep their_features inside struct peer. connectd: rescue constant message size feature by exploiting OPT_ONION_MESSAGES (LND) connectd: rescue constant message size feature by exploiting option 154 (Eclair). Revert dev-uniform padding. pytest: fix flake in test_closing_anchorspend_htlc_tx_rbf Makefile: don't try to make generate files .INTERMEDIATE. keysend: increase assumed final_cltv_expiry to 42 (to match LDK). CHANGELOG.md: add missing entry for keysend LDK fix. lightningd: `--message-padding` to allow users to disable padding altogether. Peter Neuroth (89): plugin: remove features when plugin is disabled plugin: fix feature_set allocation test: check that features get removed when ... test: refactor plugin to use parameter not envvar add .clangd to gitignore lightningd: add override amt to invoice_check_payment lightningd: add invoice_amt to the htlc_accepted hook lightningd: add peer_id to htlc_accepted_hook lsp_plugin: change id type in jsonrpc lsp_plugin: add fn to wrap payload with peer id lsp_plugin: add sane error to listprotocols lsp_plugin: add dev-eneabled flag for client lsp_plugin: add primitives for messages lsp_plugin: change listprotocols request lsp_plugin: check that featurebit is set and that lsp_plugin: refactor lsps0listprotocols handler lsp_plugin: add lsps2 models lsp_plugin: add lsps2_getinfo handler and call lsp_plugin: add lsps2_buy request and handler lsp_plugin: add htlc_accepted handler for no-mpp lsp_plugin: add lsps-jitchannel handler lsp_plugin: add client side check for zero_conf lsp_plugin: pass-through invoice params lsp_plugin: remove redundant config option lsp_plugin: rename cmds and opts to fit convention lsp_plugin: add documentation for options lsp_plugin: add reversed feature-bit check lsp_plugin: relax LSP feateture bit handling lsp_plugin: remove reserve from hook response lsp_plugin: add u64 getter and setter to tlvs lsp_plugin: change extra_fee value type to u64 lsp_plugin: remove feature flag temporarily to ... lsp_plugin: remove anchor-type from jit channel lsp_plugin: format test file lsp_plugin: add basic lsps2 mpp support to client lsp_plugin: add cleanup on "on_invoice_payment" lsp_plugin: add hook helper to the client lsp_plugin: add warning if extra_fee is wrong lsp_plugin: use concrete type to avoid unwrap tests: use fundwallet instead of manually funding the lsp plugin: change method name of lsps-jitchannel plugins: lsps: move primitives into proto module plugins: lsps: move lsps0 model into proto module plugins: lsps: move errors into proto module plugins: lsps: move feature types into proto module plugins: lsps: move jsonrpc into proto module plugins: lsps: move primitives into lsps0 plugins: lsps: move lsps2 model to proto module plugins: lsps: refactor lsps2 and lsps0 error enums plugins: lsps: remove debug print from library module plugins: lsps: move transport error to client module plugins: lsps: refactor jsonrpc error plugin: lsps: simplify json-rpc response object plugins: lsps: refactor client to use jsonrpcresponse plugins: lsps: move transport to core module plugins: lsps: add peer_id to transport plugins: lsps: remove peer_id from transport plugins: lsps: use transport specific error plugins: lsps: replace owned types by references plugins: lsps: add lsps0 encoding and decoding plugins: lsps: move id generation into jsonrpcrequest plugins: lsps: add request to transport trait plugins: lsps: switch to typed transport plugin: lsps: move json-rpc server to core module plugins: lsps: add slim generic json-rpc router plugins: lsps: add router compatible lsps2 service handler plugins: lsps: slim down lsps service plugins: lsps: move client transport to cln_adapters plugins: lsps: add slim multiplexing transport plugins: lsps: implement ClnSender for bolt8 transport plugins: lsps: replace heavy transport plugins: lsps: refactor service hook plugins: lsps: add own trait for lsps offer provider plugins: lsps: add own trait for blockheight provider plugins: lsps: add own trait for datastore provider plugins: lsps: add own trait for lightning provider plugins: lsps: split up handlers plugins: lsps: remove lsps2 module plugins: lsps: move feature helpers to core module plugins: lsps: remove cln dependencies from core module and clean up service plugins: lsps: remove anyhow from tlvs lightningd: add channel_id filter to listpeerchannels lightningd: fail in-flight HTLCs upstream when dropping withheld channel lightningd: unreserve UTXOs from withheld funding PSBT when dropping channel lightningd: add preimage to forward_event notification doc: add notification schemas for native topics msggen: generate native notification bindings from schemas cln-grpc: add round-trip tests for notification bindings doc: update pay_part_start and pay_part_end Sangbida Chaudhuri (75): ci: Retry CI workflow with changelog update makefile to remove hsm_encryption makefile: use SED from configure in most places. makefile: enable fuzzing support on macOS makefile: fix glob expansion for macOS common: add unified HSM secret handling module tools: update hsmtool to use the new hsm_secret API. hsmd: take the passphrase raw, not the derived secret. hsmd: use the new mnemonic-compatible hsm_secret routines. exposesecret: Add support for mnemonic-based HSM secrets common: refactor hsm_secret to {secret_data,len,type} hsmd/libhsmd: change hsmd_init to have secret_data and secret_len hsmd: add BIP86 wire scaffolding (derive/check), no behavior yet hsmd/libhsmd: add BIP86 base-key lightningd: store base and derive pubkeys locally wallet: scaffold BIP86 addrtype walletrpc: add addresstype "bip86"; make newaddr+listaddresses use it hsmd: find correct P2TR key for utxo hsmtool: change hsm_secret struct to have length awareness tests: add BIP86 support lightningd: scan outputs for BIP86 addresses test: Add a psbt test and an index boundary test options: remove --use-bip86-derivation utxo: remove UTXO_P2TR_BIP86 enum and consolidate to UTXO_P2TR hsmd_wire: add HSM wire protocol support for secret type detection wallet: update wallet address generation logic to use unified BIP86/BIP32 approach tests: Update test assertions and comments for unified derivation approach hsm_encryption: delete hsm_encryption doc: change encrypted-hsm to hsm-passphrase schema: update schema to remove bip86 and add mnemonic to expose secret utils: add a generic mlock function with a destructor hsm_control: fixup! old comment hsm_secret: fixup! make read_line tidier hsmd_wire: remove hsmd_derive_bip86_key and add it to hsmd_init_reply_v4 makefile: Change hardcoded homebrew paths hsmd: fix HSM sent an unknown message type error contrib: add Sangbida's signing key doc: Update docs to reflect new hsm secret format lightningd: Fix penalty tx output derivation for BIP86 wallets lightningd: use bip86 derivation for anchor spend change outputs lightningd: use BIP86 derivation for P2TR in HTLC rebroadcast change outputs lightningd: add p2wpkh script for bip86 base lightningd: use BIP86 derivation in p2wpkh_for_keyidx when available wallet/hsmd: fix signmessagewithkey for BIP86 wallets wallet: change dev_listaddrs to also list bip86 addresses jsonrpc: fix recover command for BIP86 wallets pytest: determine scid direction dynamically pyln-testing: add old_hsmsecret param to get_node. pytest: use old hsm secret whenever a canned database files is used test: use old hsmsecret format for hardcoded onion message test: mark bookkeeper test to use old hsm secret tests: update test so use both node ids pytest: test upfront_shutdown_script with new-style hsm_secret too. pytest: changed old_hsmsecret to default to false. ccan: import new version to change vsprintfs to vsnprintfs misc: fix uninitialised errors for macOS tests: avoid flaky test_bkpr_currency_dynamic on same-second channel_mvt common: fix run-mkdatastorekey link on arm64 v26.04rc1 contrib: update Fedora builder to use bitcoincore.org for Bitcoin 29.0 connectd: add dev_uniform_padding to connectd_wire.csv lightningd: add dev-uniform-padding flag to lightningd connectd: gate uniform message padding behind --dev-uniform-padding test: add flag to test_constant_packet_size Revert "test: add flag to test_constant_packet_size" Revert "connectd: gate uniform message padding behind --dev-uniform-padding" Revert "lightningd: add dev-uniform-padding flag to lightningd" Revert "connectd: add dev_uniform_padding to connectd_wire.csv" connectd: add dev_uniform_padding to connectd_wire.csv lightningd: add dev-uniform-padding flag to lightningd connectd: gate uniform message padding behind --dev-uniform-padding test: add flag to test_constant_packet_size v2604.rc2 v26.04rc3 v26.04 ShahanaFarooqui (60): docker: Dockerfile fixes after poetry to uv migration doc: append uv run to make command doc: Remove all BuildOnL2 references doc: Update instructions for CI workflow `Release 🚀` contrib: Added fixed SOURCE_DATE_EPOCH flag for reproducible ubuntu builds ci: Update sqlite3 version and shasums for noble repro build ci: Add a new step to update pyln versions out of WORKDIR workflow: Add uv installation step tools: Read the correct default-key from gpgconf doc: Add step for point release checklist to merge updates from `update-versions` and `CHANGELOG.md` into `master` gpg: Updating Shahana's expired keys tests: check openssl version compatibility for fuzz tests docker: install lowdown and libsodium-dev for reproducible builds docker: Add missing sqlite library in final stage docker: Install arch independent libraries separately docker: Install missing lowdown and libsodium dependencies meta: Update version 25.09.3 and CHANGELOG clnrest: do not install dependencies from git url ci: Fix `Release` action failure due to change in `.asc` suffix docker: Fix missing CLN version in docker image docs: Updated `getting-started` docs for v10 docs: Updated `beginners-guide` docs for v10 docs: Updated `node-operators-guide` docs for v10 docs: Updated `developers-guide` docs for v10 docs: Updated `contribute-to-core-lightning` docs for v10 docs: Upgrade rdme from v8 to v10 docs: Update rpc commands sync script as per readme API v2 gitignore: Add generated files to gitignore script: Add `mtime` constant for reproducible Fedora tarball make: Remove printing the version from Makefile ci: Add skip_validation option to test the release on non-tagged commit tools: Sort Fedora tar by name doc: Update documentation for reproducible Fedora binaries contrib: Remove litecoin keys as CLN has recently stopped supporting litecoin doc: Fix mdx format errors generated due to Readme v2 migrations ci: Remove lowdown and configure from the sign release job step gitignore: Ignore lightning-downgrade and check-bolt tools tools: Capture Shasums for current version only doc: Update release instructions docker: Add vls remote_hsmd_socket binary ci: Add new `version-vls` tag for Docker image doc: Add instructions to run CLN node with remote_hsmd_socket tools: Add script to update `stable` tag on Dockerhub docs: Updated schema for mdx compatibility script: Update sync RPC documentation script to check if the page was renderable for Readme tools: Fixed shellcheck error from promote-stable script doc: Added doc schemas with description and update proto test: Add tests to confirm that description is added to RPCs ci: Update GitHub Actions runner to Ubuntu 24.04 due to timeout reports on 22.04 ci: Increase timeout tools: Update libsodium version for Ubuntu Noble docker: Update Fedora base image to 40 doc: Update installation instruction on Fedora script: Add Fedora as target for SHASUMS verification docker: Added fixed SOURCE_DATE_EPOCH flag for reproducible Fedora build doc: Add signmessagewithkey to generate documentation doc: Update json and markdowns to make them .mdx compatible script: Change category slug for better Admin panel management script: API v2 accepts `position` param rather than `order` script: More error checks and logging Dusty Daemon (51): docs: Split Mac install instructions contrib: Make log visualizer work with CI & pytest contrib: Let log visualizer open all nodes in tabs splice: Clean up some spammy debug messages splice: Add Bolt references and conform to them splice: Update to current spec splice: Update splice_info tlv to use odd version contrib: Update startup_regtest for taproot Docs: Update mac instructions to gmake splice: Fix log message splice: Handle CHANNEL_READY during splice resume splice: RPC error handling fix reestablish: Send announcement sigs when asked fixup! splice: Handle CHANNEL_READY during splice resume fixup! reestablish: Send announcement sigs when asked splice: test mutli-channel splice script and fees amount: Add decimal format for msats amount: Can add sat convenience method splice-script: channel id corner case splice-script: wetlog / debuglog fix splice-script: Memleak fix on failure channeld: Inform channeld about opening feerate channeld: Add new feerate type ‘splice’ ld: Expose splice feerate to RPC splice: Add and improve logging splice: Fix weight calculations & use opening feerate splice: Update `tx_abort` for mulitple splices splice: Fail earlier on too-few-funds gossip: Don’t reset channel on stale annoncement splice: multi channel stfu bugfix splice script: Add new PENDING state and log splice script: Zero out wallet fund requests splice script: Turn “wallet -> *” into “wallet -> 100%” splice script: Allow `out_ppm` for wallet splice script: Helper functions for dynamic calcs splice script: Switch to splice feerate splice script: Improve weight guess calculation splice script: Implement dynamic wallet & fee splice script: Update tests to use dynamic fees splice: Turn on multi-channel, dynamic wallet, smart fees splice: Let RPC stfu take time splice: Add splicein test splice: Add documentation for splicein Add splicein command splice: Add test for easy spliceout command splice: Add docs for easy spliceout command splice: Add easy spliceout command splice: Fix typo in test and xfail splice script: Fix rare memleak in plugin splice: Enable the splice in default settings CI: Turn on diff outputs on failed doc gen Chandra Pratap (49): common: fix dangling memory allocation in `daemon_conn_new_()` fuzz-tests: Add fuzz target for closing_complete fuzz-tests: Add a seed corpus for the new test fuzz-tests: Add fuzz target for closing_sig fuzz-tests: Add a seed corpus for the new test fuzz-tests: verify round‑trip scriptpubkey <-> addr conversion fuzz-tests: Add coverage-increasing inputs to seed corpora common/amount: prevent scaling with invalid factors in amount scale functions fuzz-tests: Replace hardcoded chunk size with iteration over sizes fuzz-tests: Add a roundtrip check for `bigsize_put()` fuzz-tests: Add coverage-increasing inputs to seed corpora fuzz-tests: order FUZZ_COMMON_OBJS lexicographic fuzz-tests: add a test for handle_peer_error_or_warning() fuzz-tests: Add a seed corpus for the new test fuzz-tests: add a check for `bolt11_encode()` fuzz-tests: Remove unnecessary #includes in the BOLT #11 test fuzz-tests: Add coverage-increasing inputs to seed corpora fuzz-tests: Make the `channel_id` wire test roundtrip fuzz-tests: Get rid of magic numbers fuzz-tests: Add coverage increasing inputs to seed corpora fuzz-tests: fix overflow of u32 in `fuzz-close-tx` fuzz-tests: Add coverage-increasing inputs to seed corpora fuzz-tests: Add a test for `calculate_our_funding()` fuzz-tests: Add a seed corpus for the new test common/wireaddr: Fix an out-of-bounds bug in the address parser common/test: Add a test to trigger the bug fuzz-tests: Replace manual allocations with `tal_arr()` fuzz-tests: Test over all possible witness version values fuzz-tests: test 8-to-5 bit conversion fuzz-tests: Add coverage-increasing inputs to seed corpora plugins/test: Add a test to trigger the bug plugins/libplugin-pay: Add a check for NaN values fuzz-tests: Add a test for `codex32` operations fuzz-tests: Add a seed corpus for the new test fuzz-tests: Add a test for the onion message handler fuzz-tests: Add a seed corpus for the new test fuzz-tests: Add a test for `full_channel` operations fuzz-tests: Add a seed corpus for the new test fuzz-tests: get rid of magic numbers in `fuzz-hsm_encryption.c` fuzz-tests: Add coverage-increasing inputs to seed corpora fuzz-tests: Add a test for `peer_init_received()` fuzz-tests: Add a seed corpus for the new test fuzz-tests: Add a wire test for wireaddr functions fuzz-tests: Add a seed corpus for the new test fuzz-tests: Prevent memory leak in `fuzz-initial_channel` fuzz-tests: Add test for untested function fuzz-tests: Add coverage increasing inputs to seed corpora fuzz-tests: Make `fuzz-bolt12-offer-decode` roundrip fuzz-tests: Add coverage increasing inputs to seed corpora daywalker90 (28): pyln-testing: set 'dev-save-plugin-io' only on CLN v25.09 and later crates: bump cln-grpc-plugin to v0.5.0 docs: fix htlc states description regarding direction crates: centralize version management ci: add workflow to create a PR for crate bumps msggen: add missing methods from v25.09 msggen: add missing methods from v25.12 msggen: fix primitive serialization for special names docs: update backup install instructions msggen: add string_map type clnrest: add clnrest-register-path method for dynamic paths gitignore: add lightningd/lightning_gossip_compactd schemas: fix ping requirements documentation currencyrate: new rust plugin to provide the `currencyconvert` API cln-currencyrate: switch algorithm to a more lazy one crates: improved json codec decoding performance cln-plugin: add a hook builder to make use of before, after and filters options cln-grpc: fix txids encoding in close command msggen: propagate added and deprecated fields chore: replace v26.03 version mentions with v26.04 msggen: raise oldest supported version to v24.11 pyln-testing: move mnemonic dependency directly into pyln-testing schemas: make `direction` in `listpeerchannels` a u32 cln-grpc-plugin: bump version to v0.6.0 tests: add an xpay test to reproduce a regression where we pay fees in a direct route splice: Remove experiemental splicing feature msggen: add `splicein` and `spliceout` rpc methods msggen: add bkpr-report rpc method Christian Decker (22): chore: Update python dependencies chore(fmt): Fix formatting of new python files. ci: Add a simple plugin to report test results to our falkiness tracker ci: Run with rerunfailures rather than flaky git: Ignore two more binaries ci: Mark some tests as rerun ci: Remove nix check from the critical path in ci.yaml ci: Add 2 shards to the UBSAN / ASAN runs Add comprehensive coverage infrastructure with clang source-based coverage Add Python API documentation generation with pdoc3 Add GitHub Pages documentation site with orchestrated workflows chore: Downgrade tool diff git: Remove generated binary CI: consolidate GLOBAL_PYTEST_OPTS into PYTEST_OPTS_BASE. CI: add artifact upload for pytest JUnit XML reports. CI: fix env context reference in job-level env sections. fix: sanitize artifact names to handle special characters in matrix vars refactor: use GROUP variable for artifact names instead of sanitizing NAME testing: Add TEST_LOG_IGNORE_ERRORS envvar to suppress logging errors chore: Ensure the logging library does not get upset when output capture is disabled. feat: Enhance JUnit XML reporting with environment variables and add import to conftest.py ci: Enable sccache compiler cache for Rust and C Lagrang3 (20): askrene: add timestamp to biases askrene: add askrene-bias-node rpc askrene: regression test that triggers assertion askrene: fix payment crash askrene: add auto.include_fees layer askrene: remove unnecessary print in test askrene: consider fees during *explain failure* askrene: add test that triggers infinite loop askrene: fixed a timeout corner case renepay: refactor and bugfixes xpay: handle pay ignoring unknown arguments tests: add test to validate jsonrpc lighting-cli: fix invalid json askrene: log reservation failures during getroutes askrene: add test for reservation leaks askrene-unreserve: add dev_remove_all option reckless: fail reckless rpc if executable fails rust libraries: update bitcoin to 0.32.2 sql: make LIMIT_PER_LIST into a dev option ... sql: add test that triggers bug on channelmoves Se7enZ (16): fix: Remove "Printing" from listdatastore debug log. devtools: Add shellcheck to pre-commit. devtools: Add amount access check to pre-commit. devtools: Add discouraged function check to pre-commit. devtools: Add codespell to pre-commit. devtools: Add doc JSON schema checks and formatting to pre-commit. devtools: Add EOF fixer and trailing whitespace fix to pre-commit. devtools: Add `fix-style-errors` script by @sangbida. devtools: Add pre-commit as a `dev` Python package. doc: Add pre-commit section to Contributor Workflow documentation. devtools: Add clang-format to pre-commit. build: Replace PLUGIN_RENEPAY_HDRS json.c with json.h in Makefile. devtools: Add custom `include-order-fixer` to pre-commit. devtools: Add commitlint to pre-commit. devtools: Replace Ruff with Flake8 in pre-commit. devtools: Set pre-commit default versions for Python and NodeJS. dovgopoly (15): lightningd: fix segfault when parse_filter fails tests: added *non-developer mode* test for invalid filtering bcli: add synchronous `run_bitcoin_cli` for future refactor bcli: convert `getchaininfo` to synchronous execution bcli: convert `getutxout` to synchronous execution bcli: convert `sendrawtransaction` to synchronous execution bcli: convert `estimatefees` to synchronous execution bcli: convert `getrawblockbyheight` to synchronous execution lightningd: add `get_bitcoin_result` for bcli response handling pytest: fix bcli tests after sync refactor bcli: remove unused async code after sync refactor bcli: return "not found" on any `getblockhash` exit status bcli: refactor `wait_and_check_bitcoind` and `run_bitcoin_cli` to use shared execution bcli: replace magic numbers with constants pytest: add tests for bcli `getblockfrompeer` retry path Matt Whitlock (13): pyln-client: don't leak dirfd after connecting Unix socket pyln-testing: close 'config.vars' after reading pyln-testing: close log files when tearing down node_factory pyln-testing: don't leak file descriptor in GossipStore tests: do not leak file descriptors common/json_parse_simple: drop redundant and wrong json_str_to_u64() connectd: demote "Peer did not close, forcing close" to UNUSUAL tests: skip certain tests if RUST is not enabled pyln-testing: pass timeout to BitcoinProxy tests: work around socket path name too long on Linux lightningd: notify plugins when finalizing channel tests/test_misc.py: fix another "AF_UNIX path too long" test_renepay.py: remove data dump into /tmp Madeline Paech (6): change log for 25.12rc1 release candidate PR for 25.12 with Shahana's Makefile update Changelog-None change log for release candidate 1 to include 8690 second release candidate for 25.12 release branch for 25.12 release updated pull request for next cln release timeline wqxoxo (5): Fix BOLT11 annotation loss after sendonion failure xpay: fix misleading "route hint" label in error messages pay: Enforce maxdelay for direct channel payments fuzz: fix uninitialized variable in fuzz-handle_onion_message db: add STRICT tables with migration for old databases Lakshya Singh (4): chore: remove __init__.py for package extension chore: remove uv sources defined at workspace level docs: add frozen for uv sync chore: remove rustfmt check in configure nazarevsky (4): readme: change links for 'Useful commands' from local to a web doc xpay: add payer_note field cln-rpc: update schema, update proto for xpay payer_note field tests: add payer_note case for xpay 21M4TW (3): offers: require opt_onion_message for incoming invoices too. Changelog-Fixed: offers: require peers for blinded paths to have `option_onion_messages`, due to reports of LND not forwarding our blinded payments correctly. Changelog-Fixed: Replacing sed by $(SED) in Makefile lightningd: don't allow enableoffer on single-use offer. Alex Myers (2): bump minimum python to 3.9.2 and downgrade coincurve contrib: ignore cache when rebuilding docker builder images Erick Cestari (2): common/bolt11: Fix BOLT11 hash calculation for unknown fallback address versions Remove libsodium and lowdown submodules to fix recursive clone enaples (2): tests: test reproduce #8863 [ Neated and added xfail -- RR ] pytest: removed old test erdoganishe (2): lightningd: add description field to offer related responces test: test_sql: fix missing description field Claudio Raimondi (1): Refactor Dockerfile, Add TODOs Joseph Goulden (1): chore: nix flake update Switched to nixpkgs-unstable Replaced postgresql dependency with much smaller libpq. Utilise new inputs.self.submodules feature to simplify flake use Moved apps to a separate file Changelog-None Madeline Vibes (1): Meta: Adding changelog and version update for 25.09.1 Marcel Hernandez (1): fix: build on Alpine Linux Nishant Bansal (1): plugins/bcli: use -rpcwait to simplify waiting for bitcoind to warm up Replaced custom wait logic with the -rpcwait flag in bitcoin-cli to handle waiting for bitcoind to warm up. This simplifies the code and ensures that errors unrelated to warmup are passed up directly without additional checks. Changelog-None Raimo33 (1): Add `-O2` in armv7 Docker build following bug fix Changelog-None ScuttoZ (1): installation.md: Fixed syntax in dependencies script for Fedora Tatiana Moroz (1): Fix Reckless search command not finding partial matches Wes Payne (1): keysend: enforce BOLT11 description length limit botantony (1): build (macos): do not overwrite `PKG_CONFIG_PATH` variable madelinevibes (1): doc: adding madeline's security details Changelog-None michael1011 (1): lightningd: initialize ECDH before replaying blinded HTLCs