From 28e66c6946fabee8627096db011e15acdbdb9ce1 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 2 Jun 2026 00:24:34 +1000 Subject: [PATCH] =?UTF-8?q?chore:=20version=202.0.0-alpha.7=20=E2=80=94=20?= =?UTF-8?q?security=20hardening=20+=20Yerin=20security=20agent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ package.json | 2 +- server.js | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7f8b56..8a5997f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,33 @@ All notable changes to Void 2.0 are documented here. Format: [Keep a Changelog](https://keepachangelog.com). +## [2.0.0-alpha.7] — 2026-06-02 + +### Security & hardening + +- **`pending_changes.action` CHECK fix** (migration 009): `upsert` is now a valid + suggestion action (approval dispatches to `refsRepo.upsertByExternal`); resource + dependency mutations (`add_dependency`/`remove_dependency`) are now owner-only. +- **Constant-time owner-token comparison** (`lib/auth/safe_compare.js`) — replaces + `===`, closing a timing side-channel on `OWNER_TOKEN`. +- **O(1) token verification** (migration 010): selector+verifier split replaces the + O(n) bcrypt scan over all tokens. New format `vk_.`; legacy + tokens still verify. Dropped the useless `idx_agent_tokens_hash`. +- **`pool.js` error handler** — an idle pooled-client error no longer crashes the + process. +- **`context` tool** projects a safe column allow-list for resources (no + `monitoring`/`metadata` blobs); now also handles `resource` views. +- **`applyPendingChange`** guards the `upsert` arm (clear `ValidationError`). + +### Added (Yerin — security agent) + +- Read-only `securityRegistry` (`lib/ai/agent/tools/security/`) with five tools: + `audit_log`, `agent_inventory`, `pending_review`, `resource_exposure`, + `token_audit` — no secret material in any output. +- Migration 011 seeds the read-only `yerin` agent. +- The stdio MCP server selects its toolset via `VOID_TOOL_REGISTRY` + (`security` → Yerin's tools; default → Dross's companion tools). + ## [2.0.0-alpha.6] — 2026-06-01 ### Changed (Plan 5b: companion backend → Claude CLI subprocess) diff --git a/package.json b/package.json index 18425b8..80a0020 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "void-server", - "version": "2.0.0-alpha.6", + "version": "2.0.0-alpha.7", "type": "module", "private": true, "scripts": { diff --git a/server.js b/server.js index cb989d9..8c6e015 100644 --- a/server.js +++ b/server.js @@ -8,7 +8,7 @@ import { registerWorkers } from './lib/jobs/index.js'; import { router as ingestRouter } from './lib/api/routes/ingest.js'; import { startCron } from './lib/cron/index.js'; -const VERSION = '2.0.0-alpha.6'; +const VERSION = '2.0.0-alpha.7'; export function createApp() { const app = express();