Issue #29: targeted task reconciliation - #50
Conversation
…ed-reconcile # Conflicts: # src/run.rs
Live acceptance — R4 dual-final GREENAccepted exact head: Fresh isolated release binary:
Exact commands, where "$R4_ROOT/cargo-target/release/st2" up --catalog "$R4_ROOT/fixtures/active/catalog" --host hetz --once --task hetz.st2-pr50-acceptance-r4.selected
"$R4_ROOT/cargo-target/release/st2" up --catalog "$R4_ROOT/fixtures/active/catalog" --host hetz --once --task hetz.st2-pr50-acceptance-r4.selected
"$R4_ROOT/cargo-target/release/st2" up --catalog "$R4_ROOT/fixtures/retired/catalog" --host hetz --once --task hetz.st2-pr50-acceptance-r4.selected
"$R4_ROOT/cargo-target/release/st2" up --catalog "$R4_ROOT/fixtures/retired/catalog" --host hetz --once --task hetz.st2-pr50-acceptance-r4.selected
st2 doctor --catalog "$CATALOG" --host hetz --require-supervisorExact action receipts: All action commands exited 0 with empty stderr. Process identity:
Isolation and final-state proof:
Evidence receipts:
Owner and independent root dual-final receipts are GREEN. The worktree is clean and GitHub still reports this exact head mergeable/clean with Nix successful. Nathan delegated final merge authority to the requested reviewer, |
|
Post-acceptance reviewer request blocker: GitHub returned |
|
Correction to the reviewer blocker above: the intended reviewer login is |
Problem
Task-scoped reconciliation must avoid whole-catalog mutation and preserve sibling isolation. The motivating failure in #29 was a targeted agent/task change blocked by an unrelated slow workspace because materialization walked the entire host catalog.
What changed
<host>.<agent>.<task>selectors.st2 up --materialize-only --task <selector>for owner-only rendering.st2 up --once --task <selector>for bounded owner-only materialization plus selected task reconciliation.Safety contract
Unknown, ambiguous, and wrong-host selectors refuse before workspace writes or runner inspection. Materialization, hook gates, planning, and actions are restricted to the selected owner/task. Unrelated diagnostics remain visible, while sibling workspace content and live PTY PID/creation generation remain unchanged.
Proof
pty listand that only the selected exec is started.createdAtgeneration across selected launch, adoption, and replacement.ETXTBSYhandling in the nomad replacement fixture so parallel binary-replacement gates are reliable.138acbc6e93cf91e5d0f320ab639eee5df041399is a normal two-parent merge of accepted PR head348f81546ea989c31a2f5ce396add82d53187bc9and live main6cec77485213a47893d7c1804d1942a42d4df4bf. The only manual conflict resolution preserves main's macOS-gatedstd::process::Commandimport.Validation on refreshed head
cargo test --test targeted_reconcile --test reconcile --test run --test materialize --test nomad_survival --test exec_backend -- --test-threads=1cargo test --workspace --all-targets -- --test-threads=1-D warningscargo doc --workspace --no-depsandcargo test --doc --workspacerustfmt --edition 2024 --checkgit diff --checknix flake check --print-build-logs: run 30541681147 / job 90867702311No live rollout.
Closes #29