# CONTEXT.md — Project Memory > This file serves as persistent project memory across Claude Code sessions. > It replaces the auto-generated "Memory" from the claude.ai Project. > **Update this file at the end of each working session** with current state, > recent decisions, and anything the next session needs to know. > > Ask Claude Code: "Please update CONTEXT.md with what we did today" Last updated: 2026-10-16 (v0.318.0 — storage identity build B: the internal data place, partitions, R-1082, R-1084) > **2026-10-16 — v0.318.0 RELEASED; the global floor 0.318.0 / MinAgent 0.158.1 (set by the operator).** The internal data > place („Belső tárhely", agent ≥ 0.158.1 reports kind `internal`): bound on one drive-gate tick, registered on the next as > the default drive (web/internal_place.go); eject/decommission/wipe of it refused. Partitions in the format/attach wizards > (agent `formattable`: only while nothing on the disk is mounted); the whole disk under a registered part refused > server-side (`deviceBacksRegistered`). R-1084: the whole-box backup offer asks the same-disk question (`offerRelationFor`). > R-1082: `/mnt/sys_drive` never offered (`withoutSystemVolume`, by device). Live on a fresh one-disk scratch box: felhom.eu > `audits/storage-identity-buildB-2026-10-15/`. Next: R-1094 (the whole-disk refusal sentence), with the next release. > **2026-10-15 (late evening) — v0.316.0/.1/.2 built and on demo-hp; .3 committed, NOT built.** > **Measured before fixing:** the tabs rendered unstyled through the public address because of a > CACHE, not the box — the stylesheet URL was `?v={{.Version}}`, identical across three different > 0.315.0 builds; the origin sends NO ETag and NO Last-Modified, so a copy can only expire; and > Cloudflare caches it while rewriting the browser TTL to four hours. Evidence and its caveat: > `audits/app-page-2026-10-15b/P0/VERDICT.md`. > **Two mechanisms now:** `build.sh` refuses a second push of a version (a registry it cannot reach > is a refusal too), and every shell's stylesheet address is a per-build tag. > **The app page is the approved one-column mockup**: one width, hairline sections, underlined tabs, > and a box only for „the app is waiting for you" (blue) or „this is risky" (amber). The > auto-update SUCCESS banner is now meta text. > **THE LESSON OF THE EVENING, and it cost a bad push:** I put the guard in `controller/build.sh`, > but the release runbook runs `build/felhom-controller/build.sh` — a SEPARATE COPY from > 2026-07-18. Proving the refusal against a real tag therefore re-pushed 0.315.0 a fourth time > (R-1081). The build directory's script is a symlink now. A guard in a script nobody runs is not a > guard. The same shape bit twice more in one evening: the asset tag shipped dead because only one > of TWO render paths set it, and both times a BROWSER found what the suite could not. > Not yet validated: the operator's own look; 0.316.3's two cosmetic fixes. > **2026-10-15 (evening) — v0.315.0, ONE APP PAGE WITH FOUR TABS.** An app was six pages and every „Vissza" went to the > app LIST; it is now `/apps/{slug}/{settings,data,guide,logs}` plus `/apps/{slug}/install`, one shared header and one > set of banners (`internal/web/app_page.go`, `templates/app_shell.html`). Operator decisions recorded for this release: > **D1** — Export lives on „Adatok és mentés", not under Beállítások. **D2** — an after-start field's CARD is rendered > generically from the catalog's `after_start: true`, and its ACTION is Go code in a registry keyed by slug + env var > (`internal/web/after_start.go`), so customer text can never reach a catalog-defined command. **The FAQ is a section of > the guide, not a tab**, and **the guide tab replaces the details page**. **302, never 301**, for every old > `/stacks/{name}/…` GET — a cached 301 cannot be withdrawn; every POST on those paths is untouched. > New catalog block `app_info.guide` (sections + faq + `checked_version`), rendered only when `checked_version` names the > image tag its author checked it against; no template carries one yet (the content is the companion task). The Pi and > „csak x86" badges are gone; `PiCompatible` and the catalog key STAY this release, or a box on 0.314.0 would read > „csak x86" on every app. > **Found by a red-proof, and worth remembering:** the after-start handler's „the catalog must have DECLARED this field" > check could be deleted with the whole suite green — and a POST for an undeclared field then reached Plex and opened the > setup gate. Two guards that look like one are two tests. > **Two defects the whole test suite could not see, both found in Chrome on the workstation** (this is > the case for CC running on Windows): the tab bar had no CSS at all and the hero logo was unsized, > because the shell invented class names beside ones the design system already had rules for; and the > log tab's `