Skip to content

S6 Rust port: sweep, deploy-lanes, CI watch, sweep/coverage parity (WI-1071) - #1077

Merged
thedancingdeveloper merged 7 commits into
rust-corefrom
wi-1071-s6-gaps
Oct 17, 2026
Merged

thedancingdeveloper merged 7 commits into
rust-corefrom
wi-1071-s6-gaps

Conversation

@thedancingdeveloper

Copy link
Copy Markdown
Contributor

Ports the S6 sweep path to the Rust core: deploy-lanes collector, CI-watch announce after forge-checks (contained), mirrored-source canonical root, sweep disk, latest_generation bump, AgentPolicy stored as Python stores it. Parity script now sweeps on all three transports (incl. a broken git checkout -> partial coverage) and dumps the observed store; golden 21c95f6 re-recorded from Python.

Reviewed at 9b334b6: no blockers. Gates (fmt, clippy, cargo test 873, parity record/check python+rust cli/http/dump/actor, selftest, gen_registry --check, ruff, test_parity 155) all green in-process.

Known follow-ups: AgentPolicy nested landing/review/verification are serde_json::Value (non-null nested policies untested for byte parity); inbox.rs bound-branch entries still inline.

🤖 Generated with Claude Code

sprooty and others added 7 commits October 17, 2026 07:57
The collector canonicalised the root for the relative_to comparisons but
walked the stored spelling, so a root under a symlinked parent or with a
'..' in it reported manifests as absolute paths. Walk the resolved root,
as Python's collector does (4aa81f3), and port its two regression tests.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
…1071)

The deploy-lanes collector was already ported but the sweep refused while a
lane was configured. Register it beside the forge reads, with a real version
fetch, and drop the refusal.

Port the bound-branch CI announce from ci_watch.py into application/ci_watch.rs
and call it after the sweep publishes, when forge-checks ran. A failure is
logged, never returned, as Python contains it. The Python test_ci_watch row
is unported until the sweep-containment test is ported.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
…oes (WI-1071)

Python's SweepResult has a disk field, null when no engine answers. The
parity check found the Rust sweep omitting it.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
Two sweeps (unnamed, then git-local alone) and a coverage read, after the
bootstrap admin exists so the HTTP driver can authenticate. Goldens at
21c95f6 are re-recorded from the Python core, and the Rust core agrees on
cli (99), http (49) and mcp (99) steps.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
… (WI-1071)

Closes the three S6 review blockers on cd1546d.

- Parity compares what a sweep wrote. A `dump.observed` step dumps the
  observed store after the sweeps on all three transports. Coverage rows
  are no longer masked as volatile; only `last_swept_at` is blanked.
  The HTTP run registers projects (Second, Broken) so its sweep is not
  over zero projects.
- A project whose .git cannot be read (Broken) is a parity case: git-local
  reports partial with the failing project named in coverage, not an
  empty success.
- The normaliser blanks payload_digest for project registrations, which
  hash a payload carrying the run's temporary root.
- `--only dump` runs the whole script and compares only the dump steps.
- Rust observed store bumps latest_generation in rebuild_latest, as Python
  does.
- test_ci_watch.py is fully ported: a test seam (ci_watch::seam) injects an
  announce failure, which the sweep contains (a_failed_announce_does_not_fail_the_sweep);
  the session nudge is tested (notice then Enter; none at a permission prompt).

Golden tests/parity/golden/21c95f6 re-recorded from the Python core.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
…red as Python stores it (WI-1071)

- The parity repos Second and Broken live under the import root
  (<data>/repos), so the remote-caller guard admits their HTTP registration.
  Broken's gitfile fixture moves with them, so git-local is still partial
  and the HTTP sweep covers both projects.
- A project's agent_policy is stored as the model's compact JSON in field
  declaration order, as Python's model_dump_json writes it. The Rust
  AgentPolicy struct is reordered to match, which the HTTP dump now compares.
- Golden tests/parity/golden/21c95f6 re-recorded from the Python core on
  top of origin/rust-core (cf2d3ca).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
@thedancingdeveloper
thedancingdeveloper merged commit b8778c7 into rust-core Oct 17, 2026
3 of 7 checks passed
@thedancingdeveloper
thedancingdeveloper deleted the wi-1071-s6-gaps branch October 17, 2026 08:12
thedancingdeveloper pushed a commit that referenced this pull request Oct 17, 2026
…WI-1067)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
thedancingdeveloper pushed a commit that referenced this pull request Oct 17, 2026
…WI-1067)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.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

Development

Successfully merging this pull request may close these issues.

1 participant