Skip to content

Two pull requests linked by hand before an issue's merge leave it held, and its type changes are read whole (#551) - #669

Open
don-petry wants to merge 10 commits into
mainfrom
kernel/link-times-542
Open

don-petry wants to merge 10 commits into
mainfrom
kernel/link-times-542

Conversation

@don-petry

@don-petry don-petry commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Part of #551, "Trial P-61: an issue's type changes and a pull request linked by hand, each timed on the issue's timeline". Part of the slice-1 epic #182.

Grounding pending P-61. The canary trial is set up: issue #99 with no type, and pull request #98, ready, naming no issue. It waits on the Maintainer's run. When trials/P-61.json arrives, a follow-on change records it and grounds the two rules this PR adds to sim/grounding.py, or reports a failure. Nothing here depends on the trial's details beyond the event kinds and that each has a time.

What changes

Part Change
schemas/issue-facts.schema.json Each linked pull request gains link_events: [{action: connected|disconnected, at}], its links to the issue by hand in the Development box. The issue gains type_events: [{from, to, at}], its type set, changed and removed. Both are required and additive, as draft_events was (#553). Every example is updated
kernel/issue.py readable_link_events: links alternate, the first is a link, none comes before the pull request opened, and they are in order. Two in one second are read. A closing keyword's link raises no event, and is read as carrying no time. readable_type_events: each change follows from the last, and the last leaves the type as it is now. Either one unreadable defers, as linked_unreadable or type_unreadable
Row 1 Two pull requests linked by hand before the first merge's second, neither closed before it, keep the issue held, merged_while_held, naming the two. This holds whichever was linked first, and when two queue merges land in one second. A rival linked in the merge's second, with no time (a keyword's), after the merge, unlinked before it, or closed before it, leaves the merge done. The merge's own link made in its second does too. That is decision 0132's same second, narrowed as the Factory Builder ruled on 2026-11-09
Type at the merge Carried, but not read, while the Consumer entry has no history: ruling (b) on #541, carried by #552
tests/test_transitions.py New moves: a person links the Factory's pull request by hand, and opens one of their own linked by hand. The queue merges from held by two hand links. The exploration reaches held by two links, and no change of State by the platform leaves held
sim/issues.py, sim/grounding.py The world gives empty link_events and type_events, marked with two new rules that wait on P-61: a_link_by_hand_is_timed and a_type_change_is_timed
Design §4.1 row 1 States the two-links rule and what still carries no time

The boundary cases, each with its mutant, are what the Factory Builder asked for:

  • two timed links before the merge, held;
  • a rival in the same second, done;
  • an untimed rival, done;
  • one timed link after a rival's, held.

0132's own fixture, the Factory's merge beside an admitted outsider's in its second, still passes. There are 31 new mutants under "Issue 551", and 6 existing ones repointed to changed lines, all killed.

Record NNNN, number to be given at enqueue, after 0173. It replaces 0141, and keeps all of it but what 0141 said carries no time of a link by hand and a type. It amends decision 0132's row "What stays". 0141's Status now names it. Its Boundaries list only its own new rows; 0141's stay as 0141 lists them.

Protected paths: sim/issues.py, sim/grounding.py and tests/test_issue_simulator.py. Pre-approved by the Maintainer 2026-11-08, ruled by the Factory Builder. These edits only add the empty facts, their grounding marks, and the two pending rules.

Verify

Numbered make verify on an export of 98db6e1, with 0172 standing in: 1718 tests, with two failures, both from a boundary row naming trials/P-61.json as a wait, which is no planned part. 19ef9fb drops that row; the Decision says what waits. A full verify runs again at enqueue, after main is merged.

Reviews

Read State
Claude + security First read (19ef9fb): one blocking finding, a late admission moving done to held, plus no release, duplicates and a no-op type change. All fixed in round 1 (0d646aa). Round 1's read: one blocking finding, linking again after an unlinking cycling done. Fixed in round 2 (ec28e25), and the unlinker named as not read until P-61. Round 2's read: no regression; a rival's reopening, read as it stands now, is #672's and named in the record
Argon First read: one minor point, the exploration's assertion; its merge from held is shown by a mutant instead. Round 1's read: record wording, fixed. Round 2's read: one mutant missing at the merge's second, added and killed
Muse First read: its blocking finding was NNNN; it also found no release (fixed in round 1), a no-op type change (fixed) and a hands-off beside two links not excused (fixed in round 1)
Astra not run
Codex automatic

🤖 Generated with Claude Code

don-petry and others added 2 commits November 8, 2026 21:38
…d, and its type changes are read whole (#551)

issue-facts/1 gains each linked pull request's link_events and the issue's type_events, each read whole or deferring.
Row 1 reads two links by hand before the first merge's second as held, merged_while_held; one in that second or with no
time reads as before, so decision 0132's same second stands for it. The grounding waits on trial P-61, which the
Maintainer runs in the canary. Record NNNN replaces 0141 and amends 0132's row "What stays".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…art; its Decision says what waits

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@don-petry
don-petry requested a review from a team as a code owner November 9, 2026 04:43
@coderabbitai

coderabbitai Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@chatgpt-codex-connector

Copy link
Copy Markdown
Codex Review Summary: ❌ Failed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ❌ Failed 2026-11-09T04:43:50.251379Z
We couldn’t complete this review. Comment @codex review to try again.
19ef9fb PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

don-petry and others added 8 commits November 8, 2026 22:54
…inking since releases it, a pull request listed twice defers

The Claude read of 19ef9fb found an admission after the merge moving a done issue to held, and no person's act ending
the hold. An outsider's pull request now counts only where a person had admitted it by the merge; one a person unlinked
since lets the merge read on. A pull request listed twice defers, and a type change that changes nothing is refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…as linked again after it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, as it excuses a Hold (the Muse read)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…or good, as a Hold's removal does

The Claude read of round 1 found a link made again after an unlinking moving a done issue back to held, with no bound.
Any unlinking at or after the merge now ends the hold for good. The record and design say plainly that link events
carry no actor, so who unlinked is not read until trial P-61 shows who can: an open gap, tracked by the trial.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…its Status named (the Argon read)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e 672; one more mutant at the merge's second

The last round's reads: Claude found a rival's close read as it stands now, and Argon a boundary of the unlinking with
no mutant. The first is issue 672's, named in the record; the second has its mutant, killed. The design row says the
hold stands until fewer than two links do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e issue's facts now hold

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Nov 9, 2026

Copy link
Copy Markdown

This branch has not been deployed

No deployments
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