# 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.320.0 — logins and folders: FileBrowser part of the box, one login answer per app, „Fájlok ↗") > **2026-10-16 — v0.320.0 RELEASED by CC; the global floor 0.320.0 / MinAgent 0.158.1.** A protected infra stack is > installed by definition on the app page (`Deployed || Protected`; v0.315.0 had shown FileBrowser „not installed" with > Install and no login); the deploy API and `DeployStack` refuse a protected stack. FileBrowser `operator` state → > „Új jelszó beállítása" (`stacks.ResetFileBrowserAdminPassword`: its CLI with the server stopped, verify, encrypt, > `generated`) — pressed on demo-hp; **the N100 waits for the operator's yes**. Every installed app has ONE login answer > (`web/app_login.go` `loginAnswerFor`; catalog `app_info.login_kind`). „Fájlok ↗" + per-drive media folders; a folder with > no FileBrowser source is text. Decisions inside the brief (felhom.eu `REPORT-logins-folders-2026-10-16.md` §0): no backup > sentence on media rows; no data tab for infra; „none" behind the family gate says the family sign-in. Next: R-1100 > (one sign-in), R-1101 (stale FileBrowser password), R-1102 (eight „known password" lines, decision D10). > **2026-10-16 — v0.319.0 RELEASED by CC; the global floor 0.319.0 / MinAgent 0.158.1.** App page style A (operator > 2026-10-16): the hero, the tab bar and every section are panels on `--bg-1`; the install page's form groups use the same > rule. „Belépés az alkalmazásba" pairs a `type: password` field with its `*_USER/_USERNAME/_EMAIL` name > (`web/app_login.go`); a field the box holds no value for is a sentence, never an eye — page and reveal endpoint share > `storedValuePresent`. Measured cause on demo-hp: Calibre-Web installed 2026-08-21, `ADMIN_PASSWORD` entered its template > 2026-09-29, and `InjectMissingFields` never fills a `type: password` field; its stored user name is real (renamed in the > app on 2026-10-01). The settings tab no longer renders `app_deploy_fields`; `/apps/{slug}/install` for an installed app > still does (R-1095). Evidence: felhom.eu `audits/app-page-tuning-2026-10-16/`. > **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 `