v1.7.24
Release headline. Codex per-event token rows: each
token_count event in a codex rollout now lands as its own
token_usage row, with a new turn_id column grouping them
back to the user-turn. The dashboard's Session Detail panel
adds a Turn / Inference toggle on codex sessions so operators
can drill from the per-turn rollup (default, preserves existing
UX) into per-inference billing detail. Plus: canonical
PRIVACY.md, recipe-naming clarity sweep (codex-variant =
OpenAI's -codex reasoning fork; codex-safe = plain GPT
under codex CLI; both are recipes for the codex CLI), and a
one-shot backfill migration (033) for legacy codex rows whose
ON CONFLICT preserved the pre-v1.7.24 message_id = TurnID
shape.
Schema (v1.7.24)
- Migration 032 —
token_usageaddsturn_id TEXTcolumnidx_token_usage_session_turnindex. NULL on existing
rows; dashboard'sCOALESCE(turn_id, message_id, source_event_id)
fallback keeps them rendering correctly without a backfill.
- Migration 033 — one-shot backfill of legacy codex rows:
moves the oldmessage_id(which IS the TurnID) into
turn_id, replacesmessage_idwithsource_event_id.
Idempotent. Non-codex rows untouched.
Added (v1.7.24)
?detail=inferencequery parameter on
/api/session/<id>/messages; default behavior unchanged.- Frontend Turn / Inference SegmentedControl in the Session
Detail panel's Messages section (visible only on codex
sessions — Anthropic adapters already emit one row per
upstreammsg_xxx, the toggle would be a no-op there). PRIVACY.mdcanonical privacy doc at repo root.
Changed (v1.7.24)
- Codex adapter MessageID semantic shifts from per-turn
to per-model-inference:MessageID = "tk:<file>:L<n>"
(the per-event identifier) instead of the oldTurnID.
TurnID = turnIDis now stored separately on the
TokenEventstruct and persisted to the new column.
This aligns codex with claudecode's "MessageID = upstream
API-call identifier" contract. - Recipe TOML headers rewritten to lead with model-family
decisions: explicit USE-WHEN / DO-NOT-USE blocks with
example model IDs + a Naming clarification paragraph for
the codex-* recipes. Same clarity in README and npm
README compression tables. - README + npm README updated with stronger privacy
paragraph + PRIVACY.md link. npm README adds a "Measured
savings" sub-section under Compression with v1.7.23
empirical numbers and honest caveats.
Fixed (v1.7.24)
- Stale "
codecompressor is opt-in only" comment in npm
README (claude-code recipe has hadcodein defaults
since v1.7.23 / V7-24). - Legacy codex rows whose
message_idwas preserved as
pre-v1.7.24 TurnID-UUID after the v1.7.24 adapter
re-emitted under ON CONFLICT (migration 033).
Downloads
Pre-built binaries for each supported platform are attached below. Linux variants bundle antigravity-bridge.exe next to the observer binary for WSL2 users of the Antigravity adapter.
| Platform | Asset |
|---|---|
| Linux x86_64 | observer-v1.7.24-linux-x64.tar.gz |
| Linux arm64 | observer-v1.7.24-linux-arm64.tar.gz |
| macOS x86_64 (Intel) | observer-v1.7.24-darwin-x64.tar.gz |
| macOS arm64 (Apple Silicon) | observer-v1.7.24-darwin-arm64.tar.gz |
| Windows x86_64 | observer-v1.7.24-win32-x64.zip |
Verify with sha256sum -c SHA256SUMS (or shasum -a 256 -c SHA256SUMS on macOS) from the directory containing the downloads.
Also available via npm: npm install -g @superbased/observer@1.7.24
Org server (Docker)
The self-hosted org server ships as a Docker image and as per-platform observer-org-v1.7.24-* archives (attached below).
docker pull ghcr.io/marmutapp/observer-org:v1.7.24The image is keyless-signed with cosign. Verify it:
cosign verify ghcr.io/marmutapp/observer-org:v1.7.24 \
--certificate-identity-regexp 'https://github.com/marmutapp/superbased-observer-private/.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.comSupply chain
CycloneDX SBOMs are attached: observer.cdx.json and observer-org.cdx.json.
SLSA Level 3 build provenance for the binaries is attached below as a *.intoto.jsonl attestation. The build runs on the private origin repo, so pass that as the source when verifying an extracted binary with slsa-verifier v2.7.0 or newer (older versions fail with unexpected tlog entry type: expected intoto:0.0.2, got dsse:0.0.1):
slsa-verifier verify-artifact ./observer \
--provenance-path *.intoto.jsonl \
--source-uri github.com/marmutapp/superbased-observer-private