phase-pr and ci-gate write the ci_pending card from two hand-copied definitions #568
Labels
No labels
agent-ready
bug
contract
documentation
duplicate
enhancement
good first issue
help wanted
invalid
needs-human
needs-input
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/iw-cli#568
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found while working IW-566.
The
ci_pendingreview-state card is written from two places that must agree, and nothing makes them agree.CiGate.markPending(core/commands/CiGate.scala:254-268) isprivate, soPhasePr.handOffWaitcannot call it. The--no-waitpath therefore copies the same five fields by hand. Both writers must set the same status, the same display text and the sameclearCiWaitStarted, orBatchImplement.decideOutcomemaps one of them to the wrong outcome — and a test passing against one writer proves nothing about the other.PROPOSED FIX. Extract one builder for the
ci_pendingcard shape and have bothCiGateandPhasePrcall it, so the card contract has a single definition.WHILE THERE.
PhasePr.handOffWaitand the pre-existingPhasePr.handOverdiffer by one word but sit at different points in the lifecycle —handOverafter the wait,handOffWaitbefore it. Renaming the latter todeferCiWaitwould stop the two reading as variants of one thing.Found during IW-601 phase 2 (composition review): the same two writers also duplicate the
ci_failedcard.PhasePr.stop/reportRedandCiGateCommand.stop/reportRedbuild the sameci_failedupdate and red report in two copies (PhasePr.scala:553-590,CiGateCommand.scala:282-313). The single-builder fix should cover this card too.Intake: agent-ready
Workflow: waterfall
Reason: all gates passed
Analysis: project-management/issues/IW-568/analysis.md on branch IW-568
Implement: needs-human
Reason: batch-implement exit 1 — the kanon plugin did not compile against this worktree's iw-cli core, so no phase ran
batch-implementstopped before it wrotebatch-implement.log. The lines below are its console output. The installed kanon plugin (lib/batch/ForgeCatchUp.scala:143) expectsEither[String, …]fromtracker.fetchPullRequestForBranch. iw-climain(#778–#780) changed the tracker port to returnEither[TrackerError, …]. This failure is not specific to this issue: everybatch-implementin iw-cli fails the same way until the plugin follows the port change.Release: the implement loop failed this issue for a reason outside it. The kanon plugin did not compile against iw-cli main, because the tracker port now returns TrackerError (iw-cli #778). The plugin fix is dev-docs #484, and iw-cli 0.22.1 carries the core change. The issue goes back to the implement loop.