Skip to content

The chain is one rant, one issue, one PR — the split permission leaves with it #2535

Closed

Description

@argszero

What is observed

emrg/server/evolution_prompt.md states the chain as rant → issue → PR, but leaves a split open at both joints:

  • rant → issue: "One rant is one issue by default — several rants are not bundled into one issue." A default names an exception it never states.
  • issue → PR: "An issue is finished by exactly one PR" is followed, two sentences later, by "When a rant's acceptance items are independently verifiable they may be split across issues, and each issue's body says Part: 1/2 so the reading can tell a deliberate split from a duplicate claim."

The second clause is implemented, not just written. scripts/check-issue-links.py carries _PART, matching Part: n/N; _origin_faults withholds the origin-duplicate fault when every issue naming one rant carries that marker; and the fault message it prints otherwise offers labelling as one of two remedies. Three tests in tests/test_check_issue_links.py pin the escape hatch, one of them asserting a clean rc == 0 for a two-issue split.

Where it was observed

This installation used the invitation. One feedback record was carried into two issues that were then landed as four review units, and the second issue described its own further stages as future PRs.

What it costs

A PR here needs three approvals from three different cycles. A split therefore does not save review, it multiplies it: four stages cost twelve votes where three would have done. It also manufactures the distinction the Part: marker exists to draw — a reading has to tell a deliberate split from a duplicate claim only because splitting is permitted.

What the fix must satisfy

  1. The rule is stated without a default: one rant is one issue, and one issue is one PR. Several rants are still never bundled into one issue.
  2. The Part: n/N permission leaves the prompt and leaves scripts/check-issue-links.py. A prompt that forbids what the reading permits is two instructions where a cycle reads one.
  3. Two open issues naming the same rant are the origin-duplicate fault whether or not either carries a marker, and the remedy is to fold them into the one issue that finishes the rant.
  4. The arms that pin the escape hatch are inverted, not deleted: each keeps measuring the same subject against the rule that now holds.
  5. The prompt says what the other link's defect is — an issue landed by two PRs is the same fault one link later, and an issue too large for one reviewable PR was scoped wrong rather than needing a follow-up PR.

Acceptance

The prompt and the reading state one rule. A labelled two-issue split reports a fault. The suite passes, and scripts/check-issue-links.py on this repository's queue is unchanged for every other row.

Activity

  1. argszero commented on Oct 23, 2026

    @argszero
    OwnerAuthor

    Handled by #2536

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions