Split the 657-line operation service into eor, submit, and verify
modules, add the AGENT_REVOKED and KEY_RETIRED codes the Backend already
emits, and condense every multi-line comment. Mirror Node, Python, and
Go at 2.1.0 with the deep-health 503, non-idempotent retry, rotation
grace, and path-encoding fixes. Document which routes and response
fields the self-hosted server does not provide.
Claude-Session: https://claude.ai/code/session_01Agoc9bRVE9KL7mmWtey9Vq
Replace the 182-line inline schema in docker-compose.yml with a runner
over packages/server/migrations, add 004 restoring the constraints and
64-bit counters the inline SQL carried, skip migrations already recorded
in schema_versions, relabel the mount for SELinux, and drop the obsolete
compose version key. Retarget the catalog contract test at the migration
files.
Claude-Session: https://claude.ai/code/session_01Agoc9bRVE9KL7mmWtey9Vq
Rebuilt from the standalone 2101cb7 tree (durable transactions, Kiro IDE
adapter, hook retry with a bounded chain lock, version 2.0.1) with the
Open-Source API trims re-applied: no webhooks, members, admin events,
deep health, token rotation, or agent integration updates.
Claude-Session: https://claude.ai/code/session_01QoUjdc7HGKTsgj5GhG8HvF
Rebuilt from the standalone 54e65eb tree (durable transactions, Kiro IDE
adapter, hook retry with a bounded chain lock, version 2.0.2) with the
Open-Source API trims re-applied: no token rotation, token issuance, or
agent integration updates, and the mirror's registration contract and
OpenCode plugin tests kept.
Claude-Session: https://claude.ai/code/session_01QoUjdc7HGKTsgj5GhG8HvF
Rebuilt from the standalone f5341ed tree (durable managed-file
transactions, Kiro IDE adapter, hook retry with a bounded chain lock,
CLI version 2.0.1) with the Open-Source API trims re-applied: no admin
events, members, webhooks, deep health, token rotation, or agent
integration updates, and the mirror's freeze/unfreeze and registration
validation contracts kept. The root quickstart now imports the /v2 path.
Claude-Session: https://claude.ai/code/session_01QoUjdc7HGKTsgj5GhG8HvF
Mirror the Console registration feature: native hook catalog with
activation plans, one-command install that embeds both credentials in
exclusively created owner-only files (mktemp on POSIX, icacls on
Windows), sh/PowerShell tabs, never-expiring default token, focus-visible
styles, merged i18n keys, and the matching e2e specs.
The server previously answered /v1/auth/token with the 7-day Better Auth
session token and ignored ttl_seconds. It now issues opaque 32-byte API
tokens stored as SHA-256 hashes (migration 003), honours ttl_seconds with
null meaning no expiry, and resolves bearer values as API tokens before
session validation. Issuance requires a session credential.
Claude-Session: https://claude.ai/code/session_01QoUjdc7HGKTsgj5GhG8HvF
The operation and receipt now commit before the queue send. A Postgres
23505 on operations_agent_id_seq_no_key is answered with 400
PREV_HASH_MISMATCH carrying the stored chain hash so hook retries can
resync. A failed enqueue after the commit is logged as
operation.enqueue_failed and the receipt is still returned.
Every producer now names its message: MessageQueue.send takes the
durable message id, and the BullMQ adapter passes it as the job id, so
the receipt's queue_message_id is the real queue identifier.
Claude-Session: https://claude.ai/code/session_01QoUjdc7HGKTsgj5GhG8HvF
Re-verified all fifteen provider hook contracts against first-party
documentation on 2026-07-21; thirteen match exactly.
Letta: the harness-hook page moved to /reference/deprecated/hooks and
is vendor-deprecated in favor of Mods. The shipped contract remains
live and functional; record the current URL and the documented
PostToolUseFailure event the SDK adapters already register.
Grok: xAI documents the hook stdin payload non-exhaustively with only
hookEventName, sessionId, cwd, workspaceRoot, toolName, and toolInput.
Drop the recorded toolUseId/toolResult field claims, which appear
nowhere in official documentation.