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)
local_source_failed drops the indexing error: a transient local extension failure leaves no cause (follow-up to 1672)
Docs: dependency trust reports unaudited dependencies (follows #3350)
auth whoami: log mode labels collectives Free and shows trial expired for a superseded trial
swamp-extensions CI: Review Integrity audit stalls silently on a large trust-root change until Forgejo kills the job
extension quality and push report source paths through the repo's resolved symlink: quality's entry.file climbs to / and back
extension pull: answering y to a dependency's overwrite prompt silently skips that dependency
extension push --private: trust the registry's privateExtensions verdict instead of deciding from plan/trial
A bare deno check fails with ~2,000 errors in packages/dashboard; make the dashboard type-check under Deno
swamp-extensions CI: Review Integrity explains a stalled or failed audit (streamed progress, timeout, did-not-finish comment)
verify-reviews: adversarial review path guard is a hand-kept list, so new extensions silently skip it
whoami reports a superseded trial as expired, and a Personal License does not end the trial for private extensions
Flaky: v3 restore test 'serve's retake after another checkout wrote restores into its open store' fails under full-suite load
Manual: extension quality --json status field should say a check that would block a push
extension quality --json reports status "failed" when a rubric factor is missing, though the exit code is 0
Docs: manifest reference still describes the removed indexer symlinks directory for workflow resolution
bundle freshness ignores local modules outside the kind directory
Docs: extension trust manual should describe OSV version resolution and the no-matching-version not-audited case
Rescore scores the newest version, but the scorecard reads the stable one
Extension push: a range dependency is sent to OSV as the range, not a version
extension pull: shared sources at the archive root are not installed
Docs: private extension entitlement messages and whoami --json privateExtensions (follows swamp-club#3311)
Registry scorecard: dependency lookups that failed are not audited
CI adversarial review gate keeps blocking on a stale CHANGES_REQUESTED review when the new review's heading is formatted differently
CI review gates read stale reviews when a passing review falls back to bold headings after Bash #-line denials
extension push: report dependencies whose lookup failed as not audited
Docs: manual quotes model wording that swamp-club#3437 changes to behavior
Registry: validate, record and score the declared license (optional; remove the swamp-club license setting)
serve check-config: decide how to report restricted-model-types entries that cannot match
extension manifest: optional SPDX license: field, scored in quality and the rubric (field and LICENSE file, one point each)
extension push: archive source copy drops local modules imported from outside the model's directory
Registry: undo hiding of unlicensed extensions; remove the no-license banner and badge (license is optional; keep the licensed=true opt-in filter)
Remote worker keeps running stale code for an edited repo-local extension model
Workflow evaluation rejects another templating system's ${{ }} text, so the #2491 pass-through never reaches workflow steps
Flaky: AccessDataPoller 'a grant created by a real method run through A stays staged on A and reaches B'
Registry scorer: a deno doc failure discards the whole scorecard, including the LICENSE and README facts (12 public extensions unscored)
Registry scorecard: dependency licenses follow the CLI's SPDX rules
extension push: read dependency licenses with the shared SPDX parser (OR, AND, WITH)
swamp-extensions: declare license: in every @swamp manifest and in codegen output
Registry: hide extensions with no license from browsing (show-unlicensed toggle for 60 days; search API default unchanged)
Flaky: start_server_test 'two agent opens at once open only one window' opens 3 windows under parallel load
swamp-extensions: CI check that every manifest declares license: and ships a LICENSE file
stagecraft: let users build their own tracker as a separate extension (open tracker kinds, published adapter contract and conformance suite)
datastore_v3_read_model_test: two swamp-club#3337 tests fail on Linux (Expected function to reject)
extensions_search index is never created if the first attempt fails, until the process restarts
Registry search: a channel filter and a signed-in member's visibility overwrite each other's $or
extensions rail facet counts ignore the query, channel and selected facets
A forEach's iterations run in name order, not list order (operate-10 before operate-2)
Docs: declaring an extension license, and why unlicensed extensions are hidden
Extension licenses, day 60: remove the show-unlicensed toggle and settle what counts as licensed
Docs: extension pull before/after summary, published vs followed channel, and publishedChannel in the lockfile and list
stagecraft: a factory-wide read of work items waiting on a person (no studio, no per-item status loop)
swamp model validate checks globalArguments without applying the model's upgrades chain
stagecraft: rebind a work item to another tracker (mirrored built-in tickets to Jira)
stagecraft: example tracker extension and the writing-a-tracker guide (#3274 step 3)
stagecraft: open the set of trackers to any bound adapter (#3274 step 2)
stagecraft: publish and claim as workflows over a tracker method contract (#3274 step 1)
digitalocean codegen: app-platform and database spec secret fields are not marked sensitive
swamp-extensions: replace bare import specifiers with npm:/jsr: specifiers in first-party extensions
stagecraft: let a method or workflow stage's target use {{name}} placeholders from run data
check_upgrades.ts skips models in nested extensions/models/ directories (e.g. stagecraft's engine/ and tracker/)
verification: check_upgrades skips models in subdirectories, so stagecraft version bumps go unchecked
swamp issue edit: a dotted code path in the body is redacted as a hostname
issue-lifecycle: swamp-club lifecycle post failures are logged but the method still reports success
stagecraft: studio state_test 'after its event stream reconnects' is timing-flaky under load
Namespace names are not reserved against cache/datastore layout directories (e.g. data)
serve check-config writes the extension catalog into the repo, though its help says nothing is written
extension fmt output prints JavaScript string concatenation and quoted values
dynamic-code safety error reports Babel line numbers, which disagree with the analyzer's newline-split lines
extension push offers to promote a yanked version, and extension promote does not check for a yank
Search and list output follows directory iteration order in the definition, workflow, vault and output repositories
stagecraft: integration test 'studio watch: an unchanged follow sends nothing; an edit sends a definition event' fails on main (macOS)
stagecraft: upgrade stored factory definitions on read, so a format change does not break work in progress
-q does not suppress the update, auth-nudge and autoupdate banners
access grant create: a refused condition still leaves an empty grant-… definition and a failed run behind
codegen/aws: 9 services still pin @aws-sdk/client-cloudcontrol@3.1090.0
Clear error when hydrateFile reports success but the file is missing
Workflow load errors print the raw Zod issue dump instead of a readable message
Docs: extension info reference should show the Accepted warnings block and contentMetadata.acceptances (swamp-club#3158)
extension info: show the accepted warnings the registry returns for the latest version (swamp-club#3095)
Periodic worker GC sweep prunes outside the sync gate
Docs: restricted-model-types covers edit, delete, data delete/rename and workflow step changes
extension safety analyzer's Deno.Command( warning is a plain substring match
registry: store and show declared acceptances sent in contentMetadata.acceptances at confirm (swamp-club#3021)
extension safety analyzer does not warn on node:child_process or cluster subprocess spawning
Flaky property test: analyzeExpression hyphenated dot access fails when modelName generates a CEL keyword ("in")
extension push/quality: structured acceptances for agents, a clearer title than For next time, and an optional reason
Relationships
#3228 swamp issue edit: a dotted code path in the body is redacted as a hostname
Opened by skunk-ape · 10/10/2026· Shipped 10/10/2026
What happened
swamp issue edit 3190 --title ... --body ... stored the body with one code span replaced: a backticked field path written as work, dot, workflow, dot, name came back from swamp issue get 3190 --json as [HOST-1]. The rest of the body, including other dotted paths such as work.method.modelIdOrName and workflow.name, was stored unchanged.
The same text was intact in the issue as originally filed, so the replacement happens on edit (in the CLI or in swamp-club's handling of the edit).
Why it matters
Issue bodies in this project routinely name code paths and config keys. Treating a three-part dotted identifier inside a code span as a hostname silently changes the issue's meaning, and nothing tells the author it happened.
Repro
swamp issue edit <n> --title "t" --bodywith a body containing a backticked three-segment dotted path ending in a common TLD-like word (herename).swamp issue get <n> --jsonand read.body: the path is replaced by[HOST-1].
Expected
Text inside code spans (and ideally any issue body the author wrote) is stored as written, or the author is told what was redacted and why.
Workaround used: reword the path so it is not three dotted segments.
swamp 20261007.214606.0-sha.b352b2cf
Shipped
Click a lifecycle step above to view its details.