Skip to content

v0.27.0

Choose a tag to compare

@zackbart zackbart released this 01 Oct 17:23
· 369 commits to main since this release
af9305b

This minor release moves the runtime to stable Effect v4 and fixes execution,
OAuth, storage, and operator recovery. Deployment APIs and the eight MCP tools
keep their existing contracts, and the Node template now pins 0.27.0.
Development requires TypeScript 5.9.3 or newer within 5.x.

Duplicate API tool names now fail at construction. Memory, file, and D1 storage
refuse TTLs that cannot produce finite expirations. Artifact quotas reserve 8 KiB
for frame metadata, reducing the available content allowance by 4 KiB, and apply
to historical snapshots too. Artifact render checks use the deployment's viewer
theme.

Changed

  • Pin Effect to 4.0.0, replacing 4.0.0-rc.117, and align the optional
    Alchemy setup instructions with the stable pin.
  • Require TypeScript 5.9.3 or newer within 5.x for repository and Node-template
    development, matching Effect v4's TypeScript 5.9 minimum.

Fixed

  • Refuse already-aborted deadline operations and preserve explicit null
    cancellation reasons (#660) (#661).
  • Return structured failures for malformed executor replies (#662).
  • Close callback and credential-test connector scopes after their final use,
    keeping cleanup bounded and best-effort (#663) (#664).
  • Prevent concurrent OAuth state handoffs from replacing another owner on
    storage that supports atomic claims (#665).
  • Show retryable Activity errors for unreadable pages and discard superseded
    pagination responses (#666) (#667).
  • Reject invalid TTLs in memory and D1 storage before mutation, and match NUL
    bytes literally in D1 list prefixes (#668) (#669).
  • Enforce catalog count and byte ceilings even when discovery is invalidated
    while the listing is in flight (#644).
  • Retain OAuth cleanup lineage after uncertain storage commits, preserve
    concurrent token rotation and revocation during issuer migration, and isolate
    refresh coordination by credential owner (#645) (#646) (#648).
  • Return null for absent prototype-named credential fields (#647).
  • Reserve enough artifact frame metadata for valid document names and titles,
    enforce current quotas on historical snapshots, and reject refresh scan
    cursors that fail to advance (#649) (#658) (#650).
  • Reconcile connector state after failed operator mutations, ignore older data
    reloads, and keep malformed collection responses recoverable (#651) (#652)
    (#653).
  • Keep committed file snapshots consistent after rename, quarantine malformed
    entries, and reject TTLs that cannot produce finite expirations (#654) (#655)
    (#656).
  • Reject unreadable successful responses and malformed build-log streams from
    named Vercel tools, preserving raw API response bodies and no-content
    mutations (#657).
  • Keep queued catalog mutations alive across Worker requests while preserving
    cancellation and storage ordering (#623).
  • Release failed access-token reservations before lookup publication, close
    failed OAuth callback transports, and persist accepted rotating refresh tokens
    after owner cancellation without reviving disconnected generations (#624)
    (#625) (#626).
  • Count historical writes across divergent resumptions and bound resumed write
    answers by the journal limit, retaining truthful outcomes for writes already
    sent (#627) (#628).
  • Roll back rejected file-storage mutations, preserve prototype-named keys,
    expire entries at their TTL boundary, and quarantine invalid snapshot roots
    without losing their original bytes (#629) (#630) (#631) (#632).
  • Ignore superseded artifact-list responses, preserve newly created tokens when
    an older list finishes, and reload a confined artifact shell when signing in
    again (#633) (#634) (#635).
  • Advance artifact listings through empty continuation pages, refuse already
    cancelled render checks, and validate Markdown with the viewer's theme across
    writes and refreshes (#636) (#637) (#638).
  • Prevent doctor redirects from forwarding Cloudflare Access credentials,
    reject unreadable successful Notion responses, and reject duplicate API tool
    names before classification and dispatch can disagree (#639) (#640) (#641).