Skip to content

v2.7.13 — honesty review: data loss, false success, and Windows

Choose a tag to compare

@nokhodian nokhodian released this 26 Jul 23:31

Covers everything since v2.7.3 — 34 commits, and versions 2.7.4 through 2.7.12 that shipped to npm without a release here.

Most of this came out of an honesty review: an audit of where the tools reported something other than what actually happened. The recurring theme is a green result that meant nothing, so several entries below are about removing false success, not adding features.

Data loss and correctness

init no longer deletes user-authored files. A stale-sweep removed every entry the current version's map didn't contain, and a second pre-copy wipe destroyed files inside shipped directories. A provenance manifest now requires both "not shipped now" and "recorded as written by a previous init" before anything is removed. Only reproducible under --force, which is why it survived a first fix attempt.

The graph-gate lock stopped dropping concurrent writes. Its acquire budget was 250 ms against a 2000 ms stale window, so a writer that couldn't acquire in time wrote unlocked — the exact lost update the lock exists to prevent — and the stale-reclaim path was effectively unreachable. CI landed 9 of 16 concurrent writers. A lost queried:true re-blocks a session that already called monograph.

@monoes/memory is importable without better-sqlite3 again. A static top-level import of an optional dependency meant import '@monoes/memory' threw for anyone without the native module — the whole package, including the pure-WASM sql.js fallback, was unusable in exactly the situation the fallback exists for.

Reporting what actually happened

  • status read real values instead of hardcoded literals; one unguarded access had been throwing, so the catch substituted zeros for every panel.
  • The security worker reports incomplete rather than clean after a scan aborts on an unreadable path.
  • The dashboard no longer renders $0.00 for a session it could not price. It now shows $1.23, ≥$1.23, or unpriced — one of ~20 render sites honoured the incompleteness flag; now they all do.
  • memory delete counts remaining entries instead of reporting 0.
  • task list --status all stopped treating all as a literal status.

Security gates

Deterministic gates now fail closed instead of allowing on error, diagnostics moved to stderr, NotebookEdit content (new_source) is scanned for secrets, and gate state is written atomically under an advisory lock.

Windows

monomind could not be built on Windows at all — seven of eight packages used POSIX shell for delete/mkdir/copy, and npm runs script bodies through cmd.exe. All now call a small Node helper; no new dependency.

CI gates six packages on windows-latest. Getting there meant fixing monodesign, whose suite ran zero tests and exited 0 because node --test 'tests/*.test.*' relies on POSIX glob expansion. Fixing the glob exposed 37 real failures — separator leakage into logical paths, teardown that signalled kill() without waiting (Windows won't delete a directory a live process holds), and import() of a raw path making the ESM loader read D: as a URL scheme. Now 1,014 passing on Windows, with a guard that fails the suite if it ever runs nothing again.

Packaging

monomind is now a shim that pins @monoes/monomindcli exactly, instead of republishing the same payload under a second name. The umbrella tarball went from ~11.7 MB to 11.5 kB / 4 files. Existing installs are unaffected — npm i monomind resolves the CLI as a dependency.

Honest about scope

Tools whose names promised more than they delivered are now gated behind MONOMIND_MCP_SPECULATIVE=1, or deleted outright: daa_* (fabricated metrics, no tests), coherence_* (real math, zero callers), and the IPFS transfer_* subtree (unreachable three ways over). swarm_* and agent_spawn are documented as metadata-only — they start no process.

Also

CI runs every package suite for the first time — the previous workflow used npm ci in a pnpm repo and had never completed. A publish-behaviour job now asserts the published artifact behaves, after three releases in one day installed cleanly while shipping the wrong code.


Packages: monomind@2.7.13 · @monoes/monomindcli@2.7.13 · @monoes/hooks@1.0.2 · @monoes/routing@1.0.3 · @monoes/memory@1.0.12 · @monoes/monodesign@1.2.2