Skip to content

🌱 test: regression for an epic-driven PR on a contributor-claimed, PR-covered issue - #17308

Merged
hivecommons-hive[bot] merged 2 commits into
hivecommons:v5from
Karibhou:test/17302-claimed-pr-covered-epic
Nov 9, 2026
Merged

hivecommons-hive[bot] merged 2 commits into
hivecommons:v5from
Karibhou:test/17302-claimed-pr-covered-epic

Conversation

@Karibhou

@Karibhou Karibhou commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

Closes #17302

Part of #17292. Merge after #17303 (#17298) and #17305 (#17300). The new test is expected to fail on v5 until both land; that is the acceptance criterion in #17302.

What

TestClaims_ContributorPRCoveredIssueRefusesEpicDrivenPR (src/pkg/dashboard/claims_pr_covered_epic_17302_test.go) replays the incident end to end. It uses the hub's claim ledger, the contributor lease hub, the duplicate-PR ledger and the PR-request watcher, with a fake GitHub (httptest). One injected clock drives all of them. There is no time.Sleep.

Step Production path exercised Asserted
1. hive files #17243 — no claim
2. contributor claims it recordLease + claimIssueForContributor ledger held by the contributor
3. contributor PR #17248 Closes #17243 ClaimsFromPROpened → ClaimLedger.ApplyPRDelivery; FilterClaimedIssues → IssueStageInputs → IssueStageFor stage 040-covered-by-pr
4. contributor's lease completes revokeLease → releaseClaimForLease claim still held by the contributor, PRStarted (#17300); stage still 040
5. agent working from epic #17292 requests Fixes #17243 (no --issues) ProcessPRRequestDirOnce → handleOnePRRequest no POST /pulls, the request result is a claim refusal, and exactly one comment is posted on #17243, naming the contributor (#17298)

The client gets the hub ledger through the same adapter shape as cmd/hive ledgerClaimLookup. Dependencies.IssueClaimed and SetPRClaimLookup both read the duplicate-PR ledger, as they do in production.

Seam

github.Client.ProcessPRRequestDirOnce(ctx, dir, authz, nowFn) runs one watcher pass over a given dir, with a given authorizer and clock. It is a StartPRRequestWatcher tick without the ticker. The watcher's dir, authorizer and clock are unexported, and the lease hub lives in pkg/dashboard, which imports pkg/github. So no single package could reach both sides without this seam. ProcessPRRequestsOnce uses time.Now, so it cannot agree with the ledgers' injected clock.

This is not a user-visible change, so it needs the no-changelog label instead of a fragment.

Verification

— hive: backend=omp model=anthropic/claude-opus-5-5


🐝 Hive Agent: contributor | SHA: unknown

@kubestellar-prow kubestellar-prow Bot added the dco-signoff: yes Indicates the PR's author has signed the DCO. label Nov 8, 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 hanthor 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 Nov 8, 2026
@hivecommons-hive

hivecommons-hive Bot commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

@Karibhou this PR is back in your court (stage/072-returned-to-contributor). The hive will not merge it until the head changes.

Review asks:

  • the branch is behind the base and Hive cannot update it; enable "allow edits by maintainers" or rebase

Reply here or push a new head to this branch (same sign-off); CI and the review swarm re-run automatically and the PR returns to the normal path.

Your relay could not take this as a fix-pr task (Hub is not the active polling slot); the hive will retry it from your relay fix queue.

@github-actions

github-actions Bot commented Nov 8, 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.

No conflicting open PRs or same-file overlaps were found.

@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.

Decision needed: @hanthor should decide whether #17308 gets the no-changelog label and is held until #17303 and #17305 land, given #17303 currently has changes requested and this test's step‑5 assertions depend on its notice text.

Read the test against the v5 tree and the CI logs. The code is sound; what it needs is a maintainer sequencing call, not a code change.

Verified

  • Every API the test uses exists on v5 today (NewClientForTest, SetIssueClaimLedger, SetPRClaimLookup, ClaimLedger.SetClock, Ledger.SetNow, WritePRRequest, IssueResultFromItems, IssueStageInputs, IssueStageFor, FilterClaimedIssues, ClaimsFromPROpened, and the claimsHub test helper). CI confirms it compiles and fails only at the intended assertions (claims_pr_covered_epic_17302_test.go:228, :251, :262, :266, :270 in test (dashboard 2/4)), exactly as the body predicts.
  • The step‑4 expectation matches #17305's keep path: Holder is the GitHub username (claims_api.go:134), coveringPRByHolder matches PRAuthor case‑insensitively, and PRStarted is set by HoldForPR.
  • ProcessPRRequestDirOnce (src/pkg/github/pr_request_watcher.go:342) is a thin wrapper over the existing processPRRequestsInDir; it overwrites c.prAuthz, which is fine for a test seam and fails closed on nil at :380.

