fix(cmux-next): the R-DAEMON-STATE input lane switch reaches the daemon (CMUX_NEXT_TUI_RDS_INPUT)

Merged
LA
3d ago
+13-2

Summary

The app strips every inherited CMUX* variable that is not a CMUX_NEXT_* launch knob (LaunchIdentity.stripInheritedEnvironment), so the daemon it launches never sees CMUX_TUI_RDS_INPUT, the R-DAEMON-STATE stage S1 switch (#34014: the person's key takes no client registry or session lock). Without this line a typing A/B on the real app (typing-load-l6, switch off vs on) measures the old path in both arms.

One table line in DaemonDiagnosticKnobs: CMUX_NEXT_TUI_RDS_INPUT reaches the daemon as CMUX_TUI_RDS_INPUT, as the flow-trace, debug-span and host-model knobs do. Default off: with no knob set nothing changes. The line goes with the switch when the stage passes (handoff/rewrites/R-DAEMON-STATE/DESIGN.md section 3).

Testing

Red then green with the same focused fleet suite (DaemonDiagnosticKnobsTests):

  • Red at 851c164524f (test/rds-s1-knob-red-never-merge: this head with the knob line reverted): fleet step f63a7b7bbbc8bb841d665b13 (cmux12), theInputLaneSwitchReachesTheDaemon failed: Expectation failed: (knobs.daemonEnvironment → [:]) == ["CMUX_TUI_RDS_INPUT": "1"] (DaemonDiagnosticKnobsTests.swift:29); the other 3 tests passed.
  • Green at the head 83fba925722 (feat merged after #34053): fleet step aefe2a32b8838e47be9910e3 (aws-m4pro-4), DaemonDiagnosticKnobsTests 4 of 4 passed, theInputLaneSwitchReachesTheDaemon among them.

Compile: fleet job 8fac3ec5fc2fb91fd6b25a79 at 83fba925722 passed (CmuxNext 374 s, app 97 s, cmux-tui 55 s). The first compile 2b414e6000f7 at 754a4bff5b2 failed only on the feat base red acpmux/src/hub/bg_tasks.rs:160 (fixed by #34053).

Observed / Not run

  • Observed: the fleet steps above.
  • Not run: the real-app A/B itself (that is the next step, with the measurement owner, once #34014 and this land).

Changelog

none

Proof

No capture: a launch environment knob for a default-off daemon switch, no UI.


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

The app strips inherited CMUX* variables that aren't CMUX_NEXT_* launch knobs, so the R-DAEMON-STATE input lane switch never reached the daemon and typing A/Bs on the real app measured the old path in both arms. Adds a DaemonDiagnosticKnobs line mapping CMUX_NEXT_TUI_RDS_INPUT to CMUX_TUI_RDS_INPUT, default off so nothing changes without the knob, plus a test.