Skip to content

NetScript 0.0.8-canary.5

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Oct 15:23
· 79 commits to main since this release

NetScript 0.0.8-canary.5

What this canary is for. canary.5 is release candidate 5 for NetScript 0.0.8. It bundles 53 pull requests since the previous canary point so downstream apps can try the published packages before 0.0.8 ships. It is a pre-release: normal semver resolution never selects it, and Latest stays v0.0.7. All 35 @netscript/* packages are published at exactly 0.0.8-canary.5. The canary publish and version-pinned production E2E both passed (publish, production E2E).

Highlights

aspire

  • authenticated Postgres readiness check for generated DB resources (#2179)
  • check generated Aspire surface without mutation (#2217)
  • migrate stale Garnet tool manifest pins (#2304)
  • prove Garnet executable coexistence (#2305)

auth

  • unify generated service auth across CLI lifecycle flows (#2235)
  • prove generated cookie-jar consumer flow (#2280)
  • connect generated apps to guarded services (#2274)
  • provision installation internal credentials (#2279)
  • restore typed WorkOS sealed session user (#2239)
  • fence subject sessions and queue upstream revocation (#2316)
  • preserve session revocation availability (#2335)

cli

  • initialize agent tooling during project init (#2282)
  • enforce auth and generated users runtime contracts (#2273)
  • safely clean owned agent skill mirrors (#2291)
  • make real-browser startup reliable (#2299)
  • freeze scratch probe dependency resolution (#2289)
  • prove background child and streams runtime readiness (#2306)
  • expose route manifest generation (#2294)
  • make init tests hermetic (#2295)
  • safely remove generated pages (#2314)
  • check plugin registry output inventory (#2277)
  • diagnose plugin registries from typed inventory (#2330)
  • inventory Aspire generated surfaces (#2331)
  • support core-only discovery and prevent partial plugin updates (#2327)
  • respect authored app browser auth topology (#2332)

deps

  • refresh TanStack AI family for 0.0.8 (#2251)

docs

  • compile published JSDoc examples and close census (#2320)

fresh

  • preserve native chat parts through durable reader replay (#2303)
  • retain native SSE response during bounded teardown (#2318)
  • retain chat SSE response through cancellation (#2325)

kv

  • prove typed queue DLQ stability (#2302)
  • preserve shared Redis watch subscriptions (#2328)

plugins

  • expose background child liveness contract (#2203)
  • report compensation telemetry only after completion (#2283)
  • bound delayed-message cleanup by retention deadlines (#2286)
  • probe background children by capability (#2281)
  • remove unsupported root producer and consumer helpers (#2296)
  • prove generated outbound webhook runtime (#2297)
  • expose owned route and schema contracts (#2292)
  • backfill legacy terminal retention (#2309)
  • forward concurrency and verify generated runtime value (#2310)
  • reconcile concurrency and caveat regression gates (#2322)
  • name the exact public implementer contract (#2313)
  • aggregate degraded background child health (#2307)
  • support KV-only install metadata and runner bootstrap (#2300)

sdk

  • isolate Expo fixture environment (#2271)

service

  • prove generated browser auth and CORS topology (#2284)
  • document and exercise internal procedure lane (#2311)

tooling

  • repair Expo lock drift and process-runner race (#2263)
  • repair canary label permissions (#2265)
  • calibrate runtime image pull evidence (#2276)
  • fail closed on generated typecheck regressions (#2287)
  • add wave:carryover-0.0.8 for 0.0.8 deferrals (#2312)

Breaking changes and migration

  • #2251: refresh TanStack AI family for 0.0.8
    Anthropic usage.promptTokens now includes uncached input, cache reads, and cache writes exactly once. totalTokens includes that input plus completion. Use promptTokens directly for total input; subtract promptTokensDetails.cachedTokens and cacheWriteTokens to obtain uncached input. Adding those detail fields to promptTokens again double-counts the cache. The migration note is in AI engine: provider adapters.

    When no explicit request/provider credential is supplied, upstream now checks ANTHROPIC_AUTH_TOKEN, then ANTHROPIC_OAUTH_TOKEN, then ANTHROPIC_API_KEY when a stream starts. Bearer credentials use Authorization; OAuth credentials also enable upstream Claude Code identity headers/system content. Pass an explicit request/provider credential for deterministic selection. Config JSDoc, the AI engine guide, and the AI reference document this behavior; the transport test proves explicit credentials retain precedence.

  • #2296: remove unsupported root producer and consumer helpers
    Removed unsupported root producer/consumer helpers, handle types, and error helpers. Replace producer imports with defineStreamSchema and createDurableStream (or createServiceStreamProducer) from @netscript/plugin-streams-core; replace publish(payload) with collection upsert/delete operations. Replace consumer subscribe(handler) with HTTP/SSE reads of the same stream path, resolving URLs through buildStreamUrl/getStreamsUrl from @netscript/plugin-streams-core; browser clients can bind named SSE events through @netscript/fresh/streams. README and docs/site/durable-workflows/streams.md document the collection model and shutdown/teardown.

  • #2316: fence subject sessions and queue upstream revocation
    The official WorkOS auth service requires atomic host KV and honors NETSCRIPT_AUTH_COOKIE_NAME. Direct plugin installs default to __Host-ns_session; the CLI WorkOS preset explicitly writes wos-session to match AuthKit's SDK default. Existing AuthKit issuers using wos-session must select that name, or change their issuer to the chosen cookie name. Standard NetScript KV adapters already support atomic compare-and-swap.

    Standalone callers enabling subject revocation must share one durable store with every sealed-session/bearer authenticator and run cleanup in a service-owned background worker. The package adds the store/page factories and revocation/retention contracts; unconfigured standalone subject revocation remains explicitly unsupported. Generic WorkOS SDK user compatibility remains intact. Custom revocation stores expose clockSkewMs, implement job-scoped confirmSessionRevoked, honor token-expiry retention checks, and replace terminal fail with retryable checkpointing.

    Set WORKOS_ACCESS_TOKEN_MAX_LIFETIME_MS to cover the longest configured WorkOS access-token duration (default one day). WORKOS_CLOCK_SKEW_MS defaults to one minute and controls both retention padding and the provider cutoff margin. Sessions inside that margin are conservatively revoked. All subject credentials are refused while cleanup is pending; successful recovery admits later sessions. Refresh identity changes use workos_session_identity_changed, distinct from concurrent logout.

    Migration notes: packages/auth-workos/README.md → “Migration in 0.0.8”; docs/site/reference/auth-workos/index.md → “Subject-wide revocation”; the authentication how-to, workspace tutorial, and auth model explain the cookie/configuration distinction.

  • #2300: support KV-only install metadata and runner bootstrap
    New saga installs emit Sagas.Projection.Backend matching the selected store backend, defaulting to KV for both DB-enabled and --no-db installs. Database availability alone does not imply saga Prisma delegates. Provision the saga models and regenerate the host client before explicitly selecting Prisma. Existing entries without the selector follow Sagas.Store.Backend / NETSCRIPT_SAGA_STORE, defaulting to KV. KV projections request the host DB client only when a configured saga group explicitly opts into retention.archiveToDb: true; the default remains false and DB-free. Prisma projections require host saga delegates and persist their query model independently of archival. Invalid Prisma configuration fails before API listening or runner delivery. Generated registry loading retains its existing non-fatal, post-listen behavior. none disables instance queries, durable saga-stream hydration, and archival while canonical state remains durable. Use an explicit Prisma projection when relational query storage is required.

    For existing KV-only installs, re-run plugin install <plugin> --no-db --no-samples --force, review the generated metadata while preserving user-owned configuration/samples, then regenerate helpers. Set Sagas.Projection.Backend consistently on the saga API and background entries; NETSCRIPT_SAGA_PROJECTION takes precedence. Migration documentation: docs/site/orchestration-runtime/how-to/add-a-plugin.md, “KV-only installs and projection migration”.

  • #2335: preserve session revocation availability
    The WorkOS revocation outbox now uses compact ISO timestamp keys and per-job outstanding repair markers. tombstoneAfter becomes a repair-phase marker rather than a key-order cursor. Existing canary installations must pause global logout admission, let the old worker drain pending revocations and retention repair, stop all old auth replicas, and upgrade all replicas together before resuming logout admission. Preserve subject fences and retained tombstones; do not mix old and new workers. Completed fences/tombstones remain compatible. The migration note lives in packages/auth-workos/README.md and docs/site/reference/auth-workos/index.md.

  • #2282: netscript init now runs agent init by default (writes the agent integration for the detected host). Migration: pass --no-agent to keep the previous output. (Coordinator addendum: this default-behaviour change was missing its breaking label when the rail composed these notes; the label is now applied.)

Known open follow-ups

  • #1364 docs(orchestration-runtime): outbound webhook delivery has no recipe or template — triggers ship inbound ingress only, so every product hand-rolls signing, retry and dead-lettering
  • #1366 fix(plugins): every declareHealthChecks returns only the API resource — a crash-looping background child leaves the declared health surface green
  • #1372 test(e2e): the merge-readiness gate probes API health only — background children and streams go unverified, and a saga stuck compensating is reported COMPENSATED
  • #1382 fix(scaffold): the generated service ships /api unprotected and a framework test codifies public API routes as correct
  • #1385 fix(auth): oRPC signin/callback discard the backend Set-Cookie, so the interactive browser flow can never establish a session
  • #1386 fix(service): the default CORS policy is origin: '*', which makes credentialed browser calls impossible on every generated and plugin service
  • #1655 chore(workers): eliminate 20 private-type-ref diagnostics from the published export surface
  • #1667 test(queue): eliminate typed-queue DLQ timing flake
  • #1726 [aspire-13-5 S6b] Protocol/credential-level readiness for backing services (0.0.8 follow-up to S6)
  • #1912 feat(cli): expose non-mutating plugin and Aspire generated-surface parity
  • #2064 service/sdk: no documented internal (service-to-service) procedure lane; nothing provisions the credential and the OpenAPI projection is an easy bypass
  • #2068 fresh/ai: createNetScriptChatConnection.send narrows UIMessages to text, blocking adoption of the #1583 single-subscriber fix
  • #2103 0.0.8 milestone run: orchestrated delivery of milestone 25
  • #2108 feat(plugins): a supported KV-only install for workers, sagas and triggers
  • #2109 fix(plugins): retention for the KV runtime stores of sagas, workers and triggers
  • #2184 [aspire] Credential readiness for MySQL and SQL Server (deferred from #1726)
  • #2185 ci(e2e): make scaffold.runtime tiers robust to slow container image pulls and Aspire convergence on GitHub runners
  • #2249 deps: bring critical dependencies current for canary.5 (TanStack, oRPC, streams, Prisma)
  • #2259 security(aspire): aspire describe exposes resolved database connection strings with the real password
  • #2264 release: canary-label task lacks GITHUB_RUN_ID and read permissions (canary.4 notes step failed after publish)
  • #2323 fix(cli): plugin update fails on first-party saga and stream schema discovery after partial writes
  • #2326 fix(cli): generate aspire re-emits auth/bff.ts, auth/service.ts and the /auth route on every run, even over an authored BFF topology

Trying this canary

Pin exact versions, for example jsr:@netscript/service@0.0.8-canary.5. Deno applies a default 24-hour minimum dependency age. For testing a newer canary, set minimumDependencyAge: 0 in the consumer configuration; this changes admission timing, not versions.

PRs listed below as "closes no linked issues" may deliver partial scope. Their explicitly referenced open issues are listed above; remaining scope stays tracked on those issues.


Canary payload derived from merge-aware history after d15daeaeeb701755a9798123fab00522b2dc21a3 (53 commit(s) inspected; outcome: populated).

Included pull requests

  • #2263 fix(tooling): repair Expo lock drift and process-runner race — closes no linked issues
  • #2265 fix(tooling): repair canary label permissions — closes no linked issues
  • #2179 feat(aspire): authenticated Postgres readiness check for generated DB resources — closes no linked issues
  • #2251 chore(deps): refresh TanStack AI family for 0.0.8 — closes no linked issues
  • #2235 fix(cli): unify generated service auth across CLI lifecycle flows — closes no linked issues
  • #2271 fix(sdk): isolate Expo fixture environment — closes #2270
  • #2203 fix(plugins): expose background child liveness contract — closes no linked issues
  • #2217 feat(cli): check generated Aspire surface without mutation — closes no linked issues
  • #2276 ci(e2e): calibrate runtime image pull evidence — closes no linked issues
  • #2280 test(auth): prove generated cookie-jar consumer flow — closes no linked issues
  • #2282 feat(cli): initialize agent tooling during project init — closes no linked issues
  • #2273 test(cli): enforce auth and generated users runtime contracts — closes no linked issues
  • #2284 test(service): prove generated browser auth and CORS topology — closes no linked issues
  • #2283 fix(sagas): report compensation telemetry only after completion — closes no linked issues
  • #2274 fix(cli): connect generated apps to guarded services — closes no linked issues
  • #2286 fix(sagas): bound delayed-message cleanup by retention deadlines — closes no linked issues
  • #2281 fix(aspire): probe background children by capability — closes no linked issues
  • #2291 fix(cli): safely clean owned agent skill mirrors — closes no linked issues
  • #2279 feat(cli): provision installation internal credentials — closes no linked issues
  • #2287 test(tooling): fail closed on generated typecheck regressions — closes #2285
  • #2299 fix(cli): make real-browser startup reliable — closes #2298
  • #2289 test(cli): freeze scratch probe dependency resolution — closes no linked issues
  • #2302 test(queue): prove typed queue DLQ stability — closes no linked issues
  • #2296 fix(streams): remove unsupported root producer and consumer helpers — closes no linked issues
  • #2303 feat(fresh): preserve native chat parts through durable reader replay — closes no linked issues
  • #2312 chore(labels): add wave:carryover-0.0.8 for 0.0.8 deferrals — closes no linked issues
  • #2297 test(workers): prove generated outbound webhook runtime — closes no linked issues
  • #2304 chore(aspire): migrate stale Garnet tool manifest pins — closes no linked issues
  • #2305 test(aspire): prove Garnet executable coexistence — closes no linked issues
  • #2306 test(cli): prove background child and streams runtime readiness — closes no linked issues
  • #2292 chore(workers): expose owned route and schema contracts — closes no linked issues
  • #2294 feat(cli): expose route manifest generation — closes no linked issues
  • #2309 fix(kv): backfill legacy terminal retention — closes no linked issues
  • #2239 fix(auth): restore typed WorkOS sealed session user — closes #2231
  • #2295 test(cli): make init tests hermetic — closes #2293
  • #2311 docs(service): document and exercise internal procedure lane — closes no linked issues
  • #2310 fix(workers): forward concurrency and verify generated runtime value — closes no linked issues
  • #2314 feat(cli): safely remove generated pages — closes no linked issues
  • #2318 test(fresh): retain native SSE response during bounded teardown — closes #2317
  • #2322 fix(workers): reconcile concurrency and caveat regression gates — closes #1369
  • #2277 feat(cli): check plugin registry output inventory — closes no linked issues
  • #2320 fix(docs): compile published JSDoc examples and close census — closes #1766
  • #2313 chore(workers): name the exact public implementer contract — closes no linked issues
  • #2307 feat(plugins): aggregate degraded background child health — closes no linked issues
  • #2325 fix(fresh): retain chat SSE response through cancellation — closes #2324
  • #2330 fix(cli): diagnose plugin registries from typed inventory — closes #2027
  • #2331 feat(cli): inventory Aspire generated surfaces — closes no linked issues
  • #2316 feat(auth-workos): fence subject sessions and queue upstream revocation — closes #1384, #2190
  • #2328 fix(kv): preserve shared Redis watch subscriptions — closes #2319
  • #2300 feat(plugins): support KV-only install metadata and runner bootstrap — closes no linked issues
  • #2327 fix(cli): support core-only discovery and prevent partial plugin updates — closes no linked issues
  • #2332 fix(cli): respect authored app browser auth topology — closes no linked issues
  • #2335 fix(auth-workos): preserve session revocation availability — closes #2333