Skip to content

v0.11.0

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Jul 16:17
· 3 commits to main since this release
1c0f8a7

Added

  • atlas diff --json-tests: an opt-in flag (implies --json) adding a per-test tests array
    to the diff's JSON document, one entry per merged test identity with {test, baseline: {outcome, durationMs} | null, candidate: {outcome, durationMs} | null, stdout?} (issue #94,
    from StratumParity's evaluation of migrating off their hand-rolled diff_trx.py: their
    differential pipeline feeds a markdown job summary and a history dashboard, which need
    outcome, duration and per-test stdout, not just the diff categories the plain --json
    payload already carried). The TRX reader now also extracts Output/StdOut; duplicate names
    within a report merge worst-outcome-first exactly like the category diff, and the kept
    attempt's stdout survives that merge outright (no fallback to the losing attempt's stdout,
    unlike the failure message). v stays 1: purely additive, and the field is omitted
    entirely (not an empty array) unless the flag is given, so the default --json payload is
    unchanged. Full contract in docs/specs/2026-07-14-diff-command.md.

  • atlas stage <path/to/test-output-or-assembly.dll>: an explicit pre-stage entry point for
    the engine-assembly auto-staging preflight (issue #95, from StratumParity field feedback on
    0.10.0's issue #49 mechanism). Auto-staging behaves exactly as documented on a repointed
    VINTAGE_STORY: the module initializers re-stage the test-output copy on disk, but when
    engine types were already JITted before any Atlas code ran, THAT run still fails fast (the
    rerun goes green). run-parity.sh, StratumParity's differential CI script, runs each
    install exactly once, so it cannot absorb the fail-then-rerun and kept a per-install rebuild
    instead. atlas stage runs the identical decision (same EngineStaging/EngineStager core
    the module initializers use, zero duplicated logic) explicitly, before anything can bind the
    copy, so a one-shot script now reads atlas stage out/ && VINTAGE_STORY=... dotnet test out/ --no-build and boots green on the first try. Prints one line per file (pair): staged,
    already identical, or nothing to stage; exits 0 for staged-or-noop, 2 (the CLI's usage/setup
    bucket) for the core's defined failure cases (an unwritable output, an install without its
    pdb, a diverged copy already bound, the Newtonsoft direction refusal). The CLI project does
    not ship its own copy of Atlas.dll (that would shadow a scenario's own copy during atlas run's default probing, the exact version hazard ScenarioAssemblyResolver exists to avoid):
    it compiles against Atlas.dll (InternalsVisibleTo, reference excluded from the packed
    tool's own output and dependencies) and resolves the real bytes from the stage target's own
    directory at run time. That loader deliberately loads by bytes rather than by path, so
    Assembly.Location reads empty and Atlas's own module initializer (which runs a redundant
    best-effort staging pass the instant anything in the Atlas module is touched) treats "the
    assembly's own directory" as unresolvable and skips it, leaving this command's explicit call
    as the only one that ever touches the target directory. Never loads VintagestoryAPI.dll or
    VintagestoryLib.dll itself, proven by staging garbage, non-PE bytes cleanly in the E2E suite.