Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
326 commits
Select commit Hold shift + click to select a range
fd0a16d
Parse keyword shell launcher commands
austinywang Aug 7, 2026
e41b511
Refresh origin merge anchor for PR #8631 at fd0a16d702
austinywang Aug 7, 2026
3980720
Merge branch 'fix/pr-8631-sync-fd0a16d702' into fix/settings-store-no…
austinywang Aug 7, 2026
aba0025
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
7e686a7
test: cover shell command substitutions
austinywang Aug 7, 2026
83a400e
Detect shell command substitutions
austinywang Aug 7, 2026
4649316
Refresh origin merge anchor for PR #8631 at 83a400e6e6
austinywang Aug 7, 2026
dd1cd8d
Merge branch 'fix/pr-8631-sync-83a400e6e6' into fix/settings-store-no…
austinywang Aug 7, 2026
f0aafc1
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
96a0aa5
test: cover determinism lexer boundaries
austinywang Aug 7, 2026
feba8d8
Harden determinism lexer boundaries
austinywang Aug 7, 2026
0a58e47
Refresh origin merge anchor for PR #8631 at feba8d84c2
austinywang Aug 7, 2026
0c33edb
Merge branch 'fix/pr-8631-sync-feba8d84c2' into fix/settings-store-no…
austinywang Aug 7, 2026
2e22369
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
2fa39d0
test: cover block comment determinism boundaries
austinywang Aug 7, 2026
d477835
Track block comments in determinism lexer
austinywang Aug 7, 2026
334e949
Refresh origin merge anchor for PR #8631 at d4778356c2
austinywang Aug 7, 2026
9424c13
Merge branch 'fix/pr-8631-sync-d4778356c2' into fix/settings-store-no…
austinywang Aug 7, 2026
7dd416d
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
2ee6ee3
test: cover evaluated network source
austinywang Aug 7, 2026
3376355
Detect evaluated network source
austinywang Aug 7, 2026
172b120
Refresh origin merge anchor for PR #8631 at 33763557d8
austinywang Aug 7, 2026
42bb919
Merge branch 'fix/pr-8631-sync-33763557d8' into fix/settings-store-no…
austinywang Aug 7, 2026
6843f4a
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
d7bdd7b
test: scope live network targets
austinywang Aug 7, 2026
69a62ec
Scope live network detection to invocation targets
austinywang Aug 7, 2026
e38fd60
Refresh origin merge anchor for PR #8631 at 69a62ecd9d
austinywang Aug 7, 2026
a653fce
Merge branch 'fix/pr-8631-sync-69a62ecd9d' into fix/settings-store-no…
austinywang Aug 7, 2026
410676f
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
5206dcb
test: cover hash network comments
austinywang Aug 7, 2026
b757e58
Refresh origin merge anchor for PR #8631 at 5206dcbd27
austinywang Aug 7, 2026
6bbe9f8
Merge branch 'fix/pr-8631-sync-5206dcbd27' into fix/settings-store-no…
austinywang Aug 7, 2026
1ef4919
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
b0659cf
test: cover labeled and interpreted network targets
austinywang Aug 7, 2026
5d36992
Model network invocation targets explicitly
austinywang Aug 7, 2026
451dab3
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 7, 2026
6ed0695
Refresh origin merge anchor for PR #8631 at 451dab37c2
austinywang Aug 7, 2026
8cc1c0c
Merge branch 'fix/pr-8631-sync-451dab37c2' into fix/settings-store-no…
austinywang Aug 7, 2026
6b98f4e
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
31fffe2
test: cover argv labels and launcher namespaces
austinywang Aug 7, 2026
ed276fb
Scope launcher targets by labels and namespaces
austinywang Aug 7, 2026
6397a64
Refresh origin merge anchor for PR #8631 at ed276fb2b0
austinywang Aug 7, 2026
6e21675
Merge branch 'fix/pr-8631-sync-ed276fb2b0' into fix/settings-store-no…
austinywang Aug 7, 2026
c9cf6d1
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
8349abd
test: cover shell paths and Bun spawn options
austinywang Aug 7, 2026
c0a89ca
Parse structured shell and Bun launcher options
austinywang Aug 7, 2026
670bcea
Refresh origin merge anchor for PR #8631 at c0a89ca087
austinywang Aug 7, 2026
95e2684
Merge branch 'fix/pr-8631-sync-c0a89ca087' into fix/settings-store-no…
austinywang Aug 7, 2026
4e5b612
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
84adaa7
test: cover quoted launcher syntax
austinywang Aug 7, 2026
2e85d98
Parse quoted object and shell launcher syntax
austinywang Aug 7, 2026
ee6ee01
Refresh origin merge anchor for PR #8631 at 2e85d98d96
austinywang Aug 7, 2026
11a392c
Merge branch 'fix/pr-8631-sync-2e85d98d96' into fix/settings-store-no…
austinywang Aug 7, 2026
289ddaf
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
b3f1547
test: cover computed labels and unquoted eval
austinywang Aug 7, 2026
93d78c7
Parse computed labels and shell eval source
austinywang Aug 7, 2026
b45656a
Refresh origin merge anchor for PR #8631 at 93d78c77cc
austinywang Aug 7, 2026
cf1a63a
Merge branch 'fix/pr-8631-sync-93d78c77cc' into fix/settings-store-no…
austinywang Aug 7, 2026
1c2d30b
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
73cbcde
test: cover shell control flow and fluent clients
austinywang Aug 7, 2026
aaf9b32
Parse shell control flow and fluent network targets
austinywang Aug 7, 2026
7d6681e
Refresh origin merge anchor for PR #8631 at aaf9b3278b
austinywang Aug 7, 2026
dde2722
Merge branch 'fix/pr-8631-sync-aaf9b3278b' into fix/settings-store-no…
austinywang Aug 7, 2026
44bf07f
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
e5ae5d3
test: cover fluent constructors and case arms
austinywang Aug 7, 2026
66b2364
Parse fluent clients and shell case arms
austinywang Aug 7, 2026
e9b7998
Refresh origin merge anchor for PR #8631 at 66b2364a38
austinywang Aug 7, 2026
81bc019
Merge branch 'fix/pr-8631-sync-66b2364a38' into fix/settings-store-no…
austinywang Aug 7, 2026
df227d3
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 7, 2026
121a2c8
Settings store writes UserDefaults on every reload even when nothing …
ejc3 Jul 22, 2026
71c76fa
Compare encoded defaults with sorted keys, or the no-op guard misses …
ejc3 Jul 22, 2026
592a543
Create origin merge anchor for PR #8631
austinywang Aug 7, 2026
eebe27a
Add regression for legacy settings persistence no-op
austinywang Aug 4, 2026
3aa9dd5
Move settings no-op regression to Swift Testing
austinywang Aug 4, 2026
b287003
Compare persisted settings state semantically
austinywang Aug 4, 2026
4639b15
Isolate settings persistence regression defaults
austinywang Aug 4, 2026
785330d
Refresh origin merge anchor for PR #8631
austinywang Aug 7, 2026
1c7c7c7
Test isolated language override reset
austinywang Aug 7, 2026
332787a
Align language side effects with injected defaults
austinywang Aug 7, 2026
691e160
Refresh origin merge anchor for PR #8631 test isolation
austinywang Aug 7, 2026
6643545
Run language side-effect regression on main actor
austinywang Aug 7, 2026
32dfe9f
Refresh origin merge anchor for PR #8631 final sync
austinywang Aug 7, 2026
7e2c2ba
test: align OMP resume environment contract
austinywang Aug 7, 2026
e62196a
ci: isolate app-host test batches
austinywang Aug 7, 2026
ad0c301
Refresh origin merge anchor for PR #8631 at 714faa2934
austinywang Aug 7, 2026
1714327
Fix NotificationsPage SwiftUI deprecation warnings
austinywang Aug 7, 2026
2513f56
Refresh origin merge anchor for PR #8631 at 4e8bdf4a77
austinywang Aug 7, 2026
bc1806e
Scope app-host batch isolation to CI workflow
austinywang Aug 7, 2026
a41207e
Refresh origin merge anchor for PR #8631 at 86c4d3fb7b
austinywang Aug 7, 2026
7a02104
Refresh origin merge anchor for PR #8631 at 5740646db7
austinywang Aug 7, 2026
3194db9
test: cover inert network-command fixtures
austinywang Aug 7, 2026
76c42a3
Fix determinism guard for quoted command fixtures
austinywang Aug 7, 2026
4eb35b8
Refresh origin merge anchor for PR #8631 at 7a5dd75daf
austinywang Aug 7, 2026
f1c15b8
test: cover settings CI review regressions
austinywang Aug 7, 2026
480a801
Fix focused settings and CI guard semantics
austinywang Aug 7, 2026
4f32611
Refresh origin merge anchor for PR #8631 at f870be85d3
austinywang Aug 7, 2026
3cc4455
test: cover executable quoted network sources
austinywang Aug 7, 2026
2e8be49
Fix executable interpolation determinism checks
austinywang Aug 7, 2026
f941342
Refresh origin merge anchor for PR #8631 at fcb8bac65e
austinywang Aug 7, 2026
7c83ede
test: cover process launcher command positions
austinywang Aug 7, 2026
49ccad1
Classify process launcher command arguments
austinywang Aug 7, 2026
69ccc27
Refresh origin merge anchor for PR #8631 at fb8d701644
austinywang Aug 7, 2026
65401fe
test: cover CI guard failure paths
austinywang Aug 7, 2026
49296a0
Harden determinism and shard CI guards
austinywang Aug 7, 2026
35644ed
Refresh origin merge anchor for PR #8631 at 55d0c6ee62
austinywang Aug 7, 2026
15efd2f
test: cover multiline launcher contexts
austinywang Aug 7, 2026
81581f1
Fix multiline determinism launcher context
austinywang Aug 7, 2026
813aee9
test: cover Python shell-string launchers
austinywang Aug 7, 2026
408f334
Detect Python shell-string launchers
austinywang Aug 7, 2026
8e0924d
Refresh origin merge anchor for PR #8631 at fd0a16d702
austinywang Aug 7, 2026
bdebf89
test: cover keyword shell launcher commands
austinywang Aug 7, 2026
d8aa9b4
Parse keyword shell launcher commands
austinywang Aug 7, 2026
93ec0ed
Refresh origin merge anchor for PR #8631 at 83a400e6e6
austinywang Aug 7, 2026
6a6bd24
test: cover shell command substitutions
austinywang Aug 7, 2026
0a66d7f
Detect shell command substitutions
austinywang Aug 7, 2026
7c9f6db
Refresh origin merge anchor for PR #8631 at feba8d84c2
austinywang Aug 7, 2026
205432a
test: cover determinism lexer boundaries
austinywang Aug 7, 2026
4d518af
Harden determinism lexer boundaries
austinywang Aug 7, 2026
522bd91
Refresh origin merge anchor for PR #8631 at d4778356c2
austinywang Aug 7, 2026
3ae2b0e
test: cover block comment determinism boundaries
austinywang Aug 7, 2026
59345ef
Track block comments in determinism lexer
austinywang Aug 7, 2026
2641df7
Refresh origin merge anchor for PR #8631 at 33763557d8
austinywang Aug 7, 2026
bc50834
test: cover evaluated network source
austinywang Aug 7, 2026
bd0cc07
Detect evaluated network source
austinywang Aug 7, 2026
3c7fdc8
Refresh origin merge anchor for PR #8631 at 69a62ecd9d
austinywang Aug 7, 2026
6ebabfe
test: scope live network targets
austinywang Aug 7, 2026
e18a3e3
Scope live network detection to invocation targets
austinywang Aug 7, 2026
9dfb342
Refresh origin merge anchor for PR #8631 at 5206dcbd27
austinywang Aug 7, 2026
5a50dd1
test: cover hash network comments
austinywang Aug 7, 2026
b69892c
Refresh origin merge anchor for PR #8631 at 451dab37c2
austinywang Aug 7, 2026
9214887
test: cover labeled and interpreted network targets
austinywang Aug 7, 2026
91e911b
Model network invocation targets explicitly
austinywang Aug 7, 2026
26dcdd5
Refresh origin merge anchor for PR #8631 at ed276fb2b0
austinywang Aug 7, 2026
2b00c6c
test: cover argv labels and launcher namespaces
austinywang Aug 7, 2026
37a6502
Scope launcher targets by labels and namespaces
austinywang Aug 7, 2026
13fee4b
Refresh origin merge anchor for PR #8631 at c0a89ca087
austinywang Aug 7, 2026
1970bfc
test: cover shell paths and Bun spawn options
austinywang Aug 7, 2026
f2e17a9
Parse structured shell and Bun launcher options
austinywang Aug 7, 2026
39f80d5
Refresh origin merge anchor for PR #8631 at 2e85d98d96
austinywang Aug 7, 2026
d3269a9
test: cover quoted launcher syntax
austinywang Aug 7, 2026
e026cb3
Parse quoted object and shell launcher syntax
austinywang Aug 7, 2026
360d700
Refresh origin merge anchor for PR #8631 at 93d78c77cc
austinywang Aug 7, 2026
c07e864
test: cover computed labels and unquoted eval
austinywang Aug 7, 2026
511a8f2
Parse computed labels and shell eval source
austinywang Aug 7, 2026
95cc3c8
Refresh origin merge anchor for PR #8631 at aaf9b3278b
austinywang Aug 7, 2026
5fefa86
test: cover shell control flow and fluent clients
austinywang Aug 7, 2026
f15f8ef
Parse shell control flow and fluent network targets
austinywang Aug 7, 2026
34518c9
Refresh origin merge anchor for PR #8631 at 66b2364a38
austinywang Aug 7, 2026
2458ce9
test: cover fluent constructors and case arms
austinywang Aug 7, 2026
17d5b39
Parse fluent clients and shell case arms
austinywang Aug 7, 2026
370a791
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 8, 2026
5f4c5c9
Synchronize fork-backed PR #8631 with origin branch
austinywang Aug 8, 2026
65a8ad4
Merge branch 'fix/pr-8631-sync-370a791b50' into fix/settings-store-no…
austinywang Aug 8, 2026
ca9d415
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 8, 2026
07ae024
Preserve generalized OMP path fixture during PR sync
austinywang Aug 8, 2026
02bfad3
Merge branch 'fix/pr-8631-sync-omp-cleanup' into fix/settings-store-n…
austinywang Aug 8, 2026
bed248a
test: cover redirected shell and stored fluent clients
austinywang Aug 9, 2026
e4be54e
Parse shell redirections and stored fluent clients
austinywang Aug 9, 2026
a39652b
Refresh origin merge anchor for PR #8631 at e4be54ebf3
austinywang Aug 9, 2026
6bac9ed
Merge commit 'a39652b46dd0b0cdd898f1b99aee407d206e8a74' into fix/sett…
austinywang Aug 9, 2026
091c7ce
Merge branch 'fix/pr-8631-sync-e4be54ebf3' into fix/settings-store-no…
austinywang Aug 9, 2026
c867d68
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 9, 2026
790b03c
test: cover instance clients and Axios base overrides
austinywang Aug 9, 2026
e25a612
Track instance clients and Axios base overrides
austinywang Aug 9, 2026
4712cec
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 9, 2026
ca22513
Refresh origin merge anchor for PR #8631 at e25a612d2b
austinywang Aug 9, 2026
4959a77
Merge commit 'ca22513647444bec960b6faf0fcf9080dd61b02c' into fix/sett…
austinywang Aug 9, 2026
b82e207
Merge branch 'fix/pr-8631-sync-e25a612d2b' into fix/settings-store-no…
austinywang Aug 9, 2026
4317dab
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 9, 2026
f089f7d
test: cover regex literals and method-first clients
austinywang Aug 9, 2026
1c7080b
Parse JavaScript regex literals and SuperAgent targets
austinywang Aug 9, 2026
d569774
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 9, 2026
7879ae2
Refresh origin merge anchor for PR #8631 at 1c7080bb36
austinywang Aug 9, 2026
2099327
Merge commit '7879ae2c11146888c7b54cbc803c36939eb0bb91' into fix/sett…
austinywang Aug 9, 2026
7cec298
Merge branch 'fix/pr-8631-sync-1c7080bb36' into fix/settings-store-no…
austinywang Aug 9, 2026
5afd2a6
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 9, 2026
3f9f1f3
test: cover HTTPX streams and shell wrappers
austinywang Aug 9, 2026
8d7f83f
Parse HTTPX streams and shell command wrappers
austinywang Aug 9, 2026
ae8021b
Refresh origin merge anchor for PR #8631 at 8d7f83f28d
austinywang Aug 9, 2026
644029e
Merge commit 'ae8021b40a6c19478c76c89b2cb4d8ff6f6f283f' into fix/sett…
austinywang Aug 9, 2026
fcc6e22
Merge branch 'fix/pr-8631-sync-8d7f83f28d' into fix/settings-store-no…
austinywang Aug 9, 2026
836fc52
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 9, 2026
2e975e2
test: cover argv wrappers and TypeScript client fields
austinywang Aug 9, 2026
3d2f657
Parse argv wrappers and TypeScript client fields
austinywang Aug 9, 2026
fd7b5ad
Refresh origin merge anchor for PR #8631 at 3d2f6577d4
austinywang Aug 9, 2026
44ede3b
Merge branch 'fix/pr-8631-sync-3d2f6577d4' into fix/settings-store-no…
austinywang Aug 9, 2026
fd77b96
Merge branch 'fix/pr-8631-sync-3d2f6577d4' into fix/settings-store-no…
austinywang Aug 9, 2026
722ceb4
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 9, 2026
c7acc53
test: cover interpolated and concatenated network calls
austinywang Aug 9, 2026
8515d1c
Preserve executable interpolation and shell expressions
austinywang Aug 9, 2026
8e1504b
Refresh origin merge anchor for PR #8631 at 8515d1c7b5
austinywang Aug 9, 2026
b1ca702
Merge branch 'fix/pr-8631-sync-8515d1c7b5' into fix/settings-store-no…
austinywang Aug 9, 2026
00aaa5a
Merge branch 'fix/pr-8631-sync-8515d1c7b5' into fix/settings-store-no…
austinywang Aug 9, 2026
4ddb6d7
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 9, 2026
7a356ca
test: cover direct interpreter network commands
austinywang Aug 9, 2026
5913172
Resolve direct interpreter command sources
austinywang Aug 9, 2026
e3ff340
Refresh origin merge anchor for PR #8631 at 591317269b
austinywang Aug 9, 2026
6bb858b
Merge branch 'fix/pr-8631-sync-591317269b' into fix/settings-store-no…
austinywang Aug 9, 2026
5a64871
Merge branch 'fix/pr-8631-sync-591317269b' into fix/settings-store-no…
austinywang Aug 9, 2026
73ad557
Merge branch 'fix/settings-store-noop-defaults-write' into fix/settin…
austinywang Aug 9, 2026
33ba1fb
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 25, 2026
175c67f
test: cover missed determinism launch forms
austinywang Aug 25, 2026
74253dc
fix: retain determinism coverage for launch forms
austinywang Aug 25, 2026
12d3556
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 25, 2026
17a6ed0
test: cover exported and grouped fluent clients
austinywang Aug 25, 2026
a6880fd
fix: detect grouped and exported fluent clients
austinywang Aug 25, 2026
dba0651
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 25, 2026
7759124
test: cover interpreted source and language suite handling
austinywang Aug 25, 2026
c99a015
fix: parse interpreted sources and injected language suites
austinywang Aug 25, 2026
2e7a821
test: cover env split-string command sources
austinywang Aug 25, 2026
3e20c5f
fix: parse env split-string command sources
austinywang Aug 25, 2026
0cf2f40
test: cover multiline fluent network chains
austinywang Aug 25, 2026
46aa997
fix: retain multiline fluent network chains
austinywang Aug 25, 2026
f97cc2b
test: cover urllib3 method-first requests
austinywang Aug 25, 2026
2312afd
fix: detect urllib3 method-first targets
austinywang Aug 25, 2026
236226a
fix: classify urllib3 request verbs as method-first
austinywang Aug 25, 2026
d95d23d
test: cover shell function and request helper cases
austinywang Aug 25, 2026
4174fdc
fix: handle request declarations and shell functions
austinywang Aug 25, 2026
00d3c61
test: cover concatenated shell command strings
austinywang Aug 25, 2026
d1cea50
fix: detect concatenated shell command literals
austinywang Aug 25, 2026
20668d4
test: cover shell assignment network targets
austinywang Aug 25, 2026
bd6ac5a
test: cover assignments before shell wrappers
austinywang Aug 25, 2026
f9ea04c
fix: reset CI captures and retain shell assignment targets
austinywang Aug 25, 2026
9a582b2
test: cover inert open and exec helpers
austinywang Aug 25, 2026
a2f5eee
fix: narrow network launcher matches
austinywang Aug 25, 2026
54e81a0
test: preserve module client across nested shadowing
austinywang Aug 25, 2026
ebb562d
fix: respect lexical scope for stored client reassignments
austinywang Aug 25, 2026
3162d52
test: cover attached interpreters and client scopes
austinywang Aug 25, 2026
6ed1c9e
fix: scope stored clients and parse attached interpreters
austinywang Aug 25, 2026
31a919b
test: cover arbitrary XHR handles and nested client use
austinywang Aug 25, 2026
3a0d234
fix: preserve scoped clients and arbitrary XHR handles
austinywang Aug 25, 2026
a8f7499
test: cover Python exec and JavaScript client shadows
austinywang Aug 26, 2026
30ff3b8
fix: scope XHR and executable source detection
austinywang Aug 26, 2026
e60ff8b
test: cover shell sources, arrow shadows, and XHR receivers
austinywang Aug 26, 2026
ec46043
fix: scope shell sources, arrows, and XHR receivers
austinywang Aug 26, 2026
7c2f004
test: cover Swift closures and Python function shadows
austinywang Aug 26, 2026
0685a0b
fix: refine source and client scope classification
austinywang Aug 26, 2026
71f6099
Merge branch 'main' of https://github.com/manaflow-ai/cmux into fix/s…
austinywang Aug 26, 2026
acc2f02
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 26, 2026
701a745
fix: inject language settings store explicitly
austinywang Aug 26, 2026
a6e1fbc
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 26, 2026
848cc1a
fix(ios): unbreak main-red iOS compile in MobileWorkspaceAggregation
azooz2003-bit Aug 26, 2026
e5d6f64
fix(ios): unbreak main-red iOS compile in WorkspaceListTableCoordinator
azooz2003-bit Aug 26, 2026
a2586fe
fix(cli): rename shadowed projectRoot rebinding
lawrencecchen Aug 26, 2026
0b8c6a7
fix: annotate compactMap result types broken by #9349
lawrencecchen Aug 26, 2026
4a3c96b
test(remote): ignore upload lock directories
austinywang Aug 26, 2026
94ef629
fix: keep SSH replay test portable on macOS SDK
austinywang Aug 26, 2026
cfc40d7
Merge remote-tracking branch 'origin/main' into fix/settings-store-no…
austinywang Aug 26, 2026
647dd75
fix: avoid mutating cache calls inside expect macros
austinywang Aug 26, 2026
076fe3a
test: align model discovery fixture with parser
austinywang Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/test-determinism-allowlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ Packages/iOS/CmuxMobileRPC/Tests/CmuxMobileRPCTests/MobileCoreRPCTransportDrainT
Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/OnboardingMacDiscoveryKeepAliveTests.swift sleep-then-assert temporary outage debt owned by #9163; remove when determinized
cmuxTests/WorkspaceForkConversationContextMenuTests.swift assert-on-duration grandfathered
cmuxTests/WorkspaceForkConversationContextMenuTests.swift sleep-then-assert grandfathered
tests/test_ci_sparkle_build_monotonic.sh live-network-host release pretag guard intentionally probes the published appcast and soft-passes offline
170 changes: 122 additions & 48 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,9 @@ jobs:
run: python3 scripts/lint-feature-flags.py

