gate 11: register the observations gate, and mark up this repo's observations
gates / gates (push) Successful in 13s

The shared gate lives in felhom.eu/scripts/observations_gate.py and is invoked
across the workspace, exactly as reuse_refs_check.py and instructions_gate.py
already are. It is never copied.

REPORT.md's observations now carry their markers. Item 1 was the finding that
had no register row - only the first broken app per hour reaches the operator -
and it is now R-389. Item 4, the golden-bake runbook's missing `pveam update`,
is R-390. Items 3 and 5 are declared NOT-A-FINDING with their reasons. The
observations' text itself is unchanged; only the markers were added.
This commit is contained in:
2026-08-23 13:53:18 +02:00
parent 1da2c9c6c6
commit f8c9390946
2 changed files with 18 additions and 1 deletions
+13 -1
View File
@@ -239,7 +239,12 @@ published but **NOT vouched**; floor still **0.222.0**; all apps running; plante
R-329 and R-386 closed and compressed; **R-387** (closed) and **R-388** (the notification-model R-329 and R-386 closed and compressed; **R-387** (closed) and **R-388** (the notification-model
product decision — open, operator's call) filed. product decision — open, operator's call) filed.
## 15. Observations — noticed, documented, NOT acted on ## 15. Observations
> **Each item carries `FILED: R-NNN` or `NOT-A-FINDING: <reason>` (gate 11, added 2026-08-23).**
> The markers were added retrospectively on 2026-08-24 when the gate was built: item 1 was the very
> finding that had no row, and adding its marker is the first thing the gate ever asked for. The
> observations' text is unchanged.
1. **The operator cooldown key has no app identifier, and it now bites.** PrivateBin's alarm four 1. **The operator cooldown key has no app identifier, and it now bites.** PrivateBin's alarm four
minutes after BookStack's was logged `suppressed — operator cooldown 1h, minutes after BookStack's was logged `suppressed — operator cooldown 1h,
@@ -247,13 +252,20 @@ product decision — open, operator's call) filed.
R-182's known cooldown-key shape; it was harmless while `app_start_failed` was undeliverable and is R-182's known cooldown-key shape; it was harmless while `app_start_failed` was undeliverable and is
not any more. **Same pattern as R-329 itself: a known-broken thing moved from unreachable to not any more. **Same pattern as R-329 itself: a known-broken thing moved from unreachable to
load-bearing.** Not fixed here. load-bearing.** Not fixed here.
FILED: R-389
2. **The settings page grew 12 → 15 toggles in one session** — one new alarm, plus two compound 2. **The settings page grew 12 → 15 toggles in one session** — one new alarm, plus two compound
toggles split into four. Recorded as the argument inside R-388. toggles split into four. Recorded as the argument inside R-388.
FILED: R-388
3. `internal/notify/notifier.go` carries **pre-existing** gofmt drift in an unrelated const block, 3. `internal/notify/notifier.go` carries **pre-existing** gofmt drift in an unrelated const block,
confirmed by stashing this session's work and re-running `gofmt -l`. Not touched (§12). confirmed by stashing this session's work and re-running `gofmt -l`. Not touched (§12).
NOT-A-FINDING: cosmetic drift in an unrelated const block, predating this work and touching no
behaviour; §12 forbids nearby refactors, so filing a row would only queue a whitespace commit.
4. **The golden-bake runbook still lacks `pveam update`** — second consecutive bake to hit the stale 4. **The golden-bake runbook still lacks `pveam update`** — second consecutive bake to hit the stale
index on the `virgin` snapshot, presenting as `400 … no such template`. index on the `virgin` snapshot, presenting as `400 … no such template`.
FILED: R-390
5. **Deliberately left open, untouched:** R-102, R-359, R-385, and R-388's redesign. 5. **Deliberately left open, untouched:** R-102, R-359, R-385, and R-388's redesign.
NOT-A-FINDING: this item is a pointer to rows that already exist, not a new observation; it is
here so their absence from this session reads as deliberate rather than forgotten.
### CI runs, confirmed by ID ### CI runs, confirmed by ID
+5
View File
@@ -47,6 +47,9 @@ REPO = os.path.dirname(CTRL) # <repo> — the root REUSE.md l
SHARED_REUSE = os.path.join(os.path.dirname(REPO), "felhom.eu", "scripts", "reuse_refs_check.py") SHARED_REUSE = os.path.join(os.path.dirname(REPO), "felhom.eu", "scripts", "reuse_refs_check.py")
SHARED_INSTRUCTIONS = os.path.join( SHARED_INSTRUCTIONS = os.path.join(
os.path.dirname(REPO), "felhom.eu", "scripts", "instructions_gate.py") os.path.dirname(REPO), "felhom.eu", "scripts", "instructions_gate.py")
# R-389 — shared, like the two above: it lives in felhom.eu/scripts/ and is never copied.
SHARED_OBSERVATIONS = os.path.join(
os.path.dirname(REPO), "felhom.eu", "scripts", "observations_gate.py")
# (label, absolute script path, args, fast) # (label, absolute script path, args, fast)
GATES = [ GATES = [
@@ -61,6 +64,8 @@ GATES = [
("retrieval-promise", os.path.join(SCRIPTS, "retrieval_promise_gate.py"), [], True), ("retrieval-promise", os.path.join(SCRIPTS, "retrieval_promise_gate.py"), [], True),
("reuse-refs", SHARED_REUSE, [REPO], True), ("reuse-refs", SHARED_REUSE, [REPO], True),
("instructions", SHARED_INSTRUCTIONS, [REPO], True), ("instructions", SHARED_INSTRUCTIONS, [REPO], True),
# R-389 — a REPORT.md observation with no register row behind it. Fast: stdlib file reads.
("observations", SHARED_OBSERVATIONS, [REPO], True),
] ]
VERDICT = {0: "OK", 1: "FAILED", 2: "INCONCLUSIVE"} VERDICT = {0: "OK", 1: "FAILED", 2: "INCONCLUSIVE"}