Why a human is needed

  1. The changelog-fragment-guard failure is by design (test + seam only); only a maintainer can apply no-changelog.
  2. The test is red until both #17303 and #17305 merge. #17305 looks correct to me (reviewed separately). #17303 currently carries changes_requested; the :266 assertion only needs the notice to contain the contributor login, so modest wording changes there are tolerated, but a structural change to where the notice is posted would need this test adjusted.
  3. Merge ordering: this PR must land last. Tide cannot express that; a hold until the two fixes merge is the simple way.

No findings against the test itself. One minor note: the :270 assertion currently trips on the hive:self-authorization-hold:5117 comment posted on the opened PR; once the gate refuses before CreatePR that disappears, so it is a correct, if indirect, assertion.

— hive: agent=reviewer-2 backend=copilot model=claude-fable-5.1 copilot=1.0.88

@hivecommons-hive

Copy link
Copy Markdown
Contributor

Needs a decision, not a merge:

Head: verdict requires_human @4df3fba, 25/55 checks green, 30 pending, DCO yes, soak 0s of 10m0s.

How to release it:

  • After reading the verdict, a trusted merger can submit a GitHub Approve review for the current head and the lane clears the hold on its next pass; /hive approve replies on a PR are acknowledged but not consumed. An ordinary contributor cannot release their own PR.

Clear the cause and the hive re-evaluates on its next pass; the stage moves to stage/090-ready-for-human-merge, stage/095-pre-merge-soak or the merge queue on its own. Approval does not bypass CI, hold labels or other merge gates.

@hivecommons-hive

Copy link
Copy Markdown
Contributor

Quality triage of the red checks @4df3fba — PR-local by construction, not a defect in this PR.

I pulled the log for test (dashboard 2/4) (run 42530718555, job 128884197943). The only failing test is the one this PR adds, TestClaims_ContributorPRCoveredIssueRefusesEpicDrivenPR, and every failing assertion is one the body predicts:

test (dashboard shuffle 3/3), test and coverage are the same test re-sharded / rolled up. Nothing else in the slice regressed, so the check-failing nudge above does not need a contributor fix; the branch should go green once #17303 and #17305 land on v5 and this is rebased. Fork head — no push from me.


🐝 Hive Agent: quality | Instance: hosted-available-oke-11-placeholder-r05x | SHA: unknown

— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88

@clubanderson clubanderson added the no-changelog No changelog fragment required label Nov 9, 2026
@clubanderson

Copy link
Copy Markdown
Member

Owner decision (@clubanderson): hold lifted — proceed.

A trusted merger approves once green. Thank you for closing the loop on #17292 with the test that would have caught your own case.

@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.

Re-read at 05ac8bb (the v5 merge-up). The decision question from the earlier review is answered — @clubanderson lifted the hold and #17303/#17305 are on v5 — so I checked the test's step‑4/5 expectations against the merged code rather than the then-open PRs. They line up; this looks correct to me.

Verified against v5 at this head

  • Step 5 refusal: handleOnePRRequest now calls validatePRRequestTargets before notifyAgentStart (src/pkg/github/pr_request_watcher.go:452), and the result is written via rejectPRRequest(…, "claim", …) → Error: "PR claim rejected: …" (pr_request_watcher.go:828), which satisfies strings.Contains(res.Error, "claim") (claims_pr_covered_epic_17302_test.go:262).
  • Step 5 notice text: prRequestTargetBlock sets refusal.Holder = claim.Identity when the hub ledger holds the issue for someone other than the requesting agent (pr_request_claims.go:673), and why() renders that as already claimed by Karibhou (pr_request_claims.go:565). The test's adapter maps claims.Claim.Holder → issueclaim.Claim.Identity (test :71), so the case-insensitive Contains(…, contributorLogin) at :266 matches the merged wording — no drift to adjust.
  • Step 4 keep path: releaseClaimForLease → coveringPRByHolder → HoldForPR (src/pkg/dashboard/claims_api.go:194-199) retains the contributor's claim with PRStarted, matching :228.
  • The seam ProcessPRRequestDirOnce (pr_request_watcher.go:348) is a thin wrapper over the existing processPRRequestsInDir; it overwrites c.prAuthz, which is acceptable for a test entry point and fails closed on a nil authorizer downstream.

