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):
Dimension ids carry no inline definition or doc link. The skeleton lists ids like
schema-strictness,preflight-checkswith"verdict": "pending"and emptynote. Their precise meanings live only in theswamp-extensionskill'sreferences/adversarial-review.mdandreferences/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 frameworkchecks:mechanism.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 topassor markna— there is no open-issue state").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 reviewsubcommand 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-runfor a first-publish extension (@dmc/unifi-networks).
Shipped
Click a lifecycle step above to view its details.