Relationships
#3022 extension quality, fmt --check and push disagree: bare-specifier severity, cache hit skips gates, gate failure hides the rubric, fmt ignores project config
Opened by skunk-ape · 10/5/2026· Shipped 10/6/2026
Problem
swamp extension quality, fmt --check and push give different answers for the same extension:
- Bare import-map names are a blocking error in
quality.ts:206and a medium warning inpush.ts:834. First-party @swamp/azure-kv (@azure/core-auth) and @swamp/issue-lifecycle (@std/path,zod) are published today and cannot be scored; stagecraft rewrote its imports to get past it. Earlier rounds: #505, #167. qualityaborts without a score when any push gate fails, because it callsextensionPushPrepareand surfaces the first thrown error (quality.ts:168-178), so a safety error hides the whole rubric. #1481 was the exit-code half of this.- A
qualitycache hit skips prepare entirely (quality.ts:137-164), so safety, review, upgrade-chain and collective checks do not run on a cached archive, while a push cache hit skips only fmt/lint (push.ts:758). extension fmt --checkruns without the projectdeno.json(fmt.ts:77) while push uses it.
Expected
- The same severity for bare specifiers in quality and push, with the import-map rewrite suggested in the message. Either both warn and note the extension will be unscored, or both error.
- A quality cache hit still runs safety, review, upgrade-chain and collective checks.
- Quality prints the rubric even when a gate fails, with the gate failure beside it.
fmt --checkuses the project config, as push does.
Acceptance
qualityandpush --dry-runon @swamp/azure-kv agree on the bare-specifier outcome.qualityon an extension that trips a safety error prints the rubric and the error.qualityrun twice (second run a cache hit) with a hidden file added between runs reports the hidden file on the second run.fmt --checkandpushagree on every extension in swamp-extensions (the assessment found no disagreement on 46 with the current code; this is the regression check).
Source: the extension push assessment (2026-10-02, swamp 20261002.194016) and the Extension Push UX Plan, which groups this with its lane and order.
Shipped
Click a lifecycle step above to view its details.
skunk-ape commented 10/5/2026, 2:34:57 PM
Guardrail: when quality and push disagree, prefer the stricter severity with a better message over relaxing both. For bare specifiers that means error in both with the import-map rewrite suggested, unless there is a reason the registry can score them; an extension that publishes unscorable is the outcome to avoid. A quality cache hit must run every gate the cold path runs.
Sign in to post a ripple.