647116480a
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
62 lines
4.1 KiB
Markdown
62 lines
4.1 KiB
Markdown
# REPORT — v0.115.0: version-aware Supports (agent version channel) + DSM-validated NAS guidance
|
||
|
||
**Date:** 2026-07-11 · **Version:** controller v0.115.0 (from v0.114.0) · **MinAgent:** 0.81.0 (the
|
||
version channel FALLS BACK to the probe — agent 0.82 is NOT required). Pairs with agent v0.82.0 +
|
||
hub v0.45.0. Part B of the NAS/coupling backlog-clear task (composite A–F; this repo = B).
|
||
|
||
## Baselines → shipped
|
||
|
||
| Repo | main @ start | → shipped | Version |
|
||
|---|---|---|---|
|
||
| felhom-controller | `ac6adaaa` (v0.114.0) | `b6842a4` | **v0.115.0** — live on 9201 |
|
||
| felhom-agent | `1e60e88` (v0.81.0) | `fa9c7fe` | v0.82.0 — demo-deploy (version channel) |
|
||
| felhom.eu | `4eaabb2` | (A findings + hub train) | DSM spike + hub v0.45.0 |
|
||
|
||
## What shipped (files)
|
||
|
||
`internal/agentapi/client.go` (`noteAgentVersion` on all four Do sites — passive capture even on
|
||
404/errors; strict bare-semver validation; `AgentVersion()`), `internal/agentapi/features.go`
|
||
(`featureMinAgent` table + `AgentVersionReporter` + version-first `Supports`, probe fallback
|
||
unchanged), NEW `internal/util/version.go` (THE one comparator, moved verbatim from selfupdate which
|
||
now aliases it), `internal/selfupdate/version.go` (aliases), `internal/web/templates/storage_network.html`
|
||
(DSM-validated NFS guidance from Part A). Tests: `internal/agentapi/features_version_test.go`,
|
||
`storage_network_template_test.go` (unchanged content check).
|
||
|
||
## Tests + red-proofs (mutation → predicted failure → reverted → green)
|
||
|
||
| Test | Red-proof mutant | Observed failure |
|
||
|---|---|---|
|
||
| `TestSupports_VersionKnown_ComparesWithoutProbe` (0.82/0.81/1.0/0.100→Yes; 0.79/0.80.9→No, no probe) | version short-circuit dropped | `version-known path must NOT probe (ver=0.82.0, probes=1)` |
|
||
| `TestSupports_GarbageOrNoVersion_ProbeFallback` (`""`/dev/`0.82`/rc1/`evil;`… → exactly one probe, cached) | trust unparseable header as "too old" | `unusable version "dev" must fall back to EXACTLY one probe, got 0` |
|
||
| `TestSupports_NonReporterProber_Unchanged` | — | (non-reporter probers keep v0.114.0 behavior) |
|
||
| `TestVersionComparator_Table` (numeric-not-lexicographic, v-prefix, pre-release rejected) | — | — |
|
||
| `TestClient_VersionHeaderWins_WireLevel` / `TestClient_GarbageHeaderIgnored_WireLevel` (real pinned client) | — | header wins over a routeless agent; garbage ignored at capture |
|
||
|
||
Green gate `go build && go vet && go test ./...` PASS; `template_id_gate.py` + `emoji_gate.py` green.
|
||
|
||
## Deployed + verified
|
||
|
||
9201 (golden/bootstrap): `felhom-controller:0.115.0 Up (healthy)`. Live check (real add endpoint,
|
||
agent 0.82 = the SUPPORTED branch): a bogus-export add returned the categorized `nfs_export`
|
||
failure + full rollback, and the debug log shows `capability gate: netstorage_verify=yes` — the
|
||
verdict now sourced from the **version compare** (agent 0.82 header), zero probe calls. The probe
|
||
fallback is regression-tested (T3/non-reporter) and is Peti's live path (his agent stays 0.81, no
|
||
header → probe).
|
||
|
||
## Part A (DSM spike) — the guidance edits landed here
|
||
|
||
Real DSM 7.2 (virtual-dsm) validated the consumer recipes end-to-end through the v0.114 pipeline:
|
||
NFS "Map all users to admin" = Route A PASS (hardlink incl.); squash-off = `not_writable` refusal;
|
||
plain-user SMB PASS **with working hardlinks** (the Q5 caveat CLOSED for Synology); wrong-password/
|
||
wrong-share classify identically (`smb_auth`/`smb_share`). The NFS guidance gained the verified
|
||
Synology menu path (File Services → NFS → **NFSv4.1**; NFS Permissions rule; `/volume1/<share>`);
|
||
the "útmutató készül" caveat narrowed to **QNAP only** (no emulator — nothing fabricated). Record:
|
||
`felhom.eu/documentation/audits/SPIKE-nas-dsm-2026-07-11.md`.
|
||
|
||
## NOT live-validated
|
||
|
||
- The `agent_outdated`/held branches on a real <MinAgent agent (no such box exists — test-proven).
|
||
- Q1c restart survival: tested in Part E and **FAILED** (empty-dir; not a controller bug) — the fix
|
||
is felhom-agent's, spec'd at `felhom.eu/documentation/backlog/FOLLOWUP-nas-automount-guest-reboot-reassert.md`.
|
||
A controller follow-on (health cross-check the GUEST-visible mount) is noted there.
|