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

Open
#5,900 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
node.js, typescript

Research direction

Start by reviewing dependencies #5895–#5899 and #5858 phases 1–6, then trace the rush/rushx entry points and the daemon commands described here. Run the transparency, lifecycle, benchmark, logging, and documentation checks, including rush daemon logs --follow, rush change --verify, and the docs build. Done means all cutover gates pass and the daemon becomes the default with the documented in-process fallback and migration path.

Written by the indexing model from the issue text.

Description

area:rushd

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" (#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 #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.

Dominant language
TypeScript
Stars
6.5k
Forks
708
Avg merge
5d 19h
Merged PRs (30d)
48

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from microsoft/rushstack

All issues in microsoft/rushstack

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.