- name: Validate test determinism gate
run: python3 scripts/check-test-determinism.py --strict
run: |
python3 scripts/check-test-determinism.py --self-test
python3 scripts/check-test-determinism.py --strict

ghosttykit-release-check:
name: GhosttyKit release check
Expand Down Expand Up @@ -1069,6 +1071,25 @@ jobs:
-only-testing:cmuxTests/NotificationScrollRestoreRecoveryTests \
test

- name: Run settings file-store no-op persistence regression
if: ${{ matrix.shard == fromJSON(env.CMUX_APP_HOST_FOCUSED_REGRESSION_SHARD) }}
run: |
# The broad app-host suite tolerates expected failures and can stop
# after an app-host crash. Keep the settings persistence regression
# non-tolerant so a no-op UserDefaults write cannot pass the shard.
set -euo pipefail
SOURCE_PACKAGES_DIR="$PWD/.ci-source-packages"
scripts/ci/run-in-console-session.sh \
scripts/ci/run-app-host-xcodebuild.sh \
-project cmux.xcodeproj -scheme cmux-unit -configuration Debug \
-derivedDataPath "$CMUX_DERIVED_DATA_PATH" \
-clonedSourcePackagesDirPath "$SOURCE_PACKAGES_DIR" \
-disableAutomaticPackageResolution \
-destination "platform=macOS" \
CMUX_SKIP_ZIG_BUILD=1 \
-only-testing:cmuxTests/KeyboardShortcutSettingsFileStoreNoOpPersistenceTests \
test

