From d99eda3db46970067ec3499650fa2db648f2b550 Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Thu, 3 Sep 2026 14:23:38 -0700 Subject: [PATCH 1/2] Add startup bloat check for mutation build dirs Record the tmp/acceptance and target/mutation-workers bloat that made mutate4javascript worker copies many GB and mutation runs appear to hang. Add a startup check that flags any of these dirs over 100MB so they are cleaned before a mutation run. By architect. --- docs/architect-process-notes.md | 13 +++++++++++++ docs/architect-startup.md | 12 ++++++++++++ swarmforge/scripts/architect-startup.sh | 21 +++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/docs/architect-process-notes.md b/docs/architect-process-notes.md index cc8bb15..5e392c9 100644 --- a/docs/architect-process-notes.md +++ b/docs/architect-process-notes.md @@ -49,6 +49,19 @@ distinct from per-task verification results, which live in to keep the worker copies tiny. This cut a notifications-query mutation run from 20+ minutes to ~2 minutes. +- **Which directories bloat and how to keep them clean.** The two directories + that grow without bound are `/tmp/acceptance` (LevelDB dirs from + acceptance runs, up to ~1.5G) and `/target/mutation-workers` + (per-run worker copies, up to ~14G). Both are gitignored build artifacts. + Clean them before any mutation run: + ```bash + rm -rf psf-memo-db/tmp/acceptance psf-memo-db/target/mutation-workers \ + psf-memo-client/tmp/acceptance psf-memo-client/target/mutation-workers + ``` + `architect-startup.sh` now checks these and reports them as `[FAIL]` when + they exceed a size threshold, so a bloated dir is caught before it slows a + mutation run. + - **`memo-db.js` (client HTTP adapter) is excluded from mutation testing.** It uses ESM + a directory import (`../config`) that is only resolvable via react-scripts/webpack, so it cannot be loaded under plain `node --test`. Its diff --git a/docs/architect-startup.md b/docs/architect-startup.md index bc98651..137a04b 100644 --- a/docs/architect-startup.md +++ b/docs/architect-startup.md @@ -48,6 +48,18 @@ Parse survivors with a small python one-liner over `d['results']` (filter `--workers 8` and `--status-interval` so progress is visible. - Run verification sequentially (never concurrent with acceptance generation). +## Keep build dirs clean (mutation speed) +`mutate4javascript` copies the whole project (including `tmp/`) into each worker. +Stale `tmp/acceptance` (LevelDB dirs) and `target/mutation-workers` can bloat to +~1.5G and ~14G, making the worker copy alone many GB and mutation runs appear to +hang. `architect-startup.sh` now flags any of these over 100MB as `[FAIL]`. +Clean them before any mutation run: +```bash +rm -rf psf-memo-db/tmp/acceptance psf-memo-db/target/mutation-workers \ + psf-memo-client/tmp/acceptance psf-memo-client/target/mutation-workers +``` +This cut a notifications-query mutation run from 20+ minutes to ~2 minutes. + ## Refactorer forwards your own review commit back After you send a `priority: 00` review commit to coder+refactorer, the refactorer merges and forwards that SAME commit back to you. It is a no-op ("Already up to diff --git a/swarmforge/scripts/architect-startup.sh b/swarmforge/scripts/architect-startup.sh index 95eea61..e36eab2 100755 --- a/swarmforge/scripts/architect-startup.sh +++ b/swarmforge/scripts/architect-startup.sh @@ -73,6 +73,27 @@ for c in psf-memo-client psf-memo-db psf-memo-indexer; do && ok "$c runner-worker" || bad "$c runner-worker" done +echo "== Bloated build dirs (slow mutation copies) ==" +# tmp/acceptance and target/mutation-workers are gitignored build artifacts +# that mutate4javascript copies into every worker. If they grow large, the +# worker copy alone can be many GB and mutation runs appear to hang. Flag any +# dir over the threshold so it can be cleaned before a mutation run. +BLOAT_KB=102400 # 100 MB +for d in psf-memo-client/tmp/acceptance psf-memo-client/target/mutation-workers \ + psf-memo-db/tmp/acceptance psf-memo-db/target/mutation-workers \ + psf-memo-indexer/tmp/acceptance psf-memo-indexer/target/mutation-workers; do + if [ -d "$d" ]; then + size_kb=$(du -sk "$d" 2>/dev/null | awk '{print $1}') + if [ -n "$size_kb" ] && [ "$size_kb" -gt "$BLOAT_KB" ]; then + bad "$d is ${size_kb}KB (clean with: rm -rf $d)" + else + ok "$d clean" + fi + else + ok "$d absent" + fi +done + echo echo "Result: $pass ok, $fail fail" [ "$fail" -eq 0 ] From edbdbc6019e2583227a5bea0c5bfb298d4870ed5 Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Thu, 3 Sep 2026 14:28:45 -0700 Subject: [PATCH 2/2] Record architect merge in briefing By specifier. --- specifier-prompt.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/specifier-prompt.md b/specifier-prompt.md index cb45f27..f07282c 100644 --- a/specifier-prompt.md +++ b/specifier-prompt.md @@ -359,6 +359,7 @@ At the end of each session, update this file: - Note the current `master` HEAD commit. - State the next feature to work on. -Current `master` HEAD: `d3903fa` (backlog cleared of all previously listed -features; direction set to front-end improvements to `psf-memo-client`). +Current `master` HEAD: `d99eda3` (merged architect's notifications refactor + +startup bloat check; verified db 315 passing + lint clean, client 239 passing + +lint clean + build succeeds). Next action: **ask the user for the next front-end improvement to spec**.