mirror of
https://github.com/Permissionless-Software-Foundation/psf-memo.git
synced 2026-09-22 01:02:01 -07:00
The process changes were only in Git history and a briefing paragraph. Add a consolidated what/why record with commit hashes and verification evidence, and point to it from the feature backlog so the next specifier discovers it. By specifier.
5.1 KiB
5.1 KiB
SwarmForge Process Improvements — 2026-09-16
Owner: specifier.
Scope: process and tooling changes only; no product feature behavior.
Base commit: f44de33 → end commit: 8153f6f (10 commits).
Verification: per-changeset evidence below; each change was committed on its
own so it can be reviewed or reverted independently.
This document is the durable "what and why" for the process pass requested after
the thread-query-bounds feature. It complements, and does not replace, the Git
history, which remains the authoritative log.
Changes
| # | Change | Why | Commit | Key files |
|---|---|---|---|---|
| 1 | Architect always sends an end-of-chain git_handoff to the specifier |
The architect's terminal handoff only reached coder/refactorer, so the specifier was never notified to merge and a human had to bridge the gap every feature | 0bc73ec |
swarmforge/roles/architect.prompt |
| 2 | Delete acceptance LevelDB dirs in close() and sweep tmp/acceptance per run |
Each scenario leaked an isolated LevelDB dir; psf-memo-db/tmp/acceptance had reached 961 dirs / 293 MB and bloats mutation worker copies |
eb308d2 |
psf-memo-db/acceptance/lib/handlers.js, psf-memo-db/acceptance/acceptance.js |
| 3 | Self-healing handoff daemon | Queued handoffs sat undelivered when handoffd was not running; recovery was manual |
053e8e3 |
swarmforge/scripts/ensure_handoff_daemon.sh, swarm_handoff.sh, ready_for_next.sh |
| 4 | Single canonical APS checkout at tmp/aps |
Up to four copies (tmp/aps, tmp/aps-spec, tmp/aps-fresh, client-local) and the docs/wrappers/runners disagreed; the runners never updated, so tools could be stale |
66a791b |
ensure-aps.sh, gherkin-parser, architect-startup.sh, all three acceptance/acceptance.js, docs/architect-startup.md |
| 5 | Incremental acceptance generation | Every run re-parsed and regenerated every feature even when only one changed | 5bbe276 |
all three acceptance/acceptance.js and acceptance/lib/generate.js |
| 6 | Canonical verify.sh + machine-readable verification record |
The same commands were transcribed in several places and the full suite was re-run by every role | 0db351a |
swarmforge/scripts/verify.mjs, verify.sh, swarmforge/roles/architect.prompt, swarmforge/roles/specifier.prompt |
| 7 | Mutation guards: mutate-file.sh, clean-builds.sh |
The default differential run can silently under-select after a function-set change; stale build dirs make worker copies huge | 752bf2c |
swarmforge/scripts/mutate-file.sh, clean-builds.sh, docs/architect-startup.md |
| 8 | Block handoffs from a dirty working tree | Unrelated tracked changes could ride along with a handoff | 0942b2e |
swarmforge/scripts/swarm_handoff.bb |
| 9 | state.sh helper |
Refreshing the briefing HEAD lines required manual git inspection | a5f8967 |
swarmforge/scripts/state.sh |
| 10 | Briefing refresh (APS, daemon, verify, gotchas #24/#25, §11) | Keep the standing specifier briefing aligned with the new tooling | a5f8967, 8153f6f |
specifier-prompt.md |
Verification evidence
- #2:
tmp/acceptancemeasured at 961 dirs / 293 MB before, 4 KB after; acceptance 11/11 still pass. - #3: daemon stopped,
ensure_handoff_daemon.shrestarted it (pid observed),ready_for_next.shworks. - #4:
ensure-aps.shclone and--updateverified;gherkin-parserwrapper parsed a feature; duplicate checkouts removed. - #5: a second acceptance run left the generated test mtime unchanged (generation skipped) while 11/11 passed.
- #6:
verify.mjs db --record …emittedresult: passfor unit/property/acceptance/lint withgit_sha. - #7:
mutate-file.shreportedSelected 0 / Covered 10, auto-reran--mutate-all, result 10 killed / 0 survived. - #8: a handoff attempt with a dirty tree was blocked (exit 3), listed the files, retained the draft, and queued nothing.
- #9:
state.shprinted each role branch HEAD and main-checkout status.
How to use
- Refresh tools:
swarmforge/scripts/ensure-aps.sh --update. - Verify a component and record it:
swarmforge/scripts/verify.sh <client|db|indexer> --record docs/reviews/<task>-verification.json --task <task>. - Mutate a file safely: from the component dir,
../swarmforge/scripts/mutate-file.sh src/<file>.js --max-workers 8. - Clean worker-copy bloat:
swarmforge/scripts/clean-builds.sh. - Refresh state:
swarmforge/scripts/state.sh. - Handoffs:
swarm_handoff.shnow self-heals the daemon and refuses a dirty tree (SWARMFORGE_ALLOW_DIRTY=1overrides).
Known remaining work
- Acceptance execution is ~9 minutes (546 s) for the 11
psf-memo-dbsuites, dominated by running generated test files sequentially; generation is now incremental. Parallelizing the generated test files (with isolatedtmp/per worker) is the next efficiency candidate and is not yet specified. - APS
gherkin-mutatorexposes no project mutation-filter hook, so intrinsic upper-bound survivors (at most N) cannot be filtered out; documented indocs/architect-startup.mdand specifier gotcha #23.
By specifier.