Skip to content

Run the issue a session Step published - #1427

Merged
JacobStephens2 merged 2 commits into
issue-877from
issue-1389
Oct 27, 2026
Merged

JacobStephens2 merged 2 commits into
issue-877from
issue-1389

Conversation

@JacobStephens2

@JacobStephens2 JacobStephens2 commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner

Summary

run-published-issue
  read the session Step before it
  take the last non-blank line of its final message as the issue URL
  check this repository, then that the issue is open, by a Trusted account,
    and created since that session Step began
  start a Ticket run, or a Spec run whose Tickets run up to spec.parallel
  the child's outcome is the Step's outcome
  record the child on this Process's Command

check and run refuse the Step when it is not directly after a session Step, including when it shares that Step's parallel group. A failed check names the reason and starts no run.

Evidence

  • Before: catalogue was an unknown key, so a process file that named run-published-issue failed to parse and started no session.
    After: cargo test --test process covers the new refusals, the check failures, a Ticket run, a failed child, and a Spec run with spec.parallel = 1. scripts/affected-tests issue-877 ran npm test --prefix site (50 passed) and selected the full Rust suite. cargo nextest run then passed 3171 tests, 70 skipped, in 1789s real time, compilation warm. One earlier full run stopped on dismiss_live_landing_row_moves_it_to_landing while 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 catalogue would then fail to parse.

Blast Radius: Custom processes

Only a process that names run-published-issue starts a child run. Other commands are unchanged.

Seam

CLI tests in tests/process.rs, through Scenario and the fake Claude and gh.

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

  1. 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 \n and \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.

  2. Duplicated Step-key parsers and a (String, usize) clump. step_skill (src/processes.rs:1396) and the other step_* helpers each report that key's own line in the parse error. step_catalogue follows the same shape so a bad catalogue value names its line. The pair is the value plus the line the error needs, and StepDraft already stores the resolved fields after parsing.

  3. starts_with_duration (src/logs/status/inspect.rs:120) repeats the three formats progress::duration writes (src/progress.rs:29): {h}h {m}m {s}s, {m}m {s}s, and {s}s. show splits a Step line whose name may contain spaces and colons. The parser has the printed text, and duration formats a Duration, so the two functions meet at that text.

  4. Two show tests 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) uses unwrap_or_default, so a missing log is empty. activity_log (tests/process.rs:2611) unwraps, so a missing log fails the test.

  5. 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), and run_published_issue_must_directly_follow_a_session_step (tests/process.rs:3233) each carry a different case list. Each loop is what shows that process check and process run both refuse.

  6. Repeated stop and landing helpers. stop_interrupts_a_running_command_step (tests/process.rs:861), stop_interrupts_a_running_process (tests/process.rs:915), and status_lists_a_running_process_by_name_until_it_is_interrupted (tests/process.rs:2728) each drive a live Process to stop. 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) and agent_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 in the_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 in 147048d7.

Spec

None.

Security review outcome

No unaddressed introduced findings.

Review coverage

The review fixed point was local issue-877 at 7f9adb3e. No changed file in that diff was left unread. site/docs/index.html is generated and was excluded: the source is docs/guide.md, cd site && npm ci && npm run docs exited 0, and both reviewers confirmed the page repeats the guide's catalogue Step sentences. GitHub's issue-877 is c35eeb81, 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

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.
@JacobStephens2
JacobStephens2 merged commit dc48889 into issue-877 Oct 27, 2026
18 checks passed
@JacobStephens2
JacobStephens2 deleted the issue-1389 branch October 27, 2026 04:47
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