Status

The status of each finding of the October deep dive, of the architecture roadmap and of the July bug register. The build reads the status documents of the repository, so this page shows what they say.

125findings
125 fixed
0 partly
0 for a decision
0 open

100% fixed. 0 findings have work left.

By area

Each bar is one area of the deep dive. Select an area to show only its findings.

Fixed · A commit fixed it Partly · A part is done Decision · The owner decides Open · No change yet

Findings

125 of 125 findings

IDAreaSeverityStatusNoteCommits
WRP-1 / MCP-2Securitycritical Fixeddocker.* runs shell.run with argv. Values that start with - are rejected.ee52893
MCP-1 / CLI-5 / TRN-2Securitycritical Fixedcli is not in mcpNamespaces. The tool snapshot test pins the surface.ee52893
TRN-1 / CLI-1 / CLI-2 / DATA-20Securitycritical FixedLoopback by default, no CORS, a lockfile token on each warm-server call. 43b98ee adds browser checks to the core HTTP and WebSocket server transports for every host: the Host name on a loopback address, the Origin, Sec-Fetch-Site, no calls by GET, and JSON bodies only. Before, a cross-site text/plain POST ran any procedure on a loopback server.8db86ec43b98ee
DATA-1 / DATA-2 / DATA-3Securitycritical / high FixedSnapshot names are checked. Restore uses mkdtemp. The guard checks the archive entry. Exclusions match segments.e1b5b57
CLI-3Securityhigh FixedWarm mode is used only for the same cwd.8db86ec
CLI-4 / CLI-14Securityhigh FixedThe lockfile records the peer id, the workspace and the build. /health confirms the server before a call or a signal.8db86ec
CLI-6Securityhigh FixedThe server CLI registers its procedures once.8db86ec
WRP-5Securityhigh Fixedpnpm.* runs shell.run with argv.e1b5b57
MCP-3Securityhigh FixedEach code procedure declares its nested calls (metadata.calls). The MCP server sets strictCalls, so an undeclared caller reaches only exposed procedures. impl-mcp-dev/reachable.snapshot.txt pins what the tools can reach: fs.*, shell.run and shell.stream, never shell.exec or cli.run.2fb83293e3827f8724c35
MCP-4 / CORE-3Securityhigh Fixedreplace works only over a runtime-defined procedure, and procedure.delete unregisters and refuses a code procedure. Decision: the expose rule is not applied to the target path. A defined procedure is data-driven, so it calls only exposed procedures, and a target outside the exposed namespaces is not reachable from MCP.8a9e7c7
CORE-1Corehigh Fixedand/or run their operands in order and stop at the deciding value.8a9e7c7
CORE-2Corehigh FixedA completion queue keeps every result. The H12 test settles all calls in one tick.7c2b662
CORE-4Corehigh FixedA defined body runs like exec(), with input in scope. A bare $ref name no longer reads an input field: use input.x.8a9e7c7
CORE-5Corehigh FixedThe registered procedure decides whether its input stays raw (runs-refs, the new raw-input tag). isControlFlowPath matches the whole path.8a9e7c7
TRN-3Transportshigh FixedHTTP waits for drain. WebSocket streams use credit frames and a server high-water mark.6ea7dfa
TRN-4Transportshigh FixedThe breaker records the failure at the error item. HALF_OPEN allows a set number of probes.06b5172
TRN-5Transportshigh FixedThe cache key includes the metadata. Caching is opt-in through methods (a breaking change, no user in the repo). Streams are never cached. A hit is a copy.06b5172
TRN-6Transportsmedium-high FixedA heartbeat timeout drops the socket and handles the close at once.6ea7dfa
WRP-2Wrappershigh FixedA StringDecoder for each stream.e1b5b57
WRP-3Wrappershigh Fixedclient-cue registers client-fs, and file errors are real errors.ee528937db75d9
WRP-4Wrappershigh FixedA process registry. vitest.stop and vitest.list are new and are not MCP tools. Processes end when the host ends.08dcb2e
DATA-4Datahigh Fixeddelete and update need exactly one of id or filter. An empty filter needs confirm: true.04676bf
DATA-5Datahigh FixedThe procedures connect on the first call. collection and database are input fields.04676bf
DATA-6Datahigh FixedMongoStorage gets its collection for each operation.04676bf
DATA-7Datahigh Fixedlib.rename runs. fs.glob supports ignore, absolute and dot, with sorted "/" paths.31152e5
CLI-7CLIhigh FixedAfter the command path, a procedure's own flag wins. lib audit lists the 18 procedure flags that hide a global flag.874f355
SITE-1Site and CIhigh FixedNo sideways scroll at 375 px. The header is 104 px.dd37e64
SITE-2Site and CIhigh FixedThe TypeScript tab registers the core procedures. A test runs the code of each example.dd37e64
SITE-3Site and CIhigh FixedA stale selection cannot change the program. Undo and redo. Back works.dd37e64
CLI-12Securitymedium Fixedcli.run always starts mark with argv. The second lockfile copy is deleted.8db86ec
WRP-6Securitymedium Fixedshell.which uses execFile.e1b5b57
WRP-8Securitymedium Fixedvite.* starts the project's vite bin with no shell.e1b5b57
CORE-7 / DATA-11Securitymedium FixedThe dynamic loader takes an allowlist. The storage factory has no default loader.e1b5b57
DATA-18Securitymedium FixedrootPath must hold pnpm-workspace.yaml.ee52893
CORE-6Coremedium FixedThe registry rejects __proto__, constructor, prototype, empty segments and key collisions. The route code walks only own keys.e4a90f992980cb
CORE-8 / DATA-8Coremedium FixedA record with no handler never replaces a handler. Write-back deletes are flushed.8d1e7f3
CORE-9 / DATA-9Coremedium FixedApiStorage and HybridStorage work against the core collection procedures, tested through LocalTransport.8d1e7f3
CORE-10Coremedium FixedNested calls keep the caller's metadata and signal.92980cb
CORE-11Coremedium FixedThe JSON helpers keep $when/$name. $never keeps its subtree.8a9e7c7
CORE-12Coremedium FixedThe depth counts refs only. Non-plain objects stay unchanged. $literal works. Sibling refs run in order by default (parallel: true runs them together).8a9e7c7
CORE-13Coremedium FixedA raw input carries the caller's scope. An unknown $ref name in a scope is an error.8a9e7c7
CORE-14Coremedium FixedThe documented override keys map to the middleware keys. Leaves after a validation error come back as SKIPPED.92980cb
CORE-15Corelow–medium FixedThe event bus defects are fixed. Each procedure context has a bus (Client option bus, or the global bus).f40d27c
CORE-16 / DATA-10Corelow–medium Fixedprocedure.store/load/sync work on a program store (client-store) and fail with NOT_CONFIGURED without one. Decision: procedure.remote connect stays NOT_IMPLEMENTED, because a storage that a procedure makes at run time would give it network reach.8d1e7f36567e2d
TRN-7Transportsmedium FixedABORTED and TIMEOUT codes. A per-attempt timeout is retryable. The HTTP timeout covers the time to the first item. An unknown procedure is 404. Decision: a transport timeout is not retryable, because the server can have run the call.06b51726ea7dfa
TRN-8Transportsmedium FixedOnly network errors (or shouldRetry) are retried. The backoff stops on abort. Each attempt gets a new id.06b5172
TRN-9Transportsmedium FixedThe WebSocket client owns its wire ids. The server refuses a duplicate id in flight.6ea7dfa
TRN-10Transportsmedium FixedEvery JSON value travels. A void result is 204.6ea7dfa
TRN-11Transportsmedium FixedMetadata travels in one X-Metadata header (8 KiB at most). Internal __* keys are removed.6ea7dfa
TRN-12Transportsmedium FixedA referenced drain timer, abort for queued calls, first in first out.06b5172
TRN-13Transportsmedium FixedProcedureServer reads the live registry for each request.201f920
TRN-14Transportsmedium FixedThe wait for a connection is event-driven.6ea7dfa
TRN-15Transportslow-medium Fixedstop() aborts the open requests and leaves a caller's server open.6ea7dfa
WRP-7Wrappersmedium Fixedgit.diff and git.status read exact paths and report renames. short and oneline return lines.35cc954
WRP-9Wrapperslow/medium Fixedshell.stream has a bounded queue and pauses the program's output.6638311
DATA-12Datamedium Fixedmerge, debounce and throttle streams end their sources.c7f8a16
DATA-13Datamedium FixedSaves only after a change. Several statements run, or are an error with parameters. One queue per file on Windows.docker-sqlite 239baa65845f2c
DATA-14Datamedium FixedA download writes a part file and renames it. Byte counts. Sorted parts.0843ba5
DATA-15Datamedium FixedAn upsert by id targets one exact _id.04676bf
DATA-16Datamedium Fixedsnapshot.list reads every page, sorts, then cuts.3b0ab59
DATA-17Datamedium FixedGit visits in one repository run one at a time (serialize).50b79ea
DATA-19Datamedium FixedChecksums and uploads stream from the file. The memory use has no test.3b0ab59
CLI-8CLImedium FixedExit code 1 for each kind of failure. The mark README states the convention.874f355
CLI-9 / CLI-10 / CLI-11CLImedium FixedValues follow the Zod field type. Repeated flags, k=v records, --no-x, negative numbers, --. Extra arguments are errors.874f355
CLI-13CLImedium Fixedprocedure new and lib new make code that compiles. A test compiles a new package with tsc.55d1a8e
Standalone serverCLImedium Fixedserver needs a token by default (random, printed at start) and takes an --expose list.d0430e4
SITE-4Site and CImedium FixedThe site depends on every procedure package. gen-data fails loudly. The footer shows the commit.dd37e64edbdb4a
SITE-5Site and CImedium FixedThe Composer follows hashchange. A corrupt link says so.dd37e64
SITE-6Site and CImedium FixedPrograms run in a Web Worker with an 8 s limit and Stop. An error boundary. Limits on links. range has a length limit.dd37e649a6b270
SITE-7Site and CImedium FixedThe keyboard reaches every control. axe-core finds no serious issue.dd37e64
SITE-8Site and CImedium FixedNegative numbers, key renames, the picker, and the implicit-chain hint of the core.dd37e64b693229
SITE-9Site and CImedium FixedResults show NaN, Infinity and undefined. Unknown $ref names are warnings (and errors of the core).dd37e648a9e7c7
SITE-10Site and CImedium FixedPages deploys after CI. Node 22, 24 and 26. A type check of the test files, lib audit and a browser smoke test.b341068d588b24
SITE-11Site and CIlow-medium FixedThe catalog marks a CLI command only when mark loads its package.dd37e64
SITE-12Site and CIlow-medium FixedDark text on the accent in the dark theme.dd37e64
DOC-1Docsmedium FixedAn array is an implicit chain only when every call in it runs now. A deferred call is data, also as a chain step. The Composer follows the same rule.d45d8ce73e7278
DOC-2Docsmedium Fixedclient.eval evaluates its call like exec(), in the scope of the caller.d45d8ce
DOC-5Docsmedium Fixedclient-lib registers client-fs and client-git. The reachability snapshot has the four lib to git edges. The tool list is unchanged.50e831f
DOC-8Docsmedium FixedThe standalone server had no token and no expose rule.d0430e4
CORE-17Corelow Fixeddiscover follows the exports map. announce locks and writes atomically, also under Windows file contention.6b05f8f065436b
Low itemsCorelow FixedcontinueOnError, race cancellation, the stream buffer options, outputMode: "batch", child components through invokeProcedure, isStreamingFactory, the unregister event on override, Client.exec(ref, input).e2bbe2c8a9e7c7
TRN-16Transportslow FixedThe close handler does all the cleanup.6ea7dfa
Lower itemsTransportslow FixedOne CORS origin with Vary: Origin. Query values do not replace reserved metadata. Doc examples corrected.6ea7dfa
Open itemsTransportslow FixedThe middleware writes the context state that its types describe. mcp.serve serves a tool surface (namespaces/exclude, or the lists of bundle-mcp), not every procedure. The cache and retry overrides work.eff47a0ec24f70
CORS defaultsTransportslow FixedcorsOptions merge over the defaults (before, origin alone sent "Allow-Headers: undefined"), and X-Metadata passes the preflight.1c231d3
WRP-10Wrapperslow FixedTimeouts and signals kill the whole process tree. Old process records are removed.6638311
Open itemsWrapperslow Fixeddocker.logs with follow is a stream that ends when the reader stops. client-snapshot runs git and pnpm through runCommand.b4621193632b3a
DATA-21Datalow FixedDuplicate dependencies count once. Listener errors are logged.50b79ea
DATA-22Datalow Fixedcore.catch hydrates inside the try.50b79ea
MinorDatalow FixedRestore with overwrite replaces each folder. A failed part keeps its error.3b0ab590843ba5
Mongo schemasDatalow FixedThe mongo tools have real input and output schemas, so the MCP tool list describes collection, filter and the other fields.8306c1e830af9c
CLI-15CLIlow FixedThe REPL runs one line at a time.3d3a3b6
CLI-16CLIlow FixedInvalid ports are errors. --transport is read. server.* validates its input.377f0967db9606
CLI-17CLIlow FixedThe bin is dist/bin.js. An import runs nothing.874f355
CLI-18CLIlow FixedpathToFileURL. A load failure prints one line.874f355
CLI-19CLIlow FixedThe e2e suite tests current commands. Decision: the stale Dockerfile and compose file are retired (revert 612e842 to restore them). CI installs CUE for the scaffold test.82d5924612e842fd64ed7
CLI-20CLIlow Fixedrepo rename changes only workspace package names, in every text file.806add8
Follow-upsCLIlow Fixedgit commit takes -m. git.status works in a repository with no commits.a0852e2
PromptsCLIlow FixedIn a terminal, mark asks for a missing required argument (not with --no-input, in CI or outside a terminal).978175a
cli.run argvCLIlow Fixedcli.run sends --key=value, false booleans and -- before the positional arguments.2069d8f
SITE-13Site and CIlow FixedThe counts and examples come from the data.a263785
SITE-14Site and CIlow FixedTypeScript 7, vitest 5, @types/node 22 and node >=22 in every package, also in the cue presets. Every package has a test script.35f7dbc3166de5314c18f
Test-file typesSite and CIlow FixedThe test files of every package type-check. It found a library type defect: the collection behaviors declared Middleware<X & Y>, not Middleware<X, X & Y>.eca51646f019a7
DOC-3Docslow FixedOwner decision (2026-10-12): a defined body runs exactly as exec() runs the same program. prepareRootCall() is the one root path: a list of calls in the root input is a chain, and a root $when is ignored. A stored program follows the same rule.b09fd6e633e8add505824
DOC-4Docslow Fixedreduce runs a call in initial. chain implements passThrough and initialInput.d45d8ce
DOC-6Docslow FixedThe bundle-mcp root registers its packages. One procedure.list/get in core (get gives { found: false }, not null). mark client add --a 2 --b 3 prints 5.50e831f6cd398f8b6ff5d
DOC-7Docslow Fixedcli.run sent --key value and dropped false booleans.2069d8f
DOC-9Docslow FixedThe engines fields disagreed.314c18f
DOC-10Docslow FixedinvokeProcedure keeps the scope through validation. exec takes an onRef for one program.3b4f87a
NPM-3Releaselow FixedOwner decision (2026-10-12): the bins are client-registry (was client) and procedure-server (was server), so a global install does not take a generic command name.—
NPM-4Releaselow FixedOwner decision (2026-10-12): the three generator scripts of client-vitest are deleted (git history keeps them).—
Roadmap 2.2Wrappers— FixedrunCommand/streamCommand/killTree in @mark1russell7/client-shell/command. git, cue, vite, vitest and node use it. docker and pnpm reach it through shell.run.66383117db75d9
BUGS-2026-07 L15Collections— FixedHashMap iteration fails fast when the map changes.b5eead4
PriorityQueue sift-downCollections— FixedA poll could leave a larger element above a smaller one (found by fast-check).975dad9
cue M27 / M28Collections— FixedThe vitest feature has a CUE file and a schema entry. The dead onlyBuiltDependencies block is removed.cue 150df3bcue f2bb602
Ideas 3, 4, 5, 7, 8Site and CI— DoneProblem list, virtualized trace, put-inside and wrap-in-chain, smoke test, URL filters.dd37e64b341068
Trace consumer edgeSite and CI— DoneHydrateOptions.onRef and observeHydration(). The trace shows a hydrated call under the call that gets its result.6b660c9e1266fe
New pagesSite and CI— DoneThe status board (/status/, from this file), the middleware lab (/lab/) and the program graph in the Composer.bc0c69e0902eb6a67c021
SEOSite and CI— DonePath routes, 281 prerendered pages with their own titles, Open Graph images and JSON-LD, sitemap.xml, llms.txt, a web manifest. Each deploy sends its URLs to IndexNow. Google Search Console needs the owner's login.750d5ce33a50b372bdef5
Home pageSite and CI— DoneA live program in the hero, numbers measured at build time, an install box. The first script went from 163 to 96 kB gzip.750d5ce
DelightSite and CI— DoneThe journey of one call through the layers on the Architecture page (four hosts, with a scrubber), a command palette (Ctrl+K), and an example gallery with graph thumbnails.b3a3b95d1048895afe861
Docs pagesSite and CI— Done41 prerendered pages under /docs/ from the repository Markdown (guides, the client documents, each package README), with runnable program blocks, a table of contents and palette search.1d7aed18b1bb3e8e1bb12
NPM-1Release— Done30 public packages at 0.1.0 with full metadata, a LICENSE and a change log. scripts/check-packages.mjs packs, lints (publint, attw), installs and runs every package. Changesets and an OIDC release workflow in the npm environment. packages/documentation/RELEASE.md gives the bootstrap.8d4c3cd542aca61e0365f8b6ff5d
NPM-2Release— Done@mark1russell7/cue 1.0.0, splay 0.1.0 and docker-sqlite 0.1.0 are on npm (2026-10-12). The monorepo uses them from npm, so no package has a git dependency, and the package check runs in strict mode.cue fb4b155
NPM-5Release— DoneOwner decision (2026-10-12): the monorepo packages are @procedures/* (the scope @client belongs to an npm user). scripts/check-scope.mjs refuses an old name. MiniMongo and the cue schema use the new names. The 22 @mark1russell7/* 0.1.0 versions on npm get a deprecation that names the new package (npm-bootstrap.mjs --deprecate-old). The npm organization procedures exists (2026-10-12). npm refuses the first publish of the 30 packages with HTTP 429: the account made 25 new packages that day. A support request asks for a higher limit.11820e6ef6a327

Architecture roadmap

The phases of the architecture review. Each item lists its commits when work started.

Phase 0: safety and correctness

4 of 4 done

  1. 0.1 Lock down the warm server Done
    8db86ec43b98ee
  2. 0.2 The MCP surface Done
    ee52893e1b5b57
  3. 0.3 One pathToMethod and a conformance test Done

    pathToMethod/methodToPath in client. The test covers Local, HTTP, WebSocket and Server.handle.

    201f920
  4. 0.4 Live registry lookup, procedure.delete unregisters, MCP list_changed Done
    201f9208a9e7c7

Phase 1: one semantics

3 of 3 done

  1. 1.1 Program Format v1 and one evaluator Done

    One interpreter, and documentation/PROGRAM-FORMAT.md. Its section 11 lists the open points.

    8a9e7c788edf02
  2. 1.2 Interceptors in invokeProcedure Done

    Timeout, tracing and metrics interceptors. Nested calls inherit the chain. The MCP server limits each tool call.

    9e20de8
  3. 1.3 A build-time manifest and a thin mark path Done

    mark --help went from 1127 ms to 164 ms, and a warm-server call from 1170 ms to 352 ms.

    978175a

Phase 2: contracts

3 of 3 done

  1. 2.1 Standard Schema, real schemas for exposed procedures Done

    zod 4 everywhere. The core takes any Standard Schema validator. jsonSchemaOf() serves MCP, mark and the site. Every tool has a real input schema. Every procedure has a real output schema (448141d for the 100 core procedures and the 20 core tools), and the MCP server sends structured output for each tool with an object result.

    580a72a8306c1e830af9cb223979448141d
  2. 2.2 commandProcedure() and the wrapper migration Done

    As runCommand.

    6638311
  3. 2.3 One host package Done

    One host policy (hostPolicy(): expose rule, strictCalls, token, browser checks, interceptors) for the three hosts. mark serve and mark mcp make mark the one bin. The server and mcp-dev-tools bins stay as aliases, and impl-mcp-dev/dist/server.js serves the same 62 tools.

    115d43878758c19c3875a

Phase 3: structure

4 of 4 done

  1. 3.1 Modules without side effects Done

    Each package has a side-effect-free ./module entry, and createRegistry(...modules) builds a registry. The hosts build their own registries. Owner decision P2 stays: importing a package root still registers it.

    b38edf10bc8c08
  2. 3.2 A program store Done

    The new package client-store: ProgramStore (memory, JSON file, collection storage). procedure.store/load/sync store programs, and a loaded program is data-driven again.

    0fe2fbc6567e2d
  3. 3.3 The collections rebuild (P8) Done

    The contract tests and the defects are done. The core no longer depends on client-collections: it depends only on ws and zod.

    52a5f680fe2fbc
  4. 3.4 A slimmer core Done

    Storage moved to client-store, components to client-splay. The dist of client is 12% smaller, and the browser entry has 157 exports, not 193.

    0fe2fbc1303677

The July bug register

113 entries of the July audit, by status. The October work fixed most of the open ones.

  • 42 Fixed in July
    IDs

    C1–C7, H1–H4, H7, H10, H11, H13, H14, H16, H19, H24, H25, H27, H28, M4, M6, M7, M10, M12–M16, M18–M21, M23, M24, M30, M35, M39, M41, L1 (H18 was referenced in July too, but only its documentation was corrected: it is fixed in October. M11 was listed here, but its commit fixed M14: the deep dive found it open, and it is fixed in October)

  • 54 Fixed in October
  • 6 Fixed earlier, confirmed in October
    IDs

    H20, H21, M9, L27; H30 and M40 in the logger repository

  • 9 Obsolete (the code was deleted)
    IDs

    L21 (client-logger, retired), H17, L26 (aggregation layer), L25 (lib.pull), M31 (lib.refresh), H22 (client-server-mongo), H23 (client-connection), L18, L19 (mock packages)

  • 1 Not a bug
    IDs

    L20: splay's own tests assert that pathDepth("data.items[0]") is 2

  • 1 Open: needs a decision
    IDs

    L2

The fixes of October (37 rows)
IDsFixCommits
M25snapshot.diff: commit from S3 metadata validated as hex, git run without a shell8fb7e4c
L7vitest.run/vitest.watch without a shell; watch/reporter honored; args/shorts fixed727c00d
L8test.run/test.coverage through shell.run with an argument list68407a6
L6, L5git: option injection blocked (--upload-pack and similar), 64 MiB maxBuffer, remote-branch detectiona2148a7
L9cli.run finds the mark CLI in the workspace; positional arguments; no local re-run after a server failure5aca09c
M34, M29, L23mark: no local re-run after a server failure; -f; boolean flags74db8d4
H33generate keeps a package's own entry pointsafe3f4ecue 3a965d51420dcb
M36, H32cue.generate reports cue eval failures; cue resolved as a dependencyafe3f4e
L24cue.mod link and copy without shell commandscue e737619
H31route() passes the validated input to handlers038cf5b
H12, M1routeStream delivers every result; call() closes its stream46e01be
H6, M5, L29WebSocket: no reconnect after close(), requestTimeout, server-to-client requests per connectionf7895c0
L4shell.run: decodes once, caps output, reports the signal1bb3992
M37procedure.new dry run reports the real planbccb0b1
L22registering twice no longer throws (client-logger, client-splay)f0fa493
M33ecosystem.procedures loads packages on Windows8dde012
L30MCP JSON Schema cache keyed by schema object6640693
L28client-mcp: no listener leak; unimplemented SSE option removed8172dfa
H29client-splay: debounceStream ends, mergeStreams keeps every iteme5fe390
M3, M8dead batching middlewares and wildcard collection procedures deleted7bdd21e
L3namespaced child components found; generators endedbb4860d
M17MongoProcedures uses the handlers' own types0a63e5e
M22s3.download streams to destPath; in-memory downloads capped4015e5a
H26docker-sqlite: one call at a time per file, atomic save (50 concurrent inserts kept 1 row)docker-sqlite 352adc93e509e5
H15real sideEffects values50ba8b8
M38Docker ports bound to 127.0.0.1docker-mongo 220bfa8docker-sqlite 1247930
M26MiniMongo reads the pagination fields the server sendsMiniMongo 1473adb
H9a generator handler is a stream: invokeProcedure() detects an async iterable, validates each item, and ends the generator when the reader stopse6dfd67
H8route() honors the out config of a leaf: sponge (with accumulate), stream, handlerse6dfd67
H5WebSocket stream frames, a cancel message, and a client that yields frames as they arriveb6a5527
M2the retry middleware passes items through, and retries only before the first item49b8f88
H18the MCP server exposes only bundle-mcp's mcpNamespaces (shell.* out, lib.* in, 68 tools). A data-driven procedure (client.chain, eval, a procedure that procedure.define made) calls only exposed procedures, so client.chain cannot reach shell.exec. Importing any client package registers its procedures8f8091e
C8–C12, L10, L11, L12, L14, L16, L17the restored collections modules (P8): contract tests with fast-check for every structure, and the eleven defects fixed. See the commit message for each one52a5f68
L15HashMap iteration fails fast when the map changes (a modification count)b5eead4
M11the dynamic handler loader takes an allowlist, and the storage factory has no default loader (deep dive CORE-7, DATA-11)e1b5b57
M27, M28cue: the dead onlyBuiltDependencies block is removed; the vitest feature has a CUE file and a schema entrycue 150df3bcue f2bb602
L13composite map methods go through lruMap/ttlMap. Partly real: most HashMap composites already called this.set/this.delete on the proxy, but replace, replaceEntry and deleteEntry changed the buckets directly (an LRU replace left the recency and the reported eviction value stale)9bcce4a
Defects that October found and fixed (15)
  • lruMap over ttlMap (the cache middleware's map) kept stale nodes: memory growth, size above capacity, false evictions c157317
  • TTL timers kept Node processes alive c157317
  • git.log returned an extra empty commit a2148a7
  • zodAdapter hid the Zod schema: mark help showed no fields, and MCP tools had no input schemas f2d870c
  • lib.new ran npx in a folder with no node_modules (registry download) and interpolated the preset into a shell command 476a1cc
  • The client-dag duration tests were flaky on CI (timer granularity) 2ece668
  • The WebSocket client wrote every request and response to stdout f7895c0
  • The control-flow procedures called each operand with its raw input: a nested ref (multiply { a: add {...} }) reached the procedure as an object 5ea4d5e
  • map returned its raw items and reduce its initial value: neither applied a function. Both take fn now 5ea4d5e
  • 85 of the 100 core procedures (math, string, array, object, comparison, type, meta) were not reachable outside the package: allCoreProcedures was not exported 1b158b1
  • client.eval called handlers from the global registry with its own context, without input validation 8f8091e
  • Client.call() threw "No response received" for a falsy result (0, false, "") e6dfd67
  • LocalTransport never found a handler that its constructor got as "service.operation" e6dfd67
  • The mark CLI, the mark server mode, server and client-playground ran procedures without input validation (four copies of a bridge) e6dfd67
  • Over HTTP, every procedure error was a 500, and the client kept only "HTTP 500" instead of the server's code and message b6a5527

Sources: packages/documentation/deep-dive-2026-10/STATUS.md and packages/documentation/BUGS-STATUS-2026-10.md.