Repository navigation
NetScript 0.0.8 is a hardening release. Services are secure by default. Sagas, workers, queues and KV behave correctly under concurrency and failure. Dependencies are current. Releases are safer to cut. It closes 119 issues across 200 merged pull requests, including every P0 in the milestone. It was qualified through a series of canaries, each published to JSR and proven by a production end-to-end run against the published packages.
Highlights
Secure by default
- Services and plugin services require an explicit auth policy (#2003, #2220). First-party plugin APIs are guarded through a plugin auth seam (#1383).
- CORS no longer defaults to
origin: '*'. Generated workspaces inject an explicit allowlist covering their own app origins (#2193). - Generated apps use a backend-for-frontend browser topology with
__Host-session cookies (#2221). Each app can opt out withAuth.BrowserTopology: "authored"(#2332). - Auth cookies reach the HTTP response unmodified on both the REST and RPC projections (#2189).
- Callbacks no longer return a session credential in public JSON (#2222).
- Signout is owner-scoped (#2177).
- A missing OAuth transaction cookie returns the stable
oauth_cookie_missingcode, including in production (#2336, #2350). - A documented internal (service-to-service) procedure lane, with per-installation credentials provisioned by the Aspire and packaged carriers (#2279, #2340, #2311).
Durable runtime correctness
- Typed worker effects commit atomically with saga transitions (#2097), including with the saga query projection (#2363).
- Retention for the KV runtime stores of sagas, workers and triggers (#2225, #2286, #2309, #2345).
- Delayed Redis queue messages are promoted exactly once across listeners (#2360).
- The bounded task runner closes every child resource on all termination paths (#2372).
- Cron on the Deno provider computes the next run in UTC (#2357) and fires weekday schedules on the days written (#2359).
watch(keys, { initial: true })gives a startup snapshot after the subscription is acknowledged, so no startup write is lost (#2371).
CLI and plugins
plugin updatediscovers every first-party factory, and updates succeed in any order without partial writes (#2327, #2348).- KV-only installs for workers, sagas and triggers (#2300).
- Plugin health comes from declared capability metadata (#2344).
netscript initsets up agent tooling (#2282).
Toolchain and dependencies
- Deno 2.9.7 across CI, the scaffold and the docs (#2368).
- TanStack DB 0.13 with durable streams (#2253), the TanStack AI family (#2251), and the oRPC, Query, Zod and data/tooling waves (#2252, #2254).
- The release preflight now runs on every pull request (#2378).
Breaking changes
Each change below has a migration note in its pull request and in the linked documentation.
- Explicit auth policy:
createPluginService(#2003) anddefineService(#2220) require an auth policy; a missing policy throws before startup. Choose guards, or an explicit public opt-out. - Explicit CORS (#2193): the default is no cross-origin access. Pass
origin, or let the generated workspace inject its app origins. - Auth cookies and sessions: backend
Set-Cookieheaders are propagated (#2189). The callback JSON no longer carries the session credential, so read the session from the cookie (#2222). Signout is subject-scoped (#2177). A missing transaction cookie returnsoauth_cookie_missing(#2336). - Custom
KvOAuthStoreimplementations (#2014) must implementgetSessionEntry(id)and honourexpectedVersionstampinrotateSession. - WorkOS (#2316, #2335): the official service requires atomic host KV and honours
NETSCRIPT_AUTH_COOKIE_NAME. Revocation outbox keys changed format. - Browser topology (#2221): auth installs scaffold the BFF route and helpers. Projects that own their topology set
Auth.BrowserTopology: "authored"(#2332). - Plugin composition (#2125) validates root collisions and dependency closure at composition time.
declareHealthChecksremoved (#2344): health comes from declared capability metadata.- Streams (#2296): the unsupported root producer and consumer helpers are removed. Use
defineStreamSchemawithcreateDurableStreamorcreateServiceStreamProducer. - Expo live queries (#2244): an injected
StreamFetchV1returnsStreamFetchResponseV1(ok,status,headers, streamingbody) instead of a fullResponse. - KV-only saga installs (#2300): new installs emit
Sagas.Projection.Backendmatching the store backend, defaulting to KV. netscript init(#2282) runs the agent installer by default.- RabbitMQ (#2254): amqplib 2.x; an explicit
heartbeat=0now disables heartbeats. - Anthropic usage and credentials (#2251), accepted by the owner as shipped upstream:
usage.promptTokensis now total input: uncached input, cache reads and cache writes, each counted once. SubtractpromptTokensDetails.cachedTokensandcacheWriteTokensto get uncached input; adding them again double-counts.- With no explicit credential, the provider checks
ANTHROPIC_AUTH_TOKEN, thenANTHROPIC_OAUTH_TOKEN, thenANTHROPIC_API_KEY. An explicit credential always wins.
- Cron weekdays on the Deno provider (#2359): NetScript weekday numbers (0–6, Sunday = 0) are translated for
Deno.cron, so weekday schedules now fire on the days written, one day later than before.CronPresets.EVERY_WEEKregisters on Deno.
Upgrade notes
- Deno 2.9.7 and existing lock files: Deno 2.9.6 changed how npm package IDs with single-resolution peers are written (denoland/deno#36608). A
deno.lockwritten by Deno ≤2.9.5 can pass--frozenbut then fail at runtime withERR_MODULE_NOT_FOUND. After moving to Deno 2.9.6 or newer, refresh it withdeno install --lockfile-only. Resolved versions do not change. - KV
watch: with{ initial: true }, dedupe the snapshot and the first change by equal versionstamp only. Redis versionstamps are per-process ULIDs and do not order writes from different processes.
Known open items
- #2185: the CI tiers are proven stable (3/3 on
mainand 3/3 on a PR head, with no reruns). One box remains: confirming localscaffold.runtimebehaviour is unchanged, which needs a machine with a local Docker engine. On a remote engine, Aspire binds container ports to that engine's loopback (microsoft/aspire#10722). Carried over to 0.0.9. - #1386: every acceptance box is proven in CI on the released code. A browser run against a project generated from the published CLI on a public HTTPS origin was not available.
- Carried over to 0.0.9 (label
wave:carryover-0.0.8): - New follow-ups found during the 0.0.8 cut (0.0.9): #2373, #2375, #2377, #2379, #2382, #2383 and #2384.
- Dependencies: 13 patch-level updates (
@fedify/*,@orpc/*, TanStack Query, Zod) are deferred to 0.0.9, together with the held majors (#2250). Preact 11 and Vite 8 arrive only with Fresh 3.
What's Changed
⚠️ Breaking changes
- feat(plugin): require an explicit service auth policy by @rickylabs in #2003
- fix(auth-kv-oauth): verify revocation persistence before acknowledging by @rickylabs in #2014
- fix(auth): propagate backend cookies on REST and RPC by @rickylabs in #2189
- fix(service): require explicit CORS and inject workspace app origins by @rickylabs in #2193
- fix(auth)!: enforce signout session ownership, subject-scoped everywhere and scoped operator revocation by @rickylabs in #2177
- fix(service): require explicit auth policy in defineService by @rickylabs in #2220
- feat(plugin): validate root composition collisions and dependency closure by @rickylabs in #2125
- fix(cli): scaffold BFF browser authentication topology by @rickylabs in #2221
- fix(auth)!: remove callback session credential from public JSON by @rickylabs in #2222
- feat(sdk): bind Expo live queries to injected streams by @rickylabs in #2244
- chore(deps): refresh data and tooling dependency wave by @rickylabs in #2254
- chore(deps): refresh TanStack AI family for 0.0.8 by @rickylabs in #2251
- feat(cli): initialize agent tooling during project init by @rickylabs in #2282
- fix(streams): remove unsupported root producer and consumer helpers by @rickylabs in #2296
- feat(auth-workos): fence subject sessions and queue upstream revocation by @rickylabs in #2316
- feat(plugins): support KV-only install metadata and runner bootstrap by @rickylabs in #2300
- fix(auth-workos): preserve session revocation availability by @rickylabs in #2335
- fix(auth): expose missing OAuth cookie error code by @rickylabs in #2336
- refactor(plugins)!: unify health metadata and generated vocabulary by @rickylabs in #2344
- fix(cron)!: translate weekday numbering for Deno.cron by @rickylabs in #2359
🚀 Features
- feat(auth): native remote session verification by @rickylabs in #2002
- feat(service): bind the listener to an explicit hostname by @rickylabs in #2075
- feat(contracts): command contracts, literal errors and canonical codecs by @rickylabs in #2082
- feat(service): command executor and semantic fault conformance by @rickylabs in #2084
- feat(database): PostgreSQL command store and true transaction client by @rickylabs in #2093
- feat(command): relay durable outbox through checked sinks by @rickylabs in #2096
- feat(telemetry): add bounded command tracing and privacy conformance by @rickylabs in #2094
- feat(service): add a middleware slot and an opt-in request-body limit to defineService by @rickylabs in #2116
- feat(sdk): injectable resolveServiceUrl on createServiceClient; export the pure discovery resolver by @rickylabs in #2183
- feat(service): internal-audience procedures and a file-reference service credential by @rickylabs in #2166
- feat(streams): add retention policies and administrative port by @rickylabs in #2208
- feat(workers): add outbound webhook recipe and delivery template by @rickylabs in #2214
- feat(mcp): preserve get_doc content with extraction and full pagination by @rickylabs in #2219
- feat(release): add deterministic canary release introductions by @rickylabs in #2238
- feat(database): normalize Postgres connection strings by @rickylabs in #2200
- feat(sdk): add injected fetch stream source by @rickylabs in #2212
- feat(service): add client address rate limiting by @rickylabs in #2224
- feat(cli): agent init resolves host from environment and adds an OpenCode host by @rickylabs in #2181
- feat(mcp): add route management guidance by @rickylabs in #2243
- feat(workers): add bounded stdin payload channel by @rickylabs in #2201
- feat(fresh): fence durable chat appends with an idempotent producer by @rickylabs in #2138
- feat(aspire): authenticated Postgres readiness check for generated DB resources by @rickylabs in #2179
- feat(cli): check generated Aspire surface without mutation by @rickylabs in #2217
- feat(cli): provision installation internal credentials by @rickylabs in #2279
- feat(fresh): preserve native chat parts through durable reader replay by @rickylabs in #2303
- feat(cli): expose route manifest generation by @rickylabs in #2294
- feat(cli): safely remove generated pages by @rickylabs in #2314
- feat(cli): check plugin registry output inventory by @rickylabs in #2277
- feat(plugins): aggregate degraded background child health by @rickylabs in #2307
- feat(cli): inventory Aspire generated surfaces by @rickylabs in #2331
- feat(cli): provision packaged installation secret on deployment target by @rickylabs in #2340
- feat(kv): opt-in snapshot after subscribe for watch by @rickylabs in #2371
🐛 Fixes
- fix(e2e): treat concurrent container removal as successful cleanup by @rickylabs in #1986
- fix(service): distinguish auth verifier failure from rejection by @rickylabs in #2001
- fix(cli): emit lint-clean empty Aspire registrations by @rickylabs in #1998
- fix(fresh): require dehydratedAt when hydrating dehydrated queries by @rickylabs in #2045
- Fix Codex delegation and coordinator routes by @rickylabs in #2043
- Catalog Claude Opus 5.5 for owner overrides by @rickylabs in #2049
- fix(agentic): refresh native model IDs from the harness catalog by @rickylabs in #2047
- fix(service): derive the service info banner from the registered routes by @rickylabs in #2017
- fix(agentic): consume configured evaluator IDs and preflight OpenCode by @rickylabs in #2072
- fix(agentic): fail empty OpenCode answers with a named error by @rickylabs in #2073
- fix(streams): bound durable log recovery and tail reads by @rickylabs in #2081
- fix(workers): type generated payload schemas by @rickylabs in #2035
- fix(release): collect complete notes and observe canary outcomes truthfully by @rickylabs in #2086
- fix(fresh): recover stream databases with bounded checkpoint resume by @rickylabs in #2083
- fix(auth): keep provider credentials out of tracked configuration by @rickylabs in #2085
- fix(fresh): preserve complete native chat messages in send by @rickylabs in #2092
- fix(ai): support explicit Anthropic model IDs and current wire options by @rickylabs in #2078
- fix(desktop): reconnect native RPC after document reload by @rickylabs in #2091
- fix(workers): propagate job cancellation and deadlines by @rickylabs in #2088
- fix(fresh): keep typed route URL helpers pure by @rickylabs in #2090
- fix(fresh/sdk): qualify one TanStack DB Collection runtime by @rickylabs in #2089
- fix(ai): keep published adapters peer-compatible with AI core by @rickylabs in #2087
- fix(ai): realign TanStack AI family to a peer-compatible set by @rickylabs in #2126
- fix(logger): request-scoped correlation and configurable RPC debug redaction by @rickylabs in #2122
- fix(auth): accept empty OpenAPI GET input for auth me by @rickylabs in #2119
- fix(sdk): let native oRPC safe/isDefinedError narrow on createServiceClient errors by @rickylabs in #2123
- fix(kv): conform memory and Redis adapters on atomic versionstamps, combine ops and watch by @rickylabs in #2135
- fix(service): declared fail-closed raw-route seam for createContractAuthorizer by @rickylabs in #2137
- fix(workers): forward correlation and trace context into queue task subprocess env by @rickylabs in #2136
- fix(auth): derive a stable non-OIDC subject from provider userinfo by @rickylabs in #2133
- fix(mcp): rank find_guidance on content terms with IDF weighting by @rickylabs in #2124
- fix(fresh-ui): open Dialog, Sheet and Drawer modally via showModal() by @rickylabs in #2127
- fix(tooling): apply aspire loopback-URL rule to plugin runtime source by @rickylabs in #2129
- fix(cli): report contract service-directory state truthfully by @rickylabs in #2130
- fix(auth): resolve bearer credentials in me like /session by @rickylabs in #2178
- fix(workers): emit one canonical WORKERS_CONCURRENCY env name by @rickylabs in #2167
- fix(queue): isolate named queues sharing one Deno KV database by @rickylabs in #2140
- fix(auth): omit GitHub preset OIDC issuer by @rickylabs in #2196
- fix(sagas): actionable no-endpoint rejection diagnostic by @rickylabs in #2141
- fix(cli): prove guarded plugin services in scaffold.runtime and document plugin API protection by @rickylabs in #2117
- fix(auth): unify trusted proxy transport policy by @rickylabs in #2188
- fix(sagas): persist .compensate() outcomes and add terminal compensated status by @rickylabs in #2139
- fix(aspire): allocate Garnet executable endpoint port by @rickylabs in #2199
- fix(database): classify PostgreSQL command errors by SQLSTATE by @rickylabs in #2163
- fix(cli): preserve plugin HostPort across re-installs and document plugin port pinning by @rickylabs in #2175
- fix(cli): resolve generate resource procedures against the client, support multi-namespace clients by @rickylabs in #2171
- fix(cli): diagnose remote Docker daemon topology for Aspire AppHosts by @rickylabs in #2173
- fix(mcp): clear private-type-ref errors across the export map by @rickylabs in #2134
- fix(mcp): warn on unknown plugin registry expectations by @rickylabs in #2216
- fix(sdk): preserve required context in query factories by @rickylabs in #2209
- fix(cli): emit only consumed preamble in Aspire register helpers by @rickylabs in #2168
- fix(fresh): preserve native chat parts in durable persistence by @rickylabs in #2207
- fix(docs): type-check published JSDoc examples by @rickylabs in #2226
- fix(plugins): enforce KV runtime retention by @rickylabs in #2225
- fix(streams): report and prove storage durability by @rickylabs in #2215
- fix(telemetry): expose span in traced queue listen callbacks by @rickylabs in #2241
- fix(sdk): type service query options for Preact useQuery by @rickylabs in #2242
- fix(plugins): restore StreamDB typed collections example by @rickylabs in #2240
- fix(cli): scaffold layered single-entity services by @rickylabs in #2223
- fix(ci): produce fresh lint and format receipts despite task caching by @rickylabs in #2246
- fix(cli): make init --no-aspire projects operable by the CLI by @rickylabs in #2170
- fix(cli): bridge Claude to canonical agent skills by @rickylabs in #2247
- fix(deps): prevent production lock drift by @rickylabs in #2256
- fix(cli): honor Aspire CLI override and regenerate helper by @rickylabs in #2248
- fix(release): remove nested lock residue from canary dry-run by @rickylabs in #2261
- fix(tooling): repair Expo lock drift and process-runner race by @rickylabs in #2263
- fix(tooling): repair canary label permissions by @rickylabs in #2265
- fix(cli): unify generated service auth across CLI lifecycle flows by @rickylabs in #2235
- fix(sdk): isolate Expo fixture environment by @rickylabs in #2271
- fix(plugins): expose background child liveness contract by @rickylabs in #2203
- fix(sagas): report compensation telemetry only after completion by @rickylabs in #2283
- fix(cli): connect generated apps to guarded services by @rickylabs in #2274
- fix(sagas): bound delayed-message cleanup by retention deadlines by @rickylabs in #2286
- fix(aspire): probe background children by capability by @rickylabs in #2281
- fix(cli): safely clean owned agent skill mirrors by @rickylabs in #2291
- fix(cli): make real-browser startup reliable by @rickylabs in #2299
- fix(kv): backfill legacy terminal retention by @rickylabs in #2309
- fix(auth): restore typed WorkOS sealed session user by @rickylabs in #2239
- fix(workers): forward concurrency and verify generated runtime value by @rickylabs in #2310
- fix(workers): reconcile concurrency and caveat regression gates by @rickylabs in #2322
- fix(fresh): retain chat SSE response through cancellation by @rickylabs in #2325
- fix(cli): diagnose plugin registries from typed inventory by @rickylabs in #2330
- fix(kv): preserve shared Redis watch subscriptions by @rickylabs in #2328
- fix(cli): support core-only discovery and prevent partial plugin updates by @rickylabs in #2327
- fix(cli): respect authored app browser auth topology by @rickylabs in #2332
- fix(sagas): emit committed compensation outcomes immediately by @rickylabs in #2342
- fix(sagas): resolve canonical runner backend by @rickylabs in #2343
- fix(sagas): bind core scheduler retention to saga instances by @rickylabs in #2345
- fix(auth): isolate production tests and preserve defined auth errors by @rickylabs in #2350
- fix(cli): declare first-party discovery factory axes by @rickylabs in #2348
- fix(deps): align #2249 durable-streams pins and lock specifiers by @rickylabs in #2355
- fix(cron): compute Deno next run in UTC for stepped schedules by @rickylabs in #2357
- fix(sagas): keep atomic transition capability through query projection by @rickylabs in #2363
- fix(queue): promote delayed Redis messages atomically by @rickylabs in #2360
- fix(workers): close the over-budget output pipe in the bounded runner by @rickylabs in #2372
- fix(release): use relative imports in tests and gate release preflight in CI by @rickylabs in #2378
- fix(release): bump reference locks and verify generated prose by regeneration by @rickylabs in #2381
📚 Documentation
- docs(skills): describe Aspire cleanup without NetScript-only tasks by @rickylabs in #2057
- docs(jsdoc): bind every name in published examples and enforce unbound names by @rickylabs in #2182
- docs(cli): document route rename and generated surface by @rickylabs in #2232
- docs(service): document and exercise internal procedure lane by @rickylabs in #2311
🧰 Maintenance
- chore(harness): preserve the 0.0.7 orchestration run traces by @rickylabs in #1987
- chore(agentic): inspect the pinned Harness matrix by @rickylabs in #2050
- chore(agentic): read runtime routes from pinned Harness matrix by @rickylabs in #2051
- chore(agentic): remove duplicate local delegation matrix by @rickylabs in #2053
- chore(agentic): consume pinned Harness model catalog by @rickylabs in #2054
- chore(release): own the GitHub transport instead of importing agentic-lib by @rickylabs in #2055
- chore(ci): run the review-thread gate from validation, not agentic by @rickylabs in #2056
- chore(agentic): run the matrix viewer from the pinned Harness commit by @rickylabs in #2058
- chore(maint): move teardown and leak-check out of the agentic namespace by @rickylabs in #2059
- chore(maint): move the Claude surface and skills-bundle tools out of agentic by @rickylabs in #2060
- chore(agentic): run pr-checks from the pinned Harness board package by @rickylabs in #2061
- chore(maint): move gh-token out of the agentic namespace by @rickylabs in #2062
- chore(agentic): adopt Sol 6.1 and Sonnet 5.5 routing by @rickylabs in #2070
- chore(ai): adopt Sonnet 5.5 API and scaffold defaults by @rickylabs in #2071
- test(cli-e2e): assert exact HTTP status in scaffold runtime gates by @rickylabs in #2121
- ci(e2e): key scaffold runtime tiers per PR instead of a repo-wide mutex by @rickylabs in #2192
- test(sagas): prove sample publish failure and HTTP idempotency by @rickylabs in #2198
- ci(tooling): shard check-test and cache dependencies by @rickylabs in #2195
- test(queue): make named isolation delivery deterministic by @rickylabs in #2211
- ci(e2e): diagnose startup and pre-pull runtime images by @rickylabs in #2186
- test(contracts): harden the baseContract initializer pin by @rickylabs in #2128
- chore(workers): export stable public type references by @rickylabs in #2218
- fix(queue): retain DLQ rows until requeue succeeds by @rickylabs in #2206
- chore(aspire): align Garnet container and executable versions by @rickylabs in #2227
- test(sagas): prove leased restart and ordering safety by @rickylabs in #2213
- refactor(tooling): make generated carriers mergeable by @rickylabs in #2234
- test(sdk): make Expo fixture deterministic by @rickylabs in #2258
- chore(deps): refresh RPC and query stack by @rickylabs in #2252
- ci(e2e): calibrate runtime image pull evidence by @rickylabs in #2276
- test(auth): prove generated cookie-jar consumer flow by @rickylabs in #2280
- test(cli): enforce auth and generated users runtime contracts by @rickylabs in #2273
- test(service): prove generated browser auth and CORS topology by @rickylabs in #2284
- test(tooling): fail closed on generated typecheck regressions by @rickylabs in #2287
- test(cli): freeze scratch probe dependency resolution by @rickylabs in #2289
- test(queue): prove typed queue DLQ stability by @rickylabs in #2302
- test(workers): prove generated outbound webhook runtime by @rickylabs in #2297
- chore(aspire): migrate stale Garnet tool manifest pins by @rickylabs in #2304
- test(aspire): prove Garnet executable coexistence by @rickylabs in #2305
- test(cli): prove background child and streams runtime readiness by @rickylabs in #2306
- chore(workers): expose owned route and schema contracts by @rickylabs in #2292
- test(cli): make init tests hermetic by @rickylabs in #2295
- test(fresh): retain native SSE response during bounded teardown by @rickylabs in #2318
- chore(workers): name the exact public implementer contract by @rickylabs in #2313
- test(sdk): reproduce historical Expo fixture export failure by @rickylabs in #2341
- test(queue): reconstruct historical duplicate DLQ records by @rickylabs in #2346
- chore(deps): upgrade TanStack DB family by @rickylabs in #2253
- chore(toolchain): pin Deno 2.9.7 across CI, scaffold and docs by @rickylabs in #2368
- test(cli): resolve unpublished release fixtures from the checkout by @rickylabs in #2388
- chore(release): cut 0.0.8 by @rickylabs in #2389
Other changes
- chore(harness): preserve orphaned evaluator run artifacts before worktree cleanup by @rickylabs in #1988
Full Changelog: v0.0.7...v0.0.8
Closed Issues
- #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
- #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
- #2362 fix(sagas): projection decorator drops atomic Prisma transition capability at canary.6
- #2370 fix(workers): close child output pipes when native executable budget is exceeded
- #2358 fix(cron): Deno provider passes 0–6 weekdays to Deno.cron (Sunday = 1), so weekday schedules fire a day early
- #2361 feat(kv): expose fixed-key watch initial snapshot or subscription readiness
- #2356 cron: deno provider calculateNextRun returns Invalid Date for hour steps (0 */12 * * *), so scheduled trigger registration throws RangeError
- #2354 fix(queue): atomically promote delayed Redis messages across listeners
- #2347 fix(cli): canary.5 plugin update discovery has no declaration for first-party defineTask (and a workers/streams update cycle)
- #2323 fix(cli): plugin update fails on first-party saga and stream schema discovery after partial writes
- #2353 feat(kv): observable source TTL expiry without recurring deadline wakes
- #2249 deps: bring critical dependencies current for canary.5 (TanStack, oRPC, streams, Prisma)
- #1385 fix(auth): oRPC
signin/callbackdiscard the backendSet-Cookie, so the interactive browser flow can never establish a session - #2349 test/auth: stream-react test leaks NODE_ENV=production process-wide; oauth_cookie_missing may be masked in production
- #1382 fix(scaffold): the generated service ships
/apiunprotected and a framework test codifies public API routes as correct - #2064 service/sdk: no documented internal (service-to-service) procedure lane; nothing provisions the credential and the OpenAPI projection is an easy bypass
- #2109 fix(plugins): retention for the KV runtime stores of sagas, workers and triggers
- #2257 test(sdk): make the Expo stream-react fixture deterministic (act is not a function on PR merge refs)
- #2237 feat(release): canary rail composes the release intro, breaking changes and follow-ups
- #2264 release: canary-label task lacks GITHUB_RUN_ID and read permissions (canary.4 notes step failed after publish)
- #2333 fix(auth-workos): sign-out-everywhere can lock a subject out until cleanup (Redis list order; no worker wake-up)
- #2324 fix(fresh): Deno-hosted SSE consumers leak the server stream when the fetch Response is GC'd before abort (denoland/deno#37006)
- #2319 fix(kv): Redis watch idle abort, shared-channel unsubscribe and startup readiness
- #2298 test(ci): real-browser conformance tests intermittently time out at Chrome DevTools startup (blocks unrelated PRs)
- #2317 test(fresh): native chat integration test intermittently fails 'fixture condition did not settle' (blocks unrelated PRs)
- #2293 test: init-driven tests are not hermetic about agent-host detection (OPENCODE_* writes an opencode dir)
- #2285 test: deno check under .llm/tmp/ silently checks nothing (root exclude) and passes vacuously
- #2270 test: Expo stream-react fixture fails intermittently with 'act is not a function' (environment leak into the fixture subprocess)
- #2231 fix(auth-workos): accept the real WorkOS SDK sealed-session user type
- #2190 fix(auth-workos): implement subject-wide session revocation for signout everywhere
- #2027 doctor:
plugin_registryreports a missing registry and prescribes a remedy the generator provably cannot satisfy - #1766 fix(packages): 20 published JSDoc examples do not type-check against their documented signature
- #1384 fix(auth):
POST /api/v1/auth/signoutrevokes any session id an unauthenticated caller supplies - #1369 fix(plugins): two defects shipped as documented caveats — WORKER_CONCURRENCY never reaches the runtime, and @netscript/plugin-streams root exports always throw
- #1388 test(e2e): the scaffold runtime auth gate proves only that an unauthenticated request succeeds
- #1742 fix(cli): Garnet executable arm binds host port 6379 regardless of Aspire allocation
- #1849 chore(aspire): migrate NetScript to Garnet 2.x — arms are split across 1.1.1 and 1.1.10 while 2.1.5 is current
- #2009 docs/cli: renaming or moving a route is undocumented, unsupported by CLI verbs, and misdocumented as type-safe
- #2288 ci(e2e): scratch-project runtime probes resolve npm without a lock and fail on the 24h minimum dependency age
- #2008 fix(cli): agent init mirrors the whole .agents/skills tree into .claude/skills and ships no CLAUDE.md — the repo's own pattern is a one-file bridge plus @AGENTS.md
- #2007 feat(cli): agent init misses its host, ships no OpenCode MCP config, and is never run by init — agents silently work without MCP
- #1684 fix(workers): documented web-worker/subprocess runner modes are unimplemented — docs truthing or Tier-3 pool implementation
- #1826 test(sagas): no coverage proves publish survives unavailable API, restart, duplicate publish, or out-of-order delivery
- #2230 fix(plugins): preserve typed collections and live-query status in StreamDB factories
- #2262 ci: main red: stale Expo reference lock after deps wave + /proc termination-probe race (blocks canary.4)
- #2255 release: root deno.lock out of date for the production graph (blocks canary.4)
- #2260 release: version bump leaves @netscript residue in the Expo reference lock (blocks canary.4)
- #2229 fix(sdk): make service query options accepted by the Preact useQuery hook
- #2228 fix(telemetry): expose the traced span in TracedQueue.listen context
- #2110 feat(workers): a stdin payload channel for polyglot tasks
- #2106 service: rate-limit stage for anonymous routes, and expose the client remote address
- #2104 database: Postgres connection-string normalizer that preserves TLS or refuses (ADO.NET/Npgsql form)
- #2067 fresh/ai: durable chat transcript appends carry no producer identity/epoch, so stale writers cannot be fenced
- #2029 fix(cli): generated aspire-cli.ts invokes
aspireby bare name, so a version-managed toolchain cannot run it — and the file says DO NOT EDIT - #2021 aspire generator:
register-background.mtsis emitted with unused local bindings when no background processors are configured - #2010 mcp: get_doc "bounded summary" is truncation, not summarization
- #1996 fix(cli): --no-aspire init emits netscript.config.ts but every command reads appsettings.json, so the generated project cannot be operated
- #1362 fix(scaffold/service): generated services have no internal layering — the v1 router template teaches ORM-in-handler and
deno task testfails on an empty tree - #2245 ci: cached lint/fmt tasks skip report output and fail the quality gate
- #2026 auth-kv-oauth: assertHttps is proxy-blind while deriveHttps is proxy-aware, so the OAuth flow refuses any TLS-terminating-proxy deployment
- #2194 ci: shard check-test and cache dependencies and images to cut CI wall time
- #2036 fix(ai): keep published TanStack adapter ranges peer-compatible with AI core
- #2066 plugin-workers-core: JobContext has no AbortSignal or deadline, so handlers cannot observe timeout, shutdown or cancel
- #2041 Desktop SDK 0.0.7: window-scoped pending receive prevents client reconnection after document reload
- #2040 fix(fresh): route.href hides useContext and corrupts island hook order / navigation
- #2039 fix(fresh/sdk): align TanStack DB adapter family; mixed Collection runtimes crash stream-query SSR
- #2063 fix(ai/anthropic): Claude 5.5 IDs rejected locally on 0.0.7; qualify forward-compatible model support
- #2210 test(queue): deno-kv-named-isolation 're-enqueued until that listener registers' is timing-flaky on CI
- #2164 fix(cli/auth): the github provider preset writes NETSCRIPT_AUTH_ISSUER=https://github.com, sending sign-in down OIDC discovery GitHub does not support
- #2120 bug(auth): me ignores bearer credentials that /session honors on kv-oauth
- #2111 sdk: createQueryFactories rejects a client whose bearer contribution context is required
- #2107 logger: add handle/prompt to RPC debug redaction and make the fragments configurable
- #2105 service/auth: createContractAuthorizer denies raw routes mounted under the guarded prefix; no authentication-only seam for them
- #2102 fix(mcp): find_guidance matches on stop words, so sentence-length intents miss the right page
- #2101 fix(kv): RedisKvAdapter.watch holds back a received change, and a stale debounce timer drops queued ones
- #2099 fix(kv): MemoryKvAdapter.atomic returns a versionstamp no entry has (CAS after commit always fails)
- #2095 database: harden PostgreSQL command error classification and tidy #2093 docs
- #2065 service: defineService has no middleware slot and @netscript/service has no request-body size limit
- #2032 fix(auth): non-OIDC providers get the session id as their subject, and the plugin exposes no way to change it
- #2031 fix(sdk): createServiceClient erases the contract error map, so isDefinedError narrows to never
- #2030 fix(cli):
generate resourceresolves the contract from --client, not --procedure, so it cannot scaffold against a multi-namespace service - #2024 aspire: a generated project silently cannot reach its own provisioned containers when the Docker daemon is not local, and nothing reports it
- #2028 config: a service's port can be pinned, a plugin's cannot — and the auth plugin hosts an OAuth callback
- #2018 sdk: createServiceClient cannot resolve a service URL on React Native, and the pure resolver that would fix it is unexported
- #2013 contract list reports 'service paired' from a directory-existence check, not from a registered handler
- #1990 fix(sagas): .compensate() results are never persisted — an instance that compensates rests at
compensatingforever - #1999 bug(auth): OpenAPI GET me rejects empty request before authentication
- #1939 fix(docs): the
@app/router.tsREADME fence pair is deferred on fixture-drift risk, not impossibility - #1932 [sagas] Persist typed worker-command effects atomically with saga transitions
- #1896 feat(plugin): validate root composition collisions and dependency closure
- #1893 fix(tooling): check:aspire-host-ports passes on runtime literal service URLs its own S5 test rejects
- #1825 fix(sagas): unresolved-endpoint rejection carries a bare
no-endpointreason that names none of the keys it tried - #1786 fix(logger): LoggingPlugin correlates request IDs via shared closure state, so concurrent requests cross-attribute
- #1767 test(contracts): harden the baseContract initializer pin against identifier rebinding and annotation-span brittleness
- #1765 docs(packages): 116 published JSDoc examples reference undeclared application-side names
- #1708 docs(mcp): clear baseline private-type-ref errors across the export map
- #1688 fresh-ui: useDialog/useSheet never call showModal(), so every Dialog opens non-modally
- #1690 docs(reference/sdk): align error-handling emphasis between the reference page and package JSDoc
- #1682 fix(queue): named queues collide on a shared local Deno KV database — listeners consume each other's messages
- #1681 fix(workers): queue dispatch path drops CORRELATION_ID/TRACEPARENT env injection for task subprocesses
- #1670 docs(sdk): align cache-first loaders on action-then-metadata and document the warm-stale persistence-failure shape
- #1486 [command C5] Build the durable outbox relay and worker/saga sink adapters
- #1485 [command C4] Define command OpenTelemetry vocabulary and privacy tests
- #1484 [command C3] Add the true transaction-client port and PostgreSQL command store
- #1383 fix(plugin):
createPluginServicehas no auth seam, so every first-party plugin API is unguardable by construction - #2025 auth: GET /api/v1/auth/me answers an unauthenticated request with a 400 input-validation error instead of an authentication outcome
- #2079 fix(fresh/streams): createNetScriptStreamDB has no restart/reconnect — browser StreamDB goes permanently silent after a 4xx, close or batch error
- #2080 fix(streams): bound durable log recovery and tail-read allocations
- #2074 service: expose hostname/bind address on ServeOptions
- #2069 fix(workers): plugin doctor reports 'Registry is incomplete' for policy-configured jobs (createConfiguredJobDefinition not counted)
- #2048 Catalog Claude Opus 5.5 for owner-authorized agentic routes
- #2046 Fix native Codex Sol and Luna model IDs in agentic routing
- #2042 Align Codex delegation matrix with Eric's routing correction
- #2044 CI: render-resource-slice consumer type-check fails on dependency drift (dehydratedAt)
- #2034 fix(workers): generated payload registry fails against real RegisterJobInput schema type
- #2022 auth: the generated project
.envcannot be sourced by a POSIX shell —NETSCRIPT_AUTH_SCOPESis written unquoted with a space - #2016 withServiceInfo() hardcodes the endpoints map, so a mounted route can never appear in the discovery banner
- #2020 auth:
plugin auth provider setwrites the client secret into tracked appsettings.json, and the Aspire generator then copies it into a tracked generated file - #2006 fix(auth-kv-oauth): revokeSession acknowledges revocation after a failed CAS
- #2004 fix(release): retry transient canary watcher errors without inventing E2E failure
- #1985 fix(release): release-notes collector never paginates, so >100 closed issues are silently dropped
- #1483 [command C2] Implement the command executor and semantic/fault conformance kit
- #1482 [command C1] Define command contracts, literal errors, and canonical codecs
- #2019 auth: shipped OAuth provider presets cannot be selected from the backend registry's config seam
- #2005 feat(cli/sdk): generate versioned external clients from captured OpenAPI with compatibility receipts
- #1997 fix(cli): emit lint-clean empty Aspire registration helpers
- #2000 bug(service): auth verifier outage is relabelled 401 and leaks exception text
JSR Packages
- https://jsr.io/@netscript/ai@0.0.8
- https://jsr.io/@netscript/aspire@0.0.8
- https://jsr.io/@netscript/auth-better-auth@0.0.8
- https://jsr.io/@netscript/auth-kv-oauth@0.0.8
- https://jsr.io/@netscript/auth-workos@0.0.8
- https://jsr.io/@netscript/cli@0.0.8
- https://jsr.io/@netscript/config@0.0.8
- https://jsr.io/@netscript/contracts@0.0.8
- https://jsr.io/@netscript/cron@0.0.8
- https://jsr.io/@netscript/database@0.0.8
- https://jsr.io/@netscript/fresh@0.0.8
- https://jsr.io/@netscript/fresh-ui@0.0.8
- https://jsr.io/@netscript/kv@0.0.8
- https://jsr.io/@netscript/logger@0.0.8
- https://jsr.io/@netscript/mcp@0.0.8
- https://jsr.io/@netscript/plugin@0.0.8
- https://jsr.io/@netscript/plugin-ai-core@0.0.8
- https://jsr.io/@netscript/plugin-auth-core@0.0.8
- https://jsr.io/@netscript/plugin-sagas-core@0.0.8
- https://jsr.io/@netscript/plugin-streams-core@0.0.8
- https://jsr.io/@netscript/plugin-triggers-core@0.0.8
- https://jsr.io/@netscript/plugin-workers-core@0.0.8
- https://jsr.io/@netscript/prisma-adapter-mysql@0.0.8
- https://jsr.io/@netscript/queue@0.0.8
- https://jsr.io/@netscript/runtime-config@0.0.8
- https://jsr.io/@netscript/sdk@0.0.8
- https://jsr.io/@netscript/service@0.0.8
- https://jsr.io/@netscript/telemetry@0.0.8
- https://jsr.io/@netscript/watchers@0.0.8
- https://jsr.io/@netscript/plugin-ai@0.0.8
- https://jsr.io/@netscript/plugin-auth@0.0.8
- https://jsr.io/@netscript/plugin-sagas@0.0.8
- https://jsr.io/@netscript/plugin-streams@0.0.8
- https://jsr.io/@netscript/plugin-triggers@0.0.8
- https://jsr.io/@netscript/plugin-workers@0.0.8