Scheduled flaky-test detection is failing
Inbox notice policy and local inbox cache: when to poll, when the post-command notice shows and retires, and a cache file per API-key fingerprint, with no wiring yet
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: content-level authorisation for forwarded definition and evaluated-file writes
Docs: run-workflows-on-a-schedule tells readers to curl /health for queue state, which no longer lists schedules
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
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
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)
Datastore rework Phase 4: serve confirms each v3 write request is replicated before it answers (group commit)
@swamp/gcs-datastore: GcsLock.inspect() reports a failed read as no lock, so a GCS outage looks like a lost model lock
Datastore rework Phase 4 D2: restore, refresh and takeover from the v3 replica, with a checkout-local commits.db (dormant)
S3/GCS: a run refused for losing its model lock keeps its write dirty when the refresh can't reach the datastore, so a later sync pushes it
Docs: add PowerShell to Set Up Shell Completions
Add Windows installer to the homepage and manual
CopyCommand's clipboard fallback selects the wrong command on pages with several copies
README: add Windows to the supported platforms and its installer
install.ps1 closes the user's PowerShell window on failure when run via irm | iex
v3 first clone on Linux is 2.6x slower than v2: batch the catalog refresh during catch-up
Windows: no PowerShell completions subcommand
Windows: extension yank fails with API key auth despite extensions:* scope
Windows: registry rejects windows-x86_64 as a valid platform
Windows: update --check reports no binary available for windows/x86_64
Windows: extension push type field shows file path instead of exported type name
Docs: extension quality now reports repository-verified for private source hosting (swamp-club#3406)
Docs: choosing where a new workspace is created (--path, start page Location field, workspaces.dir)
Manual: broken anchor and tutorials teach deprecated swamp data get
Docs: serve-flags.md admin/allowed-user resolution is stale (pinned names, oauth:manage for lookups, plain usernames only)
swamp update --check fails with a raw [FTL] TimeoutError when the artifacts host takes over 5s
whoami reports each collective's private source hosting and namespace privacy, so the CLI quality rubric can match the registry's repository-verified verdict
Manual: working-with-data copy button copies a truncated data query
Error and help messages still say model under swamp behavior commands (follow-up to #3431)
CLI output still says model under swamp behavior commands
Manual: make behavior the primary term and command spelling
Docs: Layout Migration says repo upgrade deletes gen-2 files without re-pulling
Scheduled flaky-test detection is failing
Datastore rework Phase 4 D1: Litestream sidecar for v3 writers, and a write command waits for replication before it reports success (dormant)
Accept usernames for user subjects in grant files
Docs: swamp workspace commands and workspaces in the manual (swamp-club#3424)
Docs: document swamp start onboarding and the local dashboard
Docs: grant-file username: subjects in the swamp serve manual
Datastore rework Phase 4: the v3 writer lease requires an extension's explicit declaration that it keeps _control/writer/ at the root, not just a writable store's shape
Datastore rework Phase 4: real-endpoint check of Phase 4A's replication figures on a hosted S3-compatible service (spike)
Datastore rework Phase 4 E/G: a writable datastore-wide control plane so the v3 writer lease binds at the bucket root
Docs: serve-flags check-config row for bare restricted-model-types entries
Datastore rework Phase 4: measure Litestream replication on real S3 and GCS buckets (spike: per-command vs idle sidecar, cost of waiting for replication)
v3 writer lease: a stray or unpadded fence key under _control/writer/ wedges the lease
datastore lock status reports held: false for model locks on S3 and GCS datastores
Extensions accept export const behavior, extensions/behaviors/ and a behaviors: manifest key alongside model
Docs: grant and revoke changes reach every serve instance within one poll interval (S3/GCS and v2 filesystem)
S3/GCS: a run whose model lock was force-released still pushes, and one run's write is lost
rollbackOnFailure methods fail when run as a workflow step
Registry UI and manual say Behaviors, keeping the stored models content type
S3/GCS datastores: write data version files create-only so a second writer cannot overwrite an existing version
Datastore rework Phase 4: a fenced writer lease for v3 datastores, replacing Phase 3's writer lock
Workflow YAML, extension exports and serve grants accept the behavior spelling alongside model
Datastore rework Phase 4: download, verify and cache a pinned Litestream binary on first v3 use (dormant)
Serve dashboard uses behavior terminology, with old routes kept
Docs: Claude Code page says swamp always writes CLAUDE.md (changed by swamp-club#3346)
A pulled extension can shadow a built-in type, and removing it leaves serve without the built-in
Skills and generated agent guidance use behavior and swamp behavior commands
Docs: state the OpenCode version requirement for the swamp audit plugin
swamp behavior is the full preferred command group, with every swamp model spelling kept
DispatchService two-slot worker test assigns disabled Object.prototype.__proto__
Partial extension catalog saves delete rows for sources mounted from outside the repo
Datastore rework: a fresh v3 checkout is slow because catch-up fsyncs every file one at a time (27 s vs 1.1 s for 1,000 items on macOS)
Build each swamp model command from a factory so behavior can share it (no visible change)
Design record: behavior is the product term for models, with model kept working
Docs: show the full --literal-inputs warning, including Raw:, in the model definitions reference
model method run --literal-inputs: the warning's Raw: text drops a brace from the expression
repo init --help omits pi and antigravity from the built-in --tool list
swamp model edit silently renames the target when the piped body's name differs
Add swamp behaviour run as the preferred model-method command
Datastore rework: on v3, an interrupted method run's outputs never reach other clones (SIGTERM should commit; SIGKILL must be visible)
Datastore rework: on v3, turning managedConfig on hides existing config (the default vault); give v3 its own config migrate
Datastore rework: on v3, namespace set before setup --format 3 fails without --skip-migration, and namespace list shows no namespaces
S3/GCS datastore sync: shared sync service lets one sync clear another's dirty marks and pull over unpushed files
Docs: --literal-inputs and data that never evaluates as authored (swamp-club#3205)
Docs: say that validation applies the upgrade chain before checking global arguments
datastore setup strands repo-local audit history and run logs in the new datastore
Datastore rework Phase 3: opt in to v3 for new filesystem datastores (single writer), and wire v3 into CLI and serve (no v2 behaviour change)
classifyConnectionError mislabels non-auth connection failures as auth failures
Docs: datastore reference says audit logs and telemetry live in the datastore
Datastore rework Phase 3: a v3 home for audit, telemetry, logs and files, dormant (no behaviour change)
s3-datastore: first push on a fresh cache prints 'Index merge failed' for a missing local .datastore-index.json
Datastore rework Phase 3: history compaction so superseded chunks can be reclaimed, dormant (no behaviour change)
Windows: extension install legacy migration finds zero files
Windows: worker daemon status reports not installed (no systemd/launchd)
Windows: extension rm joins repo dir with already-absolute bundle path
Datastore rework Phase 3: workflow run and vault config repositories stage typed changes on v3 (no v2 behaviour change)
Windows: cancelled step records error suffix that POSIX does not
Run GC never removes run logs when a non-default datastore is configured
Windows: check-config --grants-file and --grants-dir still output backslash absolute paths
Datastore rework Phase 3: definition, workflow and evaluated repositories stage typed changes on v3 (no v2 behaviour change)
Windows: datastore compact fails with database is not open
repo init: create a default local_encryption vault, and stop persisting absolute base_dir in vault configs
Docs: default vault at repo init, --no-vault, and base_dir no longer persisted (swamp-club#3259)
Datastore rework Phase 3: shared typed staging route, and data and output repositories stage typed changes on v3 (no v2 behaviour change)
Extension auto-resolution installs an unrelated extension when a registry search guess does not provide the type
Datastore rework Phase 3: chunk garbage collection for unreferenced chunks, dormant (no behaviour change)
Windows: check-config grant error messages use backslash paths
Windows: workflow run --input does not honour \@ escape in k=v value
Windows: model run with vault secret containing $ exits 1 silently
Datastore rework Phase 3: the v3 read model, dormant (no behaviour change)
Windows: workflow cancel and model cancel do not kill the step process tree
Extension auto-resolution reports a registry timeout as "no extension publishes this type"
Datastore rework Phase 3: the commit-log unit of work and binding registry (no v2 behaviour change)
Windows: workflow history outputs stdout has trailing CRLF that breaks exact-match schemas
serve: without a remote datastore the token GC is not serialized against token rotate/re-mint
Datastore rework Phase 3: the commits.db commit store, dormant (no behaviour change)
Datastore rework Phase 3: the chunk store and the storage/1 contract, dormant (no behaviour change)
Datastore rework Phase 3: the v3 commit and partition domain model, dormant (no behaviour change)
Datastore rework Phase 3: Litestream embedding spike (a written decision, no production code)
repo init writes Amp and Kiro permission settings in formats current versions no longer read
serve: server token GC follow-ups (upgrade backlog holds the sync gate, not-found matching, owner lookup, UX)
Docs: update Kiro and Amp how-to pages for the new scaffolding (swamp-club#3222)
Docs: serve token GC per-sweep limit and quoting 0 in serve.yaml
Datastore rework Phase 3: measure and bound the format-guard marker read's cost
@swamp/s3-datastore and @swamp/gcs-datastore: implement datastoreControlPlaneStore() for the format marker read
Datastore rework Phase 3: publish the extension lockfile as a unit-of-work commit (no behaviour change)
Docs: datastore-provider reference for datastoreControlPlaneStore and control-plane read options
Scheduled flaky-test detection is failing
Docs: concurrent scheduled runs and queue delay in swamp serve
Tests: serve pollers make a peer's writes, deletes and grants visible with a real catalog (before Phase 5)
s3-datastore: model-scoped pullChanged lists and walks the whole namespace
Docs: worker connect no longer needs a swamp-club credential (swamp-club#3128)
Datastore rework Phase 3: format-guard release, so swamp refuses datastores with a newer format and writes nothing
access grant create: --methods is silently dropped on the local path, so an allow grant covers every method
Codegen/DigitalOcean: create-only required fields block list/get/delete in generated DigitalOcean models
Tests: bring the in-memory remote's default semantics up to @swamp/s3-datastore and @swamp/gcs-datastore 2026.10.01.1
Tell the pushing client when its extension contentMetadata fails validation
Windows Compatibility CI fails on main: about a dozen tests across serve, sync, CLI path resolution, process and tracing
Concurrent first runs in a fresh repo log 'Catalog migration to per-extension-aggregate-v3 failed (database is locked)'
Docs: state the literal type/version catalog contract and the uncatalogued-model push warning in the extensions publishing reference
worker prune: remote datastore keeps deleted worker records (no-path markDirty() skips deletions)
worker prune cannot delete worker models when auto-definitions live in a remote datastore
model get and model search miss auto-definitions stored in a remote datastore
model delete resolves auto-definitions from repo-local .swamp instead of the datastore cache
datastore setup filesystem --path .swamp copies .swamp onto itself and never writes the datastore block
Docs: vault grants and run vault scoping on swamp serve (swamp-club#2676, swamp-club#2206)
Flaky property test: analyzeExpression dot/bracket agreement fails when the generated model name is a CEL keyword
Docs: enable-managed-config should say to re-run config migrate when its push fails
datastore config migrate checks the sentinel in the stale local cache and re-runs a full migration over a shared S3 datastore
datastore config migrate writes its sentinel before pushing; after a failed push a re-run reports 'already completed' and never publishes
Docs: grant file reference shows a stale format and omits resources and subjects
Resolve non-admin actors in dashboard audit logs
Docs: serve authorization page should cover expression-reference checks and the vault.get trust boundary
Shell steps: a vault.get on a continuation line of a multi-line double-quoted string inside a here-doc is wrapped in quotes
GCP bigquery datasets update cannot target the dataset: reads the id from a name field datasets do not have
swamp-testing withMockedCommand: record env and cwd in CapturedCommandCall
Share dashboard authentication across tabs for deep links
Docs: vault.get shell references are placed per occurrence, and every single-quoted use is warned about
Scheduled flaky-test detection is failing
Docs: serve authorization of expression references, env and direct-type runs (swamp-club#2786)
Docs: dispatch-env-allow and how remote shell steps receive secrets (swamp-club#2760, swamp-club#2791)
serve: a failed pull in acquireModelLocks leaves the per-model lock held until serve exits
Datastore rework Phase 2: find, wrap and warn on hooked writes outside a unit of work (route 2), without removing it (no behaviour change)
Serve audit: WAL replay at startup deletes segments before the store confirms them
Datastore rework Phase 2: one flush path, so every push is a root's flush or checkpoint (no behaviour change)
Flaky test: usePreviewFetch in-flight fetch for A is discarded after switching to cached B
Serve audit: delivered WAL segments are only deleted at shutdown, so a long-running serve fills the WAL
Serve audit: sink filter config in serve.yaml is never validated
Datastore rework Phase 2: root units can checkpoint, and the CLI token commands push mid-command through it (no behaviour change)
Docs: data query reference lists a --limit default of 100 and omits --single
Datastore rework Phase 2: remaining serve direct pushes commit through root units (no behaviour change)
Serve audit: emitter breaks the durable hash chain and drops WAL events when a non-durable sink fails or lags
Datastore rework Phase 2: serve handlers commit through the unit of work (no behaviour change)
CEL data.version, data.listVersions and data.findBySpec drop data written before a model instance rename
Docs: doctor install reports a stale or failing autoupdate scheduler
Datastore rework Phase 2: CLI commands stop marking and pushing directly (no behaviour change)
Datastore rework Phase 2: commit pushes through a root unit of work per command or request (no behaviour change)
Datastore rework Phase 2: use cases open and commit the unit of work (no behaviour change)
Docs: manual approval pages show old quoted approve/approvals hints
Datastore rework Phase 1 close-out: lock repository marks at zero, remove dead helpers, document the end state (no behaviour change)
Installer and README present required Swamp Club login as optional
Datastore rework Phase 1 move C2: the vault config repository stages typed changes, serve stops marking vault files by hand (no behaviour change)
Model add-ons that extend a built-in model type never attach in CLI processes
Datastore rework Phase 1 move C1: the workflow run repository stages typed changes (no behaviour change)
Datastore rework Phase 1 move B: definition, workflow and evaluated repositories stage typed changes (no behaviour change)
Add self._index to forEach expression context
Datastore rework Phase 1 move A: data and output repositories stage typed changes (no behaviour change)
Docs: document self._index for forEach steps in the manual
Datastore rework Phase 1: optional ambient unit of work in repositories (no behaviour change)
Extension content extractor truncates metadata when a string, comment or regex contains an unpaired brace
Datastore rework Phase 1: UnitOfWork port and legacy adapter (no behaviour change)
acquireModelLocks writes SWAMP_LOCK_HOLDER_PID to process-global env, so concurrent runs in one process clobber each other
verify-reviews reports provider-error when a passing review mentions swamp's own invalid_api_key error code
Show the redaction diff and ask for confirmation before submitting an issue in log mode
--json stderr mixes an offline auth-gate warning line with the pretty-printed error, so it can't be parsed
@swamp/tailscale: follow-ups from the initial release verification review
Scheduled flaky-test detection is failing
Docs: account-requirement manual page after the auth gate follow-ups (swamp-club#2916)
Auth gate follow-ups: fail closed when the fail-open window can't be recorded, UX polish (swamp-club#2231)
Codegen/Vercel: create-only required fields block read methods in generated Vercel models
Auth gate: enforce authentication and add background proof refresh
Server fallback content extraction drops quoted method keys and lists nested objects as methods
Docs: account requirement and auth gate (swamp-club#2231)
Conformance: behavioural round-trip suite for DatastoreSyncService in packages/testing
Tests: remote failures during sync keep local writes dirty and the next flush uploads them (every flush path)
Tests: two repos on one remote datastore: writes, deletes, renames and gc propagate through the real flush path and catalog
Tests: every file a datastore repository changes on disk is covered by a markDirty (pin today's unmarked paths)
Scheduled flaky-test detection is failing
Tests: property test for buildMarkDirtyHook path mapping
Tests: characterise marks and pushes for every libswamp write use case via CLI and serve compositions
Tests: characterise stale catalogs when two repos or serve nodes share a filesystem datastore
Fitness: ratchet markDirty call sites, repository constructions outside the factory, and unhooked datastore writers
Extension datastore: query still returns an item after its delete is pulled
Docs: document serve and worker trace structure in the OpenTelemetry reference
Test infra: shared in-memory remote datastore fake and recording sync service for pre-refactor datastore tests
CEL: an expression naming the identifier cel returns {} instead of the context value
Scheduled flaky-test detection is failing
Docs: SWAMP_API_KEY_FILE and serve --club-api-key-file
Tracking: test baseline required before the datastore refactor (commit-log design)
CI: run swamp-uat's datastore suite against the PR binary for PRs touching datastore code
Docs: document mount-independent file grant sources for --grants-dir and --grants-file
serve reload keeps a removed extension's add-on methods on built-in and local model types
Docs: telemetry opt-out is user-level and applies everywhere (swamp-club#2831)
Object-level refinements on globalArguments schemas are not enforced at execution time
Docs: remove stale Docker Execution Driver section from the extension model reference
Docs: authorization reference should say access-control records need admin, not a data grant (swamp-club#2756)
Docs: use-the-audit-timeline should state the permission swamp audit --server needs
issue-lifecycle triage fails with 422 when the primary issue is already in_progress in swamp-club
Docs: worker-fleets TLS one-liner fails with KeyMismatch on macOS LibreSSL
Docs: sensitive values read through expressions are delivered like vault.get (swamp-club#2171)
serve: define and supply the collective and owner grant condition variables
managedConfig: most CLI config writes exit 0 when the push to the datastore fails, leaving the change unpublished
managedConfig: extension rm on one serve instance leaves the extension's types registered on its peers
PulledExtensionsLock timeout names the lock file with a forward slash on Windows; Windows CI fails on main
definitions: delete() silently leaves an auto-definition file unless an earlier lookup cached its path
Docs: describe how enrollment token revoke disconnects connected workers
vault create/migrate --config help says local_encryption 'always uses' the server key source
Docs: local_encryption key-source fields are refused over --server
Docs: serve authorizes requests by id against the resource's name
issue-lifecycle: link issues that ship together and ship duplicates
serve audit: auth.token.used hardcodes principalKind user for worker tokens
serve: model.delete of a missing model replies with message [object Object]
deno task audit fails on main: new OSV advisories in locked dependencies block verify-build
tests: extension_member_precedence_test fails on macOS (/var vs /private/var temp path)
tests: extension_member_precedence_test fails on macOS (tmp path vs /private realpath)
vault edit cannot open a vault whose YAML no longer parses
Codegen/Hetzner: create-only required fields block list/get/delete in generated Hetzner models
Add a duplicate_of relationship type to lab issues
vault edit rename leaves local_encryption secrets under the old vault name
Windows compat CI red on main since #2644: extension_reload_test compares a raw path to the catalog's canonical path
Concurrent workflow runs race on extension auto-resolve: 'Unknown model type' in one of them
Docs: vault rename moves local_encryption secrets
s3/gcs datastore: pullChanged overwrites dirty, unpushed cache files
Docs: edit commands over --server take piped YAML on stdin
GCP codegen: filtered generate:gcp <service> produces different output than a full generate:gcp run
Flaky test: resolve_datastore_test sets SWAMP_DATASTORE process-wide and breaks parallel workflow_recover_test
Codegen/Cloudflare: create-only required fields block read methods in generated Cloudflare models
Docs: document snapshot cleanup and the new snapshot fields in the swamp run gc reference
GCP codegen: a same-surface merge that fails to parse drops the whole preferred document silently
Reports from failed workflow steps are persisted but not recorded on the run
Codegen/GCP: PUT update fallback from stored state silently reverts out-of-band changes
swamp writes .swamp/audit into the current directory when --repo-dir or SWAMP_REPO_DIR points elsewhere
Codegen: PUT updates clear optional fields that global arguments leave unset
Docs: document health stream limits and narrowed snapshots in the swamp serve REST API reference
GCP codegen: fetch-schema pulls preview API versions, so preview-only compute resources ship in @swamp/gcp/compute
build-attestation cannot find workflow runs when run from a git worktree
issue-lifecycle approve logs a 422 from swamp-club: Cannot triage issue in status triaged
Dashboard live audit stream fails in auth mode none when a token is left in sessionStorage
GCP enrichment snapshots omit the name field their model StateSchema requires
Docs: health endpoints need a valid token, not admin, and the stream ends on token revoke
verify-build codegen group runs no tests, so GCP enrichment test suites are never gated
datastore config migrate skips setting managedConfig when the datastore is already migrated
Codegen/AWS: create-only required fields block list/get/delete in generated AWS models
Docs: fix config migrate output and second-instance setup in enable-managed-config
Dashboard never reconnects after the serve WebSocket closes
Dashboard JSON highlighter inserts spaces after colons inside string values
Dashboard Back button wraps onto two lines at phone width
Run-scoped data get/list return the latest version, not the version the run produced
ssh: host and per-call env is never forwarded for tailscale transport hosts
Docs: dashboard deep links for data items, versions and reports
ssh: tailscale forward and sshExtraArgs fail - tailscale ssh rejects any flag before the destination
Dashboard: sidebar navigation items are not keyboard-focusable
Run the web dashboard locally from the CLI without swamp serve
[Superseded by 2574] Dashboard: collapse the desktop sidebar to an icon-only rail
extensions: cold start re-warns type extraction when the repo is reached under a different path spelling
Docs: document extension member collision precedence and local overrides of pulled methods
extensions: no defined winner when two extensions add the same method to a type; pulled beats local
serve reload re-bundles and re-imports every pulled extension to find nothing new
ssh: env-forwarded variables are dropped by sudo env_reset for script and for programs run under sudo exec
extensions: cold-path catalog rebuild skips sources whose type is not a string literal, dropping them for one process lifetime
design/enablers/remote-execution.md says cluster.instances and serve.config need read; the code requires admin
Post the attestation validation result as a PR comment (Forgejo does not render step summaries)
Flaky test: otel worker correlation sees a fresh trace id under the full suite
verify-reviews depends on an implicitly auto-installed @swamp/git; a broken local install fails the run with an opaque error
verify-build upgrade gate skips hand-written extensions but reports succeeded
Pulled extensions missing from the extension catalog cannot be resolved or auto-repaired, and doctor reports healthy
serve: rotate the external token-secrets key
Docs: serve token-secrets external key opt-in (swamp-club#2324)
worker token create via serve always needs --vault: reserved _token-secrets makes the sole-vault default ambiguous
serve: --group-refresh-interval warning fires on every non-OAuth boot even when the flag is unset
Docs: document server token GC and --token-gc-interval / --token-gc-grace-period in serve-flags.md
swamp run gc deletes output YAML but orphans every run .log file
Step-lease and pending-dispatch records accumulate with no reaping mechanism
Workflow runs write outputs and evaluated definitions to repo-local .swamp instead of the remote datastore
Scheduled flaky-test detection is failing
Unsupported --server scheme crashes with an uncaught TypeError and stack trace
Windows: concurrent data save can fail with Access is denied renaming the latest marker
Failing CEL expression in a method argument is silently passed through as literal text
main fails type check: datastore_sync_rules_test.ts uses assertPinnedSet without importing it
serve: make the datastore poll interval configurable (--datastore-poll-interval)
Docs: document --datastore-poll-interval and the timer duration maximum in serve-flags.md
Hide --vault on access token mint and rotate now that it always errors
Docs: access token mint/rotate --vault removed (swamp-club#2452)
vault not-found errors suggest 'vault create' for names vault create rejects (e.g. _token-secrets)
self.globalArguments.X returns the unevaluated expression text when the global argument is itself an expression
Streamed process output renders curly braces doubled in log output
Docs: access-commands manual page describes --vault and control-plane failures incorrectly after #2437
Docs: explain what swamp serve does with unknown usernames in auth.admins and auth.allowed-users
serve: validate auth access lists without restarting (serve config check)
Extension catalog caches a datastore bundle with an empty type, so the repo fails with Unknown datastore type when addressed by its realpath
Scheduled flaky-test detection is failing
Relationships
#2540 serve: rotate the external token-secrets key
Opened by stack72 · 9/25/2026
Follow-up from swamp-club#2324, which added an opt-in external key for the _token-secrets control-plane vault (serve.yaml token-secrets block naming a vault and secret).
That change supports exactly one external key: the control plane records a marker with the key HMAC fingerprint, and every instance must present the same key. There is no way to rotate it. Replacing the secret in the vault makes serve refuse to start (fingerprint mismatch), and every token would need re-minting.
Proposal: support a versioned key set, for example the block accepting a previous key alongside the current one. On start, serve re-encrypts entries that open with the previous key under the current key (the same resumable, marker-last pass the migration uses), then records the new fingerprint. Blobs could carry a key id so a mixed fleet during rotation can still read both. Needs a story for HA: all instances must have both keys before any instance switches.
Open
No activity in this phase yet.
Sign in to post a ripple.