release: 4.12.0 — version bump + PR audit & docs-site catch-up#3802
Conversation
Finalize 4.12.0 (from 4.12.0-rc2): package.json, package-lock.json, desktop/package.json, desktop/src-tauri/tauri.conf.json, helm/Chart.yaml. Promote CHANGELOG [Unreleased] → [4.12.0]. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011JEaCGwY9Wz8jeV4e22GW4
…I additions Release-audit of every PR since v4.11.5 surfaced documentation gaps. Brings the docs site current with the 4.12.0 feature set: - New page docs/features/automation-engine.md (+ sidebar nav) for the node/ builder-based Automation Engine (#3653 et al). v-pre-wrapped so the {{ }} token syntax renders literally without breaking the VitePress build. - meshcore.md: new Regions/Scopes section (#3667 et al), channel unread indicators, heard-repeaters badge, per-message route line, byte counter, on-demand telemetry polling, Define Path editor, repeater DM-hidden behavior. - automation.md: corrected stale auto-favorite eligibility table (#3786/#3774). - maps.md: traceroute default-keyed channel routing + channel dropdowns (#3723). - map-analysis.md: rich multi-source node popups (#3692). - device.md: unmessagable-node DM-hidden behavior (#3760). Verified: vitepress build passes; tokens render literally. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011JEaCGwY9Wz8jeV4e22GW4
|
Claude finished @Yeraze's task —— View job PR Review: release/4.12.0Tasks:
OverviewThis is a clean release-finalization PR — version bumps + documentation catch-up. No production code changes. All version bumps are consistent. The main review focus is the documentation quality and the two flagged release-risk items. Version Consistency — ✅ CleanAll five required files are aligned at 4.12.0:
Documentation Quality
|
System Test ResultsMeshMonitor System Test ResultsTest Run: 2026-06-26 19:03:23 EDT Test Summary
✅ Overall Result: PASSEDAll deployment configurations are working correctly! Test DetailsConfiguration Import:
Quick Start Test:
Security Test:
V1 API Test:
Reverse Proxy Test:
Reverse Proxy + OIDC Test:
Virtual Node CLI Test:
Backup & Restore Test:
Database Migration Test:
DB Backing Consistency Test:
|
…d atomic Release-audit (PR #3753) flagged the tombstone-exhaustion rebuild path as a data-availability risk: it DROPs the live channel_database and RENAMEs a fresh copy into place, but the migration runner wraps each migration's statements in no transaction, so each DDL auto-commits. A crash/connection drop in the DROP→RENAME window would leave the database with no channel_database — and the migration's own idempotency check (`'channel_database'::regclass`) would then throw "relation does not exist" on the next startup, blocking recovery. Wrap the rebuild in BEGIN/COMMIT with ROLLBACK on error. PostgreSQL DDL is transactional, so any failure now rolls back to the original table intact. (Channel keys/PSKs were already copied before the drop, so this hardens the narrow availability window rather than fixing data loss. The path only fires at ≥1500 attnum tombstones — 1500+ restarts on the old migration 021 bug — so it's rare, but the blast radius warranted the fix.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011JEaCGwY9Wz8jeV4e22GW4
|
Claude encountered an error —— View job I'll analyze this and get back to you. |
|
Claude finished @Yeraze's task —— View job PR Review: release/4.12.0Tasks:
OverviewThis is a release-finalization PR with no general application code changes — just version bumps, a CHANGELOG update, and documentation. The one production code change is an update to migration 104, which resolves the issue flagged in the original PR description about PostgreSQL atomicity. Migration 104 — PostgreSQL Rebuild (the important one) ✅ Now CorrectThe 16-line addition to What changed: // Lines 74–162: explicit BEGIN / COMMIT / ROLLBACK wrapping rebuildChannelDatabasePostgres()
await client.query('BEGIN');
try {
// ... DROP TABLE channel_database CASCADE, copy, RENAME ...
await client.query('COMMIT');
} catch (err) {
await client.query('ROLLBACK');
throw err;
}Assessment:
Version Consistency — ✅ CleanAll five files are aligned at 4.12.0:
Documentation — ✅ Generally Good
|
System Test ResultsMeshMonitor System Test ResultsTest Run: 2026-06-26 19:09:32 EDT ❌ Overall Result: FAILEDAborted on first failing test (fail-fast mode). Remaining tests skipped. Failed Test
|
System Test ResultsMeshMonitor System Test ResultsTest Run: 2026-06-26 19:25:12 EDT Test Summary
✅ Overall Result: PASSEDAll deployment configurations are working correctly! Test DetailsConfiguration Import:
Quick Start Test:
Security Test:
V1 API Test:
Reverse Proxy Test:
Reverse Proxy + OIDC Test:
Virtual Node CLI Test:
Backup & Restore Test:
Database Migration Test:
DB Backing Consistency Test:
|
Summary
Finalizes 4.12.0 (from
4.12.0-rc2). Includes the version bump across all release files, plus a documentation catch-up driven by an audit of every one of the 74 PRs merged since v4.11.5. System tests are enabled on this PR.Changes
Version → 4.12.0
package.json,package-lock.json,desktop/package.json,desktop/src-tauri/tauri.conf.json,helm/meshmonitor/Chart.yamlCHANGELOG.md:[Unreleased]→[4.12.0] - 2026-06-26Documentation (docs site / meshmonitor.org)
Two large user-facing feature areas had shipped with no public docs, plus several smaller gaps — all closed:
docs/features/automation-engine.md(+ sidebar nav) — the node/builder-based Automation Engine ([FEAT] Migrate automations to a generic automation engine with user-creatable automations #3653 et al). Wrapped inv-preso the{{ }}token syntax renders literally without breaking the VitePress build.docs/features/meshcore.md— new Regions / Scopes section ([FEAT] MeshCore: Region/Scope Support #3667 et al), channel unread indicators (feat(meshcore): show unread message indicator on the Channels view (#3703) #3716), heard-repeaters badge (feat(meshcore): channel "heard repeaters" via self-echo correlation (#3700) #3707), per-message route line (feat(meshcore): show hop count + relay route below received messages (#3742) — Phase 1 #3750), byte-accurate send counter (fix(meshcore): MQTT unread dot + readability + byte-accurate message counter #3790), on-demand telemetry polling (feat(meshcore): manual telemetry poll buttons (#3674) #3681), Define Path editor (feat(meshcore): 2/3-byte path hash support in Define Path editor (#3670) #3686), repeater DM-hidden behavior (fix(messaging): no DM UI for MeshCore repeaters & Meshtastic unmessagable nodes (#3755) #3760).docs/features/automation.md— corrected the stale auto-favorite eligibility table (fix(auto-favorite): never auto-favorite CLIENT/CLIENT_MUTE on CLIENT_BASE locals (#3774) #3786/[BUG] 'Auto Favorite automation for zero-cost hop routing#2018' feature favorites literally everybody #3774).docs/features/maps.md— traceroute default-keyed channel routing + channel dropdowns (fix(traceroute): route over the default-keyed channel + add channel dropdowns for Traceroute & Node Info (#3696) #3723).docs/features/map-analysis.md— rich multi-source node popups (feat(map-analysis): rich multi-source node popups matching the Unified map #3692).docs/features/device.md— unmessagable-node DM-hidden behavior (fix(messaging): no DM UI for MeshCore repeaters & Meshtastic unmessagable nodes (#3755) #3760).PR audit — 2 release-risk items flagged (FYI, not introduced here)
The audit flagged two pre-existing items (already shipped in rc1/rc2) worth a second look:
channel_databaserebuild on tombstone exhaustion (attnum ≥1500) does a destructiveDROP TABLE … CASCADE+ copy. A mid-rebuild failure on a production PG DB risks channel-key/PSK loss. Worth verifying the live-column copy + FK re-attach and adding backup guidance.out_path_lenpacked encoding (PR feat(meshcore): 2/3-byte path hash support in Define Path editor (#3670) #3686) — now stored in firmware PACKED format (top 2 bits = hash_size−1), contradicting prior project understanding. Harmless for 1-byte paths; could misroute 2/3-byte manual paths if the firmware assumption is wrong. PR claims firmware verification; a second confirmation is prudent.Issues Resolved
Release of 4.12.0. Documentation for #3653 and #3667 feature sets.
Documentation Updates
See the Documentation section above.
vitepress build docspasses;{{ }}tokens verified to render literally.Testing
npm run docs:build(VitePress) builds cleanautomation-engine.mdand the meshcoreRegions / Scopessection for accuracy; consider the two flagged release-risk items above before cutting the release tag🤖 Generated with Claude Code