Docs: run-workflows-on-a-schedule tells readers to curl /health for queue state, which no longer lists schedules
Inbox API contract and SwampClubClient inbox methods: summary, list, get and mark-read, pinned by a shared fixture and design/surfaces/inbox.md
Datastore rework Phase 5 (team mode) 2/3: the CLI's serve upstream — with serverAddress, a v3 checkout commits, reads chunks and catches up through serve's datastore API, with no storage credentials
Scheduled flaky-test detection is failing
v3 read model: guard against aliased key spellings on case-insensitive filesystems, without slowing replay
Scheduled flaky-test detection is failing
stagecraft remote studio: one long-lived connection to serve instead of a swamp process per read
stagecraft remote studio poll: follow-ups from #3658 review (flaky test, mid-poll first page, quiet-poll test)
docs(manual): the manual documents swamp subscription status and start — standings, call to action, flags and --json output
swamp subscription start opens the Swamp Club billing page, or a collective's with --collective, and status points its call to action at it
v3: the compaction policy bounds how much history a fresh clone replays (retainMs, minCommits, retainCommits) and the base load skips files the tail removes
datastore_v3_replica_verify_test stall case flakes under the full integration run: restore.pid is read before the stub writes it
v3 on S3/GCS: a replica restore yields a corrupt commits.db (fails SQLite's integrity check), so fresh clones and restores of the datastore fail; reproduces with Litestream alone from its first compacted L1 file (found by #3916)
swamp subscription status reports the plan and billing standing of the signed-in user and each collective, worded as auth whoami words it
/o/<slug>/billing sends a signed-out visitor to the collective page, or a 404 when private, instead of through login and back like /billing
swamp-extensions GCS storage test 'put: an abort mid-upload leaves no object and no resumable session' fails about 1 run in 5 (fixed 50 ms sleeps)
refactor(cli): share auth whoami's collective-standing helpers ahead of swamp subscription, and pin Personal License and Admin standings
@swamp/cve/tailworm: check the reachability matrix against a Tailscale-hosted tailnet
AWS codegen treats nested primaryIdentifier pointers as top-level fields
AWS codegen collapses nested createOnly/readOnly paths to their last segment
Generated state schemas require every child of nested objects, so normal resources warn on create/get
swamp-club.com/cve/tailworm states two things its sources do not say: finding 5's memory growth and no exploitation in the wild
cve/tailworm extension README says the findings were not seen in the wild, which no source states
Datastore rework Phase 5 (team mode) 1/3: serve's datastore API — commit, chunk and catch-up endpoints, authorisation on each op's intent, principal stamping and actionable conflicts
@swamp/cve/tailworm: reachability follow-ups from #3919 review
@swamp/cve/tailworm: opt-in reachability matrix from each node's packet filter
Datastore rework Phase 5: content-level authorisation for forwarded definition and evaluated-file writes
swamp-club.com/cve/tailworm: cover grade, probeScript, gradeFleet and the reachability matrix (extension 2026.10.25.5)
Docs: --trusted-hosts accepts host:port for public addresses on non-default ports
@swamp/cve/tailworm: after mitigate caps headscale, the rescan still tells you to set MemoryMax and Restart=always
@swamp/cve/tailworm grade: unix serve targets the probe could not resolve are graded as ordinary sockets
kubernetes: externalsecret and normalizeMeta follow-ups from #3907
v3 crash recovery's progress line breaks --json stderr: a failing command that recovered prints text before its JSON error (regression from #3363 / #3893)
Docs: vaults reference should say a wide local_encryption key file gets a warning
Docs: manual states the old pre-flight check rule and scores fast-check by deno doc --lint
Docs: define the sensitive-output fallback vault order and document the doctor vaults fallback warning
v3 long silent waits: crash recovery runs ~24 s with no output, data prune is silent 6-10 s in log mode, and a lagging read hangs ~112 s when Litestream's listing is cut (found by #3756)
Add @swamp/cve/http2shell: scan and mitigate the Brotli decoder RCE (CVE-2026-111497, Node2Shell/HTTP2Shell)
extension_tarball_analyzer_test fails on macOS: tar --mode is GNU-only
S3/GCS datastore: a push that fails after uploading drops its recorded deletes, so the retry brings deleted data back
v2 S3: about 4-5% of serial workflow runs fail with datastore_unpublished_data_version ('a concurrent run or the serve poller synced') when nothing else is running (found by #3756)
Datastore rework Phase 4 I: dogfood and benchmark solo v3 (filesystem, S3, GCS) in a throwaway repo with the released binary, check the kill criteria, and decide whether to announce
v3 bucket outage: a command cut off while becoming the writer says its changes are saved locally when nothing was saved (workflow approve), and the suggested recover fails for a run cut mid-step (found by #3756)
auth login browser flow prints a fatal stack trace when swamp-club cannot be reached
Scheduled flaky-test detection is failing
v3 first clone and restore of a bucket datastore take 2.6-3x v2, missing #3418's 1.5x target (found by #3756)
CVE pages: horizontally scrolling code blocks are not keyboard-reachable
Homepage club plate link has no visible keyboard focus
Scheduled flaky-test detection is failing
swamp update downloads before failing in a sticky directory with another user's binary, and blames an immutable flag
Docs: extra-headers how-to systemd snippet puts a path in SWAMP_SERVE_EXTRA_HEADERS
Docs: install-swamp says SWAMP_HOME moves everything, but agent skill folders stay in the user's home folder
Docs: dashboard Approvals view shows run context, reason and per-viewer decide state
v3 bucket outage: a workflow run whose checkpoint committed is told nothing was committed, three outage errors have no stable code, and exit takes 15-60 s (found by #3756)
v3 identity on buckets: S3 checkouts with different endpoint spellings fork the datastore silently, and a hostname change blocks every write for ~5 minutes (found by #3756)
typed_workflow_passes_test child-sentinel case flakes under full-suite load: f.received.at(-1) reads the compare step's empty payload
extension push drops local modules when the repo under a node_modules folder is reached through a symlinked path (macOS /var, the swamp-club#3782 fix)
Teach defineBehavior in the extension skill now that swamp-testing 0.20261013.52 exports it
Docs: issue redaction keeps git ids and non-address colon runs, and asks before posting (swamp-club#3686)
Docs: worker daemon enable reference is missing --ca-cert, --concurrency and SWAMP_SERVE_EXTRA_HEADERS
v3 on S3/GCS: a write whose commit cannot reach the bucket prints "succeeded" on --json, exits 1, and is lost (confirm-before-output, found by #3756)
swamp-club /cve/dirtyfrag page shows --input targetHost/sshUser/sshKey/dockerContainer, which the CLI rejects
v3: datastore config migrate skips every workflow that has run (name-committed), and they are then "not found" (found by #3756)
@swamp/cve/dirtyfrag report suggests commands for dirtyfrag-scanner whatever the model is named
v3 on a bucket: after a commit fails because the bucket is unreachable, the closing sync still waits its full 60 s before the command exits
Interactive history and output search pickers cannot open a run under a non-default datastore
v3 recovery sweep: dot-prefixed data names escape it, HFS+ non-ASCII names are deleted by it, and an old mtime keeps a dropped write's file (bug hunt group 8)
Source glob expansion crashes when a directory under the glob parent disappears mid-walk
v3 chunk barrier on macOS: use F_BARRIERFSYNC (ordering) instead of F_FULLFSYNC (full drive-cache flush), cutting ~10-25 ms (200 ms+ on a busy disk) per command
extension_source_add_test globs the real home directory and flakes when a file in ~ disappears mid-walk
v3 join check refuses a fresh managedConfig checkout on S3/GCS: the datastore extension's auto-install writes the managed lockfile first (regression of #3690)
Docs: doctor datastores reference for the v3 content check and lost format marker repair
Docs: step dataOutputOverrides vaultName and the field-by-field override merge (swamp-club#3606)
Docs: data name portability rule and warning
Docs: vault create and vault migrate refuse a local_encryption name with leftover storage
v3 namespaces: cross-namespace reads return the reader's own content, a namespaced local tier is overwritten by solo commits, and namespaces can collide with swamp's own .swamp/ directories (bug hunt group 7)
v3: a checkout holding v2 records joins a v3 datastore through .swamp.yaml unguarded, overwriting its records and diverging for good (bug hunt group 5)
v3 on S3/GCS: the namespace refusal names setup filesystem, and an unreadable marker on a format-3 repo says "will not open … as format 2" (found by swamp-uat#715)
v3 on S3/GCS: setup on a prefix holding only swamp's format-3 marker fails with "this swamp release can't open" format 3 (found by swamp-uat#715)
Workflow runs ignore defaultVault: step sensitive outputs land in the first vault, and validate predicts a vault the run doesn't use
v3 local durability: chunks aren't fsynced before the commit naming them, so a power cut can wedge every checkout; torn writer and format markers don't heal (bug hunt group 4)
v3: chunk durability barrier costs a full drive-cache flush per command on macOS; use an ordering barrier
Scheduled flaky-test detection is failing
ssh: follow-ups from #3581 review — master rekey vs per-call known_hosts, settle error handling, atomic new-file mode
v3 on S3/GCS: a fresh checkout whose restore from the replica fails reports an empty datastore and exits 0 (found by swamp-uat#715)
issue-lifecycle start drops issue comments: context.comments is always empty
swamp CLI: revokeCollectiveToken should tell an unknown token from an unknown collective once swamp-club answers 404
Dev stack serves corrupted gzip under Vite: browsers fail with ERR_CONTENT_DECODING_FAILED
worker daemon enable: an unreadable --ca-cert passes enable, and SWAMP_SERVE_EXTRA_HEADERS is silently dropped under sudo
v3: a crashed workflow run and its completed steps' data are deleted by recovery before workflow recover or serve's reaper can see them (bug hunt group 6)
Scheduled flaky-test detection is failing
v3 outbox: a reported failure can land, a commit can name a deleted chunk, and a fenced writer is told nothing landed when it did (bug hunt group 3)
v3: writer liveness is judged wrong: a same-hostname container takes over a live writer, a stalled writer's file is reverted then committed, and a fenced retention pass rewinds the new writer (bug hunt group 1)
agent-runner and deno-runner: support Windows (both refuse to start: Unsupported operating system)
v3 replication: check a possible S1 in serve's retake, fix serve wedging on a retake mid-replacement, and stop 'the next write replicates them' being false (bug hunt group 2)
Enforce the minimum S3/GCS extension version for v3 bucket datastores from the lockfile
Datastore rework Phase 4 E: v3 on S3 and GCS (solo mode): setup --format 3 on buckets, replication as a datastore property, end to end
doctor datastores decides v3 from the format key, so an override pointed at a v3 bucket runs the v2 contamination check and repair
Retention under serve load: measure and fix automatic passes against #3518's busy-serve contention, and the large-backlog first pass
Scheduled flaky-test detection is failing
S3/GCS datastores: keep v2 sync off v3 buckets (exclude _litestream/, refuse a format-3 marker) for swamp releases before v20261009.154711.0
v3: a refused commit leaves its staged files in the checkout for good, so that checkout shows data the datastore doesn't hold (exposed by #3532; swamp-uat breakglass test failing)
Datastore sync: a no-op push after a model-scoped pull arms the remote commitSeq, hiding other hosts' commits until the next commit
Regression from #3546: legacy (hashless) cache files lose their mtime trust, so a peer's deletion can be undone and untouched files are re-uploaded (seed the own record once)
@swamp/s3-datastore and @swamp/gcs-datastore: pull's same-size fast path trusts the pushing machine's mtime, so a conflicting local file can be kept
Scheduled flaky-test detection is failing
Datastore rework Phase 4 G: S3 and GCS extensions implement replicaTarget() for v3 Litestream replication
v3: a data name emptied of every version restarts at version 1, reusing a number for different content (use the partition's highWater; refuse a reused version)
Docs: garbageCollection retention — per-kind keys, automatic passes, and what is never removed
Datastore rework Phase 4: a provider capability to remove abandoned Litestream lineage paths on buckets (replicaPaths), so chunk GC isn't deferred forever
In-memory remote: model create-only data version writes so core tests can pin them (follow-up to swamp-club#3377)
Datastore rework Phase 4: a provider-supplied replica target (replicaTarget()) so v3 replicates to the datastore's own bucket, plus conformance
v3 commit outbox: a discarded entry is removed without fsync, so after a power cut recovery can land a commit whose command reported failure
Datastore rework Phase 4 G: S3 and GCS extensions implement storage/1 chunk storage for v3
Datastore rework Phase 4 G: S3 and GCS implement the writable datastore-wide control plane and keep _control/writer/ at the bucket root
Scheduled flaky-test detection is failing
Datastore rework Phase 4 F: a durable outbox for v3 commits, the post-commit chunk check on recovery, and pruning compacted_txns
swamp worker list shows a worker as idle while its verify-on-enroll probe is still pending
Docs: say what the first run after a typeVersion upgrade writes to the definition file
Datastore rework Phase 4: close D2 follow-ups before v3 replication is switched on (lineage, messages, migration, chunk GC)
Relationships
#3567 Enforce the minimum S3/GCS extension version for v3 bucket datastores from the lockfile
Opened by stack72 · 10/16/2026· Shipped 10/17/2026
Problem
A v3 datastore on S3 or GCS (swamp-club#3534) needs @swamp/s3-datastore / @swamp/gcs-datastore 2026.10.16.5 or later: the first release whose v2 file sync refuses a format-3 bucket (swamp-club#3549). swamp names that version in setup's refusal (V3_BUCKET_MIN_EXTENSION_VERSION in src/domain/datastore/v3_hosting.ts) and the docs say to pull the latest extension first, but nothing checks the version in the repo's lockfile.
The extension's refusal is the last guard in one case: a clone whose .swamp.yaml predates the format: 3 commit (it has no format), on a bucket whose marker read fails transiently. The format guard then keeps v2's behaviour (one capped read, open as v2), so that clone runs v2 sync against the v3 prefix. With an extension pinned below 2026.10.16.5 nothing stops it. Raised by the CI adversarial review on swamp-club/swamp#3180 (MEDIUM); agreed as a follow-up in #3534's architecture review.
Fix
Enforce the minimum version from the lockfile:
datastore setup extension … --format 3refuses when the locked extension version is below the minimum, namingswamp extension update <type>;- opening a format-3 bucket datastore refuses the same way, so a teammate on an old pin cannot write;
- keep
.swamp.yamlconfigs with noformaton v2 (offline v2 reads must keep working, as swamp-uat'soffline_test.tschecks).
Alternative raised by the review: apply the strict marker re-read to every config whose provider has the five v3 capabilities, not only overrides. That would break offline reads of v2 repos on current extensions, so the lockfile check is the preferred fix.
Shipped
Click a lifecycle step above to view its details.