Relationships
#1792 CLI writes runtime state (lastStalenessWarning) into tracked .swamp.yaml, dirtying a committed config file
Opened by randybias · 8/22/2026· Shipped 8/24/2026
.swamp.yaml is a tracked, committed repo config file, and the CLI writes runtime state into it as a side effect of emitting a staleness warning. Every session that hits the warning gets a dirty tracked file, and in a multi-user checkout that blocks everyone's pull --rebase until somebody commits a timestamp.
Observed on swamp 20260822.011157.0-sha.06b61472.
The file mixes two kinds of data
trustedCollectives: # real repo config — belongs in git
- ...
upgradedAt: "2026-08-11T11:38:32.086Z"
lastStalenessWarning: "2026-08-22T19:48:49.174Z" # runtime state — does notlastStalenessWarning is bookkeeping for "have I nagged this user recently". It is per-machine, per-moment, and carries no information any other clone wants. But it lives in the same tracked file as trustedCollectives, so the file cannot simply be gitignored — doing that would drop real configuration.
The result is a commit that exists only to record when a warning was shown:
chore(swamp): commit the lastStalenessWarning timestamp swamp wrote into tracked .swamp.yamlWhy this is worth fixing rather than tolerating
We run several agent sessions against one checkout. A tracked file that mutates on its own means:
- an unexplained modified file appears in everyone's
git status pull --rebaserefuses for every session until someone commits it- the commit carries no information, so reviewers learn to skim
.swamp.yamldiffs — which is exactly where a realtrustedCollectiveschange would then hide
That last one is the actual risk. Noise in a security-relevant file trains people to ignore it.
Repro honesty
I could not make it fire on demand: after the warning was emitted once, swamp workflow list did not update the timestamp again, so something gates the interval and I did not isolate it. I am filing on the structure rather than a recipe — the field name says what it is, and its being in a tracked file next to trustedCollectives is visible in the schema without needing to reproduce the write.
Request
Move runtime/nag state out of .swamp.yaml into the gitignored .swamp/ directory — e.g. .swamp/state.json — and keep .swamp.yaml for configuration a repo genuinely wants to share. Then .swamp.yaml becomes stable, its diffs mean something, and multi-session checkouts stop generating no-op commits.
Shipped
Click a lifecycle step above to view its details.
stack72 commented 8/24/2026, 2:03:20 PM
Thanks @randybias for reporting this! The fix has been merged and a release is on its way. We appreciate your contribution to swamp.
Sign in to post a ripple.