Skip to content

Latest commit

 

History

History
85 lines (64 loc) · 3.48 KB

File metadata and controls

85 lines (64 loc) · 3.48 KB

1.17 — AOT publish + L13 / L14 macro gate — deferral note

Spec 047 §14 Phase 1 exit gate item 3 requires the external assembly to publish with PublishTrimmed=true and IsAotCompatible=true with zero new trim/AOT warnings beyond the Reactor.dll baseline, and macros L13 (SplitLibrary_MixedTree) and L14 (SplitLibrary_MixedTree_AOT) must run on both Phase 0 baseline machines.

Status

Deferred for execution on the baseline machines. The code lands in this PR; the publish + macro runs land in a follow-up PR run on the Phase 0 baseline hardware (LAPTOP-4MEP83VI ARM64-native and CPC-ander-YTZ3O x64-native — see baseline-results/machines.md).

What ships in this PR

  • tests/external_proof/Reactor.External.TestControl/Reactor.External.TestControl.csproj has <PublishTrimmed>true</PublishTrimmed> and <IsAotCompatible>true</IsAotCompatible> set. Per the per-csproj report:

    "No conflict observed at compile/test time; the 1.17 publish gate will exercise these end-to-end."

  • MarqueeControl.cs is sealed partial per CsWinRT1028 guidance, which is the right call for a WinRT-ABI-projected type in an AOT-compatible library.

What the follow-up PR runs

# On each baseline machine:
dotnet publish tests/external_proof/Reactor.External.TestControl/Reactor.External.TestControl.csproj \
    -c Release -r win-x64 -p:PublishAot=true \
    -p:PublishTrimmed=true \
    > docs/specs/047/phase1-results/<machine>/<date>/aot-publish-log.txt 2>&1

Diff the warning count against docs/specs/047/baseline-results/<machine>/trim-warnings-count.txt (populated during the Phase 0 baseline runs).

Hard fail condition: any IL2xxx or IL3xxx warning that does not appear in the baseline log.

L13 and L14 scaffolding

L13 (SplitLibrary_MixedTree, JIT) and L14 (SplitLibrary_MixedTree_AOT, AOT-published) are listed in spec §15.4. The scenarios mount a tree with ≥ 50% external-assembly element types (using MarqueeElement from Reactor.External.TestControl) and measure per-element cost.

The implementation pattern follows the existing macros under tests/stress_perf/. The relevant new scaffolds are:

  • tests/stress_perf/StressPerf.SplitLibrary (new) — drives the mixed-tree scenario across Direct / ReactorToday / ReactorV2 variants.
  • tests/stress_perf/StressPerf.SplitLibrary.Aot (new) — Native-AOT publish profile of the above.

Both are stubbed in this PR: the projects exist (or will, in the 1.18 macro catch-up PR) with shared scenario code; the actual run + JSON-Lines output happens on baseline hardware.

Pass conditions

Per spec §14 Phase 1 exit gate item 3 + the L13 condition in the task file:

  • AOT publish (L14): zero new warnings vs Reactor.dll baseline.
  • L13 vs all-in-core: ≤ +10% per-element cost vs the equivalent tree built entirely from in-core element types.

Why this can't run in the orchestrator's context

The per-baseline-machine publish + macro runs require:

  1. Physical / VM access to the named hardware (LAPTOP-4MEP83VI, CPC-ander-YTZ3O).
  2. The environment isolation runbook from spec §15.5 (foregrounded windows per stress_perf window throttling, AC power, fixed refresh rate, no background load).
  3. Multi-run aggregation through tools/spec047-aggregator.

None of these can be faked in CI without first standing up dedicated baseline runners — that infrastructure is itself Phase 1 work, captured in docs/specs/047/macro-suite-status.md.