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.
Field report: large rebuild wall-clock variance across OS users on one machine;
checkRSS ballooning (~12 GB); no repair path short of full rebuildThanks 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
Observations
1. ~40× rebuild wall-clock variance between users on identical hardware.
Two independent
mex graph --jsonruns, same machine, same day, same mex version: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
$HOMEenv resolution — but we'd love to know what graph build is actually sensitive to, since hardware is controlled for here.2. Post-rebuild
checkballoons to ~12 GB RSS.First post-rebuild
mex checkreached ~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>returnsGRAPH_REBUILD_REQUIREDinstead 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
checkHappy to supply more data points (per-run timings, store sizes,
sqlite3schema dumps) if useful.