- name: Run sidebar workspace-switch layout regression
if: ${{ matrix.shard == fromJSON(env.CMUX_APP_HOST_FOCUSED_REGRESSION_SHARD) }}
run: |
Expand Down Expand Up @@ -1112,49 +1133,104 @@ jobs:
run: |
set -euo pipefail
SOURCE_PACKAGES_DIR="$PWD/.ci-source-packages"
SHARD_ARGS="$RUNNER_TEMP/cmux-unit-shard-${{ matrix.shard }}.args"
python3 scripts/ci/cmux_unit_test_shard.py \
--shard-index "${{ matrix.shard }}" \
--shard-total 4 \
--output "$SHARD_ARGS"
ONLY_TESTING_ARGS=()
while IFS= read -r arg; do
[ -n "$arg" ] && ONLY_TESTING_ARGS+=("$arg")
done < "$SHARD_ARGS"
run_unit_tests() {
# These app-host tests create real SwiftUI/WebKit/Ghostty windows and
# intermittently crash inside XCTest's post-test memory checker or
# leave native display/WebKit work alive on GitHub macOS runners.
# When that happens, Swift's crash/backtrace handling or the stale
# app-host process keeps xcodebuild alive until the job-level timeout,
# hiding the actual unit test summary.
# The app-host wrapper also serializes GUI XCTest ownership per Mac,
# while still allowing shards on separate Macs to run in parallel.
scripts/ci/run-in-console-session.sh \
scripts/ci/run-app-host-xcodebuild.sh \
-project cmux.xcodeproj -scheme cmux-unit -configuration Debug \
-derivedDataPath "$CMUX_DERIVED_DATA_PATH" \
-clonedSourcePackagesDirPath "$SOURCE_PACKAGES_DIR" \
-disableAutomaticPackageResolution \
-destination "platform=macOS" \
"${ONLY_TESTING_ARGS[@]}" \
CMUX_SKIP_ZIG_BUILD=1 \
test 2>&1 &
local xcodebuild_pid=$!
local timeout_seconds="${CMUX_UNIT_TEST_TIMEOUT_SECONDS:-900}"
local deadline=$((SECONDS + timeout_seconds))
while kill -0 "$xcodebuild_pid" 2>/dev/null; do
if [ "$SECONDS" -ge "$deadline" ]; then
echo "xcodebuild unit test timeout after ${timeout_seconds}s; terminating"
kill -TERM "$xcodebuild_pid" 2>/dev/null || true
PHYSICAL_SHARD="${{ matrix.shard }}"
PHYSICAL_SHARD_TOTAL=4
LOGICAL_BATCHES_PER_WORKER=2
LOGICAL_SHARD_TOTAL=$((PHYSICAL_SHARD_TOTAL * LOGICAL_BATCHES_PER_WORKER))
LOGICAL_SHARDS=("$PHYSICAL_SHARD" "$((PHYSICAL_SHARD + PHYSICAL_SHARD_TOTAL))")

# These suites share process-global UI/runtime state for an app host's
# lifetime. Keep cross-machine parallelism, but give each worker two
# balanced, sequential app-host processes so each stays inside the
# existing per-invocation timeout without changing the shared scheme.

run_unit_test_batch() {
local logical_shard="$1"
local shard_args="$RUNNER_TEMP/cmux-unit-shard-${logical_shard}-of-${LOGICAL_SHARD_TOTAL}.args"
local batch_output="$RUNNER_TEMP/cmux-unit-output-${logical_shard}-of-${LOGICAL_SHARD_TOTAL}.txt"
python3 scripts/ci/cmux_unit_test_shard.py \
--shard-index "$logical_shard" \
--shard-total "$LOGICAL_SHARD_TOTAL" \
--output "$shard_args" || {
local shard_status=$?
echo "Failed to generate app-host unit-test batch ${logical_shard}/${LOGICAL_SHARD_TOTAL}"
return "$shard_status"
}
if [ ! -r "$shard_args" ]; then
echo "Missing selector file for app-host unit-test batch ${logical_shard}/${LOGICAL_SHARD_TOTAL}"
return 1
fi
local only_testing_args=()
while IFS= read -r arg; do
[ -n "$arg" ] && only_testing_args+=("$arg")
done < "$shard_args"
if [ "${#only_testing_args[@]}" -eq 0 ]; then
echo "No selectors generated for app-host unit-test batch ${logical_shard}/${LOGICAL_SHARD_TOTAL}"
return 1
fi

echo "Running app-host unit-test batch ${logical_shard}/${LOGICAL_SHARD_TOTAL} serially"
local batch_status
# Reset this batch's capture before every invocation. The outer
# SwiftPM-resolution retry reuses the path, and a failed retry
# must not inherit an earlier attempt's expected-failure summary.
: > "$batch_output"
{
# These app-host tests create real SwiftUI/WebKit/Ghostty windows and
# intermittently crash inside XCTest's post-test memory checker or
# leave native display/WebKit work alive on GitHub macOS runners.
# When that happens, Swift's crash/backtrace handling or the stale
# app-host process keeps xcodebuild alive until the job-level timeout,
# hiding the actual unit test summary.
# The app-host wrapper also serializes GUI XCTest ownership per Mac,
# while still allowing shards on separate Macs to run in parallel.
scripts/ci/run-in-console-session.sh \
scripts/ci/run-app-host-xcodebuild.sh \
-project cmux.xcodeproj -scheme cmux-unit -configuration Debug \
-derivedDataPath "$CMUX_DERIVED_DATA_PATH" \
-clonedSourcePackagesDirPath "$SOURCE_PACKAGES_DIR" \
-disableAutomaticPackageResolution \
-destination "platform=macOS" \
"${only_testing_args[@]}" \
CMUX_SKIP_ZIG_BUILD=1 \
test 2>&1 &
local xcodebuild_pid=$!
local timeout_seconds="${CMUX_UNIT_TEST_TIMEOUT_SECONDS:-900}"
local deadline=$((SECONDS + timeout_seconds))
while kill -0 "$xcodebuild_pid" 2>/dev/null; do
if [ "$SECONDS" -ge "$deadline" ]; then
echo "xcodebuild unit-test batch ${logical_shard}/${LOGICAL_SHARD_TOTAL} timeout after ${timeout_seconds}s; terminating"
kill -TERM "$xcodebuild_pid" 2>/dev/null || true
sleep 5
kill -KILL "$xcodebuild_pid" 2>/dev/null || true
wait "$xcodebuild_pid" 2>/dev/null || true
exit 124
fi
sleep 5
kill -KILL "$xcodebuild_pid" 2>/dev/null || true
wait "$xcodebuild_pid" 2>/dev/null || true
return 124
done
wait "$xcodebuild_pid"
} | tee "$batch_output"
batch_status="${PIPESTATUS[0]}"

if [ "$batch_status" -ne 0 ]; then
local batch_summary
batch_summary="$(grep "Executed.*tests.*with.*failures" "$batch_output" | tail -1 || true)"
if echo "$batch_summary" | grep -q "(0 unexpected)"; then
echo "All failures in app-host batch ${logical_shard}/${LOGICAL_SHARD_TOTAL} are expected, continuing"
return 0
fi
sleep 5
fi
return "$batch_status"
}

run_unit_tests() {
local logical_shard
for logical_shard in "${LOGICAL_SHARDS[@]}"; do
run_unit_test_batch "$logical_shard" || {
local batch_status=$?
return "$batch_status"
}
done
wait "$xcodebuild_pid"
}

# Stream output via tee so CI logs are visible in real time, while still
Expand Down Expand Up @@ -1183,13 +1259,11 @@ jobs:
fi

if [ "$EXIT_CODE" -ne 0 ]; then
SUMMARY=$(echo "$OUTPUT" | grep "Executed.*tests.*with.*failures" | tail -1)
if echo "$SUMMARY" | grep -q "(0 unexpected)"; then
echo "All failures are expected, treating as pass"
else
echo "Unexpected test failures detected"
exit 1
fi
# Expected failures are normalized inside run_unit_test_batch. Any
# remaining non-zero status is a real batch failure or an incomplete
# run with no trustworthy summary and must stay red.
echo "App-host unit-test batch failed with status ${EXIT_CODE}"
exit "$EXIT_CODE"
fi

- name: Run bundled Ghostty theme picker helper regression
Expand Down
8 changes: 4 additions & 4 deletions CLI/cmux.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33182,15 +33182,15 @@ export default CMUXSessionRestore;
cursor = parent
ancestorDepth += 1
}
let projectRoot = discoveredProjectRoot ?? cwdURL
let resolvedProjectRoot = discoveredProjectRoot ?? cwdURL
applyConfig(
at: projectRoot
at: resolvedProjectRoot
.appendingPathComponent(".cursor", isDirectory: true)
.appendingPathComponent("cli.json", isDirectory: false),
readsApprovalMode: false
)
if cwdURL.path != projectRoot.path,
cwdURL.path.hasPrefix(projectRoot.path + "/") {
if cwdURL.path != resolvedProjectRoot.path,
cwdURL.path.hasPrefix(resolvedProjectRoot.path + "/") {
// Keep the hook's synchronous policy lookup bounded: the
// global file, repository root, and current project directory
// cover the supported effective layers without walking every
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,9 @@ public struct MobileWorkspaceAggregation: Sendable {
// Empty headers have no workspace row to namespace; use
// the already-namespaced group id only as a stable UI row
// identity, never as a workspace capability.
stamped.anchorWorkspaceID = stamped.id
stamped.anchorWorkspaceID = MobileWorkspacePreview.ID(
rawValue: stamped.id.rawValue
)
}
result.append(stamped)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -911,7 +911,7 @@ final class WorkspaceListTableCoordinator: NSObject, UITableViewDelegate,
/// Group actions are owned by the Mac connection, not by a particular
/// workspace row. The group snapshot carries that Mac-scoped capability,
/// including when the group has no live anchor row.
fileprivate func groupActionCapabilities(
func groupActionCapabilities(
for group: MobileWorkspaceGroupPreview
) -> MobileWorkspaceActionCapabilities {
if let capabilities = group.actionCapabilities {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ private actor MobileTaskModelDiscoveryProbe {

func run(_ command: String, timeout: Duration) -> String? {
commandCount += 1
return "opencode/dynamic-\(commandCount)"
return """
opencode/dynamic-\(commandCount)
{"name":"Dynamic \(commandCount)","variants":{}}
"""
}

func currentDate() -> Date {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,13 @@ extension RemoteDaemonUploadTests {
let temporaryFiles = try fileManager.contentsOfDirectory(
at: remoteDirectory,
includingPropertiesForKeys: nil
).filter { $0.lastPathComponent.contains(".tmp-") && $0.pathExtension != "pid" }
).filter {
guard let values = try? $0.resourceValues(forKeys: [.isDirectoryKey]),
values.isDirectory != true else {
return false
}
return $0.lastPathComponent.contains(".tmp-") && $0.pathExtension != "pid"
}
let temporaryFile = try #require(temporaryFiles.first)
#expect(temporaryFiles.count == 1)
#expect(try Data(contentsOf: temporaryFile) == payload)
Expand Down
7 changes: 5 additions & 2 deletions Sources/CmuxSettingsFileStore+Live.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,14 @@ extension CmuxSettingsFileStore {
/// Makes a newly bootstrapped primary file the durable owner of the resolved socket policy.
static func materializeBootstrapSocketPolicy(
in template: Data,
imported: ManagedSettingsValue?
imported: ManagedSettingsValue?,
defaults: UserDefaults = .standard
) -> Data {
guard let imported else { return template }
let resolved = socketModeAfterMissingPrimary(
prior: imported,
fallback: socketModeManagedValue(in: template)
fallback: socketModeManagedValue(in: template),
defaults: defaults
)
guard case .string(let rawMode) = resolved else { return template }
let source = (try? JSONCParser.source(data: template).text) ?? defaultTemplate()
Expand Down Expand Up @@ -101,6 +103,7 @@ extension CmuxSettingsFileStore {
/// Creates the process store wired to the host's shared reload coordinator.
static var appLive: CmuxSettingsFileStore {
CmuxSettingsFileStore(
languageSettingsStore: LanguageSettingsStore(defaults: .standard),
onWatchedFileReload: { source in
AppDelegate.shared?.reconcileSocketListenerConfiguration(source: source)
}
Expand Down
Loading
Loading