Commit c460f09
test(aot): selftest runner crash/hang harness for NativeAOT baseline
Adds infrastructure to run the selftest fixture suite under NativeAOT
without a single crashing fixture killing the entire run, capturing a
shippable AOT baseline (573/735 fixtures run cleanly).
Runner (`SelfTestRunner.cs`):
- 15s per-fixture managed-hang watchdog (`Task.WhenAny` against
`Task.Delay`), reports TIMEOUT and continues with next fixture
- `DefaultAotSkipPatterns` baked into the runner — fixtures known to
silently terminate the process under AOT with
`STATUS_FATAL_USER_CALLBACK_EXCEPTION` (0xC000027B). The watchdog
cannot catch these because the process dies in native code before
any managed continuation runs.
- `REACTOR_AOT_SKIP` env var appends to the default skip list, with
exact-match or `Prefix*` wildcard patterns — lets you iterate on new
skips without rebuilding the native binary
- Skip path emits a TAP `# SKIP` directive and yields at
`DispatcherQueuePriority.Low` between each iteration so WinUI's
render pass actually runs; without this, a run of consecutive skips
drains the dispatcher queue faster than rendering catches up and the
title bar appears frozen at the prior fixture's index
- Pre-fixture low-priority yield so the title bar repaints *before*
the next fixture executes — otherwise a fixture that crashes the
process leaves the title showing the previous fixture's name and
the failure looks attributed to the wrong fixture
- AOT detection via `RuntimeFeature.IsDynamicCodeSupported`; skip list
is a no-op under the JIT
Harness (`Harness.cs`):
- New `MarkFixtureSkipped(int)` paints the segment-bar cell amber so
skips are visually distinguishable from green (pass) and red (fail)
Host csproj:
- `PublishAotInternal=true` opt-in property gates the `PublishAot`
property to just this host project — `PublishAot=true` at the
command line would otherwise propagate to the analyzer/generator
projects which target `netstandard2.0` and fail restore
AOT baseline (this commit's run):
- 735 total fixtures; 573 ran; 162 skipped; 87 failed checks across
27 fixtures; clean exit 1 (no native crash)
- Failures cluster as: Loc_* (22, satellite/MessageFormat reflection),
PropertyGrid family (~28, reflection-based property discovery
losing members under trim — same shape as the DataGrid<T> fix),
Devtools_* (8), NavUpdate_* (3), misc (6)
- JIT reference: 735 ran, 2614 ok, 0 failures — confirms the
underlying code is healthy and every regression is AOT-specific
This is a baseline harness, not the AOT fixes themselves. Subsequent
work can narrow wildcard skips (`EchoSuppress_*`, `Commanding_*`,
`SelectionEvt_*`, etc. were skipped speculatively as cluster
mitigation; many likely pass individually) and tackle the failing
fixtures + native crash root causes.
Also includes a benign alphabetization of `skills/reactor.api.txt`
and its plugins/ mirror, left in the working tree from prior work
on this branch.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 6e575e2 commit c460f09
5 files changed
Lines changed: 172 additions & 23 deletions
File tree
- plugins/reactor/skills/reactor-dsl/references
- skills
- tests/Reactor.AppTests.Host
- SelfTest
Lines changed: 11 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
83 | | - | |
84 | 82 | | |
85 | 83 | | |
86 | 84 | | |
| 85 | + | |
| 86 | + | |
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
| |||
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
252 | | - | |
253 | 252 | | |
| 253 | + | |
254 | 254 | | |
255 | 255 | | |
256 | 256 | | |
| |||
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
| 311 | + | |
311 | 312 | | |
312 | 313 | | |
313 | 314 | | |
314 | | - | |
315 | 315 | | |
316 | 316 | | |
317 | 317 | | |
318 | | - | |
319 | 318 | | |
320 | 319 | | |
321 | 320 | | |
322 | 321 | | |
323 | 322 | | |
| 323 | + | |
324 | 324 | | |
325 | 325 | | |
326 | 326 | | |
| |||
422 | 422 | | |
423 | 423 | | |
424 | 424 | | |
| 425 | + | |
425 | 426 | | |
426 | 427 | | |
427 | | - | |
428 | 428 | | |
429 | 429 | | |
430 | 430 | | |
| |||
501 | 501 | | |
502 | 502 | | |
503 | 503 | | |
504 | | - | |
505 | 504 | | |
506 | 505 | | |
507 | 506 | | |
| |||
525 | 524 | | |
526 | 525 | | |
527 | 526 | | |
| 527 | + | |
528 | 528 | | |
| 529 | + | |
529 | 530 | | |
530 | 531 | | |
531 | 532 | | |
| |||
623 | 624 | | |
624 | 625 | | |
625 | 626 | | |
626 | | - | |
627 | 627 | | |
628 | 628 | | |
629 | 629 | | |
| |||
643 | 643 | | |
644 | 644 | | |
645 | 645 | | |
| 646 | + | |
646 | 647 | | |
647 | 648 | | |
648 | | - | |
649 | 649 | | |
650 | 650 | | |
651 | 651 | | |
| |||
673 | 673 | | |
674 | 674 | | |
675 | 675 | | |
| 676 | + | |
676 | 677 | | |
677 | 678 | | |
678 | | - | |
679 | 679 | | |
680 | 680 | | |
681 | 681 | | |
| |||
690 | 690 | | |
691 | 691 | | |
692 | 692 | | |
| 693 | + | |
693 | 694 | | |
694 | 695 | | |
695 | 696 | | |
696 | 697 | | |
697 | | - | |
698 | 698 | | |
699 | 699 | | |
700 | 700 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
83 | | - | |
84 | 82 | | |
85 | 83 | | |
86 | 84 | | |
| 85 | + | |
| 86 | + | |
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
| |||
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
252 | | - | |
253 | 252 | | |
| 253 | + | |
254 | 254 | | |
255 | 255 | | |
256 | 256 | | |
| |||
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
| 311 | + | |
311 | 312 | | |
312 | 313 | | |
313 | 314 | | |
314 | | - | |
315 | 315 | | |
316 | 316 | | |
317 | 317 | | |
318 | | - | |
319 | 318 | | |
320 | 319 | | |
321 | 320 | | |
322 | 321 | | |
323 | 322 | | |
| 323 | + | |
324 | 324 | | |
325 | 325 | | |
326 | 326 | | |
| |||
422 | 422 | | |
423 | 423 | | |
424 | 424 | | |
| 425 | + | |
425 | 426 | | |
426 | 427 | | |
427 | | - | |
428 | 428 | | |
429 | 429 | | |
430 | 430 | | |
| |||
501 | 501 | | |
502 | 502 | | |
503 | 503 | | |
504 | | - | |
505 | 504 | | |
506 | 505 | | |
507 | 506 | | |
| |||
525 | 524 | | |
526 | 525 | | |
527 | 526 | | |
| 527 | + | |
528 | 528 | | |
| 529 | + | |
529 | 530 | | |
530 | 531 | | |
531 | 532 | | |
| |||
623 | 624 | | |
624 | 625 | | |
625 | 626 | | |
626 | | - | |
627 | 627 | | |
628 | 628 | | |
629 | 629 | | |
| |||
643 | 643 | | |
644 | 644 | | |
645 | 645 | | |
| 646 | + | |
646 | 647 | | |
647 | 648 | | |
648 | | - | |
649 | 649 | | |
650 | 650 | | |
651 | 651 | | |
| |||
673 | 673 | | |
674 | 674 | | |
675 | 675 | | |
| 676 | + | |
676 | 677 | | |
677 | 678 | | |
678 | | - | |
679 | 679 | | |
680 | 680 | | |
681 | 681 | | |
| |||
690 | 690 | | |
691 | 691 | | |
692 | 692 | | |
| 693 | + | |
693 | 694 | | |
694 | 695 | | |
695 | 696 | | |
696 | 697 | | |
697 | | - | |
698 | 698 | | |
699 | 699 | | |
700 | 700 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
15 | 19 | | |
16 | 20 | | |
17 | 21 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
139 | 139 | | |
140 | 140 | | |
141 | 141 | | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
142 | 152 | | |
143 | 153 | | |
144 | 154 | | |
| |||
0 commit comments