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.
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.
Findings
125 of 125 findings
| ID | Area | Severity | Status | Note | Commits |
|---|---|---|---|---|---|
| WRP-1 / MCP-2 | Security | critical | Fixed | docker.* runs shell.run with argv. Values that start with - are rejected. | ee52893 |
| MCP-1 / CLI-5 / TRN-2 | Security | critical | Fixed | cli is not in mcpNamespaces. The tool snapshot test pins the surface. | ee52893 |
| TRN-1 / CLI-1 / CLI-2 / DATA-20 | Security | critical | Fixed | Loopback 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-3 | Security | critical / high | Fixed | Snapshot names are checked. Restore uses mkdtemp. The guard checks the archive entry. Exclusions match segments. | e1b5b57 |
| CLI-3 | Security | high | Fixed | Warm mode is used only for the same cwd. | 8db86ec |
| CLI-4 / CLI-14 | Security | high | Fixed | The lockfile records the peer id, the workspace and the build. /health confirms the server before a call or a signal. | 8db86ec |
| CLI-6 | Security | high | Fixed | The server CLI registers its procedures once. | 8db86ec |
| WRP-5 | Security | high | Fixed | pnpm.* runs shell.run with argv. | e1b5b57 |
| MCP-3 | Security | high | Fixed | Each 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-3 | Security | high | Fixed | replace 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-1 | Core | high | Fixed | and/or run their operands in order and stop at the deciding value. | 8a9e7c7 |
| CORE-2 | Core | high | Fixed | A completion queue keeps every result. The H12 test settles all calls in one tick. | 7c2b662 |
| CORE-4 | Core | high | Fixed | A defined body runs like exec(), with input in scope. A bare $ref name no longer reads an input field: use input.x. | 8a9e7c7 |
| CORE-5 | Core | high | Fixed | The registered procedure decides whether its input stays raw (runs-refs, the new raw-input tag). isControlFlowPath matches the whole path. | 8a9e7c7 |
| TRN-3 | Transports | high | Fixed | HTTP waits for drain. WebSocket streams use credit frames and a server high-water mark. | 6ea7dfa |
| TRN-4 | Transports | high | Fixed | The breaker records the failure at the error item. HALF_OPEN allows a set number of probes. | 06b5172 |
| TRN-5 | Transports | high | Fixed | The 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-6 | Transports | medium-high | Fixed | A heartbeat timeout drops the socket and handles the close at once. | 6ea7dfa |
| WRP-2 | Wrappers | high | Fixed | A StringDecoder for each stream. | e1b5b57 |
| WRP-3 | Wrappers | high | Fixed | client-cue registers client-fs, and file errors are real errors. | ee528937db75d9 |
| WRP-4 | Wrappers | high | Fixed | A process registry. vitest.stop and vitest.list are new and are not MCP tools. Processes end when the host ends. | 08dcb2e |
| DATA-4 | Data | high | Fixed | delete and update need exactly one of id or filter. An empty filter needs confirm: true. | 04676bf |
| DATA-5 | Data | high | Fixed | The procedures connect on the first call. collection and database are input fields. | 04676bf |
| DATA-6 | Data | high | Fixed | MongoStorage gets its collection for each operation. | 04676bf |
| DATA-7 | Data | high | Fixed | lib.rename runs. fs.glob supports ignore, absolute and dot, with sorted "/" paths. | 31152e5 |
| CLI-7 | CLI | high | Fixed | After the command path, a procedure's own flag wins. lib audit lists the 18 procedure flags that hide a global flag. | 874f355 |
| SITE-1 | Site and CI | high | Fixed | No sideways scroll at 375 px. The header is 104 px. | dd37e64 |
| SITE-2 | Site and CI | high | Fixed | The TypeScript tab registers the core procedures. A test runs the code of each example. | dd37e64 |
| SITE-3 | Site and CI | high | Fixed | A stale selection cannot change the program. Undo and redo. Back works. | dd37e64 |
| CLI-12 | Security | medium | Fixed | cli.run always starts mark with argv. The second lockfile copy is deleted. | 8db86ec |
| WRP-6 | Security | medium | Fixed | shell.which uses execFile. | e1b5b57 |
| WRP-8 | Security | medium | Fixed | vite.* starts the project's vite bin with no shell. | e1b5b57 |
| CORE-7 / DATA-11 | Security | medium | Fixed | The dynamic loader takes an allowlist. The storage factory has no default loader. | e1b5b57 |
| DATA-18 | Security | medium | Fixed | rootPath must hold pnpm-workspace.yaml. | ee52893 |
| CORE-6 | Core | medium | Fixed | The registry rejects __proto__, constructor, prototype, empty segments and key collisions. The route code walks only own keys. | e4a90f992980cb |
| CORE-8 / DATA-8 | Core | medium | Fixed | A record with no handler never replaces a handler. Write-back deletes are flushed. | 8d1e7f3 |
| CORE-9 / DATA-9 | Core | medium | Fixed | ApiStorage and HybridStorage work against the core collection procedures, tested through LocalTransport. | 8d1e7f3 |
| CORE-10 | Core | medium | Fixed | Nested calls keep the caller's metadata and signal. | 92980cb |
| CORE-11 | Core | medium | Fixed | The JSON helpers keep $when/$name. $never keeps its subtree. | 8a9e7c7 |
| CORE-12 | Core | medium | Fixed | The 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-13 | Core | medium | Fixed | A raw input carries the caller's scope. An unknown $ref name in a scope is an error. | 8a9e7c7 |
| CORE-14 | Core | medium | Fixed | The documented override keys map to the middleware keys. Leaves after a validation error come back as SKIPPED. | 92980cb |
| CORE-15 | Core | low–medium | Fixed | The event bus defects are fixed. Each procedure context has a bus (Client option bus, or the global bus). | f40d27c |
| CORE-16 / DATA-10 | Core | low–medium | Fixed | procedure.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-7 | Transports | medium | Fixed | ABORTED 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-8 | Transports | medium | Fixed | Only network errors (or shouldRetry) are retried. The backoff stops on abort. Each attempt gets a new id. | 06b5172 |
| TRN-9 | Transports | medium | Fixed | The WebSocket client owns its wire ids. The server refuses a duplicate id in flight. | 6ea7dfa |
| TRN-10 | Transports | medium | Fixed | Every JSON value travels. A void result is 204. | 6ea7dfa |
| TRN-11 | Transports | medium | Fixed | Metadata travels in one X-Metadata header (8 KiB at most). Internal __* keys are removed. | 6ea7dfa |
| TRN-12 | Transports | medium | Fixed | A referenced drain timer, abort for queued calls, first in first out. | 06b5172 |
| TRN-13 | Transports | medium | Fixed | ProcedureServer reads the live registry for each request. | 201f920 |
| TRN-14 | Transports | medium | Fixed | The wait for a connection is event-driven. | 6ea7dfa |
| TRN-15 | Transports | low-medium | Fixed | stop() aborts the open requests and leaves a caller's server open. | 6ea7dfa |
| WRP-7 | Wrappers | medium | Fixed | git.diff and git.status read exact paths and report renames. short and oneline return lines. | 35cc954 |
| WRP-9 | Wrappers | low/medium | Fixed | shell.stream has a bounded queue and pauses the program's output. | 6638311 |
| DATA-12 | Data | medium | Fixed | merge, debounce and throttle streams end their sources. | c7f8a16 |
| DATA-13 | Data | medium | Fixed | Saves only after a change. Several statements run, or are an error with parameters. One queue per file on Windows. | docker-sqlite 239baa65845f2c |
| DATA-14 | Data | medium | Fixed | A download writes a part file and renames it. Byte counts. Sorted parts. | 0843ba5 |
| DATA-15 | Data | medium | Fixed | An upsert by id targets one exact _id. | 04676bf |
| DATA-16 | Data | medium | Fixed | snapshot.list reads every page, sorts, then cuts. | 3b0ab59 |
| DATA-17 | Data | medium | Fixed | Git visits in one repository run one at a time (serialize). | 50b79ea |
| DATA-19 | Data | medium | Fixed | Checksums and uploads stream from the file. The memory use has no test. | 3b0ab59 |
| CLI-8 | CLI | medium | Fixed | Exit code 1 for each kind of failure. The mark README states the convention. | 874f355 |
| CLI-9 / CLI-10 / CLI-11 | CLI | medium | Fixed | Values follow the Zod field type. Repeated flags, k=v records, --no-x, negative numbers, --. Extra arguments are errors. | 874f355 |
| CLI-13 | CLI | medium | Fixed | procedure new and lib new make code that compiles. A test compiles a new package with tsc. | 55d1a8e |
| Standalone server | CLI | medium | Fixed | server needs a token by default (random, printed at start) and takes an --expose list. | d0430e4 |
| SITE-4 | Site and CI | medium | Fixed | The site depends on every procedure package. gen-data fails loudly. The footer shows the commit. | dd37e64edbdb4a |
| SITE-5 | Site and CI | medium | Fixed | The Composer follows hashchange. A corrupt link says so. | dd37e64 |
| SITE-6 | Site and CI | medium | Fixed | Programs 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-7 | Site and CI | medium | Fixed | The keyboard reaches every control. axe-core finds no serious issue. | dd37e64 |
| SITE-8 | Site and CI | medium | Fixed | Negative numbers, key renames, the picker, and the implicit-chain hint of the core. | dd37e64b693229 |
| SITE-9 | Site and CI | medium | Fixed | Results show NaN, Infinity and undefined. Unknown $ref names are warnings (and errors of the core). | dd37e648a9e7c7 |
| SITE-10 | Site and CI | medium | Fixed | Pages deploys after CI. Node 22, 24 and 26. A type check of the test files, lib audit and a browser smoke test. | b341068d588b24 |
| SITE-11 | Site and CI | low-medium | Fixed | The catalog marks a CLI command only when mark loads its package. | dd37e64 |
| SITE-12 | Site and CI | low-medium | Fixed | Dark text on the accent in the dark theme. | dd37e64 |
| DOC-1 | Docs | medium | Fixed | An 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-2 | Docs | medium | Fixed | client.eval evaluates its call like exec(), in the scope of the caller. | d45d8ce |
| DOC-5 | Docs | medium | Fixed | client-lib registers client-fs and client-git. The reachability snapshot has the four lib to git edges. The tool list is unchanged. | 50e831f |
| DOC-8 | Docs | medium | Fixed | The standalone server had no token and no expose rule. | d0430e4 |
| CORE-17 | Core | low | Fixed | discover follows the exports map. announce locks and writes atomically, also under Windows file contention. | 6b05f8f065436b |
| Low items | Core | low | Fixed | continueOnError, race cancellation, the stream buffer options, outputMode: "batch", child components through invokeProcedure, isStreamingFactory, the unregister event on override, Client.exec(ref, input). | e2bbe2c8a9e7c7 |
| TRN-16 | Transports | low | Fixed | The close handler does all the cleanup. | 6ea7dfa |
| Lower items | Transports | low | Fixed | One CORS origin with Vary: Origin. Query values do not replace reserved metadata. Doc examples corrected. | 6ea7dfa |
| Open items | Transports | low | Fixed | The 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 defaults | Transports | low | Fixed | corsOptions merge over the defaults (before, origin alone sent "Allow-Headers: undefined"), and X-Metadata passes the preflight. | 1c231d3 |
| WRP-10 | Wrappers | low | Fixed | Timeouts and signals kill the whole process tree. Old process records are removed. | 6638311 |
| Open items | Wrappers | low | Fixed | docker.logs with follow is a stream that ends when the reader stops. client-snapshot runs git and pnpm through runCommand. | b4621193632b3a |
| DATA-21 | Data | low | Fixed | Duplicate dependencies count once. Listener errors are logged. | 50b79ea |
| DATA-22 | Data | low | Fixed | core.catch hydrates inside the try. | 50b79ea |
| Minor | Data | low | Fixed | Restore with overwrite replaces each folder. A failed part keeps its error. | 3b0ab590843ba5 |
| Mongo schemas | Data | low | Fixed | The mongo tools have real input and output schemas, so the MCP tool list describes collection, filter and the other fields. | 8306c1e830af9c |
| CLI-15 | CLI | low | Fixed | The REPL runs one line at a time. | 3d3a3b6 |
| CLI-16 | CLI | low | Fixed | Invalid ports are errors. --transport is read. server.* validates its input. | 377f0967db9606 |
| CLI-17 | CLI | low | Fixed | The bin is dist/bin.js. An import runs nothing. | 874f355 |
| CLI-18 | CLI | low | Fixed | pathToFileURL. A load failure prints one line. | 874f355 |
| CLI-19 | CLI | low | Fixed | The 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-20 | CLI | low | Fixed | repo rename changes only workspace package names, in every text file. | 806add8 |
| Follow-ups | CLI | low | Fixed | git commit takes -m. git.status works in a repository with no commits. | a0852e2 |
| Prompts | CLI | low | Fixed | In a terminal, mark asks for a missing required argument (not with --no-input, in CI or outside a terminal). | 978175a |
| cli.run argv | CLI | low | Fixed | cli.run sends --key=value, false booleans and -- before the positional arguments. | 2069d8f |
| SITE-13 | Site and CI | low | Fixed | The counts and examples come from the data. | a263785 |
| SITE-14 | Site and CI | low | Fixed | TypeScript 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 types | Site and CI | low | Fixed | The 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-3 | Docs | low | Fixed | Owner 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-4 | Docs | low | Fixed | reduce runs a call in initial. chain implements passThrough and initialInput. | d45d8ce |
| DOC-6 | Docs | low | Fixed | The 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-7 | Docs | low | Fixed | cli.run sent --key value and dropped false booleans. | 2069d8f |
| DOC-9 | Docs | low | Fixed | The engines fields disagreed. | 314c18f |
| DOC-10 | Docs | low | Fixed | invokeProcedure keeps the scope through validation. exec takes an onRef for one program. | 3b4f87a |
| NPM-3 | Release | low | Fixed | Owner 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-4 | Release | low | Fixed | Owner decision (2026-10-12): the three generator scripts of client-vitest are deleted (git history keeps them). | — |
| Roadmap 2.2 | Wrappers | — | Fixed | runCommand/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 L15 | Collections | — | Fixed | HashMap iteration fails fast when the map changes. | b5eead4 |
| PriorityQueue sift-down | Collections | — | Fixed | A poll could leave a larger element above a smaller one (found by fast-check). | 975dad9 |
cue M27 / M28 | Collections | — | Fixed | The vitest feature has a CUE file and a schema entry. The dead onlyBuiltDependencies block is removed. | cue 150df3bcue f2bb602 |
| Ideas 3, 4, 5, 7, 8 | Site and CI | — | Done | Problem list, virtualized trace, put-inside and wrap-in-chain, smoke test, URL filters. | dd37e64b341068 |
| Trace consumer edge | Site and CI | — | Done | HydrateOptions.onRef and observeHydration(). The trace shows a hydrated call under the call that gets its result. | 6b660c9e1266fe |
| New pages | Site and CI | — | Done | The status board (/status/, from this file), the middleware lab (/lab/) and the program graph in the Composer. | bc0c69e0902eb6a67c021 |
| SEO | Site and CI | — | Done | Path 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 page | Site and CI | — | Done | A live program in the hero, numbers measured at build time, an install box. The first script went from 163 to 96 kB gzip. | 750d5ce |
| Delight | Site and CI | — | Done | The 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 pages | Site and CI | — | Done | 41 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-1 | Release | — | Done | 30 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-2 | Release | — | 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-5 | Release | — | Done | Owner 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
- 0.1 Lock down the warm server Done
8db86ec43b98ee - 0.2 The MCP surface Done
ee52893e1b5b57 - 0.3 One
pathToMethodand a conformance test DonepathToMethod/methodToPathinclient. The test covers Local, HTTP, WebSocket andServer.handle.201f920 - 0.4 Live registry lookup,
procedure.deleteunregisters, MCPlist_changedDone201f9208a9e7c7
Phase 1: one semantics
3 of 3 done
- 1.1 Program Format v1 and one evaluator Done
One interpreter, and
documentation/PROGRAM-FORMAT.md. Its section 11 lists the open points.8a9e7c788edf02 - 1.2 Interceptors in
invokeProcedureDoneTimeout, tracing and metrics interceptors. Nested calls inherit the chain. The MCP server limits each tool call.
9e20de8 - 1.3 A build-time manifest and a thin
markpath Donemark --helpwent 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
- 2.1 Standard Schema, real schemas for exposed procedures Done
zod 4 everywhere. The core takes any Standard Schema validator.
jsonSchemaOf()serves MCP,markand the site. Every tool has a real input schema. Every procedure has a real output schema (448141dfor 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
commandProcedure()and the wrapper migration DoneAs
runCommand.6638311 - 2.3 One
hostpackage DoneOne host policy (
hostPolicy(): expose rule,strictCalls, token, browser checks, interceptors) for the three hosts.mark serveandmark mcpmakemarkthe one bin. Theserverandmcp-dev-toolsbins stay as aliases, andimpl-mcp-dev/dist/server.jsserves the same 62 tools.115d43878758c19c3875a
Phase 3: structure
4 of 4 done
- 3.1 Modules without side effects Done
Each package has a side-effect-free
./moduleentry, andcreateRegistry(...modules)builds a registry. The hosts build their own registries. Owner decision P2 stays: importing a package root still registers it.b38edf10bc8c08 - 3.2 A program store Done
The new package
client-store:ProgramStore(memory, JSON file, collection storage).procedure.store/load/syncstore programs, and a loaded program is data-driven again.0fe2fbc6567e2d - 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 onwsandzod.52a5f680fe2fbc - 3.4 A slimmer core Done
Storage moved to
client-store, components toclient-splay. Thedistofclientis 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
loggerrepository - 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 thatpathDepth("data.items[0]")is 2 - 1 Open: needs a decision
IDs
L2
The fixes of October (37 rows)
| IDs | Fix | Commits |
|---|---|---|
| M25 | snapshot.diff: commit from S3 metadata validated as hex, git run without a shell | 8fb7e4c |
| L7 | vitest.run/vitest.watch without a shell; watch/reporter honored; args/shorts fixed | 727c00d |
| L8 | test.run/test.coverage through shell.run with an argument list | 68407a6 |
| L6, L5 | git: option injection blocked (--upload-pack and similar), 64 MiB maxBuffer, remote-branch detection | a2148a7 |
| L9 | cli.run finds the mark CLI in the workspace; positional arguments; no local re-run after a server failure | 5aca09c |
| M34, M29, L23 | mark: no local re-run after a server failure; -f; boolean flags | 74db8d4 |
| H33 | generate keeps a package's own entry points | afe3f4ecue 3a965d51420dcb |
| M36, H32 | cue.generate reports cue eval failures; cue resolved as a dependency | afe3f4e |
| L24 | cue.mod link and copy without shell commands | cue e737619 |
| H31 | route() passes the validated input to handlers | 038cf5b |
| H12, M1 | routeStream delivers every result; call() closes its stream | 46e01be |
| H6, M5, L29 | WebSocket: no reconnect after close(), requestTimeout, server-to-client requests per connection | f7895c0 |
| L4 | shell.run: decodes once, caps output, reports the signal | 1bb3992 |
| M37 | procedure.new dry run reports the real plan | bccb0b1 |
| L22 | registering twice no longer throws (client-logger, client-splay) | f0fa493 |
| M33 | ecosystem.procedures loads packages on Windows | 8dde012 |
| L30 | MCP JSON Schema cache keyed by schema object | 6640693 |
| L28 | client-mcp: no listener leak; unimplemented SSE option removed | 8172dfa |
| H29 | client-splay: debounceStream ends, mergeStreams keeps every item | e5fe390 |
| M3, M8 | dead batching middlewares and wildcard collection procedures deleted | 7bdd21e |
| L3 | namespaced child components found; generators ended | bb4860d |
| M17 | MongoProcedures uses the handlers' own types | 0a63e5e |
| M22 | s3.download streams to destPath; in-memory downloads capped | 4015e5a |
| H26 | docker-sqlite: one call at a time per file, atomic save (50 concurrent inserts kept 1 row) | docker-sqlite 352adc93e509e5 |
| H15 | real sideEffects values | 50ba8b8 |
| M38 | Docker ports bound to 127.0.0.1 | docker-mongo 220bfa8docker-sqlite 1247930 |
| M26 | MiniMongo reads the pagination fields the server sends | MiniMongo 1473adb |
| H9 | a generator handler is a stream: invokeProcedure() detects an async iterable, validates each item, and ends the generator when the reader stops | e6dfd67 |
| H8 | route() honors the out config of a leaf: sponge (with accumulate), stream, handlers | e6dfd67 |
| H5 | WebSocket stream frames, a cancel message, and a client that yields frames as they arrive | b6a5527 |
| M2 | the retry middleware passes items through, and retries only before the first item | 49b8f88 |
| H18 | the 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 procedures | 8f8091e |
| C8–C12, L10, L11, L12, L14, L16, L17 | the restored collections modules (P8): contract tests with fast-check for every structure, and the eleven defects fixed. See the commit message for each one | 52a5f68 |
| L15 | HashMap iteration fails fast when the map changes (a modification count) | b5eead4 |
| M11 | the dynamic handler loader takes an allowlist, and the storage factory has no default loader (deep dive CORE-7, DATA-11) | e1b5b57 |
| M27, M28 | cue: the dead onlyBuiltDependencies block is removed; the vitest feature has a CUE file and a schema entry | cue 150df3bcue f2bb602 |
| L13 | composite 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)
lruMapoverttlMap(the cache middleware's map) kept stale nodes: memory growth, size above capacity, false evictionsc157317- TTL timers kept Node processes alive
c157317 git.logreturned an extra empty commita2148a7zodAdapterhid the Zod schema:markhelp showed no fields, and MCP tools had no input schemasf2d870clib.newrannpxin a folder with nonode_modules(registry download) and interpolated the preset into a shell command476a1cc- The
client-dagduration 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 object5ea4d5e mapreturned its raw items andreduceits initial value: neither applied a function. Both takefnnow5ea4d5e- 85 of the 100 core procedures (math, string, array, object, comparison, type, meta) were not reachable outside the package:
allCoreProcedureswas not exported1b158b1 client.evalcalled handlers from the global registry with its own context, without input validation8f8091eClient.call()threw "No response received" for a falsy result (0,false,"")e6dfd67LocalTransportnever found a handler that its constructor got as"service.operation"e6dfd67- The
markCLI, themarkserver mode,serverandclient-playgroundran 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.