Repository navigation
v0.27.0
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, replacing4.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
nullfor 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).