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
Relationships
#3464 extension quality --json reports status "failed" when a rubric factor is missing, though the exit code is 0
Opened by skunk-ape · 10/14/2026· Shipped 10/15/2026
swamp extension quality --json sets status: "failed" whenever any rubric factor is missing, even when no check failed and the run exits 0. Its own source comment and the manual both say status follows the exit code and is independent of allPassed.
Where
src/presentation/renderers/extension_quality.ts (line 376 at c5d1db96):
status: failure || !score.allPassed ? "failed" : "passed",The comment above it says: "status is the run's outcome, matching the exit code: a failed check or an extension the registry cannot score fails the run whatever the rubric says. allPassed stays the rubric's own." The line dates to 9a8ec977 (swamp-club#3022).
The manual (reference/extensions/publishing.md, quality JSON output) agrees with the comment: status is "passed, or failed when a check failed or the registry cannot score the extension", and allPassed is "the rubric's own result, independent of status".
Reproduce
swamp 20261014.121640.0-sha.c5d1db96. An extension with one npm: import, with OSV.dev and the npm registry unreachable so dependency-trust is missing (swamp-club#3350):
HTTPS_PROXY=http://127.0.0.1:9 NO_PROXY=swamp-club.com \
swamp extension quality manifest.yaml --json; echo $?Result: status: "failed", allPassed: false, gateFailures: [], registryScorable: true, exit code 0. Going by the code, any missing factor (for example, no README) should do the same; only the unaudited case was run.
Why it matters
A script that checks status == "passed" treats a missing factor, or an OSV or npm outage since #3350, as a failed check. A script that checks the exit code sees success.
Expected
Either drop || !score.allPassed so status matches the exit code as the comment says, or keep the behaviour and correct the comment and the manual. The swamp-club manual currently describes the comment's intent.
Shipped
Click a lifecycle step above to view its details.