Compare commits
7 Commits
39030a3bbe
...
v1.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 0f5110f3d9 | |||
| 0fbacf9f98 | |||
| d8fd4110b0 | |||
| e17932d797 | |||
| a30f824a3c | |||
| 239d55b65b | |||
| 74e5b75380 |
@@ -49,3 +49,6 @@ coverage.html
|
|||||||
# Local-only planning / scratch — never committed.
|
# Local-only planning / scratch — never committed.
|
||||||
/ask.md
|
/ask.md
|
||||||
/docs/superpowers/
|
/docs/superpowers/
|
||||||
|
|
||||||
|
# Claude Code agent worktrees (transient, harness-created).
|
||||||
|
/.claude/worktrees/
|
||||||
|
|||||||
@@ -6,6 +6,44 @@ and the project follows [Semantic Versioning](https://semver.org/).
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [1.1.0] - 2026-06-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- **Always-On vs intermittent host mode.** A host can now be marked as
|
||||||
|
not always-on — for laptops/workstations that legitimately sleep,
|
||||||
|
travel, or shut down outside hours. An intermittent host no longer
|
||||||
|
raises "agent offline" alerts when it disappears; instead it shows a
|
||||||
|
calm "asleep" state in the UI ("asleep · last seen … · will catch up
|
||||||
|
on return") and is covered by a longer-horizon staleness alert (raised
|
||||||
|
only when it has an enabled schedule and no successful backup in 7
|
||||||
|
days). When such a host reconnects, the server waits a short settle
|
||||||
|
window and then automatically dispatches any scheduled backup whose
|
||||||
|
window elapsed while it was asleep. Toggle per host from the host
|
||||||
|
detail page (operator-band, audited as `host.mode_updated`). New and
|
||||||
|
existing hosts default to always-on, so current fleets are unaffected.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Host-detail header redesign: tags and presence are grouped into
|
||||||
|
labelled, boxed pills with click-to-edit; presence shows a `24x7` /
|
||||||
|
`Free` chip; the agent "out of date" indicator is simplified (the full
|
||||||
|
version detail remains in the Agent-update panel and on hover).
|
||||||
|
- Relative timestamps ("2h ago") now tick client-side, so a tab left
|
||||||
|
open no longer shows a stale value as wall-clock time moves on.
|
||||||
|
- Release and CI container images are now published to and pulled from
|
||||||
|
the zot OCI registry (`docker.dcglab.co.uk`).
|
||||||
|
|
||||||
|
## [1.0.1] - 2026-05-09
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Build version is now single-sourced from `internal/version`, and the
|
||||||
|
server Dockerfile's ldflags were corrected so docker-built binaries
|
||||||
|
report their real version. Previously `internal/version.Version` stayed
|
||||||
|
at its "dev" default in docker images, which made every host look
|
||||||
|
permanently out-of-date to the update logic.
|
||||||
|
|
||||||
## [1.0.0] - 2026-05-09
|
## [1.0.0] - 2026-05-09
|
||||||
|
|
||||||
First tagged release. Six development phases brought the project from
|
First tagged release. Six development phases brought the project from
|
||||||
|
|||||||
@@ -49,8 +49,14 @@ func TestDashboard_HostRowSparklineRendersWithHistory(t *testing.T) {
|
|||||||
hostID := makeHost(t, st, "h-spark")
|
hostID := makeHost(t, st, "h-spark")
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
// Two history points → polyline must render.
|
// Two history points → polyline must render. Use dates relative to
|
||||||
for i, day := range []string{"2026-05-05", "2026-05-06"} {
|
// now so the points always fall inside the dashboard's rolling
|
||||||
|
// 30-day window (ui_handlers.go: since = now-30d); hard-coded dates
|
||||||
|
// silently age out of the window and break this test over time.
|
||||||
|
for i, day := range []string{
|
||||||
|
time.Now().UTC().AddDate(0, 0, -2).Format("2006-01-02"),
|
||||||
|
time.Now().UTC().AddDate(0, 0, -1).Format("2006-01-02"),
|
||||||
|
} {
|
||||||
v := int64(100 + i*50)
|
v := int64(100 + i*50)
|
||||||
if err := st.UpsertHostRepoStatsHistory(ctx, hostID, day,
|
if err := st.UpsertHostRepoStatsHistory(ctx, hostID, day,
|
||||||
store.HostRepoStats{TotalSizeBytes: &v}, time.Now().UTC()); err != nil {
|
store.HostRepoStats{TotalSizeBytes: &v}, time.Now().UTC()); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user