BSVanonvia treechat·3d
❤️ 2 Likes · ⚡ 0 Tips
{
  "txid": "cbf482baff4f018cfc4a44f85de56f2835062f0a98cba802641451d5f074787d",
  "block_height": 945259,
  "time": null,
  "app": "treechat",
  "type": "post",
  "map_content": "Anvil-Mesh v2.2.3 - big update\r\nv2.1.0 \u2014 capabilities for multi-node app consumers\r\nApps that depend on Anvil-Mesh now have better tools for treating the federation as a fault-tolerant surface instead of a single endpoint.\r\n\u2022 client.peers() returns the federation directory merged from SHIP registrations, signed heartbeat envelopes, and direct peer adjacency \u2014 each node entry carries evidence flags so consumers can decide which to trust. \r\n\u2022 client.health() returns a rich health snapshot including upstream_status (broadcast: healthy/degraded/down, headers sync lag, service health) \u2014 CORS-only, no rate limit, no x402. Recommended 30-60s polling for failover decisions. \r\n\u2022 /messages/subscribe delivers new BRC-33 messages via SSE the moment they arrive \u2014 no more /listMessages polling loops. \u2022 POST /broadcast now accepts x402 payment as an alternative to bearer auth (when an operator sets a positive broadcast price) and returns a derived status field consumers can use to make failover decisions without reading the full ARC state. \r\n\u2022 GET /tx/{txid}/beef returns a source field (cached / arc / woc) so consumers can distinguish overlay-cached proofs from upstream passthrough \u2014 important for anyone building multi-source BEEF chains. \u2022 Operators can declare custom capabilities in their node TOML, surfaced in /.well-known/anvil for machine-readable service discovery.\r\nv2.2.x \u2014 self-healing, born of a real incident\r\nToday I found an Anvil node had been in a silent systemd crash loop for 12 days. Not \"degraded\" \u2014 an orphan process from a prior restart was holding the LevelDB LOCK file, so systemd's real service unit could never start. The orphan itself answered on the port. Every external check said healthy. I found it by running journalctl by hand.\r\nNo operator should ever have to know that. So each node now self-heals far better than previous:\r\n\u2022 systemd ExecStartPre runs anvil doctor --fix-locks-only on every service start \u2014 orphan LOCK holders are killed before the real start attempt. \r\n\u2022 anvil doctor --fix is a one-command operator remediation for orphan processes, crash-looping services, stale header stores with prev-hash-mismatch, and version skew between binary-on-disk and running process. \r\n\u2022 anvil upgrade sweeps ALL anvil processes (not just systemd-tracked ones) before binary replacement, and auto-migrates pre-existing systemd unit files to include the ExecStartPre hook. Existing operators get the full self-heal stack on their next upgrade \u2014 no manual systemd surgery. \r\n\u2022 anvil deploy now uses atomic binary replacement, so re-deploying on a running node doesn't fail with ETXTBSY. \r\n\u2022 Mesh heartbeat carries a service_health field (healthy / degraded / broken) so mesh consumers can distinguish an upstream outage from a local service meltdown \u2014 same user-visible symptom, very different remediations.\r\nEvery Anvil operator on any prior version gets the whole stack as a side effect of sudo anvil upgrade\r\nSpin up a node with one line of code:  curl -fsSL https://anvil.sendbsv.com/install | sudo bash\r\nNode v2.2.3 \u2014 github.com/BSVanon/Anvil/releases/tag/v2.2.3 \r\nSDK \u2014 npm install anvil-mesh@0.4.1",
  "media_type": "text/markdown",
  "filename": "|",
  "author": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "display_name": "BSVanon",
  "channel": null,
  "parent_txid": null,
  "ref_txid": null,
  "tags": null,
  "reply_count": 0,
  "like_count": 2,
  "timestamp": "2026-04-17T22:27:23.000Z",
  "media_url": null,
  "aip_verified": true,
  "has_access": true,
  "attachments": [],
  "ui_name": "BSVanon",
  "ui_display_name": "BSVanon",
  "ui_handle": "BSVanon",
  "ui_display_raw": "BSVanon",
  "ui_signer": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "ref_ui_name": "unknown",
  "ref_ui_signer": "unknown"
}
Signed by14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGKAIP!