docs: v0.114.0 CHANGELOG (MinAgent header convention) + README NAS gate + CONTEXT + REUSE + coupled-feature rule in CLAUDE.md

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 13:54:09 +02:00
parent 4a5c40b7cb
commit d9da5a0678
5 changed files with 68 additions and 1 deletions
+34
View File
@@ -1,5 +1,39 @@
## Changelog
### v0.114.0 — agent-capability gate for coupled features (2026-07-11) — MinAgent: —
Box-level backstop for the publish-train ordering discipline (incident: the 0.81/0.113 train's
9-minute controller-before-agent skew on Peti's box — RUNBOOK-publish-0.81-0.113-2026-07-11): the
controller now detects whether its agent supports a coupled feature and refuses that feature up
front, instead of failing mid-pipeline with a misleading rollback. No agent or hub changes; works
against agents 0.790.81 as they exist. (Retroactive note: v0.113.0's effective MinAgent was
0.81.0 for the NAS add — this release is the machinery that makes such coupling self-protecting.
Header convention from here on: coupled releases declare `MinAgent: X.Y.Z` on this line.)
- **agentapi typed status (1.1):** non-2xx GETs surface as typed `*StatusError{Path,Code}` (same
message text as the old formatted error) — the probe keys on `Code==404` via `errors.As`, never
string matching.
- **`internal/agentapi/features.go`:** `Feature`/`SupportState` + `featureProbes` table (one row:
`netstorage_verify``GET /netstorage/verify-status`, the route that shipped WITH the coupled
add semantics in agent v0.81.0) + `SupportCache` (TTL 5 min, Yes/No cached, Unknown NEVER cached
or refused) + `Client.Supports`. 2xx ⇒ Yes; 404 ⇒ No; transport/timeout/401/5xx ⇒ Unknown — an
agent problem is never claimed as "too old".
- **Add gate:** `handleNetStorageAdd` refuses on `SupportNo` BEFORE the single-flight claim —
HTTP 412, machine code `agent_outdated`, message "Az ügynök frissítése szükséges ehhez a
funkcióhoz — a frissítés megérkezése után próbáld újra." `SupportUnknown` passes through to the
existing agent-error paths. `remove`/`list`/health are NOT gated — old shares stay manageable.
- **Settings page:** `NetAddSupport` (yes/no/unknown, short 2 s probe budget + cache) — `no` swaps
the add form for the honest banner; the share list + remove render in every state.
- **Tests:** T1 gate refusal (job never starts, slot never claimed, zero agent calls), T2 unchanged
happy path + warm-cache NEGATIVE assertion (probe count stays 1 across two adds), T3
indeterminate-never-refuses, T4 classification incl. the string-match trap case, T5 banner
render, T6 TTL re-fire, wire-level 404-typing through the pinned client. Red-proofs RP1RP5 run +
reverted (recorded in REPORT.md).
- Also: fixed a scheduling flake in `TestBackupTier2Restore_DoubleClickRefused` (pre-existing).
- **Docs:** publish-train rules codified at `felhom.eu/documentation/runbooks/publish-train-rules.md`
(manifest-before-floor; floor field LAST — the DB row overrides env and acts immediately;
MinAgent fleet gate; this gate as backstop).
### 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