Skip to content

Exploration: the issue's moves the world makes, and the world held to the exploration both ways (#228, #202) - #248

Merged
don-petry merged 2 commits into
mainfrom
tests/issue-exploration
Oct 21, 2026
Merged

don-petry merged 2 commits into
mainfrom
tests/issue-exploration

Conversation

@don-petry

@don-petry don-petry commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Closes #228. Closes #202. By the working rulings on both (comments of 2026-10-20).

What. The exploration of every change the issue Kernel can make (tests/test_transitions.py) gains the moves the world makes and it lacked: a person closes the issue, adds and removes factory:hands-off, converts the linked pull request back to a draft, merges it with an empty diff, opens a draft or a ready pull request of their own; the Factory's author App marks its draft ready; the queue merges the Factory's ready pull request while the issue is in review (the Maintainer's ruling on #227). It gains #202's base: a writer's issue one act short, carrying a factory:ready the readiness App added with no Run that judged it, from which the Controller's removal is the last act and new → held by the Factory follows at the act ceiling.

Held both ways. tests/test_issue_simulator.py drops UNEXPLORED: every change the world makes on its seeds is one the exploration finds (made ⊆ explored), and the nine the exploration finds that the world never makes are named as UNMADE with why; on the full 300 seeds the two sets are held equal, on fewer seeds the named rows must still be unmade. tests/test_transitions.py names, as ISSUE_UNREACHED, the seven rows lifecycle/issue.json declares that the exploration does not reach, with why each is kept, and holds the set exactly, as the pull request's UNREACHED is held. The exploration is computed once a process (issue_explored()), and the simulator's test shares it.

The exploration's time. Full depth 4 with the new moves: 22 seconds on this machine (the bare exploration; 32 with the old per-item wrapper, now gone), against the ruling's thirty. The split the ruling names (the Kernel's moves to depth 4, a person's one deep) runs in 8 to 18 seconds and misses two changes only four mixed steps reach (in_progress → triage by the Factory, ready → held by the Factory), so the full exploration is kept; a cheaper exploration that still finds those two is a story of its own if CI's runners make this one slow.

The world. One change to sim/issues.py: a person no longer merges a draft pull request, which GitHub refuses (a_draft_is_not_merged, listed in sim/grounding.py, asked by no trial). With it the world no longer makes in_progress → done by a person, which it had made only through that merge; the row stays declared and is named in ISSUE_UNREACHED as one a person's own ready pull request beside the Factory's draft would make, were the Kernel not to hold two links first.

#202. The base is explored and yields new → held by the Factory, (label_not_counted → act_ceiling). The row's bound stays null, as every → held by the Factory is declared: only a person leaves held, so no bound on the way in is what terminates (tools/check_lifecycle.py).

Record. No new decision. A row on decision 0028; sim/AGENTS.md's row on the issue world's changes names the exploration.

Reviews, one fix round on 31277ad: fresh-context Claude review and security pass, Muse (a change to sim/ tests). No AGY: nothing in kernel/. Taken: the reopen move was dead, since a closed issue is a dead end of the exploration and a writer's reopening is a new life, not a transition (Claude, Muse); the UNMADE check was one inclusion, now equality on the full seeds (Claude, Muse, security); three UNMADE reasons said what the seeds do not (Claude); the world's draft rule was unmarked and unlisted (security); seven declared rows nothing reaches were named by nothing (Claude, security); the exploration was computed twice and paid a key per item in the test's wrapper (Claude); queue_merges was defined a second time, which the repo check refuses in an export. Not taken: the split exploration, for the two changes it misses, said above.

🤖 Generated with Claude Code

View guided diff Turn on auto-fix

don-petry and others added 2 commits October 20, 2026 19:01
… the exploration both ways (#228, #202)

tests/test_transitions.py gains a person's close and reopening, hands-off, the draft converted back, the empty merge, a person's own pull request, the author App marking its draft ready and the queue's merge, and the act-ceiling base of issue 202. The exploration finds every change the issue world makes on 300 seeds; the nine it finds that the world never makes are named with why, and UNEXPLORED goes. The world no longer lets a person merge a draft, which GitHub refuses.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…omputed once, and the review's findings taken

The reopen move was dead (a closed issue is a dead end; a writer's reopening is a new life): gone. The exploration is computed once a process and the simulator's test shares it. The seven rows the issue Lifecycle declares that the exploration does not reach are named with why, as the pull request's UNREACHED are. The UNMADE rows are held equal on the full seeds and the reasons say what the seeds do. The world's rule that a draft is not merged is marked and listed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@don-petry
don-petry requested a review from a team as a code owner October 21, 2026 00:29
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

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

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-10-21T00:29:14.739470Z
We couldn’t complete this review. Comment @codex review to try again.
fae6fe6 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.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 47 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: combsmith/software-factory/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c2047a40-32d5-4d69-bae6-d1801e1e9440
📥 Commits

Reviewing files that changed from the base of the PR and between 90bfb13 and fae6fe6.

📒 Files selected for processing: 6
  • docs/decisions/0028-an-issues-state-is-derived-in-a-module-of-its-own.md
  • sim/AGENTS.md
  • sim/grounding.py
  • sim/issues.py
  • tests/test_issue_simulator.py
  • tests/test_transitions.py
  • 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

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

Copy link
Copy Markdown

@don-petry
don-petry added this pull request to the merge queue Oct 21, 2026
Merged via the queue into main with commit d49c1e8 Oct 21, 2026
19 checks passed
@don-petry
don-petry deleted the tests/issue-exploration branch October 21, 2026 00:56
don-petry added a commit that referenced this pull request Oct 21, 2026
… carry it

The merge queue found it: #248 landed the explorer's move "a person closes
the issue", which set the state and nothing more, so with the first close of
the life among the facts the Kernel read the close as unreadable and no
transition to declined was reached, on the merge group alone. The move now
gives the close its time.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant