docs: CHANGELOG v0.113.0 + REPORT + CONTEXT + README NAS section + REUSE seams

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
This commit is contained in:
2026-07-11 10:31:07 +02:00
parent a65dcff85a
commit 5d06ecf374
5 changed files with 186 additions and 58 deletions
+36
View File
@@ -1,5 +1,41 @@
## Changelog
### v0.113.0 — NAS verify-before-commit + page redesign + protocol-honest guidance (2026-07-11)
Kills the "bogus share sits at Készenlét forever" bug: `POST /api/storage/netstorage/add` now
verifies the share END-TO-END before anything is registered, and rolls everything back on failure.
Built on SPIKE-nas-verify-2026-07-11 (b57f6ca) with agent v0.81.0; live-validated AE on demo 9201
against an isolated sim NAS.
- **Orchestration job** (`internal/web/netstorage_job.go`, the migrate.go shape): sync validation →
detached single-flight job on `context.Background()` (~150 s budget; a closed tab can't abort a
rollback) with phases `agent_add → verifying → probing → registering → done|failed`, polled on
NEW `GET /api/storage/netstorage/add/status`. Registration is the LAST step — the worst crash
outcome is an agent-side orphan, never a registered-but-broken path. Verify-lost after an agent
restart (`phase:none`) ⇒ controller rollback (Scenario F).
- **In-guest uid-1000 write probe** (`netprobe*.go` + hidden `--netprobe <dir>` re-exec mode in
main.go): `SysProcAttr.Credential{1000,1000}`, no shell; dot-file + nonce + readback + delete;
exit codes → `not_writable` (the squash trap — an export that mounts but denies uid-1000 writes
can no longer register) / `probe_io`; cleanup-fail = WARN on success, not a failure.
- **agentapi**: `AddNetStorage` result gains `verify/job_id/code`; typed `NetAddRefusedError`
(categorized sync refusals — unreachable pre-probe); new `NetVerifyStatus` (short GET, the 15 s
global client timeout is untouched — the long wait lives in the poll loop).
- **§3.2 Hungarian error map** server-side (`netAddMessage`): unreachable / nfs_export (MERGED
not-found+not-permitted — NFSv4 returns identical strings) / smb_auth / smb_share / timeout /
not_writable (the Route-A guidance with the computed uid+100000) / probe_io / generic.
- **Orphan surfacing**: any agent-configured share NOT in the registry renders as a remove-only
"Árva megosztás" row (closes the crash-window gap visibly; re-add with the same name = repair).
- **storage_network.html full redesign** on the canonical `storage_attach` pattern — kills the
`<details>/<summary>`-as-button hack and the NONEXISTENT `form-row`/`form-input` classes (the
unstyled-look root cause). SMB listed FIRST (`SMB (Synology, QNAP — a legtöbb NAS)`), NFS
two-recipe guidance (map-all-users simple recipe + full-fidelity `anonuid=<uid+100000>` with a
live computed host-id), staged poll progress (Kapcsolódás → Csatolási teszt → Írásteszt →
Regisztrálás), categorized errors + collapsible raw detail. Gates green; C8 render smoke guards
the class regression.
- Feature doc: `felhom.eu/documentation/controller/network-storage-nas.md` (authoritative).
Companion: agent v0.81.0 (retry=0, journal classifier, agent-side auto-rollback), host-install
v1.13.0 (`systemd-journal` group). Red-proof outcomes: REPORT.md.
### v0.112.0 — self-update without credentials: anonymous registry mode (2026-07-10)
Root cause (live on Peti's box): the updater piggybacked on the Git Sync credentials and REFUSED when