v0.316.0 CHANGELOG; the push-once fact in this repo's unprompted-work rule
gates / gates (push) Failing after 49s

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117kRTSgs3rJWUFGxyoWN6Y
This commit is contained in:
2026-10-15 20:33:22 +02:00
parent 7f3e58ff0a
commit 48d8674876
2 changed files with 48 additions and 0 deletions
+6
View File
@@ -50,6 +50,12 @@ it **first** in the morning note. A decision you cannot write in that shape is o
on Tester 1, demo-hp and demo-felhom through the normal update path and the box walk's checks are green
on all three — not at night unless the night brief says so. **Agent releases still stop for the
operator's vouch.** The golden is baked weekly and vouched by the operator; CC never vouches. **No `--no-verify`.**
**A version number is pushed once** — `felhom-controller/controller/build.sh` now refuses a second
push of a tag that exists, and a registry it cannot reach is a refusal too. This is a FACT about
what the build does, not a new rule: a fix for something already pushed is the next patch version,
and a box on a bad image is moved by the normal update path, never by re-tagging. Earned on
2026-10-15, when 0.315.0 was pushed three times from three different commits and a cache kept
serving the first one (`09-update-architecture.md` §0).
7. **An enumerated gap becomes a row in the same session — or, if it is small, is fixed in it** (the size rule).
Prose is not a record.
8. **Hungarian text is searched with ASCII fragments**, with a positive and a negative control.
+42
View File
@@ -1,3 +1,45 @@
## v0.316.0 — the app page as one column; a version number is pushed once (2026-10-15)
**MinAgent: 0.155.0** (unchanged — no new agent call). No golden (`09` §3 decision 250). Design:
felhom.eu `architecture/02-controller-module-map.md` „The app page" (the layout rules and the asset
tag) and `09-update-architecture.md` (a version is pushed once). Layout: the operator-approved
mockup of 2026-10-15.
- **Measured first: why the tab bar rendered unstyled through the public address.** Not the box —
exactly one guest runs 0.315.0 and it runs the registry's current digest, and the floor is still
0.314.0 so nothing else could have taken it. It was a cache, and the mechanism is four facts: the
stylesheet URL was `?v={{.Version}}`, identical across **three different 0.315.0 builds**, the
first of which had no `.app-tabs` rules; the origin sends **no ETag and no Last-Modified**, so a
cached copy can only expire, never be revalidated; Cloudflare caches that URL and rewrites the
browser TTL from 3600 to **14400**; and the session's first request came back `EXPIRED`, which
only happens when the edge holds an aged-out entry. Evidence and the honest caveat (that probe
revalidated the stale object, so it is no longer reproducible):
`felhom.eu/documentation/audits/app-page-2026-10-15b/P0/VERDICT.md`.
- **`build.sh` refuses to push a version that already exists** — before building, for `--push` and
`--multiarch`. A registry it cannot reach is a refusal too: proving the tag is new is the point,
and „I could not ask" is not that proof. Local builds are untouched.
`scripts/test_build_push_once.sh` drives the real script with a fake docker over six cases.
- **Every build addresses its stylesheet differently.** `assetTag()` hashes version + `GitCommit` +
`BuildTime`, and all nine shells use it (seven asked for `?v={{.Version}}`). It stays opaque and 8
hex because the stranger-facing share pages use the same value. `Cache-Control` is unchanged —
the new address is the fix, not a shorter cache. The parity harness normalises the tag on both
sides, so the fixtures stop depending on which build rendered them.
- **The app page is one column** (the approved mockup): one width, sections separated by hairlines
instead of drawn as cards, tabs underlined rather than filled, a 64px hero with no box, and
label/value rows on one 200px grid. **A box now means something** — blue when the app is waiting
for the household, amber when something is risky, and nothing else is boxed.
- **The after-start callout is the first thing on „Beállítások".** A household opening a Plex that
wants its claim code should meet the code box, not a Restart button.
- **The auto-update SUCCESS banner is gone**, demoted to meta text beside the address. It was a
full-width box level with „the update failed" and „your files are missing". Every banner that
needs a decision is untouched and still above the tabs (R-571).
- Smaller, in the same spirit: „2. mentés beállítása — <app>" and „<app> — Exportálás" removed (page
titles for pages that no longer exist); a „Cím és kulcsok" section with one address row in place of
the duplicate disabled subdomain field; the „already installed, read-only" banner demoted to the
hint under the fields it describes; the install wizard given the same back link, hero and column.
- `app_row_dedup_gate` convicted `.app-row` for the page's new label/value row, correctly — that
class already means „a row in the app list". It is `.app-field-row`.
## v0.315.0 — one app page with four tabs; the guide the catalog can carry; no Raspberry Pi badge (2026-10-15)
**MinAgent: 0.155.0** (unchanged — no new agent call). No golden (`09` §3 decision 250). Design: felhom.eu