finish: close an epic when its last child closes, with a full close note #823

Open
opened 2026-10-20 01:23:12 +00:00 by hexajon · 0 comments
Owner

When the last child of an epic closes, neither the forge nor madtea closes the epic. It stays open with every box ticked until someone notices. The close-semantics probe in internal/testforge/closeprobe shows the forge side on Forgejo and Gitea, at the baseline and latest pins.

Decision: after a merge, finish checks every issue that depends on an issue the merge closed. An issue labelled epic (the label deps_add epic= applies) that now has no open dependency is closed by madtea, with a close note posted first.

The close note documents the whole epic:

  • Each child: its number, title, and the PR that closed it.
  • The PR and merge commit that closed the last child.
  • A line stating that every dependency of the epic is closed.

If the closed epic is itself a dependency of another epic, the same check runs for that epic, up the chain.

The finish result names each epic it closed. If the close fails, finish reports that and leaves the merge as it is.

Acceptance, against throwaway Forgejo and Gitea servers:

  • An epic with two children: merging the last child closes the epic, and the note lists both children with their PRs.
  • An epic with a child still open stays open after a sibling merges.
  • A non-epic issue whose last dependency closes is not closed by this step.
  • An epic that is a child of another epic closes its parent when it was the parent's last open child.
When the last child of an epic closes, neither the forge nor madtea closes the epic. It stays open with every box ticked until someone notices. The close-semantics probe in `internal/testforge/closeprobe` shows the forge side on Forgejo and Gitea, at the baseline and latest pins. Decision: after a merge, finish checks every issue that depends on an issue the merge closed. An issue labelled `epic` (the label `deps_add epic=` applies) that now has no open dependency is closed by madtea, with a close note posted first. The close note documents the whole epic: - Each child: its number, title, and the PR that closed it. - The PR and merge commit that closed the last child. - A line stating that every dependency of the epic is closed. If the closed epic is itself a dependency of another epic, the same check runs for that epic, up the chain. The finish result names each epic it closed. If the close fails, finish reports that and leaves the merge as it is. Acceptance, against throwaway Forgejo and Gitea servers: - An epic with two children: merging the last child closes the epic, and the note lists both children with their PRs. - An epic with a child still open stays open after a sibling merges. - A non-epic issue whose last dependency closes is not closed by this step. - An epic that is a child of another epic closes its parent when it was the parent's last open child.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sixfold-space/madtea#823
No description provided.