Skip to main content
← Back to list
01Issue
BugShippedExtensionsPublic
Assigneesskunk-ape

Relationships

Blocked⊘ blocked by #2768⊘ blocks #2770

#2769 gatorwalk-factory: a downgraded regression still sets the Lab regression flag

Opened by skunk-ape · 9/30/2026· Shipped 9/30/2026

Follow-up to #2734. swamp-club sets or clears an issue's regression flag from the classified entry's payload.isRegression (swamp-club routes/api/v1/lab/issues/[number]/lifecycle.ts:146-159). A boolean true marks the issue a regression, false clears the flag, and an absent value leaves it unchanged.

What issue-lifecycle does

triage (extensions/models/issue_lifecycle.ts:1102-1121) turns regressionVerdict: downgraded into isRegression: false and drops regressionIntroducedIn. It always sends a boolean (effectiveIsRegression ?? false, :1197). A downgraded claim, and any classification that is not a regression, therefore clears the flag. Its summary adds " (regression)" only for a confirmed one (:1157, :1191).

What gatorwalk does

renderEntry sends the recorded payload unchanged (_lib/projection.ts:306). The classification schema (lifecycles/swamp-extensions.yaml:73-109) takes isRegression: true together with regressionVerdict: downgraded, and that is the shape the stage prompt asks for (:63-72). As a result:

  • a downgraded regression is marked as a regression in the Lab, with regressionIntroducedIn if one was given;
  • a classification without isRegression never clears a flag set earlier, for example after reclassify;
  • the summary never says "(regression)" (swamp-extensions.md:125).

No test covers this. lifecycles_test.ts:1330-1373 checks only the regression-review gate, and the fake (_lib/swamp_club_fake.ts:331-333) already models the flag.

Fix direction

This can be fixed in the YAML alone, with no format change: the agent records the effective value, as issue-lifecycle computes it.

  • isRegression becomes required on every classification.
  • If regressionVerdict is downgraded, then isRegression is const: false and regressionIntroducedIn is absent. If isRegression is true, the verdict is confirmed. The evidence fields are required whenever regressionVerdict is present.
  • The regression-review when keys on has(...regressionVerdict) rather than on isRegression, so a person still sees a downgraded claim.
  • A classified entry with match: { isRegression: true } comes first, with summary "Classified as {{type}} (regression) ({{confidence}})". The existing entry stays as the fallback.
  • The prompt says to record isRegression: false with the downgraded verdict.

Decision for the implementer: use the YAML-only fix above, or add a per-entry payload mapping to the projection so that the agent can record the claim as made. The YAML fix is smaller. The mapping keeps the recorded payload closer to issue-lifecycle's input shape.

Done when

  • Against the Lab fake:
    • a confirmed regression sets the flag and shows "(regression)";
    • a downgraded one leaves the flag clear, or clears one set earlier;
    • a plain bug recorded after a confirmed regression clears it.
  • regression-review is still required for both verdicts and for neither when there is no claim.
  • swamp-extensions.md's classified row reads "Same".
02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 2 MOREREVIEW+ 6 MOREPR_LINKED+ 2 MORESESSION_SUMMARIZED

Shipped

9/30/2026, 6:37:30 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
skunk-ape assigned skunk-ape9/30/2026, 6:14:04 PM
skunk-ape linked blocked by #27689/30/2026, 3:58:42 PM
skunk-ape marked as blocked9/30/2026, 3:58:42 PM
skunk-ape linked blocks #27709/30/2026, 3:58:42 PM

Sign in to post a ripple.