39bf56298d
gates / gates (push) Successful in 48s
Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
101 lines
7.2 KiB
Markdown
101 lines
7.2 KiB
Markdown
# REPORT — v0.319.0: the app page in panels, the login in one place, a password the box never had is said in words (2026-10-16)
|
|
|
|
Written in ASD-STE100 Simplified Technical English. Task: „app page tuning, round 2" (operator brief, section style **A**).
|
|
Design read first: felhom.eu `architecture/02-controller-module-map.md` „The app page" (now updated, `[DESIGN]`,
|
|
operator-approved 2026-10-16). Evidence: felhom.eu `documentation/audits/app-page-tuning-2026-10-16/`.
|
|
|
|
## 1. Plain words first
|
|
|
|
- **Why the Calibre-Web password was empty (Part 0, measured on demo-hp).** Calibre-Web was installed on 2026-08-21. Its
|
|
template got the password field on 2026-09-29. The box adds new generated values to installed apps, but never a
|
|
`type: password` value. So the box never had one. The user name the box shows IS the real one: a session renamed the
|
|
app's admin to it on 2026-10-01. So nothing was removed from demo-hp.
|
|
- **The page now:** the header, the tab bar and every section are panels. The open tab is filled and underlined.
|
|
One „Belépés az alkalmazásba" panel shows the name and the password side by side. If the box has no value, the page
|
|
says so in a sentence. It never shows an eye that fails.
|
|
- **Other boxes:** the hub lists Calibre-Web telemetry from demo-hp and demo-felhom only. On demo-felhom it is not installed
|
|
now (checked on the box). No customer box has this state.
|
|
|
|
## 2. Baselines and commits
|
|
|
|
controller `8d44416` (v0.318.0) → `d170a2a` (the work) → `7adbbb1` (export panel title and inputs, seen in the browser)
|
|
→ `0f82eba` (16px under the hero on the install page) → this docs commit. Built from a clean clone at `0f82eba` with that
|
|
clone's own `build.sh`: test images `0.319.0-rc.1..rc.3` (demo-hp only), release **0.319.0**.
|
|
|
|
## 3. What changed
|
|
|
|
- `web/app_login.go` (new): `loginFieldIndexes` (a `type: password` field plus the `secret`/`text` field with the same
|
|
prefix and `USER`/`USERNAME`/`EMAIL`), `appLoginFields`, `appSettingRows`, `storedValuePresent`.
|
|
- `web/handlers.go`: `deployPageData` gives the tab `LoginFields`, `SettingsRows`, `CurrentHDDLabel`; the reveal
|
|
handler's 404 branch uses `storedValuePresent`.
|
|
- `app_settings.html`: the login panel; „Cím és kulcsok" as rows (hint under the title, „Tárhely" row, other answers and
|
|
keys as rows); no `app_deploy_fields`, no `deploy-container` (700px) wrapper; every block an `.app-section`.
|
|
- `app_data.html`, `app_guide.html`, `app_logs.html`: every block an `.app-section` (screenshots hide their panel when none
|
|
loads; export title „Exportálás", inputs in the dashboard style).
|
|
- `style.css`: style A panels; the install page's `.form-section` and progress panel share the rule.
|
|
- `app_fields.html`: header comment only (the install page is byte-identical).
|
|
- Locales: `app_page.login_title`, `login_desc`, `login_no_password`, `login_no_name`, `value_no`; `app_export.exportalas`
|
|
is now „Exportálás" / "Export".
|
|
|
|
**Pairs (computed by the Go code over the catalog):** calibre-web, kimai (ADMIN_EMAIL), lubelogger, nextcloud,
|
|
paperless-ngx, radicale. The other 14 password apps show the password alone.
|
|
|
|
## 4. Tests and red-proofs
|
|
|
|
New, each seen failing by a compiling mutation, then reverted:
|
|
- `TestAppPage_LoginPairPanel` — pairing loop dropped → fails (name missing).
|
|
- `TestAppPage_NoStoredValueShowsSentence` — `Stored: true` always → fails (eye offered, endpoint 404).
|
|
- `TestAppPage_SettingsHasNoDuplicateDomain` — install form back in the tab → fails (Domain, deploy-form, HDD_PATH).
|
|
- `TestAppPage_OneSectionStyleEverywhere` — logs tab on old markup → fails.
|
|
- `TestDeployPage_DeployedSelectShowsStoredHDDPath` (re-targeted to the row) — row reads the default drive → fails.
|
|
|
|
**Caught by an old test during the work:** removing the deployed-only branches of `app_fields.html` would have put an
|
|
installed app's secret into `/apps/{slug}/install` (that address still answers for an installed app).
|
|
`TestDeployPage_DeployedApp_DoesNotCarryTheSecret` failed; the branches were restored and two parity cases now render
|
|
them (R-1095 filed for the route).
|
|
|
|
**Parity fixtures:** 36 app-page fixtures re-captured (the per-task exception): `app_settings_*` (22), `app_data_*` (9),
|
|
`app_guide_*` (4), `app_logs`. New: `app_settings_login_not_stored`, `app_settings_login_text_name`, `deploy_installed`,
|
|
`deploy_installed_restored`. Every `deploy_new*` fixture and every other fixture byte-identical.
|
|
`go test ./...` rc=0 and `controller_gates.py --fast` green before each commit.
|
|
|
|
## 5. Live validation
|
|
|
|
- **Browser:** headless Chrome (`chrome-headless-shell` on DooPlex, driven over the DevTools protocol by a small script)
|
|
through `https://felhom.enkisfelhom.hu`, signed in through the real login form. Calibre-Web and Paperless, four tabs
|
|
each, plus the Grocy install page. Measured: active tab `--bg-2` + 2px `--blue-bright`; hero, tab bar, sections
|
|
`--bg-1`; section padding 18px/24px, 16px apart; every section 820px = the column (logs: 966 = the wide column);
|
|
login pair two columns, one column at 390px, no side scroll. Console: clean, except one 404 for a screenshot file the
|
|
catalog does not have (the panel hides it; see §7). Screenshots: `audits/app-page-tuning-2026-10-16/browser/`, before:
|
|
`…/before/`.
|
|
- **Release:** per-customer floors 0.319.0 on Tester 1, demo-hp, demo-felhom (303 `floor_set`); all three ran 0.319.0 at
|
|
10:34 UTC, the image file written by the update path. Box walk checks green on all three: https-only (`https_only_check.py`
|
|
rc 0), 0 unhealthy / restarting / exited / created containers, controller healthy, dashboards 200. Global floor
|
|
0.319.0 at 10:35:57 UTC, per-customer floors cleared, read back from the hub DB with its WAL.
|
|
|
|
## 6. One slip of my own
|
|
|
|
I first saved the global floor with MinAgent **0.157.0**. The floor before it (0.318.0) carried **0.158.1**, set by the
|
|
operator because agent 0.158.0's format wrapper is superseded. I re-saved 0.319.0 / **0.158.1** at 10:37:02 UTC (read
|
|
back: `0.319.0=0.158.1`). For 65 seconds the declared MinAgent was lower. No box runs agent 0.158.0 (the hub's hosts:
|
|
three on 0.158.1, Tester 2 on 0.142.0 and held), so no box changed. The CHANGELOG header now says 0.158.1.
|
|
|
|
## 7. Observations
|
|
|
|
1. `/apps/{slug}/install` answers for an INSTALLED app with the install form read-only.
|
|
FILED: R-1095
|
|
2. The hub's per-app „Deployments 2" counts telemetry history (demo-felhom no longer has Calibre-Web).
|
|
NOT-A-FINDING: the page labels it telemetry; the box was checked directly.
|
|
3. `InjectMissingFields` never fills a new `type: password` field for an installed app.
|
|
NOT-A-FINDING: inventing a login the app never got is R-757's defect; the page now says it in words.
|
|
4. The guide asks for three screenshots; Calibre-Web has two, so the browser logs one 404.
|
|
NOT-A-FINDING: designed graceful hiding, unchanged.
|
|
5. The data tab's „2. mentés" status grid uses the mono font for values and wraps long text.
|
|
NOT-A-FINDING: unchanged markup, outside this brief.
|
|
|
|
## 8. Teardown
|
|
|
|
Machine: demo-hp guest 9201 runs 0.319.0 (was 0.318.0 → rc.1..rc.3 by hand, Tier 0); the Part 0 scripts were deleted
|
|
from the host and the guest. Host: nothing provisioned. Hub: the per-customer floors are cleared; the global floor is
|
|
0.319.0 / 0.158.1. The test tags `0.319.0-rc.1..3` stay in the registry (an rc is never offered to a household).
|