8000 T40 — Split the daemon's exec dispatch into files by concern by minimal-foundry[bot] · Pull Request #2838 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T40 — Split the daemon's exec dispatch into files by concern - #2838

Merged
mitodrummer merged 2 commits into
mainfrom
agent/2398-split-the-daemon-s-exec-dispatch-into-files-by-c
Nov 2, 2026
Merged

mitodrummer merged 2 commits into
mainfrom
agent/2398-split-the-daemon-s-exec-dispatch-into-files-by-c

Conversation

@minimal-foundry
Copy link
Copy Markdown
Contributor

T40 — Split the daemon's exec dispatch into files by concern

slice: S2
kind: enablement
covers: none
size: M
est: 220 code, 60 tests
executor: agent
difficulty: routine
model: standard
diagnostics: none: a pure move, no behaviour
observability: none: a pure move, no signal
layers:
- exec:
- crates/minimald/src/exec.rs: traits and dispatch only
- crates/minimald/src/exec/process.rs (new): moved
- crates/minimald/src/exec/bridge.rs (new): moved
- crates/minimald/src/exec/run.rs (new): moved
- crates/minimald/src/exec/git.rs (new): moved
test: cargo nextest run -p minimald start_kill_sends_sigterm
produces: none
consumes: none
proof: Exec behaves as before, split by concern.
depends on:
- blocked by #2395

Proof

A reader of crates/minimald/src/exec.rs now finds only the Exec and Process traits, the request dispatch (handle_exec) and trace adoption. The process implementations are in exec/process.rs, the channel bridge is in exec/bridge.rs, the session run, build and check forms are in exec/run.rs, and the git pack handlers are in exec/git.rs. Exec behaviour does not change: the moved lines are identical apart from visibility, and the existing exec tests compile and run against them unchanged.

Notes from the agent: This change is a move by line range. Each new file starts with use super::*;. exec.rs re-exports the new files with glob imports (pub use process::*, pub(crate) use bridge::*), so every crate::exec::* path and the exec/tests.rs imports resolve unchanged. Items, struct fields and inherent methods that were private in exec.rs are now pub(super), so the parent and its test modules can reach them. A sorted line diff of the old file against the new files shows only the new module docs, the mod and use lines, and one rustfmt line rewrap of destroy_signal. The trace adoption helpers (exec_span, adopt_trace and the others) stay in exec.rs as part of dispatch, because the task names no file for them. clippy -p minimald --all-targets is clean. I ran only the one test line, not the whole crate suite.

Tests

line exit tail
cargo nextest run -p minimald start_kill_sends_sigterm 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-3101... Compiling paths v0.0.1 (/workbench/crates/paths) Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling client-config v0.0.1 (/wo

Verify

min task run agent-verify exited 100 under rustc 1.99.0, which the repository does not pin (1.99.1 in rust-toolchain.toml); the PR is not a draft on that alone — CI, which honours the pin, is the gate.

   0.497s] ( 278/1288) minimald box_manager::tests::guest_create_ignores_a_client_supplied_box_id_and_replies_when_no_door_answers
        PASS [   0.411s] ( 279/1288) minimald box_manager::tests::idle_session_does_not_block_unforced_shutdown
        PASS [   0.463s] ( 280/1288) minimald box_manager::tests::pending_session_activates_on_approving_verdict
        PASS [   1.189s] ( 281/1288) minimald box_manager::tests::list_returns_every_retained_record_with_state
        PASS [   0.433s] ( 282/1288) minimald box_manager::tests::project_composable_contribution_reaches_composer
        PASS [   0.406s] ( 283/1288) minimald box_manager::tests::reading_a_composition_does_not_start_the_session
        PASS [   1.897s] ( 284/1288) minimald box_manager::tests::no_automatic_reaper_runs
        PASS [   2.262s] ( 285/1288) minimald box_manager::tests::needed_packages_unions_across_sessions
        PASS [   0.450s] ( 286/1288) minimald box_manager::tests::reap_running_box_unforced_refuses
        PASS [   0.759s] ( 287/1288) minimald box_manager::tests::reap_resuming_box_refuses_and_forced_waits
        PASS [   0.054s] ( 288/1288) minimald box_manager::tests::record_carries_the_root_certificate_to_the_launch
        PASS [   0.850s] ( 289/1288) minimald box_manager::tests::rename_of_unroutable_session_leaves_other_routes_alone
        PASS [   0.906s] ( 290/1288) minimald box_manager::tests::restart_keeps_running_records_and_reaps_pending_ones
        FAIL [   2.239s] ( 291/1288) minimald box_manager::tests::reap_hands_name_to_retained_holder
  stdout ───

    running 1 test
    test box_manager::tests::reap_hands_name_to_retained_holder ... FAILED

    failures:

    failures:
        box_manager::tests::reap_hands_name_to_retained_holder

    test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 1269 filtered out; finished in 2.21s

  stderr ───

    thread 'box_manager::tests::reap_hands_name_to_retained_holder' (2495) panicked at crates/minimald/src/box_manager/tests.rs:4738:5:
    assertion `left == right` failed
      left: Some(BoxId(01a199c4-97be-733d-8e59-6d7ccd01c1dd))
     right: Some(BoxId(01a199c4-95b6-7506-a25f-faedb01bbd41))
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

  Cancelling due to test failure: 3 tests still running
        PASS [   2.749s] ( 292/1288) minimald box_manager::tests::prune_selectors_reap_and_print
        PASS [   0.490s] ( 293/1288) minimald box_manager::tests::resume_destroys_a_run_owned_box_instead_of_resuming_it
        PASS [   0.858s] ( 294/1288) minimald box_manager::tests::restart_sets_orphaned_running_record_stopped_without_signal
────────────
     Summary [ 112.989s] 294/1288 tests run: 293 passed, 1 failed, 24 skipped
        FAIL [   2.239s] ( 291/1288) minimald box_manager::tests::reap_hands_name_to_retained_holder
warning: 994/1288 tests were not run due to test failure (run with --no-fail-fast to run all tests, or run with --max-fail)
error: test run failed

Base

The base branch moved while the coder worked; it was merged in before the tests ran.

Closes #2398

exec.rs keeps the Exec and Process traits, request dispatch and trace
adoption. The process implementations move to exec/process.rs, the
channel bridge to exec/bridge.rs, the session run, build and check
forms to exec/run.rs, and the git pack handlers to exec/git.rs.

A pure move: items private to exec.rs become pub(super) in their new
file, and nothing else changes.
@coderabbitai
coderabbitai Bot commented Nov 2, 2026
Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 20e9c1e8-7b85-46bd-91cf-aff88c599999

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

@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: PASS · the full ruling

This change moves the exec dispatch in crates/minimald/src/exec.rs into four files by concern. A sorted line comparison against the base shows a pure move. Only visibility, module docs, mod/use lines and one rustfmt rewrap changed. The design of record does not state a file layout inside minimald, so this is a PASS by absence. The code stays in the same crate, and mod exec stays private.

Ruled at 81ee3b2 against gominimal/arch@8640f85e193d by claude-opus-5-5.

@minimal-foundry
minimal-foundry Bot commented Nov 2, 2026 •
Copy link
Copy Markdown
Contributor Author

Approved: no findings at 81ee3b2a6d50.

Nothing to do.

Verdict APPROVE, posted as a comment: the App cannot review its own pull request; the check and the label carry it.

Clobber: none: the base diff shows only the split.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approved

Verdict APPROVE — No findings.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Nov 2, 2026
@minimal-foundry
minimal-foundry Bot commented Nov 2, 2026 8000
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on a failed check suite: the coder changed nothing. Revise round 1: no change. The directive excerpts do not name a failing test. The merge from main did not touch crates/minimald. On this box, minimald fmt and clippy are clean, and the full minimald nextest run passed 1287 of 1288 tests. The one failure was box_manager::tests::reap_hands_name_to_retained_holder. That test is outside the exec split, and it passed 3 of 3 reruns alone, so it is a flake under load. The CI nextest profile uses retries = 0, so a flake fails the tests job, and ci-linux-native-success only aggregates that job. Rerun the failed jobs. If the tests job fails again, the failing test name in the full job log is necessary for the next round. I was not able to run the doctests here because rustdoc is not installed. The split moved only a ```text doc block, and rustdoc does not run that kind of block. Fixing the box_manager flake is outside this task's layers.

@mitodrummer mitodrummer left a comment
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at 81ee3b2. A pure move of exec.rs into exec/{bridge,git,process,run}.rs. Beyond relocated lines, the diff adds only module docs, mod and use lines, and pub(super) visibility so the new files can reach each other. Its one CI failure was reap_hands_name_to_retained_holder, a race on main now tracked as T59 #2840, and it passed on rerun.

@mitodrummer
mitodrummer added this pull request to the merge queue Nov 2, 2026
Merged via the queue into main with commit 2d06816 Nov 2, 2026
39 of 41 checks passed
@mitodrummer
mitodrummer deleted the agent/2398-split-the-daemon-s-exec-dispatch-into-files-by-c branch November 2, 2026 05:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review:approved minimal-review approved the current head

Projects

None yet

Development

Successfully merging this pull request may close these issues.

T40 — Split the daemon's exec dispatch into files by concern

1 participant

0