R-1299 CLOSED: the clean-up window button (hub 0.174.0/0.174.1, live grant + cancel on tester-1); R-1326 filed (hub start-up vs liveness); R-1237 updated (46 dead names removed with sec rm); 07/05 design lines; secrets runbook: sec rm
gates / gates (push) Successful in 1m59s

This commit is contained in:
admin committed 2026-10-27 21:16:48 +01:00
1 parent 714ee236b2
commit f633d48bab
14 files changed
+553 -7

No files matched your search

@@ -0,0 +1,41 @@
# R-1299 — the one-time clean-up window gets a button (hub 0.174.0 → 0.174.1), and `sec rm` (cc-secrets 0.3.0), 2026-10-27 evening
## The button
- **Where:** customer page → „Backup & DR" tab → card „Off-site clean-up window" (0.174.0 had it in the Overview's Backup
card; the operator looked under Backup & DR first, so 0.174.1 moved it). Shown only when the box reports off-site
enabled.
- **Shows:** the weekly switch, the normal cap (half the snapshots, at least 5), a waiting one-time grant and its limit,
the last window (id, time, result, count, cap).
- **Form:** optional limit → confirm step (a GET; names the customer and the limit; stores nothing) → POST to the SAME
route as the script address, `/offsite/window-grant/<customer>`, rule unchanged (`wr(grpOffsite)`), the page's CSRF.
A waiting grant shows „Cancel the waiting window".
- **Bound:** a raised limit above the store's measured snapshot count is refused (a window cannot remove more than exist);
the 500 ceiling stays. D55's 260-for-373 stays possible.
- **Record:** every grant and cancel writes an operator-only info event `offsite_window_grant` (who, customer, limit) and a
log line.
## Live check (operator's clicks; nothing removed)
1. 0.174.0, 20:07 CET: the operator granted ONE window on tester-1 with the normal cap through the confirm step (screenshots
in the session). Hub DB (with WAL): `offsite_window_grant:tester-1 = 1`; log „ONE clean-up window granted for tester-1
with the normal cap, by operator session". **No event row** — the defect below.
2. 0.174.1, 20:42 CET: the operator pressed „Cancel the waiting window" under Backup & DR. Hub DB: the grant is empty; ONE
stored row `offsite_window_grant` info „the waiting one-time window was cancelled (by operator session)",
`{"by":"operator session","cancelled":true}`, source hub; the log line matches.
**Defect found by step 1 and fixed in 0.174.1:** the event went only to the dispatcher, which writes no row (it routes
mail; info routes nowhere). The test had asserted the dispatcher CALL; it now reads the STORED rows — red with 0.174.0's
shape (`redproof-0174.1.txt`).
## Deploys
0.174.0: `sha256:4f9ee04a…` from `d85198b8` (CI 2433), live 19:25 CET. 0.174.1: `sha256:bb43f88a…` from `de57c090` (CI
2437), live 20:26 CET. Both built from a clean clone (the shared clone held another session's uncommitted installer
edit), hub-only ArgoCD sync, Synced/Healthy, 0 restarts. Start-up 36 s / 31 s against a liveness kill at ~65 s → R-1326.
## `sec rm` and the tidy-up
cc-secrets 0.3.0 (`dc82cf9`): one name per call, unknown refused, `rm NAME` commit + push, undo by `git revert`. 7 tests,
2 red-proofs (28/28 in all). The operator approved removing 46 dead names; `sec-rm.txt` holds the run (names only): 92 →
46 names, every removal committed and pushed, `sec doctor` all OK after.
@@ -0,0 +1,170 @@
[STEP] 0/3 — Checking the registry: is 0.174.0 already published?
[INFO] 0.174.0 is not present in the registry — proceeding.
[STEP] 1/3 — Pulling latest code (the tree must be clean and at origin/main)...
[INFO] ╔══════════════════════════════════════╗
[INFO] ║ felhom-hub build ║
[INFO] ╚══════════════════════════════════════╝
[INFO] Version: 0.174.0 (build-hub.sh v1.25.0)
[INFO] Commit: d85198b8
[INFO] Source: /tmp/claude-1000/-mnt-5-hdd-felhom-eu-git/0b76c4d7-9b39-4e4e-869d-d0d2c6006331/scratchpad/felhom-eu-clean/hub
[INFO] Build: /mnt/5_hdd/felhom.eu/build/felhom-hub/workspace
[INFO] Image: gitea.dooplex.hu/admin/felhom-hub:0.174.0
[STEP] 2/3 — Syncing source to workspace...
[INFO] Source synced to /mnt/5_hdd/felhom.eu/build/felhom-hub/workspace
[INFO] App assets synced (263 files)
[INFO] Package structure verified ✓
[INFO] Running go mod tidy...
[STEP] 3/3 — Building Docker image...
[INFO] Building for current platform + pushing...
#0 building with "default" instance using docker driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 1.46kB done
#1 DONE 0.0s
#2 [internal] load metadata for docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#2 ...
#3 [auth] library/alpine:pull token for registry-1.docker.io
#3 DONE 0.0s
#4 [auth] library/golang:pull token for registry-1.docker.io
#4 DONE 0.0s
#5 [internal] load metadata for docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
#5 DONE 1.1s
#2 [internal] load metadata for docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#2 DONE 1.8s
#6 [internal] load .dockerignore
#6 transferring context: 2B done
#6 DONE 0.0s
#7 [stage-1 1/5] FROM docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
#7 resolve docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6 0.0s done
#7 DONE 0.0s
#8 [builder 1/6] FROM docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#8 resolve docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c 0.0s done
#8 DONE 0.0s
#9 [internal] load build context
#9 transferring context: 22.60MB 0.3s done
#9 DONE 0.3s
#8 [builder 1/6] FROM docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#8 DONE 0.2s
#8 [builder 1/6] FROM docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#8 extracting sha256:7b229517ed222597277036d94892173207d01a731ab3a88eeb1de2e963a2c788 0.1s done
#8 sha256:c8e3100880d834be60a9562375f4c5018b2cb26d64591bd0060aa3a80b935f43 126B / 126B 0.2s done
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 0B / 71.15MB 0.3s
#8 sha256:c012d78a862fe59ae6789c91f982ea68a882c9c44bbde97013914458dcdd9c4c 0B / 244.47kB 0.2s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 11.53MB / 71.15MB 0.6s
#8 sha256:c012d78a862fe59ae6789c91f982ea68a882c9c44bbde97013914458dcdd9c4c 244.47kB / 244.47kB 0.7s done
#8 extracting sha256:c012d78a862fe59ae6789c91f982ea68a882c9c44bbde97013914458dcdd9c4c 0.1s done
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 35.65MB / 71.15MB 0.9s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 49.28MB / 71.15MB 1.1s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 59.77MB / 71.15MB 1.2s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 71.15MB / 71.15MB 1.4s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 71.15MB / 71.15MB 1.5s done
#8 extracting sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b
#8 extracting sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 5.5s done
#8 DONE 7.3s
#8 [builder 1/6] FROM docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#8 extracting sha256:c8e3100880d834be60a9562375f4c5018b2cb26d64591bd0060aa3a80b935f43 0.0s done
#8 extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 0.0s done
#8 DONE 7.3s
#10 [builder 2/6] WORKDIR /app
#10 DONE 1.0s
#11 [builder 3/6] COPY go.mod go.sum* ./
#11 DONE 0.0s
#12 [builder 4/6] RUN go mod download || true
#12 DONE 8.5s
#13 [builder 5/6] COPY . .
#13 DONE 0.3s
#14 [builder 6/6] RUN go mod tidy && CGO_ENABLED=0 go build -ldflags "-s -w -X main.Version=0.174.0 -X main.BuildTime=2026-10-27T18:21:23Z" -o /felhom-hub ./cmd/hub/
#14 0.393 go: downloading gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
#14 0.428 go: downloading modernc.org/fileutil v1.3.40
#14 0.428 go: downloading github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e
#14 0.444 go: downloading golang.org/x/term v0.47.0
#14 0.604 go: downloading modernc.org/ccgo/v4 v4.30.1
#14 0.604 go: downloading modernc.org/goabi0 v0.2.0
#14 0.604 go: downloading golang.org/x/tools v0.38.0
#14 0.604 go: downloading modernc.org/cc/v4 v4.27.1
#14 0.960 go: downloading modernc.org/opt v0.1.4
#14 0.960 go: downloading modernc.org/sortutil v1.2.1
#14 0.960 go: downloading modernc.org/strutil v1.2.1
#14 0.960 go: downloading modernc.org/token v1.1.0
#14 1.085 go: downloading modernc.org/gc/v2 v2.6.5
#14 1.085 go: downloading golang.org/x/mod v0.29.0
#14 1.085 go: downloading modernc.org/gc/v3 v3.1.1
#14 1.189 go: downloading github.com/hashicorp/golang-lru/v2 v2.0.7
#14 1.591 go: downloading golang.org/x/sync v0.17.0
#14 DONE 23.2s
#15 [stage-1 2/5] RUN apk add --no-cache ca-certificates tzdata
#15 CACHED
#16 [stage-1 3/5] COPY --from=builder /felhom-hub /usr/local/bin/felhom-hub
#16 DONE 0.5s
#17 [stage-1 4/5] RUN mkdir -p /data /etc/felhom-hub
#17 DONE 0.6s
#18 [stage-1 5/5] COPY assets/ /usr/share/felhom/assets-seed/
#18 DONE 0.7s
#19 exporting to image
#19 exporting layers
#19 exporting layers 3.1s done
#19 exporting manifest sha256:d0107a4fbc74cb575ab0ffdf9313560c09f5346604850cc63f9b94a094652a50 0.1s done
#19 exporting config sha256:9fd122d68270b24d81dff95b3ae0bd8087c395d88fe6dc1b0ec9a245b1c5fa41 0.0s done
#19 exporting attestation manifest sha256:3116065764acf34a6699cfbb21347c49b143104754c9a8139da589cdd8516d83 0.0s done
#19 exporting manifest list sha256:4f9ee04a9ff7c108a37a411be3c3de521b6acccb431c9e550c3567f7211e2e94 0.0s done
#19 naming to gitea.dooplex.hu/admin/felhom-hub:0.174.0 done
#19 unpacking to gitea.dooplex.hu/admin/felhom-hub:0.174.0
#19 unpacking to gitea.dooplex.hu/admin/felhom-hub:0.174.0 0.3s done
#19 DONE 3.6s
[INFO] Pushing...
The push refers to repository [gitea.dooplex.hu/admin/felhom-hub]
93c1eb832da7: Waiting
44136fa355b3: Waiting
c89750c9a8b7: Waiting
e2de96513ba9: Waiting
e2de96513ba9: Layer already exists
93c1eb832da7: Layer already exists
44136fa355b3: Already exists
979db3c09e54: Pushed
c89750c9a8b7: Pushed
eb8433490c74: Pushed
142d086ef218: Pushed
0.174.0: digest: sha256:4f9ee04a9ff7c108a37a411be3c3de521b6acccb431c9e550c3567f7211e2e94 size: 856
[INFO] ╔══════════════════════════════════════╗
[INFO] ║ Build complete ✓ ║
[INFO] ╚══════════════════════════════════════╝
[INFO] Image: gitea.dooplex.hu/admin/felhom-hub:0.174.0
[INFO] Size: 73M
[INFO] Image pushed to registry.
[INFO] Deploy to k3s — GitOps ONLY. The manifest in git is the source of truth:
[INFO] 1. bump the image tag in /tmp/claude-1000/-mnt-5-hdd-felhom-eu-git/0b76c4d7-9b39-4e4e-869d-d0d2c6006331/scratchpad/felhom-eu-clean/manifests/hub.yaml to 0.174.0, commit, push
[INFO] 2. hard-refresh + sync the ArgoCD app (auto-sync is OFF — the sync is deliberate):
[INFO] sudo kubectl -n argocd annotate application felhom argocd.argoproj.io/refresh=hard --overwrite
[INFO] sudo kubectl -n argocd patch application felhom --type merge \
[INFO] -p '"{"operation":"initiatedBy":{"username":"cc"}}"' -p '"{"operation":"sync":{"syncStrategy":{"apply":{}}}}"'
[INFO]
[INFO] NEVER `kubectl set image` or `kubectl apply` by hand — ArgoCD reverts it on the next
[INFO] sync, so the change looks applied, works for a while, and then silently disappears.
@@ -0,0 +1,154 @@
[STEP] 0/3 — Checking the registry: is 0.174.1 already published?
[INFO] 0.174.1 is not present in the registry — proceeding.
[STEP] 1/3 — Pulling latest code (the tree must be clean and at origin/main)...
[INFO] ╔══════════════════════════════════════╗
[INFO] ║ felhom-hub build ║
[INFO] ╚══════════════════════════════════════╝
[INFO] Version: 0.174.1 (build-hub.sh v1.25.0)
[INFO] Commit: de57c090
[INFO] Source: /tmp/claude-1000/-mnt-5-hdd-felhom-eu-git/0b76c4d7-9b39-4e4e-869d-d0d2c6006331/scratchpad/felhom-eu-clean/hub
[INFO] Build: /mnt/5_hdd/felhom.eu/build/felhom-hub/workspace
[INFO] Image: gitea.dooplex.hu/admin/felhom-hub:0.174.1
[STEP] 2/3 — Syncing source to workspace...
[INFO] Source synced to /mnt/5_hdd/felhom.eu/build/felhom-hub/workspace
[INFO] App assets synced (263 files)
[INFO] Package structure verified ✓
[INFO] Running go mod tidy...
[STEP] 3/3 — Building Docker image...
[INFO] Building for current platform + pushing...
#0 building with "default" instance using docker driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 1.46kB done
#1 DONE 0.0s
#2 [internal] load metadata for docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
#2 ...
#3 [auth] library/alpine:pull token for registry-1.docker.io
#3 DONE 0.0s
#4 [auth] library/golang:pull token for registry-1.docker.io
#4 DONE 0.0s
#5 [internal] load metadata for docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#5 DONE 1.6s
#2 [internal] load metadata for docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
#2 DONE 1.6s
#6 [internal] load .dockerignore
#6 transferring context: 2B done
#6 DONE 0.0s
#7 [internal] load build context
#7 transferring context: 22.60MB 0.2s done
#7 DONE 0.2s
#8 [stage-1 1/5] FROM docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
#8 resolve docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
#8 resolve docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6 0.5s done
#8 DONE 0.5s
#9 [builder 1/6] FROM docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#9 resolve docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c 0.5s done
#9 DONE 0.6s
#10 [builder 3/6] COPY go.mod go.sum* ./
#10 CACHED
#11 [builder 2/6] WORKDIR /app
#11 CACHED
#12 [builder 4/6] RUN go mod download || true
#12 CACHED
#13 [builder 5/6] COPY . .
#13 DONE 1.2s
#14 [builder 6/6] RUN go mod tidy && CGO_ENABLED=0 go build -ldflags "-s -w -X main.Version=0.174.1 -X main.BuildTime=2026-10-27T19:22:07Z" -o /felhom-hub ./cmd/hub/
#14 0.852 go: downloading gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
#14 0.888 go: downloading modernc.org/fileutil v1.3.40
#14 0.888 go: downloading github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e
#14 0.952 go: downloading golang.org/x/term v0.47.0
#14 1.848 go: downloading modernc.org/goabi0 v0.2.0
#14 1.848 go: downloading modernc.org/cc/v4 v4.27.1
#14 1.848 go: downloading golang.org/x/tools v0.38.0
#14 1.848 go: downloading modernc.org/ccgo/v4 v4.30.1
#14 1.976 go: downloading modernc.org/token v1.1.0
#14 1.976 go: downloading modernc.org/sortutil v1.2.1
#14 1.976 go: downloading modernc.org/strutil v1.2.1
#14 1.976 go: downloading modernc.org/opt v0.1.4
#14 2.061 go: downloading modernc.org/gc/v2 v2.6.5
#14 2.061 go: downloading golang.org/x/mod v0.29.0
#14 2.061 go: downloading modernc.org/gc/v3 v3.1.1
#14 2.195 go: downloading github.com/hashicorp/golang-lru/v2 v2.0.7
#14 2.659 go: downloading golang.org/x/sync v0.17.0
#14 DONE 23.6s
#15 [stage-1 2/5] RUN apk add --no-cache ca-certificates tzdata
#15 CACHED
#16 [stage-1 3/5] COPY --from=builder /felhom-hub /usr/local/bin/felhom-hub
#16 DONE 0.1s
#17 [stage-1 4/5] RUN mkdir -p /data /etc/felhom-hub
#17 DONE 0.3s
#18 [stage-1 5/5] COPY assets/ /usr/share/felhom/assets-seed/
#18 DONE 0.2s
#19 exporting to image
#19 exporting layers
#19 exporting layers 1.7s done
#19 exporting manifest sha256:52497a2e4ced33643f95e2461b55c7632e271e6f30c2b4c1570e5274e1b69d7a done
#19 exporting config sha256:590eb0076b318559b5b7f3136359f369e2ee24ff9ace6cd9baedf44369282fc4 done
#19 exporting attestation manifest sha256:a310eaff8556f58dccd2ff8d2dcb4c3992fbeb1b4cdee1e97c821f8ef5e8eb21 0.0s done
#19 exporting manifest list sha256:bb43f88acd59b8b20914381932eb2d9f779d44c190c34d3349eed91d37ce71fb done
#19 naming to gitea.dooplex.hu/admin/felhom-hub:0.174.1 done
#19 unpacking to gitea.dooplex.hu/admin/felhom-hub:0.174.1
#19 unpacking to gitea.dooplex.hu/admin/felhom-hub:0.174.1 0.3s done
#19 DONE 2.1s
[INFO] Pushing...
The push refers to repository [gitea.dooplex.hu/admin/felhom-hub]
44136fa355b3: Waiting
93c1eb832da7: Waiting
e2de96513ba9: Waiting
63f117ea3134: Waiting
44136fa355b3: Waiting
93c1eb832da7: Waiting
e2de96513ba9: Waiting
63f117ea3134: Waiting
63f117ea3134: Waiting
b83b40f86264: Waiting
44136fa355b3: Waiting
93c1eb832da7: Layer already exists
e2de96513ba9: Waiting
e2de96513ba9: Layer already exists
44136fa355b3: Already exists
63f117ea3134: Pushed
36e3e6d81e76: Pushed
b83b40f86264: Pushed
f65c9a964e26: Pushed
0.174.1: digest: sha256:bb43f88acd59b8b20914381932eb2d9f779d44c190c34d3349eed91d37ce71fb size: 856
[INFO] ╔══════════════════════════════════════╗
[INFO] ║ Build complete ✓ ║
[INFO] ╚══════════════════════════════════════╝
[INFO] Image: gitea.dooplex.hu/admin/felhom-hub:0.174.1
[INFO] Size: 73M
[INFO] Image pushed to registry.
[INFO] Deploy to k3s — GitOps ONLY. The manifest in git is the source of truth:
[INFO] 1. bump the image tag in /tmp/claude-1000/-mnt-5-hdd-felhom-eu-git/0b76c4d7-9b39-4e4e-869d-d0d2c6006331/scratchpad/felhom-eu-clean/manifests/hub.yaml to 0.174.1, commit, push
[INFO] 2. hard-refresh + sync the ArgoCD app (auto-sync is OFF — the sync is deliberate):
[INFO] sudo kubectl -n argocd annotate application felhom argocd.argoproj.io/refresh=hard --overwrite
[INFO] sudo kubectl -n argocd patch application felhom --type merge \
[INFO] -p '"{"operation":"initiatedBy":{"username":"cc"}}"' -p '"{"operation":"sync":{"syncStrategy":{"apply":{}}}}"'
[INFO]
[INFO] NEVER `kubectl set image` or `kubectl apply` by hand — ArgoCD reverts it on the next
[INFO] sync, so the change looks applied, works for a while, and then silently disappears.
@@ -0,0 +1,40 @@
### 1: the block removed from the page
--- FAIL: TestR1299_ThePageShowsTheWindowBlockPerBranch (0.30s)
offsite_window_test.go:80: the page lacks "id=\"offsite-window\""
offsite_window_test.go:80: the page lacks "id=\"window-form\""
offsite_window_test.go:80: the page lacks "name=\"window\" value=\"confirm\""
offsite_window_test.go:80: the page lacks "Normal cap per window"
offsite_window_test.go:80: the page lacks "20 (half the snapshots"
offsite_window_test.go:80: the page lacks "at most 40"
offsite_window_test.go:80: the page lacks "none waiting"
### 2: max_remove ignored
--- FAIL: TestR1299_AGrantThroughTheFormStoresOneGrantWithItsLimit (0.14s)
offsite_window_test.go:118: stored grant: pending=true max=0, want true 33
--- FAIL: TestR1299_WithoutACountOnlyTheCeilingBounds (0.16s)
offsite_window_test.go:178: stored max 0, want 260
FAIL
FAIL gitea.dooplex.hu/admin/felhom-hub/internal/web 1.466s
FAIL
### 3: no upper bound
--- FAIL: TestR1299_ThePageShowsTheWindowBlockPerBranch (0.32s)
offsite_window_test.go:91: a limit above the snapshot count must render the refusal at the confirm step, not the confirm
--- FAIL: TestR1299_RefusalsStoreNothing (0.74s)
offsite_window_test.go:160: above the snapshot count: 303 Location="/customers/acme?flash=window_granted#offsite-window"
offsite_window_test.go:163: above the snapshot count: a grant was stored
offsite_window_test.go:166: above the snapshot count: 1 event(s) for a refused request
offsite_window_test.go:160: script above the snapshot count: 200 Location=""
offsite_window_test.go:163: script above the snapshot count: a grant was stored
### 4: no confirm check
--- FAIL: TestR1299_RefusalsStoreNothing (0.72s)
offsite_window_test.go:160: no confirm step: 303 Location="/customers/acme?flash=window_granted#offsite-window"
offsite_window_test.go:163: no confirm step: a grant was stored
offsite_window_test.go:166: no confirm step: 1 event(s) for a refused request
FAIL
FAIL gitea.dooplex.hu/admin/felhom-hub/internal/web 1.613s
FAIL
### 5: cancel not handled
--- FAIL: TestR1299_CancelRemovesAWaitingGrant (0.13s)
offsite_window_test.go:193: cancel with none waiting: Location="/customers/acme?flash=window_needs_confirm#offsite-window"
FAIL
FAIL gitea.dooplex.hu/admin/felhom-hub/internal/web 1.607s
FAIL
@@ -0,0 +1,8 @@
### 0.174.0's shape: dispatcher only, no row
--- FAIL: TestR1299_AGrantThroughTheFormStoresOneGrantWithItsLimit (0.14s)
offsite_window_test.go:142: stored rows: [] — want ONE info offsite_window_grant row naming the limit and who
--- FAIL: TestR1299_CancelRemovesAWaitingGrant (0.13s)
offsite_window_test.go:235: stored rows: [] — want ONE cancel row
### the block back in the Overview card (0.174.0's place)
--- FAIL: TestR1299_ThePageShowsTheWindowBlockPerBranch (0.28s)
offsite_window_test.go:95: the window block must sit in the Backup & DR tab (panel at 56541, block at 12480) — where the operator looked first
@@ -0,0 +1,46 @@
CC_D55_WINDOW: removed; committed and pushed; undo: git revert of the `rm CC_D55_WINDOW` commit
HUB_TOKEN_D55_WINDOW: removed; committed and pushed; undo: git revert of the `rm HUB_TOKEN_D55_WINDOW` commit
REHEARSAL_2026_10_20_APP_BOOKSTACK: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_APP_BOOKSTACK` commit
REHEARSAL_2026_10_20_APP_RADICALE: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_APP_RADICALE` commit
REHEARSAL_2026_10_20_APP_VAULTADMIN: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_APP_VAULTADMIN` commit
REHEARSAL_2026_10_20_BIND_TOKEN: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_BIND_TOKEN` commit
REHEARSAL_2026_10_20_BIND_TOKEN_B7: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_BIND_TOKEN_B7` commit
REHEARSAL_2026_10_20_BOOKSTACK_TOKEN: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_BOOKSTACK_TOKEN` commit
REHEARSAL_2026_10_20_DASH_PW: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_DASH_PW` commit
REHEARSAL_2026_10_20_FAMILY_IRISZ: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_FAMILY_IRISZ` commit
REHEARSAL_2026_10_20_FAMILY_KATA: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_FAMILY_KATA` commit
REHEARSAL_2026_10_20_FAMILY_ODON: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_FAMILY_ODON` commit
REHEARSAL_2026_10_20_INSTALL_ROOTPW: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_INSTALL_ROOTPW` commit
REHEARSAL_2026_10_20_IRISZ_PW: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_IRISZ_PW` commit
REHEARSAL_2026_10_20_KATA_PW: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_KATA_PW` commit
REHEARSAL_2026_10_20_ODON_PW: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_ODON_PW` commit
REHEARSAL_2026_10_20_OLD_BIND_TOKEN: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_OLD_BIND_TOKEN` commit
REHEARSAL_2026_10_20_PAIRING_CODE: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_PAIRING_CODE` commit
REHEARSAL_2026_10_20_PAIRING_CODE_B7: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_PAIRING_CODE_B7` commit
REHEARSAL_2026_10_20_SETUP_CODE: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_SETUP_CODE` commit
REHEARSAL_2026_10_20_SETUP_CODE_B7: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_SETUP_CODE_B7` commit
REHEARSAL_2026_10_20_SMB_PW: removed; committed and pushed; undo: git revert of the `rm REHEARSAL_2026_10_20_SMB_PW` commit
FIXES_2026_10_21_BIND_TOKEN: removed; committed and pushed; undo: git revert of the `rm FIXES_2026_10_21_BIND_TOKEN` commit
FIXES_2026_10_21_PAIRING_CODE: removed; committed and pushed; undo: git revert of the `rm FIXES_2026_10_21_PAIRING_CODE` commit
FIXES_2026_10_21_ROOTPW: removed; committed and pushed; undo: git revert of the `rm FIXES_2026_10_21_ROOTPW` commit
FIXES_2026_10_21_SETUP_CODE: removed; committed and pushed; undo: git revert of the `rm FIXES_2026_10_21_SETUP_CODE` commit
NIGHT_2026_10_21_BIND_TOKEN: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_21_BIND_TOKEN` commit
NIGHT_2026_10_21_PAIRING_CODE: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_21_PAIRING_CODE` commit
NIGHT_2026_10_21_ROOTPW: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_21_ROOTPW` commit
NIGHT_2026_10_21_SETUP_CODE: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_21_SETUP_CODE` commit
NIGHT_2026_10_23_BIND_TOKEN: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_23_BIND_TOKEN` commit
NIGHT_2026_10_23_DASH_PW: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_23_DASH_PW` commit
NIGHT_2026_10_23_PAIRING_CODE: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_23_PAIRING_CODE` commit
NIGHT_2026_10_23_ROOTPW: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_23_ROOTPW` commit
NIGHT_2026_10_23_SETUP_CODE: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_23_SETUP_CODE` commit
NIGHT_2026_10_23_VAULTED_ROOTPW: removed; committed and pushed; undo: git revert of the `rm NIGHT_2026_10_23_VAULTED_ROOTPW` commit
RIG_2026_10_25_DASH_PW: removed; committed and pushed; undo: git revert of the `rm RIG_2026_10_25_DASH_PW` commit
RIG_2026_10_25_SETUP_CODE: removed; committed and pushed; undo: git revert of the `rm RIG_2026_10_25_SETUP_CODE` commit
REL_2026_10_26_ROOTPW: removed; committed and pushed; undo: git revert of the `rm REL_2026_10_26_ROOTPW` commit
SWEEP_2026_10_24_BIND_TOKEN: removed; committed and pushed; undo: git revert of the `rm SWEEP_2026_10_24_BIND_TOKEN` commit
SWEEP_2026_10_24_DASH_PW: removed; committed and pushed; undo: git revert of the `rm SWEEP_2026_10_24_DASH_PW` commit
SWEEP_2026_10_24_PAIRING_CODE: removed; committed and pushed; undo: git revert of the `rm SWEEP_2026_10_24_PAIRING_CODE` commit
SWEEP_2026_10_24_ROOTPW: removed; committed and pushed; undo: git revert of the `rm SWEEP_2026_10_24_ROOTPW` commit
SWEEP_2026_10_24_SETUP_CODE: removed; committed and pushed; undo: git revert of the `rm SWEEP_2026_10_24_SETUP_CODE` commit
R_C11_REWALK: removed; committed and pushed; undo: git revert of the `rm R_C11_REWALK` commit
R_PART4: removed; committed and pushed; undo: git revert of the `rm R_PART4` commit