fix(fleet): harden remote node updates with admin enforcement, expiry fix, and diagnostics (#542)

- Fix completed-entry auto-expiry using resolvedAt instead of startedAt
- Add admin role enforcement to update trigger and update-all endpoints
- Add missing error field in rejected-promise fallback for update-status
- Fix rejected promises in update-all losing node names
- Harden frontend recheck button with try/catch/finally error handling
- Align frontend isValidVersion with stricter regex validation
- Add diagnostic logging gated behind developer_mode
- Extract resolveTracker helper to centralize terminal state transitions
- Add 15 new fleet test cases covering auth, tier gating, input validation, and admin roles
- Document admin requirement and troubleshooting in fleet-view docs
This commit is contained in:
Anso
2026-04-12 22:07:41 -04:00
committed by GitHub
parent a0fe84e84b
commit d23c6779af
6 changed files with 217 additions and 30 deletions
+8 -3
View File
@@ -1398,9 +1398,14 @@ export function FleetView({ onNavigateToNode }: FleetViewProps) {
disabled={recheckingUpdates}
onClick={async () => {
setRecheckingUpdates(true);
await apiFetch('/fleet/update-status?recheck=true', { method: 'DELETE', localOnly: true });
await fetchUpdateStatus();
setRecheckingUpdates(false);
try {
await apiFetch('/fleet/update-status?recheck=true', { method: 'DELETE', localOnly: true });
await fetchUpdateStatus();
} catch (err) {
console.warn('[Fleet] Recheck failed:', err);
} finally {
setRecheckingUpdates(false);
}
}}
>
<RefreshCw className={`w-3 h-3 mr-1.5 ${recheckingUpdates ? 'animate-spin' : ''}`} strokeWidth={1.5} />