Skip to main content
← Back to list
01Issue
BugShippedSwamp CLIPublicTeam
Assigneesstack72

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 not

lastStalenessWarning 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.yaml

Why 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 --rebase refuses for every session until someone commits it
  • the commit carries no information, so reviewers learn to skim .swamp.yaml diffs — which is exactly where a real trustedCollectives change 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.

02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 4 MOREREVIEW+ 6 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

8/24/2026, 2:03:11 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack728/24/2026, 12:44:02 PM
Editable. Press Enter to edit.

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.