* [LABS-485] Extract coin_state level try/catch to its own function
* Comments by @cursor
* Move peer.closed check into exception handler
* Comments by @cursor
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> **Medium Risk**
> Refactor of wallet coin identification used during sync. Logic is
relocated rather than redesigned, but mistakes in wiring could mis-route
CAT/DID/NFT/clawback coins.
>
> **Overview**
> Moves coin-type identification out of `WalletStateManager` into the
wallets that own that logic. `determine_coin_type` still classifies
spends, then delegates to classmethod `identify` on CAT, DID, NFT,
PlotNFT, and VC wallets, plus `ClawbackManager.identify`.
>
> WSM drops `handle_cat` / `handle_did` / `handle_nft` /
`handle_clawback` / `handle_vc` and the PlotNFT matching block. Behavior
is intended to stay the same: auto-create/convert wallets, stray CAT
tracking, DID/NFT caps, clawback records. Clawback identification now
takes `add_interested_coin_ids` as a callback instead of calling WSM
directly.
>
> NFT auto-add tests now patch and call `NFTWallet.identify`.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
f488a6b870. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> **Low Risk**
> Governance-only change to review routing; no runtime or application
code is affected.
>
> **Overview**
> Removes the **CODEOWNERS** entry that required
`@Chia-Network/actions-reviewers` on all paths under `.github/**/*`.
>
> Workflow and GitHub config changes in `.github` will now follow only
the repo-wide `*` rule (`@Chia-Network/required-reviewers`), without an
extra mandatory actions team review.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
bbeb9da95a. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Source hash: ab5512dccf
Remaining commits: 0
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> The visible diff only updates the changelog; documented fixes touch
wallet GUI and offers but are typical release-integration scope for a
checkpoint merge.
>
> **Overview**
> **Release checkpoint** merging `release/2.7.3` into `main` and adding
the **2.7.3** (2026-07-16) section to `CHANGELOG.md`.
>
> **Changed:** Read-only WalletConnect calls `chia_getHeightInfo` and
`chia_getCoinRecordsByNames` no longer require confirmation prompts.
>
> **Fixed:** Linux/Wayland wallet GUI confirmation dialogs when
`ready-to-show` never fires; Plot NFT key assignment via `launcherId`
hex normalization; reference wallet log viewer (Electron main-process
imports); NFT sell offer confirmation (“Asset type is not valid”).
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
6e8d74ff50. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Deletes five functions/classes with zero references (verified repo-wide
including tests) and the test-only FullNodeStore.remove_unfinished_block,
whose own TODO asked for its removal. The one test caller now exercises
the production cleanup method clear_unfinished_blocks_below instead.
Co-authored-by: Cursor <cursoragent@cursor.com>
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> **Medium Risk**
> Refactors wallet coin split/combine paths used by RPC; behavior should
be equivalent but touches core transaction construction and coin
selection.
>
> **Overview**
> Moves **split** and **combine** coin logic out of `WalletStateManager`
into a new **`FungibilityManager`**, wired on the state manager at
startup and used by the wallet RPC for `split_coins` / `combine_coins`.
>
> RPC handlers now resolve a fungible wallet via `get_fungible_wallet`
(standard or CAT only) and call the manager instead of
`wallet_state_manager.split_coins` / `combine_coins`. Invalid wallet
types raise **`Wallet {id} is not eligible for coin splitting`** (tests
updated for split and combine RPC paths). **`coin_num_limit`** is no
longer forwarded into the combine implementation; limits still apply via
`CombineCoins` request validation.
>
> Behavior of coin selection, fees, and transaction building is intended
to stay the same—this is primarily structural cleanup for LABS-490.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
28e52c2070. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
* Treat missing anchored peak header as not-synced in wallet timestamp lookup
Follow-up to the wallet timestamp backtracking bound. When
get_timestamp_for_height_from_peer runs in anchored mode (an
expected_header_hash supplied by new_peak_wallet) and the peer returns no
header block for the starting peak height, the loop previously decremented
the height without advancing the anchor and then validated lower heights
against the stale peak hash. Return None (peer treated as not synced)
instead, so the anchor chain is never extended from a missing block.
Non-anchored lookups (get_timestamp_for_height) are unchanged and still
backtrack past a missing peak height.
* Clarify anchored timestamp lookup comment
* Add DataLayer self-heal for blobless stores
Reset stores with missing committed Merkle blobs to a clean empty root before sync so already-corrupted subscriptions can recover instead of remaining falsely synced.
* Clear Merkle cache when resetting DataLayer stores
Invalidate cached Merkle blobs during store reset so recovery cannot keep serving stale in-memory blobs after the corresponding file has gone missing.
* Fix DataLayer reset helper formatting.