You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* fix(memory): enforce visibility:private ACL on delete in unified-bank mode
In unified-bank mode (the default) every agent's visibility:private docs
live in the single `shared` bank, isolated only by a read-time agent:<id>
tag filter. delete() swept by document_id with no owner check, so any
caller who knew/guessed another agent's (guessable) document_id could
delete that agent's private memory — read/search/list enforce visibility,
delete did not.
delete() now resolves each target id's owner via _deletable_ids() and
withholds any doc the caller can't see (fail-closed), mirroring the read
paths. Legacy multi-bank mode is unchanged: _allowed_namespaces never
yields a foreign private bank, so bank isolation already protects it.
Residual surface hardening (no /api/memory auth, ungated /mcp/memory bulk
delete) tracked in #1302.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(services): register turnstone as a companion service
Turnstone shipped as a bundled agent but was never wired into the services
surface the way hermes is, so it was absent from /api/services, the Services
pane, the Overview health card, and the sidebar footer status strip.
- Add a ServiceDef (unit hal0-agent@turnstone.service, systemd probe,
loopback :9129, full lifecycle) → surfaces in /api/services with real
status + start/stop/restart controls (generic systemd probe, like
hindsight).
- Add a _probe_turnstone systemd probe + block to /api/services/health so
the Overview card and the footer status pip resolve turnstone (now 5
curated services).
- Footer indicator (chrome.jsx) + dashboard-redesign SERVICE_ORDER slot
turnstone next to hermes.
- Update service page/health id-set + count tests; stub _probe_turnstone
everywhere hermes is stubbed to keep the health tests hermetic.
Turnstone runs as the shared `hal0` user (User=hal0 in the templated unit;
no dedicated account), same as hermes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* release: v0.9.8
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+28Lines changed: 28 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,34 @@ applying. Add those subsections to a version's section to surface them; see
21
21
22
22
## [Unreleased]
23
23
24
+
## [0.9.8] — 2026-07-13
25
+
26
+
Turnstone lands as a second heavyweight bundled agent alongside Hermes and
27
+
becomes a first-class companion service; the unified **hal0-rocmfpx** runner
28
+
becomes the default image for AMD GPUs (with an automatic slot migration on
29
+
update); and a memory security fix stops one agent deleting another's private
30
+
memories.
31
+
32
+
### Highlights
33
+
-**Turnstone — a second heavyweight bundled agent** joins Hermes: a native `turnstone-server` on loopback :9129, installed into its own managed PyPI venv, coexisting with Hermes via relaxed single-pick (#1299).
34
+
-**Turnstone is a first-class companion service** — it shows in the Services pane and the Overview health card with start/stop/restart controls, next to Hermes/Hindsight/OpenWebUI.
35
+
-**hal0-rocmfpx is now the universal default runner for AMD GPUs** — one unified image (Vulkan/RADV + HIP) replaces the per-lane toolboxes; CUDA and CPU-only lanes keep their lean images (#1297).
36
+
-**Memory: private-visibility is now enforced on delete** — in unified-bank mode one agent could delete another agent's `visibility:private` memory by id; `delete` now applies the same fail-closed ACL as read/search/list.
37
+
38
+
### Migrations
39
+
-`hal0 update` automatically re-pins existing AMD-GPU slots from the old `amd-strix-halo-toolboxes` images to the unified `hal0-rocmfpx` runner (no-op on CUDA/CPU lanes) (#1297).
40
+
41
+
### Added
42
+
-**Turnstone bundled agent** — provisioning pipeline (managed PyPI venv, JWT-secret generation, model automap) plus hal0 provider/memory wiring, coexisting with Hermes (#1299).
43
+
-**Turnstone companion-service registration** — a `ServiceDef` + systemd health probe, so turnstone appears in `/api/services` (Services pane, full lifecycle actions) and `/api/services/health` (Overview card + sidebar status).
44
+
45
+
### Changed
46
+
-**hal0-rocmfpx as the default AMD-GPU image** — basic seed profiles defer to a manifest-driven resolver that returns the unified runner for AMD lanes, the CUDA image for NVIDIA, and the lean toolbox for CPU-only (#1297).
47
+
- PyPI distribution is published under the name **`hal0ai`** (the import package and `hal0`/`hal0-agent` console scripts are unchanged) (#1298).
48
+
49
+
### Fixed
50
+
-**Memory delete ACL** — `delete` enforces the `visibility:private` owner check in unified-bank mode, so an agent can no longer delete another agent's private memory by (guessable) document id; unresolved ids are withheld fail-closed (#1302).
51
+
24
52
## [0.9.7.3] — 2026-07-12
25
53
26
54
A robustness release. Fresh installs now adapt to the host — provisioning their
0 commit comments