P2 redesign · phase 2.5: tasks.md rewrite + UI patch-up
The store rewrite in e7eea7a left tasks.md describing a data shape
(fat schedules, host.repo_initialised_at, manual flag) that no longer
exists, and left the host-detail templates rendering against fields
the store no longer exposes. This commit reconciles both.
tasks.md
* Mid-phase pivot called out at the top of Phase 2 with commit hashes.
* P2-01..P2-05 kept as done but stamped ⚠️ "shipped against old shape
— to re-validate under P2R-02".
* P2-04.5 (manual flag) struck as superseded.
* New P2R-NN section covering work that previously lived only in
commit messages and code stubs:
P2R-00.1/00.2/00.3/00.4 — phases already shipped (this commit
records 00.4)
P2R-01 — REST + WS rewire against slim schedules + source groups
+ repo maintenance + auto-init
P2R-02 — UI rewire against the v4 wireframes
P2R-03..05 — prune / check / unlock command surfaces
P2R-06 — server-side maintenance ticker (cadence-driven)
P2R-07 — repo stats panel
P2R-08 — pending_runs queue worker
P2R-09 — auto-init UX polish
P2R-10..12 — pre/post hooks rehomed from schedule onto source group
P2R-13..14 — bandwidth + next/last-run surface
* P2-16/17/18 (Windows + announce-and-approve) untouched.
* Phase 2 acceptance criteria rewritten against the new model.
UI patch-up (P2R-00.4)
* host_detail.html + host_row.html: removed every $host.RepoInitialisedAt
reference (column dropped in migration 0008 — render was 500'ing).
* Removed manual init-repo branches; the auto-init path replaces them.
* Schedules sub-tab demoted from active link to inert div until P2R-02
rebuilds the page (it was linking to a raw 501 from the stubbed
ui_schedules.go handlers).
* Disabled the four per-host Run-now buttons (dashboard row + host
detail header + empty-snapshots state + right-rail) with a
"lands in P2 Phase 4" hint — handler is 501-stubbed pending P2R-01,
so leaving them clickable produced silent failures over htmx.
* Dashboard row-action becomes "Open →" instead of Run-now.
Project tooling
* .mcp.json at repo root: project-scoped Playwright MCP override.
Forces --headless (so I don't pop a browser at the operator) and
--output-dir _diag (so screenshots / traces land in the gitignored
_diag/ directory rather than scattered at the repo root).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -38,20 +38,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
{{if eq $host.Status "offline"}}
|
||||
<button class="btn" disabled title="agent is offline">Run backup now</button>
|
||||
{{else if not $host.RepoInitialisedAt}}
|
||||
<button class="btn btn-danger"
|
||||
hx-post="/hosts/{{$host.ID}}/init-repo"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this"
|
||||
title="restic repo not yet initialised — run this once before the first backup">Initialise repo</button>
|
||||
{{else}}
|
||||
<button class="btn btn-primary"
|
||||
hx-post="/hosts/{{$host.ID}}/run-backup"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this">Run backup now</button>
|
||||
{{end}}
|
||||
<button class="btn" disabled title="per-source-group Run-now lands in P2 Phase 4">Run backup now</button>
|
||||
<button class="btn">Edit credentials</button>
|
||||
<button class="btn btn-ghost text-base px-2.5">⋯</button>
|
||||
</div>
|
||||
@@ -93,7 +80,7 @@
|
||||
{{/* ---------- secondary tabs ---------- */}}
|
||||
<div class="flex items-end mt-1.5">
|
||||
<a class="sub-tab active" href="/hosts/{{$host.ID}}">Snapshots <span class="mono text-ink-fade text-[11px] ml-1">{{comma $host.SnapshotCount}}</span></a>
|
||||
<a class="sub-tab" href="/hosts/{{$host.ID}}/schedules">Schedules</a>
|
||||
<div class="sub-tab" title="schedules UI lands in P2 Phase 4">Schedules</div>
|
||||
<div class="sub-tab">Jobs</div>
|
||||
<div class="sub-tab">Repo</div>
|
||||
<div class="sub-tab">Settings</div>
|
||||
@@ -118,21 +105,9 @@
|
||||
<p class="text-pretty text-ink-mute text-[13px] mt-2 mx-auto max-w-[440px] leading-[1.65]">
|
||||
Once a backup completes, the agent will refresh this list automatically.
|
||||
</p>
|
||||
{{if ne $host.Status "offline"}}
|
||||
<div class="mt-5">
|
||||
{{if not $host.RepoInitialisedAt}}
|
||||
<button class="btn btn-danger"
|
||||
hx-post="/hosts/{{$host.ID}}/init-repo"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this">Initialise repo</button>
|
||||
{{else}}
|
||||
<button class="btn btn-primary"
|
||||
hx-post="/hosts/{{$host.ID}}/run-backup"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this">Run now</button>
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
<div class="mt-5">
|
||||
<button class="btn" disabled title="per-source-group Run-now lands in P2 Phase 4">Run now</button>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="hairline grid items-baseline px-4 py-2.5 text-[11px] text-ink-fade uppercase tracking-[0.08em]"
|
||||
@@ -176,18 +151,7 @@
|
||||
<div class="panel rounded-[7px] px-4 py-3.5">
|
||||
<div class="text-[11px] text-ink-fade uppercase tracking-[0.1em] mb-2.5">Run-now</div>
|
||||
<div class="flex flex-col gap-1.5">
|
||||
{{if not $host.RepoInitialisedAt}}
|
||||
<button class="btn justify-start w-full text-bad font-medium {{if eq $host.Status "offline"}}opacity-50 cursor-not-allowed pointer-events-none{{end}}"
|
||||
hx-post="/hosts/{{$host.ID}}/init-repo"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this"
|
||||
title="restic repo not yet initialised — click to run `restic init` once">init</button>
|
||||
{{end}}
|
||||
<button class="btn justify-start w-full {{if or (eq $host.Status "offline") (not $host.RepoInitialisedAt)}}opacity-50 cursor-not-allowed pointer-events-none{{end}}"
|
||||
hx-post="/hosts/{{$host.ID}}/run-backup"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this"
|
||||
{{if not $host.RepoInitialisedAt}}title="initialise the repo first"{{end}}>backup</button>
|
||||
<button class="btn justify-start w-full" disabled title="per-source-group Run-now lands in P2 Phase 4">backup <span class="text-[10px] text-ink-fade ml-1.5">P2</span></button>
|
||||
<button class="btn justify-start w-full" disabled title="lands with P2-05">forget <span class="text-[10px] text-ink-fade ml-1.5">P2</span></button>
|
||||
<button class="btn justify-start w-full" disabled title="lands with P2-06">prune <span class="text-[10px] text-ink-fade ml-1.5">admin</span></button>
|
||||
<button class="btn justify-start w-full" disabled title="lands with P2-07">check <span class="text-[10px] text-ink-fade ml-1.5">P2</span></button>
|
||||
|
||||
@@ -51,22 +51,8 @@
|
||||
<span class="mono text-xs text-ink-fade">offline</span>
|
||||
{{- else if .CurrentJobID -}}
|
||||
<a href="/jobs/{{deref .CurrentJobID}}" class="btn btn-ghost">View job →</a>
|
||||
{{- else if not .RepoInitialisedAt -}}
|
||||
<button class="btn btn-danger"
|
||||
hx-post="/hosts/{{.ID}}/init-repo"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this"
|
||||
title="restic repo not yet initialised">Init repo</button>
|
||||
{{- else if eq (deref .LastBackupStatus) "failed" -}}
|
||||
<button class="btn"
|
||||
hx-post="/hosts/{{.ID}}/run-backup"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this">Retry</button>
|
||||
{{- else -}}
|
||||
<button class="btn whitespace-nowrap"
|
||||
hx-post="/hosts/{{.ID}}/run-backup"
|
||||
hx-swap="none"
|
||||
hx-disabled-elt="this">Run now</button>
|
||||
<a href="/hosts/{{.ID}}" class="btn btn-ghost whitespace-nowrap" title="per-source-group Run-now lands in P2 Phase 4 — open the host">Open →</a>
|
||||
{{- end -}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user