One housekeeping item (not a defect)
changelog.d/added-17308.md is still in the diff. The PR carries no-changelog and the owner asked for the fragment to be dropped. The guard passes either way (src/scripts/check-changelog-fragment.sh:101 validates the fragment and exits 0), but if it stays it compiles into the release notes as an Added feature line for a test-only seam. Since this is a fork branch I can't push the removal — @Karibhou, a one-file delete would settle it.

I have not approved, merged or labelled anything; CI on this head was still running when I read it.

— hive: agent=reviewer-2 backend=copilot model=claude-fable-5.1 copilot=1.0.88

@hivecommons-hive

Copy link
Copy Markdown
Contributor

Review follow-ups (below review.backlog.min_severity: P2)

Non-blocking findings below the backlog filing line are listed here instead of as issues, one comment per PR, updated in place. Tick them off as they are fixed; set review.backlog.min_severity: P3 to file every finding.

  • P3 info security — Exported ProcessPRRequestDirOnce swaps the live watcher's authorizer without synchronization (src/pkg/github/pr_request_watcher.go:354): ProcessPRRequestDirOnce (pr_request_watcher.go:347-356) assigns c.prAuthz = authz on the shared *Client before scanning dir. StartPRRequestWatcher (line 267) also sets prAuthz, then its goroutine rea…

@hivecommons-hive

hivecommons-hive Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Hive status — updated in place; edits do not notify. Full history is in the Activity Monitor.

Review findings from reviewer-2 (folded here because this head already carries its hive review):

Read the seam against pkg/github/pr_request_watcher.go on v5 and the whole test. Looks correct to me; one small body/diff mismatch a maintainer may want resolved before merge.

Seam. ProcessPRRequestDirOnce is StartPRRequestWatcher (pr_request_watcher.go:261-308) minus the ticker: same c.prAuthz = authz assignment (:267) and the same processPRRequestsInDir(ctx, nowFn, dir) call (:300). It does not set prHoldLabel, which is fine — the only reader nil-checks it (:589). No production path changes.

Dependencies. #17303 and #17305 are both merged on v5, which is why every test (…) job is green here rather than failing as the body predicted for an unmerged base — the "merge after" condition is already satisfied.

Mismatch (low). The body says this "needs the no-changelog label instead of a fragment", and the label is on the PR — but the diff also adds changelog.d/added-17308.md, which puts "Added github.Client.ProcessPRRequestDirOnce … with a regression test" into the user-facing changelog. The fragment's own text describes a test entry point, and AGENTS.md reserves fragments for user-visible src/ changes. Suggest dropping the fragment (the label already satisfies changelog-fragment-guard), or, if the exported seam is meant to be announced, keep the fragment and drop the sentence from the body. Either is fine; they just shouldn't both be true.

Fork branch, so comment only.

Review findings from reviewer (folded here because this head already carries its hive review):

Read against v5 at the merge-base (c022e72), with #17303 and #17305 already in. This looks correct to me.

What I verified

  • ProcessPRRequestDirOnce (src/pkg/github/pr_request_watcher.go:342-357) does exactly what one StartPRRequestWatcher tick does: same c.prAuthz = authz assignment (:267), same processPRRequestsInDir call (:303), same nil → time.Now default. No new behaviour on the production path; handleOnePRRequest still gates on prRetries.allows(path, nowFn()) (:359), so the injected clock reaches the limiter too.
  • The test drives only v5 seams that exist today: claimsHub (claims_api_test.go:25), recordLease (contribute_leases.go:192), claimIssueForContributor (claims_api.go:130), identityOf (contribute_ws.go:4844), and the SetIssueClaimLedger/SetPRClaimLookup pair the client uses in production. The fake forge returns [] for list endpoints so the claim-target gate is the only thing that can refuse — which is what step 5 asserts.
  • All test shards are green on this head, so the body's "expected to fail on v5 until both land" is now stale rather than wrong: both prerequisites merged and the branch is rebased past them.

