Skip to content

v1.8.0

Choose a tag to compare

@github-actions github-actions released this 16 Aug 02:31
· 35 commits to dev since this release

🧭 v1.8.0 — the release

Context · Continuity · Control

Turnstone 1.8 is built for workstreams expected to keep going: through long
contexts, reconnects, provider failures, compaction, restarts, and enterprise
identity boundaries. The easy first turn was never the hard part. Three C's
carry this release.

This note covers the change from 1.7.4 to 1.8.0; features already shipped
on the 1.7 line are not repeated here.

🧠 Context — stable, visible, and bounded

  • Immutable memory-index snapshots capture the memory metadata visible to
    the acting user and project at the first real model call. The index stays
    cache-stable for the workstream, while memory bodies remain behind an
    explicit memory_get and every project, persona, approval, and principal
    boundary is enforced. (#902)
  • Compaction is now a first-class lifecycle event. Manual and automatic
    compaction render durable progress/result cards, preserve their token delta
    through reload, serialize concurrent sends safely, and remain cancellable.
  • Task-agent context meters show normalized used/total context, warn at
    80%, recover across reconnects, and clear on terminal paths. The Python and
    TypeScript SDKs expose the typed agent_context event. (#982)
  • Sampling settings now inherit from the configured backend instead of
    manufacturing temperature=0.5 and reasoning_effort="medium" defaults.

🔄 Continuity — one path through the hard edges

Every model call now travels through one turn and streaming transport pipeline:
interactive work, judges, titles, compaction, perception, extraction, evals,
optimizers, and task agents all share provider-native replay, lowering,
re-ingest, cancellation, and retry behavior. (#827, #831, #832, #979)

On that foundation, 1.8 adds lossless SSE and history recovery, idempotent
conversation commits, deletion-safe persistence handoff, bounded reconstruction,
and honest fail-closed history errors. Mid-stream transport deaths retry without
double-rendering, HTTP-200 compatibility-endpoint errors retain their real
classification, and pre-dispatch cancellation sends no request. MCP catalogs,
pooled transports, and partial resource discovery also recover without turning
an unavailable server into a false empty result.

Coordinator workstreams gain MCP tools, resources, and prompts plus bounded
unfinished-work nudges; task and child handles survive compaction, and blocked
tasks can explicitly report needs_user.

🛡️ Control — identity and admission stay operator-owned

  • OIDC-to-MCP single-sign-on passthrough mints short-lived,
    audience-scoped Entra or RFC 8693 tokens from an opt-in login credential,
    with encrypted storage, rotation, revocation, and cache flushing. (#551)
  • Per-model gateway identity supports static keys, caller-delegated OBO,
    RFC 8693 exchange, and shared app identity. Dynamic modes are default-deny,
    audience/scope constrained, permission-gated, and fail closed. (#898, #950,
    #955)
  • Per-alias model concurrency adds FIFO admission across the full stream,
    while the optional server.require_project policy keeps human-created work
    filed under a governed project. (#917)
  • Outbound URL guards classify the destination actually reached, including
    NAT64, transition addresses, metadata endpoints, DNS failure, and every
    redirect hop. Private-network opt-ins never open metadata or special-use
    destinations. (GHSA-wm4f-79pw-pfr9)

Also in this release

  • OpenAI SDK v3 and HTTPX2 now back the OpenAI provider stack; lacme 1.2 and
    HTTPX2 add routable cross-host mTLS enrollment and typed IP certificates.
  • Claude Opus 5 joins the capability table with its 1M context window, adaptive
    thinking, and complete effort ladder.
  • Large text pastes become retry-safe attachments, and copy actions now cover
    assistant Markdown, code, Mermaid, and tables across every chat surface.
  • Reranking shares a lifecycle-owned HTTP client, alias admission limit, and
    outage circuit breaker; intent-judge batches evaluate in parallel.
  • Helm installs work with bundled or external PostgreSQL, support multi-node
    routing and scheduling controls, and Docker Compose health checks work under
    WSL.

⚠️ Before upgrading

  • Back up storage first. 1.8 advances Alembic migration 066 to 072,
    adding encrypted OIDC credentials, per-model authentication/concurrency,
    idempotent commit keys, and immutable memory-index snapshots. Migration 072
    removes memory.fetch_limit and resets structured-memory access counters,
    because access now means an explicit full-body fetch.
  • Every configured model endpoint must support streaming. OpenAI-compatible
    endpoints must accept the current stream_options; endpoints that end
    cleanly without a terminal marker need
    {"finish_reason_optional": true} in their capabilities. The old
    create_completion adapter method is gone.
  • Custom SSE/SDK consumers should handle typed compaction and
    agent_context events. Compaction is no longer duplicated as a generic
    info line.
  • OpenAI's default client now uses the operating-system trust store. If a
    private CA was installed only into certifi, install it system-wide or set
    SSL_CERT_FILE / SSL_CERT_DIR.

For contributors, dev is now the default development and pull-request
branch
. main is the current stable line and install source; prior
stable/X.Y branches remain frozen unless explicitly reopened for maintenance.

👋 Contributors

A warm welcome to first-time contributors @Sanjays2402,
@BlackMyrmidon, @bensonjohnson, and @wittdennis. Thank you also to
@metaclassing for the model-identity and MCP-discovery work carried into
this release.

Upgrading

pip install --upgrade "turnstone==1.8.0"

📦 PyPI: turnstone==1.8.0
· 🐳 ghcr.io/turnstonelabs/turnstone:1.8.0 (also :1.8, :stable,
:latest)
· 📄 full changelog

Full diff: v1.7.4...v1.8.0