Skip to content

Hamsterdan CV3 retry: seeded-review-finding - #26

Closed
henriquebastos wants to merge 1 commit into
mainfrom
hamsterdan/cv3-retry-seeded-review-finding-20260802002001
Closed

henriquebastos wants to merge 1 commit into
mainfrom
hamsterdan/cv3-retry-seeded-review-finding-20260802002001

Conversation

@henriquebastos

Copy link
Copy Markdown
Contributor

Expected deterministic outcome: CI passes, while review identifies the seeded semantic finding ready-for-release-ignores-mergeable in the admitted fixture.

Do not merge automatically.

@hamster-dan

hamster-dan Bot commented Aug 2, 2026 •

Copy link
Copy Markdown

Hamsterdan PR readiness dashboard

Generation: 1 · Head: dc80e0e01ee2c84410ade6500802d2baea15b4c8

Actions: green, attempt 1 (flaky=False) · run 30725049489

Coordinating agent review: blocking

Findings / lineage

  • correctness-001 still_open — Release readiness ignores mergeability (detail)

Human approved: True · Review requested: False · Required approvals: 0 · Distinct approval: False

Base policy: strict / update required · Observed base: a7b406e6c57d042021f687e63e184c639b8df7aa · Base current: False

Mergeable: True · Conflict: False · Unresolved conversations: 2

Mutation pending: False · Provisional: False

Capabilities: Actions blocking=False; human blocking=False; dashboard blocking=False; conversation reply blocking=False; finding publication blocking=False; readiness publication blocking=False

Readiness: not ready · Waiting for: finding disposition or change

Advisory only; humans keep merge authority. I keep the dashboard current, not the merge button.

@hamster-dan

hamster-dan Bot commented Aug 2, 2026

Copy link
Copy Markdown

Release readiness ignores mergeability

The readiness predicate returns true for an otherwise-ready pull request even when mergeable is false. This bypasses a release gate represented by the function's own input and can mark a conflicted or otherwise unmergeable change ready for release.

Generation: 1 · Head: dc80e0e01ee2c84410ade6500802d2baea15b4c8

Evidence: ready_for_release(False, 1, True, False) evaluates to True because line 3 checks draft status, approvals, and checks but never checks the mergeable argument.

Lineage: {"finding_id": "correctness-001", "state": "new", "supersedes": null}
Location: scenario-fixtures/seeded_review_finding.py:3

@@ -0,0 +1,3 @@
def ready_for_release(draft: bool, approvals: int, checks_green: bool, mergeable: bool) -> bool:
"""Latent defect: mergeability is accepted but accidentally ignored."""
return not draft and approvals > 0 and checks_green

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Release readiness ignores mergeability

Blocking: the readiness predicate still returns true for an otherwise-ready pull request when mergeable is false. Include mergeable in the conjunction and add a negative test for that case; this gate has one seed loose in the machinery.

Generation: 1 · Head: dc80e0e01ee2c84410ade6500802d2baea15b4c8

Evidence: ready_for_release(False, 1, True, False) evaluates to True because line 3 checks draft status, approvals, and checks but never checks the mergeable argument.

Lineage: {"finding_id": "correctness-001", "state": "still_open", "supersedes": null}

Primary location: scenario-fixtures/seeded_review_finding.py:3

Suggested change
return not draft and approvals > 0 and checks_green
return not draft and approvals > 0 and checks_green and mergeable

@@ -0,0 +1,3 @@
def ready_for_release(draft: bool, approvals: int, checks_green: bool, mergeable: bool) -> bool:
"""Latent defect: mergeability is accepted but accidentally ignored."""
return not draft and approvals > 0 and checks_green

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Release readiness ignores mergeability

Blocking: the readiness predicate still returns true for an otherwise-ready pull request when mergeable is false. Include mergeable in the conjunction and add a negative test for that case; this gate has one seed loose in the machinery.

Generation: 1 · Head: dc80e0e01ee2c84410ade6500802d2baea15b4c8

Evidence: ready_for_release(False, 1, True, False) evaluates to True because line 3 checks draft status, approvals, and checks but never checks the mergeable argument.

Lineage: {"finding_id": "correctness-001", "state": "still_open", "supersedes": null}

Primary location: scenario-fixtures/seeded_review_finding.py:3

Suggested change
return not draft and approvals > 0 and checks_green
return not draft and approvals > 0 and checks_green and mergeable

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant