Repository navigation
Run the issue a session Step published - #1427
Merged
Merged
Conversation
catalogue = "run-published-issue" starts a Ticket run, or a Spec run up to spec.parallel, on the issue that session's final message names. The child run is recorded under the Process, and a failed check starts none.
Command, Command log, Activity log and Run notification now include the Process a Command keeps. The README names the catalogue Step, and the process tests pass the publish script directly.
This was referenced Oct 27, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
checkandrunrefuse the Step when it is not directly after a session Step, including when it shares that Step'sparallelgroup. A failed check names the reason and starts no run.Evidence
cataloguewas an unknown key, so a process file that namedrun-published-issuefailed to parse and started no session.After:
cargo test --test processcovers the new refusals, the check failures, a Ticket run, a failed child, and a Spec run withspec.parallel = 1.scripts/affected-tests issue-877rannpm test --prefix site(50 passed) and selected the full Rust suite.cargo nextest runthen passed 3171 tests, 70 skipped, in 1789s real time, compilation warm. One earlier full run stopped ondismiss_live_landing_row_moves_it_to_landingwhile the machine was loaded; that test passed twice on its own, and the suite above includes it passing.Merge Danger
Door: two-way
Dropping the catalogue Step leaves skill and command Steps as they are. A process file that already names
cataloguewould then fail to parse.Blast Radius: Custom processes
Only a process that names
run-published-issuestarts a child run. Other commands are unchanged.Seam
CLI tests in
tests/process.rs, through Scenario and the fake Claude andgh.Unaddressed findings
Security
None. Security review of this change (guidance mode, attack classes: injection, access control, business logic) found no introduced finding provable with a failing proof-of-concept test, so no fix was committed: the catalogue value is a fixed string; the issue URL is strictly parsed and bound to this repository's origin; dispatch further requires the issue to be open, by a Trusted account, and created since the session Step began; and the child run re-enforces origin, open state, and no-untrusted-edit-since-start.
Standards
Duplicated path-component checks. The three predicates reject different characters, so one shared check would change which names are accepted.
process_name(src/args.rs:912) rejects an empty name,.,..,/,\, and\0.single_component(src/processes.rs:1440) also rejects\nand\r, because a worktree name is a path component.usable_home_skill_name(src/skills.rs:191) rejects every control character,/, and\, because a home skill name is linked into a worktree.Duplicated Step-key parsers and a
(String, usize)clump.step_skill(src/processes.rs:1396) and the otherstep_*helpers each report that key's own line in the parse error.step_cataloguefollows the same shape so a bad catalogue value names its line. The pair is the value plus the line the error needs, andStepDraftalready stores the resolved fields after parsing.starts_with_duration(src/logs/status/inspect.rs:120) repeats the three formatsprogress::durationwrites (src/progress.rs:29):{h}h {m}m {s}s,{m}m {s}s, and{s}s.showsplits a Step line whose name may contain spaces and colons. The parser has the printed text, anddurationformats aDuration, so the two functions meet at that text.Two
showtests and two Activity-log readers.show_prints_the_result_path_when_the_step_name_has_a_space(tests/process.rs:3124) is the space case.show_prints_the_result_path_when_the_step_name_has_a_space_or_a_colon(tests/process.rs:3193) adds the colon case.activity(tests/process.rs:2294) usesunwrap_or_default, so a missing log is empty.activity_log(tests/process.rs:2611) unwraps, so a missing log fails the test.The check-and-run loops in
check_and_run_refuse_a_broken_file_without_a_session(tests/process.rs:100),parallel_steps_that_share_a_worktree_or_name_an_unknown_one_are_refused(tests/process.rs:1299), andrun_published_issue_must_directly_follow_a_session_step(tests/process.rs:3233) each carry a different case list. Each loop is what shows thatprocess checkandprocess runboth refuse.Repeated stop and landing helpers.
stop_interrupts_a_running_command_step(tests/process.rs:861),stop_interrupts_a_running_process(tests/process.rs:915), andstatus_lists_a_running_process_by_name_until_it_is_interrupted(tests/process.rs:2728) each drive a live Process tostop.process_command(tests/process.rs:2588) is the later lookup; the earlier tests already name the row they stop.agent_opens_pr(tests/process.rs:2251) andagent_lands_ticket(tests/process.rs:3522) both commit and open a pull request, and the second takes the base branch the child run was given.family_sessions(tests/process.rs:2504) and the wait inthe_same_parallel_name_after_another_step_is_a_new_group(tests/process.rs:1639) wait on a sibling file for different groups.Finding 1 (glossary) and finding 8 (
publishes) are addressed in147048d7.Spec
None.
Security review outcome
No unaddressed introduced findings.
Review coverage
The review fixed point was local
issue-877at7f9adb3e. No changed file in that diff was left unread.site/docs/index.htmlis generated and was excluded: the source isdocs/guide.md,cd site && npm ci && npm run docsexited 0, and both reviewers confirmed the page repeats the guide's catalogue Step sentences. GitHub'sissue-877isc35eeb81, so this pull request is the catalogue Step and the glossary follow-up.Closes #1389
Built with grok grok 1.0.70 (f50904eaee6c) [stable] · default model · default effort