Skip to main content
← Back to list
01Issue
BugOpenSwamp CLIPublic
AssigneesNone

Relationships

#1792 CLI writes runtime state (lastStalenessWarning) into tracked .swamp.yaml, dirtying a committed config file

Opened by randybias · 8/22/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
OPENTRIAGEDIN PROGRESSSHIPPED

Open

8/22/2026, 7:57:48 PM

No activity in this phase yet.

03Sludge Pulse

Sign in to post a ripple.