Skip to main content
← Back to list
01Issue
BugShippedSwamp CLI
Assigneesstack72

Relationships

#1035 Adversarial-review recording under-communicates its contract (no dimension definitions, undocumented verdict enum, silent failure on invalid verdict)

Opened by dmc · 7/8/2026· Shipped 7/9/2026

Problem

The swamp extension push --dry-run adversarial-review gate emits a fill-in JSON skeleton (keyed by code hash). In practice the skeleton is easy to fill incorrectly because it doesn't communicate its own contract, which undermines the gate's intent (a faithful review):

  1. Dimension ids carry no inline definition or doc link. The skeleton lists ids like schema-strictness, preflight-checks with "verdict": "pending" and empty note. Their precise meanings live only in the swamp-extension skill's references/adversarial-review.md and references/model/checks.md. Filling the skeleton without cross-referencing makes it trivial to write a verdict from the label's colloquial meaning rather than the actual criterion — e.g. reading "schema-strictness" as enum tightness when it specifically means "no .passthrough()", or assuming an inline check satisfies "preflight-checks" when it means the framework checks: mechanism.

  2. The verdict enum is undocumented. Only "pending" appears in the skeleton. The accepted terminal values (pass, na) are stated nowhere — I had to discover them by probing the validator. It also appears there is intentionally no "open finding" verdict (issue/fail/etc. are rejected); if so, that's worth stating explicitly ("resolve to pass or mark na — there is no open-issue state").

  3. An invalid verdict fails silently. Setting any unrecognized token (issue, fail, a typo) makes the dry-run behave as if no review was recorded — it re-emits the same "no adversarial review recorded" warning + skeleton. So a wrong value reads as "not done yet" rather than "invalid value," with no hint at the allowed set.

Impact

Because the artifact under-communicates its contract, it's easy to fill from assumption and clear the warning without a faithful review — the opposite of the gate's purpose. In my case it contributed to two mis-attributed dimensions and a guessed enum; only human review caught it.

Proposed solution

  • Embed each dimension's one-line definition (or a doc anchor) directly beside its id in the emitted skeleton.
  • Document the accepted verdict values in the skeleton/warning, and state explicitly whether an open-finding verdict exists.
  • On an unrecognized verdict, fail with an explicit error naming the offending dimension and listing allowed values, instead of silently re-emitting the skeleton.

Alternatives considered

  • Docs-only in the skill (status quo) — insufficient; the skeleton is filled at a point where the skill text isn't necessarily in front of the author.
  • An interactive swamp extension review subcommand walking each dimension — heavier, but also closes the point-of-use gap.

Environment

  • swamp 20260707.202458.0-sha.17103ab8
  • Surfaced during swamp extension push --dry-run for a first-publish extension (@dmc/unifi-networks).
02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED+ 1 MOREASSIGNED+ 2 MOREREVIEW+ 4 MOREPR_MERGED+ 1 MORECONTRIBUTOR_NOTIFIED

Shipped

7/9/2026, 2:28:56 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack727/9/2026, 12:51:54 AM
Editable. Press Enter to edit.

stack72 commented 7/9/2026, 2:29:04 PM

Thanks @dmc for reporting this! The fix has been merged and a release is on its way. We appreciate your contribution to swamp.

Sign in to post a ripple.