Releases: mrap/hex
v0.19.8 — Docker OOM fix for memory indexing
Fixed
- OBS-019 Docker OOM (
system/harness/src/memory/{embed,index}.rs,tests/Dockerfile,tests/Dockerfile.env): Memory indexing OOMed in the 4 GB Docker E2E container. Two-part fix:- Chunked
embed_documentsatEMBED_BATCH=8to bound per-call working set. - Capped
ORT_NUM_THREADS=1/OMP_NUM_THREADS=1at container startup (ENV in Dockerfile) so ONNX Runtime sees the limits at dylib load —std::env::set_varfrom inside the binary is too late.
- Chunked
Added a Linux rss_mb() probe for future memory diagnosis.
Notes
- Sentinel SA-057: PASS
- Skipped Docker E2E (
--skip-e2e) — the change itself is the E2E fix; verified locally first.
SHA: e62f2bb1
hex-foundation v0.19.7
hex-foundation v0.19.7
Security sign-off: SA-056 PASS (Sentinel, 2026-05-24)
Changes (12 commits, bdde0f4)
BOI v2 path cutover
sweep: v1 .boi paths → v2 in active hex-foundation scripts(3e84222)merge(boi/SE9F2): v1 path sweep for v2 cutover(8a9f9d7)
Audit-closure: personal-path hardcode removal
audit-closure: hex-integration — replace personal-path fallback with $HOME/hex(42d0a69)audit-closure: env-parameterize 2 personal hardcodes in harness(94e7426)audit-closure: gitignore .serena/ + fix hex-integration personal fallback(2b3b313)audit-closure: remove dead system/scripts/health/ + system/events/(36dfca1)
E2E / build fix
fix(e2e): unbreak Docker E2E suites + sync version.txt in bump-version(bb1f745)
Docs
docs(templates/CLAUDE.md): update BOI section for v2 contract(53c93df)docs(skill): rewrite boi-delegation SKILL.md for v2 contract(ef81a4c)docs(charters): update quality-antagonist + boi-optimizer for v2 surface(822fb7c)
Release
Carry-forward LOWs (non-blocking)
LOW-SA051-1, SA-048-LOW-1/2/3, SA-050-LOW-1, LOW-V16-2, LOW-V17-2 — all non-blocking per SA-056.
v0.19.3 — Purge wave: 34K lines deleted, hardcoded paths fixed
hex-foundation v0.19.3
227 files changed, 517 insertions, 33,938 deletions
Deletions (purge wave)
- Python events tree removed — Rust daemon is canonical; 16,589 lines of Python dead code deleted
- Dead Rust modules removed — capture.rs, health/, route.rs (orphaned post stage-A), 1,586 lines
- Pulse-dashboard v1 removed — 5 wholesale-dead script subdirs, 3.5MB binary, pycache junk
- Personal content removed — 5 personal skill dirs, personal commands (bet-status, hex-scout), e2e-guard scripts
- Dead call sites stripped — 11 dead-module call sites + 4 mod declarations (wave-2a)
- Install step removed — stop copying system/events/ (Rust daemon is canonical)
Fixes
- Replace hardcoded workspace paths with $HEX_DIR across scripts
- Restore HEX_DIR fallback to avoid unbound variable in release pipeline
Security
- SA-052 PASS: capability lifecycle, boi-web improvements, memory sanitize
- SA-053 PASS: Python events purge, dead Rust modules
- SA-054 PASS: pulse-dashboard, personal skills/commands, dead script dirs
Carry-forward LOW: boi_web 0.0.0.0 binding (non-blocking)
v0.19.2 — Python→Rust ports, paths helper, memory runtime fix
What's new
paths.rs: centralizedhex_dir()resolver ($HEX_DIR or $HOME/hex) — foundation for D4 hardcode sweepsession_reflect.rs: session-delta eval native via rusqlite — Python shellout totemplates/eval/session-delta.pyeliminated; Python file deletedboi_web.rs:boi-web/server.pyported to native Rust SSE servermemory/open_db(): Plan 2 migration wired at DB open — fixes runtime gap where Plan 2 tables only created in tests- distill max_tokens bumped for longer session transcripts
.legacy.shshellouts restored: watchdog-heartbeat-check.sh, weekly-synthesis-digest.sh, SpecTool, Router — backward compat for active callers- PERSONAL-EXTRACT caller pruned: dead Rust caller for x-oauth2-refresh.sh removed
facts_recallfix: multi-word queries now correctly return facts
Security
SA-051 PASS. No new Cargo deps beyond v0.19.1. session-delta.py deleted (net reduction). LOW carry-forward: LOW-V16-1/2/3, LOW-V17-1/2, SA-050-LOW-1 (all non-blocking test/dev scope).
17 commits, 32 files, 1048 insertions / 517 deletions
V2 Memory Plan 2: facts layer + distill pipeline (v0.19.1)
What's new
Memory facts layer: structured fact extraction and storage with full history. Six new tables (facts, fact_history, sessions, topics, transcript_files, vec0) + FTS5 index. Facts survive across sessions and are injected at wake time.
Distill pipeline: four-stage LLM pipeline — extract → judge → dedup → watermark. Triggered automatically on hex.session.parsed. Also available on-demand via hex memory distill.
24-predicate vocabulary: typed predicates (preferences, decisions, blockers, goals) drive LLM extraction fidelity.
hex memory consolidate: 6-op consolidation (contradiction detection, staleness pruning, dedup, topic reorg, summary refresh) with per-op isolation.
Nightly consolidate policy: auto-runs hex memory consolidate via hex-events. Memory consumption floor alert fires on silent distill failures.
Pre-commit hooks + CI guard: local pre-commit validation and legacy-rename-guard CI workflow.
Security
SA-050 PASS — reviewed by Sentinel. 1 LOW carry-forward (SA-050-LOW-1: memory-distill path interpolation, non-blocking, consistent with V15-2 precedent).
v0.18.0 — Capability System
Capability System
Agents can now register typed functions and call them through a sandboxed executor with a security guard that hard-denies unsafe operations at the code level.
New modules
- capability_exec.rs — sandboxed executor with timeout enforcement and capability-level isolation
- capability_guard.rs — security guard: allowlist-gated, blocks network egress, secrets access, and destructive operations before execution
- registry.rs — write-once capability registry with pilot-agent allowlist (pilot_agents.json)
- registry_health.rs — registry health monitoring and diagnostics
Highlights
- Allowlist-gated registration (pilot_agents.json) — only approved agents can register capabilities
- Write-once immutability — registered capabilities cannot be overwritten or mutated
- Layered body scanning — security guard inspects capability bodies for dangerous patterns before registration
- Sandbox timeout + cap enforcement — every execution is bounded
- Isolated policy directory — capability policies live in their own scope
- Re-entrancy guard — prevents capability execution loops
- Atomic persistence — registry writes are atomic
New trail types
capability_add— recorded when an agent registers a capabilitycapability_call— recorded when a capability is invoked
Security review
SA-048 PASS. 251 tests passing. 3 new LOWs (non-blocking): case-sensitive body scan, variable-aliased command bypass, YAML template format!() without field sanitization. All pilot-gated, non-blocking. Carry-forward LOWs: LOW-V16-1, LOW-V16-2, LOW-V16-3, LOW-V17-1, LOW-V17-2.
Commits
v0.17.5 — V2 memory doc update
What's Changed
Documentation patch — updates V1 memory script references to V2 hex memory subcommands across all system docs.
No code changes. No new dependencies. Docs only.
Commits
5bdfa90docs: update V1 memory references to V2 hex memory subcommands6ce6a60docs: add CHANGELOG entry for v0.17.5 memory V2 doc update027cdbfbump: v0.17.505b20a5chore: update Cargo.lock for v0.17.5 build
Security
SA-046 PASS (docs), SA-047 PASS (version bump + Cargo.lock) — Sentinel sign-off complete.
Carry-forward (non-blocking): LOW-V16-1, LOW-V16-2, LOW-V16-3, LOW-V17-1, LOW-V17-2
hex memory — hybrid vector + FTS5 recall with auto-injection
Full memory subsystem: hybrid vector + FTS5 recall with automatic prompt injection.
What's new
- UserPromptSubmit recall hook: workspace memory injected into every prompt automatically
- Hybrid search: RRF fusion of BM25 (FTS5) + vector arms via sqlite-vec
- Nomic embedding module: local embeddings (fastembed, no API calls)
- Schema v3: embed-on-index, private column, orphan-safe deletes
hex memory recall: FTS5 contextual retrieval + telemetry- Nightly smoke-eval + consumption-rate guard
- FTS5 OR fallback — natural-language prompts now return results
- Test suite modernized for native hex binary (T2870, TCE30, T02C9)
- Pipeline fix: HEX_RELEASE_PIPELINE=1 on tag push (T5E29)
v0.17.3 — Act evidence verification
Act evidence verification
Added
act_evidence.rs: the harness verifiesdetail.evidenceon everyacttrail entry claiming a mechanical operation (git push, BOI dispatch, file write, tag creation). Unverifiable claims are recorded asUNVERIFIEDand do not count as completed work.- Evidence types:
git_tag,git_push,boi_dispatch,file_written— each matched against observable system state. - Test suite covering all evidence types, missing-evidence detection, and UNVERIFIED recording.
Changed
- Agent prompt hardened (
prompt.rs): mechanical act entries now require a verifiableevidenceobject. Claims without evidence are recorded as UNVERIFIED — prevents claim-without-action loops. types.rs:TrailEntrygainsevidenceandverifiedfields.wake.rs: post-trail processing runsact_evidence::verify_trailand flags UNVERIFIED entries to the audit log.
v0.17.2
Full Changelog: v0.17.1...v0.17.2