Repository navigation
🐛 fix(dashboard): name the blocking PR on tracker rows and keep webhook unblocks from being overwritten - #14965
hivecommons-hive[bot] wants to merge 2 commits into
Conversation
|
hive/awaiting-ci: CI pending — sweep will merge when green. 🐝 Hive Agent: — hive: agent=scanner backend=copilot model=claude-fable-5.1 copilot=1.0.88 |
Open PR overlap checkBase branch:
Conflicts are checked with every PR merged onto the current tip of
|
…ok unblocks from being overwritten Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
ad9ccb8 to
ab579aa
Compare
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Decision needed: @clubanderson should decide whether #14965 is closed in favour of #14957, which carries the same blocked_on_pr / CAS-publish change for #14952 plus the ItemRefreshHook and docs this PR defers.
This appears to duplicate #14957, which makes the same change for the same issue (#14952) and conflicts with it on src/pkg/dashboard/stage_tracker.go, src/pkg/github/webhook_item_patch.go, src/cmd/hive/eval_cycle_source.go, src/cmd/hive/main.go, src/cmd/hive/repos_rescan.go, src/pkg/github/issue_blocked.go, src/pkg/github/client.go and static/index.html. Both cannot merge.
What I verified by reading both diffs in full:
- Identical design, down to names: both add
StageTrackerItem.BlockedOnPR *StageTrackerBlockedOnPRwith JSONblocked_on_pr: {repo, number, url, state}immediately afterBlockedOn, the same captionBlocked on PR #N — lifts when it merges, the same pill textblocked on #Nand the same tooltip string. Both add a marker-or-reason parser inissue_blocked.go(ParseBlockedFilterReasonhere,ParseBlockedOnReason/BlockedOnTargetin #14957). - Same fix for the stale-
blockedrace: both turnsnapshotPatcher.applyinto a CompareAndSwap loop and replace the twolastActionable.Storesites (main.go,repos_rescan.go) with a publish helper that replays remembered webhook re-reads newer than the pass'sGeneratedAtonto the result. This PR remembers them as a 2h-pruned slice (WebhookReads,pruneWebhookReads); #14957 as a 4096-bounded map (WebhookPatches,evictOldestWebhookPatch). - Where they differ, #14957 is a superset: it also adds
pkg/github/item_refresh_hook.go+(*Client).unblockIssueat the hive-sideblockedremovals (this PR's body explicitly defers that to a child issue), resolves aclosedstate via ForgeState (this PR only resolvesopen/merged), ships the operator docs (docs/dashboard-sections.md,docs/labels-and-control-signals.md) and a JS UI test. On the survivor I also checked the call order:finish()setsmodBlockedbeforestageTrackerBlockedOnPRruns (stage_tracker.gohunk @1571), andresp.RecentlyMergedis filled atstage_tracker.go:1328before the state resolver captures it.
Flagging for a maintainer: if you agree, this one could be closed in favour of #14957 — same change, broader scope, authored by the repo owner. I have not closed anything.
— hive: agent=reviewer-2 backend=copilot model=claude-fable-5.1 copilot=1.0.88
|
Needs a decision, not a merge:
Head: verdict requires_human @2b1f7f8, 64/65 checks green, 1 pending, DCO yes, soak 0s of 30m0s. What to do: approve this head ( How to release it:
Clear the cause and the hive re-evaluates on its next pass; the stage moves to |
|
Supersession sweep found that this PR's claimed issue is already closed by another merged PR.
This PR touches files the merged PR did not, so the hive is resolving it itself, but GitHub refused to update head 2b1f7f8 onto This comment is edited in place by the supersession sweep; it is not duplicated. |
|
Closed as superseded by #14957 by @clubanderson from the Hive dashboard. |
…als out of the merge gate (#15011) * Close superseded hive PRs automatically and re-stage adopted originals out of the merge gate A hive-authored PR whose closing targets are all closed, one of them by a different merged PR, and whose head conflicts with the base (or whose files that PR already covers) is now closed by the hive itself as hive/superseded with a notice naming the superseding PR: in the self-authored auto-merge lane before any review is dispatched, in the supersession sweep when the rebase is refused for a conflict, and in close-on-merge of the superseding PR. New knob governor.auto_close_superseded (default on); human-authored PRs are never auto-closed. A contributor PR adopted in supersede mode leaves stage/085-needs-decision in the adopting pass when the park was only the review swarm's requires_human verdict, renders in the CI/Review column with an 'Adopted -> #N' pill, and the duplicate-fix sweep no longer closes the superseding App PR as a duplicate of the PR it supersedes. Evidence: #14965 (closed by #14957 for #14952), #14975 -> #14980, Signed-off-by: Andrew Anderson <andy@clubanderson.com> #14947 -> #14977. * Move changelog fragment to repo-root changelog.d Signed-off-by: Andrew Anderson <andy@clubanderson.com> --------- Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Two Activity Monitor problems from #14952.
The
blockedpill never named its blocker. Review-backlog spin-offs carry<!-- hive:blocked-on pr=owner/repo#N -->, and the enumeration files them with the reasonblocked on owner/repo#N. The tracker still showed a bareblockedpill with the caption "No stage recorded yet". The stage tracker now parses the marker from the issue body, or from the filtered reason when it has no body, into a new additiveblocked_on_pr: {repo, number, url, state}field.statecomes only from what the hive already holds: the response's open PR rows (status snapshot plus forgestate overlay) and the recent-merge ring. It never makes a GitHub call.blocked_on(the GitHub dependency list from #14765) is unchanged. In the UI the pill readsblocked on #Nand links to the PR. Its tooltip/aria-label readsBlocked on PR owner/repo#N (open) — lifts when it merges; re-triage if closed unmerged, the caption readsBlocked on PR #N — lifts when it merges, and the row tooltip carries the same text.Rows stayed
blockedafter the hive's own unblock. A reconcile pass that started before the unblock and finished after it stored its pre-unblock copy withlastActionable.Store, overwriting the webhook-patched snapshot. Now the snapshot patcher remembers each applied webhook re-read on the snapshot (WebhookReads, in-memory only). Before a reconcile pass (eval cycle or manual rescan) publishes its result, it replays the reads fetched after the pass started onto that result. This is a compare-and-swap, and the patcher now swaps the same way, so a patch that lands in between is not lost either. The existing monotonicupdated_atguard now also covers sidelined rows (WorkDetailsByRepo), so a replayed read can never move a newer listed copy backwards.The other half of part 2 (an
ItemRefreshHookon every hive-sideblockedremoval that queues a targeted re-read) is tracked in a child issue. The root cause is fixed here without it.Closes #14952
— hive: agent=scanner backend=copilot model=claude-fable-5.1 copilot=1.0.88 requested_by=@clubanderson