Skip to content

πŸ› tracker: keep a closed linked issue as the row head instead of promoting the PR - #15241

Merged
hivecommons-hive[bot] merged 1 commit into
v5from
fix/tracker-row-closed-issue
Oct 29, 2026
Merged

hivecommons-hive[bot] merged 1 commit into
v5from
fix/tracker-row-closed-issue

Conversation

@clubanderson

Copy link
Copy Markdown
Member

Fixes #15232

Root cause

stageTrackerClosedIssueAnchor (#14655) re-anchors a standalone PR row on the PR when every closing-keyword link names a closed issue (closed_issue set), and the SPA's stageTrackerRowHtml then drew the PR at full width in the issue slot with a secondary closes #N Β· closed chip. A PR whose link is soft (Refs #N, title/mention) skipped that anchor and went through stageTrackerPRIssueSlot, which keeps the closed issue on the left, struck through under a closed chip. So the row head depended on how the PR linked the issue (dibs #496/#500 vs. #15191/#15173), and the operator saw an empty issue column.

Fix

  • SPA: the closed_issue special branch is gone; a PR row always puts its linked issue in the issue slot (open or closed, same strikethrough + closed chip) and itself in the PR column. closed_issue still sinks the row in its column and still drives the not-planned "may be moot" chip.
  • Server: StageTrackerLinkedIssue.ClosedBy (closed_by) names the merged PR the merged ledger recorded under the issue (MergedLedger.ClosedBy, excluding the row's own PR); stageTrackerMarkClosedBy fills it after link resolution. The chip then reads closed by #N and links to that PR so a duplicate fix reads as one.
  • Tests: Go (closed-issue-before-PR-seen with closer / no closer / self / other repo; stageTrackerMarkClosedBy; MergedLedger.ClosedBy) and node row assertions in TestStageTrackerRows.

…oting the PR

stageTrackerClosedIssueAnchor (#14655) re-anchored a standalone PR row on
the PR when every closing-keyword link named a closed issue, and the SPA
drew the PR at full width in the issue slot with a 'closes #N Β· closed'
chip. A soft-linked (Refs #N) closed issue went through
stageTrackerPRIssueSlot instead and kept the issue on the left, struck
through β€” so the row head depended on how the PR linked the issue.

The SPA now always draws the linked issue in the issue slot, open or
closed, and keeps the PR in the PR column. The server names, from the
merged ledger, the other merged PR recorded under the issue
(StageTrackerLinkedIssue.ClosedBy), and the chip reads 'closed by #N'
linking to it so a duplicate fix reads as one. closed_issue still sinks
the row in its column.

Fixes #15232

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
@kubestellar-prow kubestellar-prow Bot added the dco-signoff: yes Indicates the PR's author has signed the DCO. label Oct 29, 2026
@kubestellar-prow

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign kellyaa for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@kubestellar-prow kubestellar-prow Bot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Oct 29, 2026
@hivecommons-hive

Copy link
Copy Markdown
Contributor

@clubanderson is auto-promoted for contributor-lane merging on this PR: the last 5 merged PRs by this author in this hive's repositories have no revert or sentinel-alert evidence. CI, reviewer verdict, diff fences, soak, holds and branch protection still apply.

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Open PR overlap check

Base branch: v5

Conflicts are checked with every PR merged onto the current tip of v5, so a PR that only needs a rebase is not reported as conflicting with its siblings.

PR Title Relation Files
#15223 ✨ Soak countdown on every soak pill, with the live timer on hover same files src/pkg/dashboard/stage_tracker.go
src/pkg/dashboard/static/index.html
#15240 πŸ› Never adopt a person's PR: owner/human-authored PRs return to their author instead of the contributor-offline lane same files src/pkg/dashboard/stage_tracker.go
src/pkg/dashboard/static/index.html
#15104 πŸ› Activity Monitor: Rebase, then merge as maintainer; fixer owns parked conflicting PRs; dismiss self-inflicted changes_requested same files src/pkg/dashboard/stage_tracker.go
src/pkg/dashboard/static/index.html
#15186 πŸ› Activity Monitor: one coherent post-decision state for Let hive decide rows; 060 reviewed in CI / Review same files src/pkg/dashboard/stage_tracker.go
src/pkg/dashboard/stage_tracker_motion_test.go
src/pkg/dashboard/stage_tracker_ui_test.go
src/pkg/dashboard/static/index.html
#15134 πŸ› Delegated decision on a capability gap: model the blocker, stop the un-park/re-park loop, name the missing App permission same files src/pkg/dashboard/stage_tracker.go
src/pkg/dashboard/static/index.html
#15208 πŸ› fix: decidePR answers capability-gap, not adopt-supersede, for heads the App cannot adopt same files src/pkg/dashboard/static/index.html
#15253 πŸ› decision toast: issue decisions no longer read as 'approved for merge' same files src/pkg/dashboard/static/index.html
#15256 πŸ› clanker PRs with a human changes-requested review show Returned to contributor, not Sentinel alert same files src/pkg/dashboard/stage_tracker.go
src/pkg/dashboard/stage_tracker_ui_test.go
src/pkg/dashboard/static/index.html
#15236 πŸ› Prefer covering PR progress in Activity Monitor messages same files src/pkg/dashboard/stage_tracker.go
#15251 πŸ› tracker: show Merging in the merge gate for at least the toast lifetime before βœ“ same files src/pkg/dashboard/stage_tracker.go
src/pkg/dashboard/static/index.html
#15219 πŸ› fix: preserve human and owner PRs during delegated decisions same files src/pkg/dashboard/stage_tracker.go
src/pkg/dashboard/static/index.html
#15122 πŸ› Write-back containment: per-kind gate for every unsolicited GitHub write, with backfill guard same files src/pkg/dashboard/static/index.html
#15249 ✨ dashboard: merged ledger rolls like an odometer and the rising glyph eases slower same files src/pkg/dashboard/static/index.html

@hivecommons-hive hivecommons-hive Bot added author/human A person pushed this PR themselves dco All commits are DCO signed-off role/trusted Author is trusted for unattended merge (trusted-author role or registry/claim tier in require_tiers) stage/050-review-pending Review swarm requested; awaiting a verdict for the current head labels Oct 29, 2026
This was referenced Oct 29, 2026

@hivecommons-hive hivecommons-hive Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conclusion: reads correct to me; one low-severity naming gap worth a look before merge.

What I verified

  • src/pkg/dashboard/stage_tracker.go (stageTrackerMarkClosedBy): runs after stageTrackerResolveLinkedPRs in buildStageTracker, only touches Kind == "pr" rows, only closed links with ClosedBy == 0, and passes pr.Number as exclude, so a PR is never shown as closing its own issue. MergedLedger.ClosedBy is nil-receiver safe, so a server without a ledger yields 0 and the chip falls back to plain closed.
  • Linked issues are same-repo by construction (stage_tracker.go:2497-2501, "Same-repo references only"), so looking the issue up under pr.Repo is sound.
  • Tests cover closer / no closer / self / other-repo-same-number.

Low: short-name rows never match the ledger. MergedLedger.ClosedBy compares strings.EqualFold(e.Repo, repo). Ledger entries are written org-qualified (merged_ledger_server.go:107, qualify(snap.Repo) via mergedRepoQualifier, which prefixes Project.Org when the name has no /). The tracker row's Repo comes from overviewRepoName (overview_export.go:381-386), which returns repo.Full when set and otherwise the short repo.Name. Your own comment at stage_tracker.go:2508-2510 notes pr.Repo "may be the config's short name ("hive")". In that configuration ClosedBy returns 0 for every row and the closed by #N chip never appears β€” a silent degradation rather than a break. Running pr.Repo through the same stageTrackerRepoQualifier(status) (or s.mergedRepoQualifier()) before the lookup in buildStageTracker would close it; a table case with a short-name row against a qualified ledger entry would pin it.

I have not changed anything.

β€” hive: agent=reviewer-2 backend=copilot model=claude-fable-5.1 copilot=1.0.88

@hivecommons-hive hivecommons-hive Bot added stage/095-pre-merge-soak Lane admitted; the pre-merge soak window is running before the merge is attempted stage/060-reviewed Review swarm verdict approve; a gate is still pending (CI running, soak not started) and removed stage/050-review-pending Review swarm requested; awaiting a verdict for the current head stage/095-pre-merge-soak Lane admitted; the pre-merge soak window is running before the merge is attempted labels Oct 29, 2026
@hivecommons-hive

Copy link
Copy Markdown
Contributor

stage 095-pre-merge-soak β†’ 060-reviewed: required-check-pending:Sign-off survives the squash

@hivecommons-hive hivecommons-hive Bot added stage/095-pre-merge-soak Lane admitted; the pre-merge soak window is running before the merge is attempted stage/060-reviewed Review swarm verdict approve; a gate is still pending (CI running, soak not started) and removed stage/060-reviewed Review swarm verdict approve; a gate is still pending (CI running, soak not started) stage/095-pre-merge-soak Lane admitted; the pre-merge soak window is running before the merge is attempted labels Oct 29, 2026
@hivecommons-hive hivecommons-hive Bot added stage/095-pre-merge-soak Lane admitted; the pre-merge soak window is running before the merge is attempted stage/060-reviewed Review swarm verdict approve; a gate is still pending (CI running, soak not started) and removed stage/060-reviewed Review swarm verdict approve; a gate is still pending (CI running, soak not started) stage/095-pre-merge-soak Lane admitted; the pre-merge soak window is running before the merge is attempted labels Oct 29, 2026
@hivecommons-hive
hivecommons-hive Bot merged commit faec60a into v5 Oct 29, 2026
96 of 107 checks passed
@kubestellar-prow
kubestellar-prow Bot deleted the fix/tracker-row-closed-issue branch October 29, 2026 02:44
@hivecommons-hive

Copy link
Copy Markdown
Contributor
Evidence bundle `#15241a3f2c37` sha256:1011d6d87026dbbb163ce7f577163204691223eba75898d1fb341bfdd497c98e β€” download from the dashboard or `hivectl review evidence #15241`.

@hivecommons-hive

Copy link
Copy Markdown
Contributor

Merged by hive contributor-lane auto-merge: CI green for β‰₯30m, reviewer verdict approve, @clubanderson was auto-promoted after 5 clean merged PRs in this hive's repositories.

@github-actions

Copy link
Copy Markdown
Contributor

Thank you for your contribution! Your PR has been merged.

We'd love to hear how your experience was: share feedback

@hivecommons-hive hivecommons-hive Bot removed role/trusted Author is trusted for unattended merge (trusted-author role or registry/claim tier in require_tiers) stage/060-reviewed Review swarm verdict approve; a gate is still pending (CI running, soak not started) labels Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author/human A person pushed this PR themselves dco All commits are DCO signed-off dco-signoff: yes Indicates the PR's author has signed the DCO. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

πŸ› tracker: a PR whose linked issue was closed is promoted to the row head, leaving the issue column empty

1 participant