controller v0.47.0: backups page — whole-guest backup visibility + manual trigger

Part 2 of the USB/backup spec. agentapi: StatusResponse.Backup record, DueResponse
age_seconds, RestoreTestStatus(). New "Rendszermentés (teljes mentés)" section
(read-only: last backup/target PBS-vs-local/next-due/restore-test) + "Mentés most"
manual trigger that goes through the quiesce loop (controller owns quiescing):
quiesce.Loop gains mutex + TriggerNow() (single-flight, async). New
/api/guest-backup/{trigger,status} (distinct from apiRouter's /api/backup/*).
App-data rows relabeled under an "Alkalmazás-mentések" divider. Config → slice 10.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-12 11:15:25 +02:00
parent cd76afeca1
commit bbed5af662
10 changed files with 558 additions and 15 deletions
@@ -3125,6 +3125,11 @@ a.stat-card:hover {
.badge-lock { background: rgba(210, 153, 34, 0.18); color: var(--yellow); }
.badge-muted { background: rgba(110, 118, 129, 0.18); color: var(--text-muted); }
.badge-info { background: rgba(0, 136, 204, 0.18); color: var(--accent-light); }
/* Backup-page tier divider between the whole-guest section and the per-app section. */
.backup-tier-divider {
margin: 2rem 0 0.25rem; padding-top: 1.25rem;
border-top: 1px solid var(--border-color); font-size: 1.05rem;
}
/* Per-card storage purpose description + the tiering one-liner above the drive list. */
.drive-purpose { font-size: .8rem; color: var(--text-secondary); line-height: 1.4; }
.drive-tiering-note {