Extension scoring audits v2 archives exact-only and charges unaudited code, in the package and the CLI alike
extension fmt (and any command) creates or rewrites deno.lock when the extension lives in the repo's loaded extensions/ dir
extension quality: a collective-attested private repository scores provisional, and --json omits ifProvisionalEarned
Extension push ships the canonical form: every npm:/jsr: import pinned exact, and a v2 dependency-audit.json
judgeRunRecord lets a forged record settle a waiting approval gate to skipped without an approve
Extension dependencies: the shared import scan reads Babel syntax, not tokens (follow-up to #3969)
swamp-extensions: use explicit npm:/jsr: specifiers in root extensions/models
bundleExtension same-cache test can pass with a broken first-bundle gate under CPU load
bundleExtension 'bundles on different caches do not wait for each other' test fails under CPU load
extension pull: safety analysis scans the bundle the extension runs
Extension scoring queue: two replicas can claim the same pending event
Registry: bump @swamp-club/extension-scoring to the version carrying #3983 (and #3845) before the v5 rescore
Five Mongo queues can hand the same row to two replicas
Registry rescore: secret-safe-docs passes a secret README line on versions whose stored metadata predates the sensitive flag (follow-up to #3783)
Score extensions with @swamp-club/extension-scoring (rubric v5) instead of the registry's own copy
Move the Zod argument-field extractor into @swamp-club/extension-scoring so the CLI and registry read schemas alike
Extension dependencies: one resolver for push, quality and fmt (no behaviour change)
Docs: extension quality scores with the registry formula and reports grade (swamp-club#3845)
Rescore every extension's current version under rubric v5
extension push: a swamp-quality-ignore directive after a comment holding an apostrophe is silently ignored
Share the extension quality rubric between the swamp CLI and swamp-club instead of mirroring it
Manual: the supported extension dependency categories, the canonical form and the lock rule, rewritten once against the final design
Registry audits v2 extension archives as written, and a range costs the loose point only without a valid lock
Extension consumers keep the publisher's bundle: pull, update and auto-resolve stop rebuilding (direction A for #3634)
Extension push: inputs that open up (workspace root lock, ancestor config refused by name, JSR dist-tags) and the skill docs rewritten once
stagecraft studio: show a factory's open tickets that have no work item yet on the Board
stagecraft studio ticket columns: round-5 review lows from #3828 (source watch cost, relationText lookup, cross-instance claim)
A long-lived serve client for extensions, and a stable rate_limited error code
Docs: dependency trust across push, quality, fmt and the registry — Deno-config resolution, read-only lock, package.json mode, the archive's audit record (merges #3728)
extension push (package.json mode): two installed copies under one declared range are audited once, so the second shipped version goes unaudited
cve/emudhra page: Windows and macOS support, and shared CVE layer fixes (follow-up to #3710 and #3766)
@swamp/cve/php-rce-2026-10: match RHEL fixes for the PHP RCEs
@swamp/cve/dirtyfrag: report and README print the old swamp model command spelling
package.json mode: no loose-specifier warning for a range push ships as the exact installed version
method run masks a sensitive array from --input element by element, exposing its shape (regression from #3752)
Registry scorecard: score secret-safe-docs (rubric v4) and keep sensitive on extracted arguments
Registry dependency audit: audit the locked version push records in the archive, not the registry's newest match for a range specifier (swamp-club half of #3662)
stagecraft: rename work mode `method` to `behavior`, matching swamp's rename of models to behaviors
extension push: record each dependency's audited (locked) version in the archive, so the registry audits what ships (swamp half; registry half #3778)
main fails type check: query_view_test.ts passes a namespace string where expressionQueryView now takes a NamespaceReader (semantic conflict between #3790 and #3785)
forEachNameWithoutSecrets property test fails intermittently: an empty-string secret and an overlapping recorded value give different names
extension push finds no local modules when a folder above the repo is named node_modules
extension push (package.json mode): audit dependencies resolved through package.json, and leave the author's node_modules/ unchanged (merges #3632)
Local verification docs still tell agents to put ANTHROPIC_API_KEY in verify.env for reviews
@swamp/cve/php-rce-2026-10 follow-ups: dry-run heading, command spelling, Debian 12 fix, podman image scan
extension push resolves the Deno config and import map the way Deno does: deno.jsonc, importMap file references and scopes
extension fmt --check writes deno.lock in deno.json mode, which push and quality then bundle against with --frozen
@swamp/cve/dirtyfrag: scan logs are never saved (file writer handle dropped, data name collides with the status resource)
audit_deps.ts skips cve/ extensions, so their deno.lock files are never dependency-audited
@swamp/cve/dirtyfrag README shows --input targetHost/sshUser/sshKey/dockerContainer, which the CLI rejects
@swamp/cve/dirtyfrag mitigate uses interactive sudo, so it can hang on a password prompt or fail mid-run
extension quality names the wrong cause: a bundle failure prints no reason, the not-audited row always blames an outage, and symbols-docs blames JSDoc when deno doc failed
Docs: extension fmt never writes deno.lock and warns on a stale one (swamp-club#3717)
Docs: extension dependency trust pages — import-map auditing, bare-import rewrite and scoring, and the clarified warning/error plan
Registry scorecard: a loose specifier costs one of the two dependency-trust points and a yanked one costs both, matching the CLI (#3354)
Server-driven warning and info messages to CLI users, targeted by swamp version (exploration)
workflow cancel --server ignores --ca-cert and SWAMP_CA_CERT
Dependency trust scoring (CLI): yanked and loose specifiers cost one of the two dependency-trust points (no new push errors)
extension quality crashes with deno doc --json failed when a package.json-mode archive ships a bare import
Docs: extension publishing reference quotes stale bare-specifiers and quality messages
extension push: the yanked-dependency warning names a version to move to, and dependency warnings appear in the Unresolved warnings summary
Scorecard: copy the updated jsr-yanked wording from dependency_audit_vectors.json
Docs: extension publishing reference should describe the yanked-version suggestion and dependency findings in Unresolved warnings
eval-skill-triggers ignores evals/promptfoo/package-lock.json, so promptfoo's transitive deps are not locked
codegen: AWS models emit CloudFormation patterns JavaScript cannot compile, so @swamp/aws/chime, glue and transfer fail to import
v3 outbox killed-writer test times out waiting for the kill point under CPU load
On Windows, v3 outbox tests time out on a writer lock held by a dead fake pid
extension push: rewrite bare imports in the shipped source to their import-map specifiers
Flaky: probeStartServer 'a closed port is dead' gets unknown under the parallel test run
workflow run --detach integration test fails under load: the run finishes before the test attaches
extension push: a deno.json scopes entry can make push ship and audit a different version than the extension resolves
Skill trigger evals run through claude -p so verify-skills works on a subscription login
On Windows, extension pull and rm report paths with mixed separators
Windows CI: data_writer vary-suffix test writes a data name with a double quote, which #3568 refuses on Windows
Docs: bare imports mapped by deno.json are rewritten on push and scored
vary/forEach object values with no key/name/id produce data names Windows refuses
Since #3569: Datastore UAT's extension install row and 17 Windows extension unit tests fail on every release
extension push: dependencies named only through a deno.json import map are never audited
extension push rewrites the author's deno.lock when bundling
codegen/vercel: union (oneOf) read responses produce id-only ResourceSchemas
Docs: manual pages for push auditing the dependency version that ships (deprecated pin, loose specifier, JSR checks)
swamp core: a non-string sensitive value reads back as a JSON string
extension install and extension pull leave different bundles for the same extension version
extension push writes node_modules/.deno/ into the author's package.json project when bundling
registry scorecard reports dependency trust passed for versions with bare imports it cannot audit
swamp-club: unknown collective API token returns 422 instead of the documented 404
Registry scorecard: audit the dependency version that ships, and JSR dependencies
swamp update on Windows leaves no complete swamp.exe during a cross-volume copy, and keeps the zip until it finishes
install.ps1 keeps the release zip until exit and deletes the old swamp.exe before copying the new one
extension push: audit the dependency versions the bundle actually ships (pinned facts, deno info resolution, JSR existence)
Dev server (Vite) sends HTML pages with content-encoding: gzip over a body that isn't gzip
swamp install.sh: holds three copies of the binary at once (~913 MB peak); delete the archive and move instead of copy
swamp multi-model-eval: install promptfoo without optional dependencies to save ~900 MB of disk
Multi-model skill eval: gpt-5.4 and gemini jobs fail preflight every run (OpenAI credits exhausted, Google API key invalid)
Relationships
↔ sibling #3638#3668 Flaky test: lock hand-off timeout test times out in its own setup under load
Opened by swamp_lord · 10/20/2026· Shipped 10/20/2026
Found while verifying swamp-club#3661 (unrelated change).
integration/nested_lock_hand_off_reclaim_test.ts, test 'lock hand-off: the run fails instead of writing when the structural command outlasts the lock timeout' (line 260), sets SWAMP_LOCK_TIMEOUT_MS to 20 through withHeldLock. That timeout also applies to the fixture's own acquireModelLocks in runUnderModelLocks (line 119), not only to the hop.end() the test asserts on. On a loaded machine the setup acquisition itself times out: LockTimeoutError, timed out after 103ms, thrown from registerDatastoreSyncNamed via acquireModelLocks at integration/nested_lock_hand_off_reclaim_test.ts:119, before the code under test runs.
Observed in verify-build run 48c79a7e-5340-49d0-a159-256b26c48418 (commit c7e81ec5) while three verification workflows ran in parallel. The file passes on its own (7/7).
Expected: only the step under test sees the short timeout, for example by setting it after the fixture holds its locks, so that setup cannot hit it.
Shipped
Click a lifecycle step above to view its details.