Skip to content

Field report: 40x rebuild wall-clock variance across OS users on one machine; check RSS ballooning (~12 GB); no repair path short of full rebuild #140

Description

@seemantk

Field report: large rebuild wall-clock variance across OS users on one machine; check RSS ballooning (~12 GB); no repair path short of full rebuild

Thanks first for mex — the scaffold + decision-log half has been rock solid for us across four concurrent agent clones. This report is entirely about the graph/check half, offered as field data (we noticed #115 already benchmarks graph-vs-grep, and #134 is working on freshness/safe recovery — this complements both).

Environment

  • mex-agent 0.7.2, installed globally via homebrew node v26.7.0 on macOS 27.0 (arm64)
  • Multi-agent monorepo, ~1.8k tracked files (Python backend + TS/Svelte frontend)
  • Several agent clones on one physical machine, running under different OS users

Observations

1. ~40× rebuild wall-clock variance between users on identical hardware.

Two independent mex graph --json runs, same machine, same day, same mex version:

Run Graph size Wall clock
user A ~33k nodes (est.) 10.7 min
user B 53,673 nodes / 120,329 edges / 1,573 files 7.2 hours

Graph-size ratio is ~1.6×; time ratio is ~40×. Machine was otherwise idle-ish during both. We could not isolate the cause — suspects include per-user file watchers/indexers interfering, or something in $HOME env resolution — but we'd love to know what graph build is actually sensitive to, since hardware is controlled for here.

2. Post-rebuild check balloons to ~12 GB RSS.

First post-rebuild mex check reached ~11.9 GB RSS at 6m40s before being killed (by PID). The kill left a ~720 MB uncheckpointed WAL behind, i.e. exactly the degraded-store condition. A subsequent bounded run (timeout 120 …) ballooned again but exited cleanly (rc=124) and printed remediation guidance — the bounded-wrapper behavior works as designed.

3. No repair path short of full rebuild.

The 0.7.2 CLI has no checkpoint/vacuum/repair subcommand, so observation 2 creates a chicken-and-egg loop: verifying a healthy store requires a completing check; any killed check re-dirties the store; the only reset is another multi-hour rebuild (or 10-minute one, per observation 1, if you're lucky).

4. Staleness gating removes impact queries in practice.

A few days after a rebuild, mex impact <symbol> returns GRAPH_REBUILD_REQUIRED instead of answering with reduced confidence. In an active multi-agent repo this means impact queries are unavailable most of the time unless someone keeps re-running multi-minute/hour builds. (Presumably adjacent to #134's provenance-bound freshness work.)

What we'd love

  • Any known causes/gotchas for the per-user rebuild variance in observation 1
  • A supported recovery procedure for an uncheckpointed WAL that doesn't require full rebuild (even a "documented sqlite surgery" section would help)
  • Thoughts on a memory ceiling or streaming mode for check

Happy to supply more data points (per-run timings, store sizes, sqlite3 schema dumps) if useful.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions