The header (overallStatus/syncStatusText, ContentView.swift:723-758) is computed from a disjoint input set vs the issue list (SyncthingManager.swift:544-574). The entire warning tier — parked shares, disconnected required peers, conflicts — never reaches the header, so a green check + "Ready" coexists with "1 Pending Share Needs Attention" (empirically confirmed), with "No vaults found / Create a vault in Obsidian first", and (code-traced) with "All Synced" while the only required peer has been offline for days. Same lie-class as the #61 "Ready while the bridge was dead" finding, on the connectivity/consent axes.
Fix: derive the header from the max severity of the issue list (single source of truth), returning an attention state ("Action Needed") when actionable pending folders or disconnected required devices exist; "Ready" only when genuinely armed (vault accessible / a vault exists). Regression test: header != synced while a park exists. Strings in all four languages.
The header (overallStatus/syncStatusText, ContentView.swift:723-758) is computed from a disjoint input set vs the issue list (SyncthingManager.swift:544-574). The entire warning tier — parked shares, disconnected required peers, conflicts — never reaches the header, so a green check + "Ready" coexists with "1 Pending Share Needs Attention" (empirically confirmed), with "No vaults found / Create a vault in Obsidian first", and (code-traced) with "All Synced" while the only required peer has been offline for days. Same lie-class as the #61 "Ready while the bridge was dead" finding, on the connectivity/consent axes.
Fix: derive the header from the max severity of the issue list (single source of truth), returning an attention state ("Action Needed") when actionable pending folders or disconnected required devices exist; "Ready" only when genuinely armed (vault accessible / a vault exists). Regression test: header != synced while a park exists. Strings in all four languages.