steve
320be34970
docs(changelog): prepare v1.2.0
CI / Test (store) (pull_request) Successful in 15s
CI / Lint (pull_request) Successful in 11s
CI / Test (rest) (pull_request) Failing after 33s
CI / Build (windows/amd64) (pull_request) Successful in 7s
CI / Build (linux/amd64) (pull_request) Successful in 8s
CI / Build (linux/arm64) (pull_request) Successful in 7s
CI / Test (server-http) (pull_request) Successful in 1m44s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m27s
2026-08-22 11:29:59 +01:00
steve
25aefe90d6
Use anonymously pullable CI images
2026-08-22 11:29:15 +01:00
steve
56d97f13af
Merge pull request 'Add selectable canary-first agent updates' ( #48 ) from fix-issue-43-agent-updates-workflow into main
2026-08-22 11:11:41 +01:00
steve
383bdb7d36
Add selectable canary-first fleet updates
CI / Test (rest) (pull_request) Successful in 39s
CI / Test (store) (pull_request) Successful in 42s
CI / Lint (pull_request) Successful in 11s
CI / Build (windows/amd64) (pull_request) Successful in 7s
CI / Build (linux/amd64) (pull_request) Successful in 8s
CI / Build (linux/arm64) (pull_request) Successful in 8s
CI / Test (server-http) (pull_request) Successful in 1m45s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m17s
2026-08-22 11:08:53 +01:00
steve
b64f029892
Merge pull request 'Make snapshot projections fresh and self-diagnosing' ( #47 ) from fix-issue-40-snapshot-reconciliation into main
2026-08-22 11:03:47 +01:00
steve
f9718e6077
Make snapshot projections self-diagnosing
CI / Test (rest) (pull_request) Successful in 40s
CI / Test (store) (pull_request) Successful in 42s
CI / Lint (pull_request) Successful in 11s
CI / Build (windows/amd64) (pull_request) Successful in 8s
CI / Build (linux/arm64) (pull_request) Successful in 7s
CI / Build (linux/amd64) (pull_request) Successful in 8s
CI / Test (server-http) (pull_request) Successful in 1m32s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m26s
2026-08-22 11:00:46 +01:00
steve
8fdf4a1bdf
Merge pull request 'Detect and alert on stuck jobs' ( #46 ) from fix-issue-41-stuck-job-alerts into main
2026-08-22 10:56:31 +01:00
steve
750a06384b
Close websocket handshake response in test
CI / Test (server-http) (pull_request) Successful in 5s
CI / Test (rest) (pull_request) Successful in 23s
CI / Lint (pull_request) Successful in 10s
CI / Build (windows/amd64) (pull_request) Successful in 7s
CI / Test (store) (pull_request) Successful in 41s
CI / Build (linux/amd64) (pull_request) Successful in 8s
CI / Build (linux/arm64) (pull_request) Successful in 6s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m24s
2026-08-22 10:53:51 +01:00
steve
2110c7dab4
Detect and alert on stuck jobs
CI / Test (rest) (pull_request) Successful in 39s
CI / Test (store) (pull_request) Successful in 40s
CI / Lint (pull_request) Failing after 11s
CI / Build (linux/amd64) (pull_request) Successful in 8s
CI / Build (linux/arm64) (pull_request) Successful in 7s
CI / Build (windows/amd64) (pull_request) Successful in 25s
CI / Test (server-http) (pull_request) Successful in 1m39s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m16s
2026-08-22 10:52:13 +01:00
steve
8ddd3456e1
Merge pull request 'Fix WebSocket limit for large agent messages' ( #45 )
2026-08-22 10:48:31 +01:00
steve
74cb7f660f
fix(ws): raise bounded agent message limit
CI / Test (store) (pull_request) Successful in 6s
CI / Lint (pull_request) Failing after 20s
CI / Build (windows/amd64) (pull_request) Successful in 8s
CI / Test (rest) (pull_request) Successful in 38s
CI / Build (linux/amd64) (pull_request) Successful in 7s
CI / Build (linux/arm64) (pull_request) Successful in 8s
CI / Test (server-http) (pull_request) Successful in 1m28s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m24s
2026-08-22 10:46:00 +01:00
steve
1131f4330c
Merge pull request 'Release v1.1.1 — forget reliability fixes' ( #42 )
Release / Build + push image (push) Successful in 2m12s
v1.1.1
2026-08-22 10:12:53 +01:00
steve
337472a819
docs(changelog): prepare v1.1.1
CI / Test (store) (pull_request) Successful in 5s
CI / Test (rest) (pull_request) Successful in 8s
CI / Build (windows/amd64) (pull_request) Successful in 8s
CI / Lint (pull_request) Successful in 11s
CI / Build (linux/amd64) (pull_request) Successful in 8s
CI / Build (linux/arm64) (pull_request) Successful in 25s
CI / Test (server-http) (pull_request) Successful in 1m30s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m37s
2026-08-22 10:10:12 +01:00
steve
b315932cc8
chore(web): normalize generated stylesheet
2026-08-22 10:09:42 +01:00
steve
f6fa84d7d8
docs: expand issue contribution guidance
2026-08-22 10:09:42 +01:00
steve
904c522a23
Merge pull request 'Fix manual forget payload and dry-run execution' ( #39 )
2026-08-22 09:56:12 +01:00
steve
31f53d65a7
fix(forget): populate retention groups for manual runs
CI / Test (store) (pull_request) Successful in 5s
CI / Lint (pull_request) Successful in 10s
CI / Build (windows/amd64) (pull_request) Successful in 7s
CI / Build (linux/amd64) (pull_request) Successful in 8s
CI / Build (linux/arm64) (pull_request) Successful in 7s
CI / Test (rest) (pull_request) Successful in 39s
CI / Test (server-http) (pull_request) Successful in 1m37s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m16s
2026-08-22 09:53:31 +01:00
steve
528bdef433
Merge pull request 'Fix agent panic on WebSocket disconnect' ( #38 )
2026-08-22 09:49:37 +01:00
steve
dfe082629f
chore(lint): document websocket response ownership
CI / Test (rest) (pull_request) Successful in 38s
CI / Lint (pull_request) Successful in 7s
CI / Test (store) (pull_request) Successful in 39s
CI / Build (windows/amd64) (pull_request) Successful in 22s
CI / Build (linux/amd64) (pull_request) Successful in 8s
CI / Build (linux/arm64) (pull_request) Successful in 7s
CI / Test (server-http) (pull_request) Successful in 1m38s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m22s
2026-08-22 09:46:50 +01:00
steve
39aff83837
fix(agent): avoid panic on websocket disconnect
CI / Test (server-http) (pull_request) Successful in 5s
CI / Test (rest) (pull_request) Successful in 7s
CI / Test (store) (pull_request) Successful in 5s
CI / Build (windows/amd64) (pull_request) Successful in 7s
CI / Lint (pull_request) Failing after 10s
CI / Build (linux/arm64) (pull_request) Successful in 8s
CI / Build (linux/amd64) (pull_request) Successful in 24s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m36s
2026-08-22 09:45:20 +01:00
steve
27be28ee9c
Merge pull request 'docs: correct admin-credentials help text ( fixes #34 )' ( #35 ) from docs/admin-creds-help-text into main
2026-08-21 22:39:04 +01:00
Steve Cliff
a8a6fdfab5
docs: address review — make S3/B2/SFTP/local guidance actionable
...
CI / Test (store) (pull_request) Successful in 37s
CI / Test (rest) (pull_request) Successful in 48s
CI / Build (windows/amd64) (pull_request) Successful in 8s
CI / Lint (pull_request) Successful in 20s
CI / Build (linux/arm64) (pull_request) Successful in 24s
CI / Build (linux/amd64) (pull_request) Successful in 26s
CI / Test (server-http) (pull_request) Successful in 1m37s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m16s
The previous wording told operators to leave the slot blank and then
warned that doing so disables prune, which is contradictory. Prune is
gated on the admin slot for every backend, on both paths:
scheduled (maintenance_dispatch.go:52) skips silently, manual
(repo_ops.go:39) returns 400 admin_creds_required.
Also reworded the opening line, which still said 'only needed for
rest-server repos' while the new text asks other backends to fill it in.
2026-08-21 22:36:14 +01:00
Steve Cliff
e9df802478
docs: correct admin-credentials help text
...
CI / Test (rest) (pull_request) Successful in 1m42s
CI / Test (store) (pull_request) Successful in 1m45s
CI / Lint (pull_request) Successful in 28s
CI / Build (windows/amd64) (pull_request) Successful in 29s
CI / Test (server-http) (pull_request) Successful in 2m27s
CI / Build (linux/amd64) (pull_request) Successful in 30s
CI / Build (linux/arm64) (pull_request) Successful in 26s
e2e / Playwright vs docker-compose (pull_request) Successful in 1m30s
Forget does not use admin credentials. Only JobPrune builds a runner
against the admin slot (cmd/agent/main.go:622-645); JobForget runs on
the everyday runner, as the comment at main.go:517-524 states.
Also corrects the claim that leaving this blank lets everyday creds
handle prune: maintenance_dispatch.go:52-56 skips prune entirely with
'prune skipped — no admin creds' on any backend, with no fallback.
Refs #34
2026-08-21 21:01:39 +01:00
steve
6c6b962e24
Merge pull request 'De-flake TestDrainPendingSerializesPerHost (CI stability)' ( #33 ) from fix-flaky-server-http-tests into main
...
Reviewed-on: #33
2026-06-16 15:44:47 +01:00
steve
e64075d5d7
test(pending-drain): de-flake TestDrainPendingSerializesPerHost
...
CI / Test (store) (pull_request) Successful in 8s
CI / Test (rest) (pull_request) Successful in 12s
CI / Build (windows/amd64) (pull_request) Successful in 15s
CI / Lint (pull_request) Successful in 19s
CI / Build (linux/amd64) (pull_request) Successful in 12s
CI / Build (linux/arm64) (pull_request) Successful in 44s
CI / Test (server-http) (pull_request) Successful in 2m55s
e2e / Playwright vs docker-compose (pull_request) Successful in 2m45s
Keep the test WS client actively reading (a real agent always is) so
the server-side conn stays registered under parallel load, and drain to
completion via condition polling instead of asserting one-shot
completeness. The conn could be dropped/unregistered under CI load,
making DrainPending correctly no-op (conn==nil) and the test observe a
partial/empty drain. -race confirms no production data race; the
exactly-5-jobs assertion (proving the per-host mutex blocks
double-dispatch) is unchanged. Verified: 0 failures over 25 loaded runs
+ 4 -race iterations.
2026-06-16 13:29:47 +01:00
steve
0f5110f3d9
Merge pull request 'Release v1.1.0 — CHANGELOG' ( #32 ) from release-v1.1.0 into main
Release / Build + push image (push) Successful in 3m39s
v1.1.0
2026-06-16 07:32:00 +01:00
steve
0fbacf9f98
docs(changelog): v1.1.0 (always-on host mode) + retroactive v1.0.1
CI / Test (rest) (pull_request) Successful in 10s
CI / Lint (pull_request) Successful in 16s
CI / Build (windows/amd64) (pull_request) Successful in 11s
CI / Build (linux/amd64) (pull_request) Successful in 12s
CI / Build (linux/arm64) (pull_request) Successful in 11s
CI / Test (store) (pull_request) Successful in 1m5s
e2e / Playwright vs docker-compose (pull_request) Failing after 9s
CI / Test (server-http) (pull_request) Failing after 2m43s
2026-06-15 23:07:43 +01:00
steve
d8fd4110b0
Merge pull request 'Always-On vs intermittent host mode (laptops): suppress offline noise, catch up missed backups' ( #31 ) from feat-laptop-host-mode into main
...
Reviewed-on: #31
2026-06-15 23:01:03 +01:00
steve
e17932d797
Merge branch 'main' into feat-laptop-host-mode
CI / Test (rest) (pull_request) Successful in 1m6s
CI / Lint (pull_request) Successful in 18s
CI / Build (windows/amd64) (pull_request) Successful in 12s
CI / Build (linux/amd64) (pull_request) Successful in 14s
CI / Test (store) (pull_request) Successful in 1m8s
CI / Build (linux/arm64) (pull_request) Successful in 11s
e2e / Playwright vs docker-compose (pull_request) Failing after 10s
CI / Test (server-http) (pull_request) Successful in 2m52s
2026-06-15 23:00:56 +01:00
steve
39030a3bbe
ui(host header): boxed tags/presence pills, click-to-edit, simplified out-of-date chip
CI / Test (rest) (pull_request) Successful in 41s
CI / Test (store) (pull_request) Successful in 1m16s
CI / Lint (pull_request) Successful in 41s
CI / Build (windows/amd64) (pull_request) Successful in 14s
CI / Build (linux/arm64) (pull_request) Successful in 15s
e2e / Playwright vs docker-compose (pull_request) Failing after 11s
CI / Build (linux/amd64) (pull_request) Successful in 50s
CI / Test (server-http) (pull_request) Failing after 2m53s
2026-06-15 22:58:38 +01:00
steve
a30f824a3c
Merge pull request 'Tidy: fix stale-dated sparkline test + gitignore agent worktrees' ( #30 ) from tidy-sparkline-test-and-gitignore into main
...
Reviewed-on: #30
2026-06-15 22:32:53 +01:00
steve
239d55b65b
test(dashboard): use relative dates so sparkline test doesn't age out of the 30-day window
CI / Test (store) (pull_request) Successful in 8s
CI / Test (rest) (pull_request) Successful in 45s
CI / Lint (pull_request) Successful in 33s
CI / Build (windows/amd64) (pull_request) Successful in 44s
CI / Build (linux/amd64) (pull_request) Successful in 47s
CI / Build (linux/arm64) (pull_request) Successful in 45s
CI / Test (server-http) (pull_request) Successful in 2m26s
e2e / Playwright vs docker-compose (pull_request) Successful in 2m50s
2026-06-15 22:15:07 +01:00
steve
74e5b75380
chore: gitignore .claude/worktrees (transient agent worktrees)
2026-06-15 22:14:36 +01:00
steve
9371b7b777
fix(catchup): guard on real in-flight backup check; add scheduler tests
2026-06-15 21:45:01 +01:00
steve
10b2518323
docs(tasks): record NS-08 always-on/intermittent host mode
2026-06-15 21:30:23 +01:00
steve
6694dfdc3a
fix(ui): rebuild CSS bundle so dot-asleep ships to the browser
2026-06-15 21:27:33 +01:00
steve
f88f2cc1f2
feat(ui): asleep state, 24×7 chip, presence toggle for host mode
2026-06-15 21:22:42 +01:00
steve
1a07fbb217
feat(http): host mode toggle handler + route (host.mode_updated)
2026-06-15 21:17:57 +01:00
steve
9e6524788f
refactor(alert): refresh stale_schedule docs; log tick schedule errors; add mode-change + never-backed-up tests
2026-06-15 21:15:35 +01:00
steve
25c55e5e4d
feat(alert): suppress offline + add staleness alert for intermittent hosts
2026-06-15 21:09:39 +01:00
steve
e408de9610
refactor(catchup): drop dead nil-guard; document per-host baseline limitation
2026-06-15 21:06:37 +01:00
steve
5c4e0275d9
feat(catchup): arm on hello, fire missed-window backups on tick
2026-06-15 21:02:04 +01:00
steve
7aaafceab5
feat(catchup): scheduleOverdue helper for missed-window detection
2026-06-15 20:58:17 +01:00
steve
4c9641b6ed
fix(store): SetHostAlwaysOn returns ErrNotFound; test agent-token lookup path
2026-06-15 20:56:59 +01:00
steve
ff65d39f25
feat(store): add hosts.always_on flag (default on)
2026-06-15 20:53:13 +01:00
steve
9d16e3f7e3
docs(plan): always-on vs intermittent host mode implementation plan
2026-06-15 20:48:16 +01:00
steve
261b83ec26
docs(spec): clarify staleness vs job-failure alerting for asleep hosts
2026-06-15 20:42:00 +01:00
steve
0c3a0844e4
docs(spec): always-on vs intermittent host mode design
2026-06-15 20:37:45 +01:00
steve
2dae61f678
Merge pull request 'fix(ui): tick relative timestamps client-side so long-open tabs don't go stale' ( #29 ) from fix-stale-reltime into main
...
Reviewed-on: #29
2026-06-15 20:19:59 +01:00
steve
55cb8909c7
docs(tasks): record NS-07 client-side relTime ticker fix
CI / Test (rest) (pull_request) Successful in 1m46s
CI / Test (store) (pull_request) Successful in 2m4s
CI / Lint (pull_request) Successful in 34s
CI / Build (windows/amd64) (pull_request) Successful in 45s
CI / Build (linux/amd64) (pull_request) Successful in 46s
CI / Test (server-http) (pull_request) Failing after 3m32s
CI / Build (linux/arm64) (pull_request) Successful in 47s
e2e / Playwright vs docker-compose (pull_request) Successful in 2m43s
2026-06-15 20:19:32 +01:00