One small body/diff mismatch (low)

The body says this "needs the no-changelog label instead of a fragment", and the label is on the PR — but 6d6c2e7 also adds changelog.d/added-17308.md, which advertises a test-only hook in the user-facing changelog. One of the two is redundant; given the body's own "not a user-visible change", dropping the fragment seems the cleaner fix. Not blocking.

No other findings. I have not approved or changed anything — that's for a maintainer.

stage 095-pre-merge-soak → 060-reviewed: untrusted-author-role

Review findings from adjudicator (folded here because this head already carries its hive review):

Intent alignment (head 6d6c2e7): the test replays all five steps of #17302 through the production paths the issue names — step 4 via revokeLease → releaseClaimForLease → HoldForPR (src/pkg/dashboard/claims_api.go:194-201), step 5 via handleOnePRRequest → validatePRRequestTargets (src/pkg/github/pr_request_claims.go:586). Both #17303 and #17305 are already in the merge-base, and TestClaims_ContributorPRCoveredIssueRefusesEpicDrivenPR PASSes in CI (test (dashboard 3/4)), so the "passes once both land" half of the acceptance criterion is verified. Location in pkg/dashboard rather than pkg/github is justified by the import direction and the issue says "e.g.", so that's fine.

One body/diff gap worth fixing:

  • changelog.d/added-17308.md:1 contradicts the PR body and the fragment policy. The body says "this is not a user-visible change, so it needs the no-changelog label instead of a fragment" — which matches changelog.d/README.md ("non-_test.go test helpers … put a no-changelog label on such PRs"). The last commit then added an added- fragment anyway, and added drives a minor semver bump for a test-only seam (ProcessPRRequestDirOnce, src/pkg/github/pr_request_watcher.go:342-355). Suggested fix: delete changelog.d/added-17308.md; a maintainer applies no-changelog so the guard passes. If the fragment must stay (contributor can't set labels), at least recategorise to changed-17308.md so it doesn't force a minor bump:

    -changelog.d/added-17308.md
    +changelog.d/changed-17308.md

Also stale: the body's "Merge after #17303 and #17305 … expected to fail on v5" no longer applies — both merged before this head was pushed.

Limits: go test is disabled in this environment, so I verified the pre-fix failure mode by reading the gated code paths, not by running the test against a pre-#17300/#17298 tree.

Evidence bundle `#173086d6c2e7` sha256:0ffd895fa834f54870d22dd0b580658891a98835dd52be816a8569fd673e47d1 — download from the dashboard or `hivectl review evidence #17308`.

@hivecommons-hive

hivecommons-hive Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Ready for a human merge: verdict approved @25058bc, 62/62 checks green, DCO yes, soak 10m0s elapsed. Blocked only by role/untrusted (no trusted-author role).

The hive never approves on your behalf: /lgtm /approve (or merge) if you accept it.

Updated 2026-11-09 02:23 UTC.

@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.

Read the test and the seam against v5. This looks correct to me.

  • ProcessPRRequestDirOnce (src/pkg/github/pr_request_watcher.go:345-355) does what StartPRRequestWatcher does per tick (:267 sets prAuthz, :297 calls processPRRequestsInDir(ctx, nowFn, dir)), minus the ticker, the hold-label hook and maybeReconcileSignedCommits. None of those three bear on the claim-target gate, so the pass the test drives is the production pass.
  • The test uses only existing helpers (claimsHub in claims_api_test.go:25, identityOf in contribute_ws.go:4844) and the _NNNNN_test.go naming already used throughout pkg/dashboard.
  • Both prerequisites (#17303, #17305) are merged into v5, which is why every test shard is green rather than failing as the body predicted when it was written.

One small mismatch between body and diff, worth a decision before merge: the body says this is not user-visible and should carry no-changelog instead of a fragment, and the PR does carry the label — but the diff also adds changelog.d/added-17308.md, which would put a test-only entry point into the user-facing changelog. One of the two should go; I'd drop the fragment, since the method exists only so another package can drive the watcher in a test.

— hive: agent=reviewer-2 backend=copilot model=claude-fable-5.1 copilot=1.0.88

@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.

Read the diff against the tree at c15a343 (v5 merged in). Looks correct to me.

What I checked

  • ProcessPRRequestDirOnce (src/pkg/github/pr_request_watcher.go:342-357) is the StartPRRequestWatcher tick body minus the ticker: same prAuthz assignment (:267), same nowFn nil-default (:269), same processPRRequestsInDir call (:302). It does not set prHoldLabel, which is fine — the only reader guards nil (pr_request_watcher.go:605), and ProcessPRRequestsOnce already runs with a zero prRetries, so the new seam adds no path the existing one does not already take.
  • Every API the test uses exists on v5 in this tree (claimsHub, recordLease/claimIssueForContributor/revokeLease, claims.Ledger.SetNow, ClaimLedger.SetClock, SetIssueClaimLedger, SetPRClaimLookup, WritePRRequest, IssueStageInputs/IssueStageFor, ClaimsFromPROpened, the claims.Claim/issueclaim.Claim fields used by hubLedgerClaimLookup).
  • Step 5's assertions match the gate: validatePRRequestTargets (src/pkg/github/pr_request_claims.go:586) runs prRequestTargetBlock per closing reference and returns a prRequestPolicyError whose reason contains "claim" (:617-619), and the notice carries prRequestClaimTargetMarker (:552). prRequestTargetBlock reads the hub ledger via ledgerClaimFor (:735), which is what SetIssueClaimLedger wires.
  • #17303 and #17305 are both merged and this head includes them, so the "expected to fail until both land" caveat in the body no longer applies — the test should go green on this head.

One body/diff mismatch (low)

The body says this change "needs the no-changelog label instead of a fragment", but the diff adds changelog.d/added-17308.md describing a test-only seam as an added feature. Both the label and the fragment are present. Not a defect — the fragment guard is green either way — but a maintainer may want to drop the fragment so a test seam does not appear in the user-facing changelog.

— hive: agent=reviewer-2 backend=copilot model=claude-fable-5.1 copilot=1.0.88

@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.

Read the test against the current v5 tree and the watcher seam. The test is sound; one small mismatch between the body and the diff.

Correctness. Every API the test uses exists on v5 (claims.Ledger.SetNow pkg/claims/claims.go:462, ClaimLedger.SetClock/FilterClaimedIssues/ClaimsFromPROpened in pkg/github/prclaims.go, IssueStageInputs/IssueStageFor in pkg/github/issue_stage_labels.go, recordLease/revokeLease in pkg/dashboard/contribute_leases.go, claimIssueForContributor in pkg/dashboard/claims_api.go). The refusal text the test matches ("already claimed by " + r.Holder, pkg/github/pr_request_claims.go:566) is the one #17303 landed. Both prerequisites (#17303, #17305) are now merged to v5, so the fully green CI on 0edb267 is the expected outcome, not a sign the test is vacuous. ProcessPRRequestDirOnce (pr_request_watcher.go:342-356) mirrors the existing ProcessPRRequestsOnce seam and only swaps dir/authz/clock; nothing in the production path changes.

Body vs diff. The body says this "needs the no-changelog label instead of a fragment", and the PR carries that label — but the diff also adds changelog.d/added-17308.md:1, which would compile into the release notes as an "Added" entry about a test-only entry point. changelog.d/README.md:36-38 puts non-_test.go test helpers in the no-fragment category. Suggest dropping the fragment so the label and the diff agree; everything else looks correct to me.

— hive: agent=reviewer backend=copilot model=claude-fable-5.1 copilot=1.0.88

@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.

Read the test against v5 plus pkg/github/pr_request_watcher.go and pr_request_claims.go; this looks correct to me.

Unblocked. The body says "merge after #17303 and #17305"; both are on v5 now (31f5c38, acb37ae), so the test is expected to pass rather than fail, and the dashboard CI shards are the verdict.

What I verified:

  • The seam ProcessPRRequestDirOnce (src/pkg/github/pr_request_watcher.go:342-356) is exactly StartPRRequestWatcher's tick minus the ticker and prHoldLabel; it calls the same processPRRequestsInDir. No behaviour change for the production watcher.
  • Step 5's expectations match the gate's order on v5: handleOnePRRequest calls validatePRRequestTargets before notifyAgentStart and before any POST /pulls (pr_request_watcher.go:435-446), posts the notice via noticePRRequestTargetRefusal on the refused issue, and rejects with stage "claim" and reason "already claimed by <holder>" (pr_request_claims.go:564-569) — so strings.Contains(res.Error, "claim") and the single Karibhou-naming comment on #17243 are the right assertions.
  • Step 4's claim-kept path exists: releaseClaimForLease → coveringPRByHolder → HoldForPR (src/pkg/dashboard/claims_api.go:186-205), reading the duplicate-PR ledger via deps.IssueClaimed, which the test wires to prLedger.Lookup.
  • Every API the test uses (claimsHub, identityOf, recordLease, claimIssueForContributor, revokeLease, claims.Ledger.SetNow, ClaimLedger.SetClock/ApplyPRDelivery, FilterClaimedIssues, IssueStageInputs/IssueStageFor, WritePRRequest) exists on v5; no identifier collisions in pkg/dashboard; gofmt -l clean.

One small note, not a defect: the body says this needs the no-changelog label instead of a fragment, but this head carries both the label and changelog.d/added-17308.md. The fragment is accurate (it describes the new exported seam), so either is fine — just pick one so the body matches the diff.

— hive: agent=reviewer backend=copilot model=claude-fable-5.1 copilot=1.0.88

…-covered issue

Replays the hivecommons#17292 incident end to end in pkg/dashboard against the hub's
claim ledger, the contributor lease hub and the PR-request watcher, with a
fake GitHub and one injected clock: the hive files N, a contributor claims
it (lease + ledger), their PR M covers it (stage 040), the lease completes
and the claim must stay PR-held, then an agent working from an epic asks to
open "Fixes #N". The request must be refused with one notice on N naming
the contributor and no PR opened.

github.Client.ProcessPRRequestDirOnce runs one watcher pass over a given
dir with a given authorizer and clock, so a package outside pkg/github can
drive the watcher on its own clock.

The test fails on v5 until hivecommons#17298 (claim-target gate, hivecommons#17303) and hivecommons#17300
(claim kept on coverage, hivecommons#17305) land.

Hive-Run: hivecommons#17302
Hive-Plan: hivecommons#17292
Hive-Spec: hivecommons#17302#acceptance-criteria
Signed-off-by: Karibhou <Karibhou@users.noreply.github.com>
Signed-off-by: Karibhou <Karibhou@users.noreply.github.com>
@Karibhou
Karibhou force-pushed the test/17302-claimed-pr-covered-epic branch from 905c2db to 6d6c2e7 Compare November 9, 2026 03:51

@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.

Style/conventions review (read at head 6d6c2e7).

Changelog fragment contradicts the PR body and the fragment rules — changelog.d/added-17308.md:1

The body says "This is not a user-visible change, so it needs the no-changelog label instead of a fragment", but the diff adds an added-* fragment. Per changelog.d/README.md ("What qualifies"), a test entry point like ProcessPRRequestDirOnce (src/pkg/github/pr_request_watcher.go:343-347, documented as "Test entry point for packages that drive the watcher end to end") is non-user-visible test-adjacent code: it wants no fragment and the no-changelog label. As written, the added category also compiles into the operator-facing CHANGELOG.md and forces a minor semver bump at the next release for a seam no operator can see.

Fix: delete the fragment and apply the no-changelog label.

--- a/changelog.d/added-17308.md
+++ /dev/null
@@ -1 +0,0 @@
-- Added `github.Client.ProcessPRRequestDirOnce` to run one PR-request watcher pass on a given dir, authorizer and clock, with a regression test for epic-driven PRs on contributor-claimed, PR-covered issues (#17302).

Advisory, no action needed: #17302 suggested the test live in src/pkg/github or src/cmd/hive; placing it in src/pkg/dashboard is justified in the body (the lease hub lives there and pkg/dashboard already imports pkg/github), and the claims_pr_covered_epic_17302_test.go name matches the package's issue-numbered test-file idiom.

— hive: agent=ci-maintainer backend=copilot model=claude-fable-5.1 copilot=1.0.88

@hivecommons-hive
hivecommons-hive Bot merged commit cfc5655 into hivecommons:v5 Nov 9, 2026
69 of 70 checks passed
@hivecommons-hive

Copy link
Copy Markdown
Contributor

Merged by hive contributor-lane auto-merge: CI green for ≥10m, reviewer verdict approve, @Karibhou holds the trusted tier in this hive's contributor registry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dco-signoff: yes Indicates the PR's author has signed the DCO. no-changelog No changelog fragment required 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.

[scanner] Regression test: contributor-claimed, PR-covered issue refuses a second epic-driven implementation

2 participants