Skip to content

[rushd][WS5] Rush 6 cutover: testing, observability & migration #5900

Description

@bmiddha

Prove transparency and lifecycle correctness, then execute the Rush 6 cutover. First deliver the I/O and exit-code transparency matrix, concurrency/lifecycle integration coverage, warm-path benchmarks, and daemon logging/diagnostics — the bar that gates cutover-readiness. Then ship the plugin migration guide + @beta changelog, an optional compat shim, the version-policy/packaging flip to 6.0.0, the absorption of the CLI client into @microsoft/rush with the bin default flipped to the daemon (permanent in-process fallback), the phased-handler split, and user docs / rollout comms. Ships in the same major as #5858 phase 6.

Depends on: all above (#5895#5899); #5858 phases 1–6

Scope

  • Transparency matrix. Daemon vs in-process: stdout/stderr parity, redirection/piping, exit codes, TTY vs non-TTY, color/width, Ctrl+C, stdin, and cwd/env-override correctness.
  • Lifecycle/concurrency integration tests. Auto-start races, queue-and-wait, shared-build merging, self-restart/handoff, version-mismatch restart, idle shutdown, and crash recovery (races made deterministic via hooks).
  • Warm-path benchmarks. Assert a no-op rush build collapses to sub-100ms once warm; track daemon RSS under each warm-set policy.
  • Logging & diagnostics. A structured daemon.log, rush daemon logs --follow, and a debug/--verbose mode.
  • Cutover gate. The transparency, integration, and benchmark suites gate cutover-readiness — the migration and packaging items below proceed only once they are green.
  • Plugin migration guide + @beta changelog. Hook renames/relocations, runner lastState, and the process-identity break (process.cwd/env/argv/isTTY/exit now reflect the daemon, not the client).
  • Optional compat shim. Re-expose a few removed hooks (waitingForChangesonIdle, onOperationStatusChangedonExecutionStatesUpdated) so unmigrated plugins keep working during the transition.
  • Version-policy + packaging cutover. Add the new daemon packages (daemon, client, renderer, protocol, transport) to the rush lockstep policy and bump mainProject to 6.0.0, coordinated with the Reporter Overhaul's "daemon-aligned major default flip" ([rush] Rush Reporter Overhaul #5858 phase 6) as the same release.
  • Flip the bin default. Absorb @rushstack/rush-cli-client into @microsoft/rush and repoint rush/rushx from in-process execution to the daemon client, keeping a permanent in-process fallback (--no-daemon/RUSH_DAEMON=0); retire (or thin to a re-export) the CLI-client package.
  • Phased-handler split. The client-side PhasedScriptAction degrades to parse→forward→stream→exit while the daemon owns graph/iteration/watch; --watch becomes "attach to the live watched graph".
  • User docs + rollout comms. The daemon model, the rush daemon commands, CI guidance, and the Rush 5→6 migration path.

Acceptance criteria

  • Every transparency-matrix cell asserts daemon output/behavior matches in-process, with actionable diagnostics on failure (which cell, expected vs actual).
  • Each lifecycle/concurrency scenario has a deterministic integration test (races made deterministic via hooks).
  • A warm no-op rush build meets the sub-100ms budget (a regression fails the gate) and daemon RSS is recorded per warm-set policy and tracked over time in CI.
  • Lifecycle events and per-request correlation ids are written to a structured daemon.log; rush daemon logs --follow tails it and --verbose/debug increases detail.
  • The transparency, integration, and benchmark suites run in CI and gate cutover-readiness (the migration/packaging items below merge only once they are green).
  • The migration guide documents each hook rename/relocation (before/after) and the process-identity break with recommended patterns, and every breaking change (the WS0 engine work and the cutover items below) links to it; reviewed by a plugin owner.
  • An unmigrated plugin using the shimmed hook names runs unchanged when the optional, clearly-deprecated (with a removal target) shim is enabled.
  • The new daemon packages are on the rush lockstep policy, mainProject is 6.0.0, released in the same major as [rush] Rush Reporter Overhaul #5858 phase 6, with the cutover-readiness gates above green and rush change --verify passing.
  • rush/rushx default to the daemon client while --no-daemon/RUSH_DAEMON=0 still run fully in-process; the transparency matrix above passes on the flipped bins; the standalone CLI-client package is retired or reduced to a re-export.
  • On the client, rush build/rush start only parse args, forward, stream, and exit (the daemon owns graph/iteration/watch), and --watch attaches to the daemon's live watched graph and reflects headless invalidations.
  • User-facing docs cover the daemon model, rush daemon commands, CI guidance, and the 5→6 migration path, are linked from the release notes and reviewed, and docs build green in CI.

Part of #5894.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status
    Needs triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions