#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
regressionIntroducedInif one was given; - a classification without
isRegressionnever clears a flag set earlier, for example afterreclassify; - 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.
isRegressionbecomes required on every classification.- If
regressionVerdictisdowngraded, thenisRegressionisconst: falseandregressionIntroducedInis absent. IfisRegressionistrue, the verdict isconfirmed. The evidence fields are required wheneverregressionVerdictis present. - The
regression-reviewwhenkeys onhas(...regressionVerdict)rather than onisRegression, so a person still sees a downgraded claim. - A
classifiedentry withmatch: { isRegression: true }comes first, with summary "Classified as {{type}} (regression) ({{confidence}})". The existing entry stays as the fallback. - The prompt says to record
isRegression: falsewith 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-reviewis still required for both verdicts and for neither when there is no claim.swamp-extensions.md'sclassifiedrow reads "Same".
Shipped
Click a lifecycle step above to view its details.