Skip to content

perf(ci): parallelize scheduled Miri and reduce resource outliers - #706

Open
st-dev-gh wants to merge 7 commits into
mainfrom
u/st-dev-gh/anvil-scheduled
Open

perf(ci): parallelize scheduled Miri and reduce resource outliers#706
st-dev-gh wants to merge 7 commits into
mainfrom
u/st-dev-gh/anvil-scheduled

Conversation

@st-dev-gh

@st-dev-gh st-dev-gh commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Problem

Scheduled runtime analysis runs four full-workspace Miri profiles:

  1. Plain Miri
  2. Tree Borrows
  3. Strict provenance
  4. Race coverage

The profiles intentionally remain sequential, but cargo miri test also ran every test artifact sequentially within each profile. This left most runner CPUs idle and made a few extreme artifacts dominate runtime and memory consumption.

This builds on #674, which optimizes the PR stacked-borrows job. That PR deliberately leaves the scheduled full-workspace profiles unchanged; this PR targets those scheduled runs.

Findings

A local Tree Borrows profile compiled the workspace once and measured all 226 test artifacts with four concurrent workers.

Most artifacts were small:

  • Median duration: 3 seconds
  • P95 duration: 2.37 minutes
  • Median peak working set: 129.5 MiB
  • P95 peak working set: 494.9 MiB

A few artifacts dominated resource use:

Artifact Duration Peak working set Finding
routerama over 9 observed CPU-hours 645 MiB A 4,096-segment stack-safety test made Miri interpret thousands of trie nodes
multitude::arena 27.5 minutes 13.49 GiB Large Drop slices caused extreme Miri metadata and destructor-processing costs
bytesbuf 1.6 minutes 4.27 GiB Significant memory consumer, but not the largest outlier
arena_vec 1.1 minutes 1.32 GiB Secondary memory outlier

Arena profiling isolated the largest consumers:

  • u16::MAX + 1 Drop-slice tests reached over 20 GiB when run separately.
  • Related overflow tests reached approximately 14 GiB.
  • Oversized 3,000-element Drop-slice tests reached approximately 8 GiB.
  • The zero-test harness baseline was only 193 MiB.

Runtime and memory were correlated across ordinary artifacts, but the extreme outliers were different problems: Routerama was CPU-bound while Arena was memory-bound.

Changes

Compile once and execute artifacts concurrently

The shared Miri recipe now:

  • Compiles all selected packages together with --no-run.
  • Excludes *_macros_impl code-generation crates; emitted code remains covered through consuming crates.
  • Parses Cargo's JSON compiler-artifact output.
  • Runs independent artifacts concurrently using cargo-miri runner.
  • Defaults to one worker per logical processor.
  • Supports an explicit ANVIL_MIRI_JOBS override.
  • Preserves workspace feature unification and each package's working directory.
  • Groups artifact output and reports all failed artifacts.
  • Starts historically long artifacts first to reduce the tail.

Compiling the selected workspace together is important: invoking Miri separately per package changes Cargo feature unification and previously broke packages relying on workspace-unified features.

The four Miri profiles themselves remain sequential.

Add resource telemetry

Scheduled logs now report:

  • Logical processor count
  • Selected artifact concurrency
  • GC-reported memory load and estimated headroom
  • Memory telemetry when each artifact starts and completes

The telemetry is informational and does not silently reduce concurrency.

Bound Routerama's deep-trie workload

failed_build_discards_deep_source_trie_iteratively retains 4,096 segments natively but uses 512 under Miri.

This preserves the full native stack-safety stress test while still exercising deep trie construction, conflict traversal, and iterative destruction under Miri.

Measured Tree Borrows runtime fell from the multi-hour outlier to approximately 5.7 minutes.

Reduce Arena's Miri memory pressure

Tests whose only purpose is validating runtime length boundaries above u16::MAX are ignored under Miri while retaining their full native coverage.

Oversized Drop-slice tests still exercise the same allocation and destructor paths, but under Miri they use:

  • 513 elements instead of 3,000
  • A 4 KiB normal-allocation threshold to ensure the oversized path remains selected

The complete Arena artifact now measures:

Metric Before After
Peak working set 13.49 GiB 5.16 GiB
Duration 27.5 minutes 10.0 minutes
Miri-enabled tests 445 passed 435 passed
Intentionally ignored tests 3 13

The excluded cases remain covered at their original sizes by native tests.

Exclude an unsupported strict-provenance dependency path

On Linux and Linux ARM, strict-provenance Miri rejected an integer-to-pointer conversion inside parking_lot_core while running:

internity::freeze_races_writer_and_stays_prefix_consistent

This is a platform-specific dependency implementation rather than an Internity provenance violation. The test is now ignored only for strict-provenance Miri and remains covered by:

  • Native tests
  • Plain Miri
  • Tree Borrows
  • Race coverage

Results

The latest Windows scheduled runtime-analysis job completed successfully.

Linux and Linux ARM also completed the optimized Arena and Routerama artifacts without runner loss or memory termination. They subsequently exposed the separate parking_lot_core strict-provenance incompatibility addressed by this PR.

Coverage trade-offs

  • Native stress-test sizes are unchanged.
  • All selected runtime workspace packages are still compiled together.
  • *_macros_impl crates are excluded because their tests parse and compare generated tokens rather than execute runtime code; emitted code remains covered by consuming crates.
  • Scheduled profiles continue to cover the full workspace.
  • Only repetitive runtime-boundary breadth with no additional memory-safety coverage is excluded from Miri.
  • The strict-provenance exclusion applies only to the dependency path that Miri cannot interpret.
  • The four Miri profiles retain their existing order and configuration.

Copilot AI lite review requested due to automatic review settings August 27, 2026 15:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR optimizes the scheduled full-workspace Miri runtime-analysis runs by compiling once and then executing test artifacts concurrently, while also reducing a few known Miri resource outliers (CPU and memory) to improve job stability and throughput.

Changes:

  • Adds a shared PowerShell-based Miri runner that builds once (--no-run), discovers test artifacts from Cargo JSON output, and runs them concurrently with per-artifact log grouping and telemetry.
  • Reduces Miri-only workload in a few high-cost test suites (Routerama deep trie, Multitude arena drop-slice breadth, and Multitude macros pretty-printing).
  • Adds a strict-provenance-only ignore for an Internity test that triggers an unsupported dependency behavior on Unix.

Reviewed changes

Copilot reviewed 9 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
justfiles/anvil/checks/miri.just Introduces _anvil-miri-test to compile once, run artifacts in parallel, and emit resource telemetry.
justfiles/anvil/checks/miri-tree-borrows.just Switches tree-borrows profile to use the shared parallel runner.
justfiles/anvil/checks/miri-strict-provenance.just Switches strict-provenance profile to use the shared parallel runner.
justfiles/anvil/checks/miri-race-coverage.just Switches race-coverage profile to use the shared parallel runner.
crates/routerama/src/dyn_builder.rs Reduces deep-trie segment count under Miri to bound worst-case CPU time.
crates/multitude/tests/arena.rs Ignores certain runtime-boundary tests under Miri and reduces oversized drop-slice sizes under Miri to lower peak memory.
crates/multitude_macros_impl/src/lib.rs Avoids formatting-only pretty-print work under Miri by comparing normalized token streams instead.
crates/multitude_macros_impl/Cargo.toml Removes prettyplease dev-dependency no longer needed by tests.
crates/internity/tests/basic.rs Ignores one test only under strict-provenance Miri due to an unsupported dependency cast path on Unix.
Cargo.lock Updates lockfile to reflect removal of the prettyplease dependency.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread crates/routerama/src/dyn_builder.rs
Comment thread crates/multitude_macros_impl/src/lib.rs Outdated
@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.0%. Comparing base (356dc63) to head (dd0c81a).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #706   +/-   ##
=======================================
  Coverage   100.0%   100.0%           
=======================================
  Files         563      563           
  Lines       61068    61068           
=======================================
  Hits        61068    61068           
Flag Coverage Δ
linux 98.6% <100.0%> (?)
linux-arm 98.6% <100.0%> (?)
windows 98.6% <100.0%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment thread crates/multitude_macros_impl/src/lib.rs Outdated
Comment thread justfiles/anvil/checks/miri-race-coverage.just
Copilot AI review requested due to automatic review settings August 28, 2026 07:07

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

crates/internity/tests/basic.rs:596

  • This cfg_attr ignores the test whenever miri_strict_provenance is set, even in non-Miri native builds that might also define that cfg. If the intent is to ignore only for strict-provenance Miri, gate it with all(miri, miri_strict_provenance) so native coverage remains unaffected by an incidental cfg flag.
#[cfg_attr(
    miri_strict_provenance,
    ignore = "parking_lot_core uses integer-to-pointer casts on Unix, which strict-provenance Miri rejects"
)]

Comment thread justfiles/anvil/checks/miri.just Outdated
Comment thread justfiles/anvil/checks/miri.just Outdated
Copilot AI review requested due to automatic review settings August 28, 2026 08:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 15 out of 15 changed files in this pull request and generated no new comments.

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

justfiles/anvil/checks/miri.just:166

  • Get-MemoryTelemetry forces a full GC + finalizer drain every time an artifact starts/completes. With dozens/hundreds of artifacts this can add substantial overhead and also perturbs the very resource profile you're trying to observe (collections can suspend all managed threads), which undercuts the goal of measuring Miri concurrency/resource outliers.

Consider treating the GC stats as passive telemetry here: read GetGCMemoryInfo() without forcing a collection. You already run one collection before starting the parallel work.

                function Get-MemoryTelemetry {
                    [GC]::Collect()
                    [GC]::WaitForPendingFinalizers()
                    $info = [GC]::GetGCMemoryInfo()

Stanislav Andras (from Dev Box) and others added 6 commits August 28, 2026 14:39
Compile each profile once to preserve workspace feature unification, then run its test artifacts with bounded parallelism and longest-first scheduling. Avoid formatting-only macro test work under Miri while retaining normal syntax validation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d9192741-03aa-4e35-aaae-5c58ddc3975b
Select one concurrent test artifact per logical processor and log GC memory telemetry so scheduled runs can reveal whether memory pressure limits the CPU-based configuration.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d9192741-03aa-4e35-aaae-5c58ddc3975b
Preserve native stress coverage while bounding Routerama depth and high-cardinality Arena tests under Miri.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d9192741-03aa-4e35-aaae-5c58ddc3975b
Keep the concurrency test in native and other Miri profiles while excluding the Unix parking_lot path that strict provenance cannot interpret.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d9192741-03aa-4e35-aaae-5c58ddc3975b
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d9192741-03aa-4e35-aaae-5c58ddc3975b
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d9192741-03aa-4e35-aaae-5c58ddc3975b
Copilot AI review requested due to automatic review settings August 28, 2026 12:40
@st-dev-gh
st-dev-gh force-pushed the u/st-dev-gh/anvil-scheduled branch 2 times, most recently from f1904f4 to 61ea2e8 Compare August 28, 2026 12:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 15 out of 15 changed files in this pull request and generated no new comments.

@github-actions

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown

⚠️ Potential breaking changes detected

cargo semver-checks flagged the following on this PR. This is informational -- breaking changes between commits are expected; the major-version bump happens at release time, not on every PR.

anyspawn

     Cloning origin/main
    Building anyspawn v0.8.0 (current)
       Built [   3.293s] (current)
     Parsing anyspawn v0.8.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-anyspawn-0_8_0-default-390de13be8d362f8/target/doc/anyspawn.json
(supported formats are v55, v56, v57)

anyspawn_azure

     Cloning origin/main
    Building anyspawn_azure v0.3.0 (current)
       Built [  11.100s] (current)
     Parsing anyspawn_azure v0.3.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-anyspawn_azure-0_3_0-default-8a8c741d160dc3b0/target/doc/anyspawn_azure.json
(supported formats are v55, v56, v57)

arty_executor

     Cloning origin/main
    Building arty_executor v0.1.1 (current)
       Built [   3.174s] (current)
     Parsing arty_executor v0.1.1 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-arty_executor-0_1_1-default-58ae7becc93be6ab/target/doc/arty_executor.json
(supported formats are v55, v56, v57)

automation

     Cloning origin/main
    Building automation v0.1.0 (current)
       Built [   4.461s] (current)
     Parsing automation v0.1.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-automation-0_1_0-default-01666ec060466c14/target/doc/automation.json
(supported formats are v55, v56, v57)

bytesbuf

     Cloning origin/main
    Building bytesbuf v0.9.0 (current)
       Built [   3.359s] (current)
     Parsing bytesbuf v0.9.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-bytesbuf-0_9_0-default-50f7e8357546d2b2/target/doc/bytesbuf.json
(supported formats are v55, v56, v57)

bytesbuf_io

     Cloning origin/main
    Building bytesbuf_io v0.9.0 (current)
       Built [   3.991s] (current)
     Parsing bytesbuf_io v0.9.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-bytesbuf_io-0_9_0-default-af8b2c0d74d14958/target/doc/bytesbuf_io.json
(supported formats are v55, v56, v57)

cachet

     Cloning origin/main
    Building cachet v0.13.0 (current)
       Built [   8.846s] (current)
     Parsing cachet v0.13.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-cachet-0_13_0-default-4aa0ab9725815152/target/doc/cachet.json
(supported formats are v55, v56, v57)

cachet_memory

     Cloning origin/main
    Building cachet_memory v0.7.0 (current)
       Built [   5.827s] (current)
     Parsing cachet_memory v0.7.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-cachet_memory-0_7_0-default-01666ec060466c14/target/doc/cachet_memory.json
(supported formats are v55, v56, v57)

cachet_service

     Cloning origin/main
    Building cachet_service v0.5.0 (current)
       Built [   3.377s] (current)
     Parsing cachet_service v0.5.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-cachet_service-0_5_0-default-01666ec060466c14/target/doc/cachet_service.json
(supported formats are v55, v56, v57)

cachet_tier

     Cloning origin/main
    Building cachet_tier v0.5.0 (current)
       Built [   3.547s] (current)
     Parsing cachet_tier v0.5.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-cachet_tier-0_5_0-default-d7b8c5ec6ce39049/target/doc/cachet_tier.json
(supported formats are v55, v56, v57)

data_privacy

     Cloning origin/main
    Building data_privacy v0.12.4 (current)
       Built [   2.434s] (current)
     Parsing data_privacy v0.12.4 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-data_privacy-0_12_4-default-08f47fc29330dc5c/target/doc/data_privacy.json
(supported formats are v55, v56, v57)

data_privacy_macros_impl

     Cloning origin/main
    Building data_privacy_macros_impl v0.10.3 (current)
       Built [   1.418s] (current)
     Parsing data_privacy_macros_impl v0.10.3 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-data_privacy_macros_impl-0_10_3-default-01666ec060466c14/target/doc/data_privacy_macros_impl.json
(supported formats are v55, v56, v57)

fetch

     Cloning origin/main
    Building fetch v0.16.1 (current)
       Built [  29.441s] (current)
     Parsing fetch v0.16.1 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-fetch-0_16_1-default-325273521c672bb6/target/doc/fetch.json
(supported formats are v55, v56, v57)

fetch_azure

     Cloning origin/main
    Building fetch_azure v0.6.1 (current)
       Built [  15.300s] (current)
     Parsing fetch_azure v0.6.1 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-fetch_azure-0_6_1-default-01666ec060466c14/target/doc/fetch_azure.json
(supported formats are v55, v56, v57)

fetch_hyper

     Cloning origin/main
    Building fetch_hyper v0.7.1 (current)
       Built [  12.323s] (current)
     Parsing fetch_hyper v0.7.1 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-fetch_hyper-0_7_1-default-66e07b58f00fba56/target/doc/fetch_hyper.json
(supported formats are v55, v56, v57)

fetch_tls

     Cloning origin/main
    Building fetch_tls v0.4.0 (current)
       Built [   5.668s] (current)
     Parsing fetch_tls v0.4.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-fetch_tls-0_4_0-default-96384260aee26d8f/target/doc/fetch_tls.json
(supported formats are v55, v56, v57)

fundle

     Cloning origin/main
    Building fundle v0.3.5 (current)
       Built [   2.652s] (current)
     Parsing fundle v0.3.5 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-fundle-0_3_5-default-01666ec060466c14/target/doc/fundle.json
(supported formats are v55, v56, v57)

fundle_macros_impl

     Cloning origin/main
    Building fundle_macros_impl v0.3.5 (current)
       Built [   1.714s] (current)
     Parsing fundle_macros_impl v0.3.5 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-fundle_macros_impl-0_3_5-default-01666ec060466c14/target/doc/fundle_macros_impl.json
(supported formats are v55, v56, v57)

http_extensions

     Cloning origin/main
    Building http_extensions v0.10.0 (current)
       Built [   8.563s] (current)
     Parsing http_extensions v0.10.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-http_extensions-0_10_0-default-af0120d9f0530326/target/doc/http_extensions.json
(supported formats are v55, v56, v57)

internity

     Cloning origin/main
    Building internity v0.2.0 (current)
       Built [   3.406s] (current)
     Parsing internity v0.2.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-internity-0_2_0-default-8d74fec22ef71f4f/target/doc/internity.json
(supported formats are v55, v56, v57)

internity_macros_impl

     Cloning origin/main
    Building internity_macros_impl v0.1.0 (current)
       Built [   1.788s] (current)
     Parsing internity_macros_impl v0.1.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-internity_macros_impl-0_1_0-default-01666ec060466c14/target/doc/internity_macros_impl.json
(supported formats are v55, v56, v57)

msvc_spectre_libs

     Cloning origin/main
    Building msvc_spectre_libs v0.2.0 (current)
       Built [   3.204s] (current)
     Parsing msvc_spectre_libs v0.2.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-msvc_spectre_libs-0_2_0-default-7bc93237a011c201/target/doc/msvc_spectre_libs.json
(supported formats are v55, v56, v57)

msvc_spectre_libs_build

     Cloning origin/main
    Building msvc_spectre_libs_build v0.1.0 (current)
       Built [   2.869s] (current)
     Parsing msvc_spectre_libs_build v0.1.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-msvc_spectre_libs_build-0_1_0-default-01666ec060466c14/target/doc/msvc_spectre_libs_build.json
(supported formats are v55, v56, v57)

multitude

     Cloning origin/main
    Building multitude v0.9.0 (current)
       Built [   7.440s] (current)
     Parsing multitude v0.9.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-multitude-0_9_0-default-1502d9aa811debfb/target/doc/multitude.json
(supported formats are v55, v56, v57)

multitude_macros_impl

     Cloning origin/main
    Building multitude_macros_impl v0.1.1 (current)
       Built [   1.798s] (current)
     Parsing multitude_macros_impl v0.1.1 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-multitude_macros_impl-0_1_1-default-01666ec060466c14/target/doc/multitude_macros_impl.json
(supported formats are v55, v56, v57)

observed

     Cloning origin/main
    Building observed v0.25.0 (current)
       Built [   4.416s] (current)
     Parsing observed v0.25.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-observed-0_25_0-default-d7b8c5ec6ce39049/target/doc/observed.json
(supported formats are v55, v56, v57)

observed_macros_impl

     Cloning origin/main
    Building observed_macros_impl v0.24.0 (current)
       Built [   1.765s] (current)
     Parsing observed_macros_impl v0.24.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-observed_macros_impl-0_24_0-default-01666ec060466c14/target/doc/observed_macros_impl.json
(supported formats are v55, v56, v57)

observed_testing

     Cloning origin/main
    Building observed_testing v0.0.0 (current)
       Built [   4.811s] (current)
     Parsing observed_testing v0.0.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-observed_testing-0_0_0-default-01666ec060466c14/target/doc/observed_testing.json
(supported formats are v55, v56, v57)

observed_utils

     Cloning origin/main
    Building observed_utils v0.2.0 (current)
       Built [   4.595s] (current)
     Parsing observed_utils v0.2.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-observed_utils-0_2_0-default-01666ec060466c14/target/doc/observed_utils.json
(supported formats are v55, v56, v57)

ohno

     Cloning origin/main
    Building ohno v0.5.0 (current)
       Built [   2.775s] (current)
     Parsing ohno v0.5.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-ohno-0_5_0-default-fd2f176c69f3ec17/target/doc/ohno.json
(supported formats are v55, v56, v57)

ohno_macros_impl

     Cloning origin/main
    Building ohno_macros_impl v0.5.1 (current)
       Built [   1.777s] (current)
     Parsing ohno_macros_impl v0.5.1 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-ohno_macros_impl-0_5_1-default-01666ec060466c14/target/doc/ohno_macros_impl.json
(supported formats are v55, v56, v57)

rallocator

     Cloning origin/main
    Building rallocator v0.1.0 (current)
       Built [   2.573s] (current)
     Parsing rallocator v0.1.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-rallocator-0_1_0-default-f875cd4edfafef03/target/doc/rallocator.json
(supported formats are v55, v56, v57)

recoverable

     Cloning origin/main
    Building recoverable v0.2.0 (current)
       Built [   0.264s] (current)
     Parsing recoverable v0.2.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-recoverable-0_2_0-default-01666ec060466c14/target/doc/recoverable.json
(supported formats are v55, v56, v57)

rest_over_grpc

     Cloning origin/main
    Building rest_over_grpc v0.2.0 (current)
       Built [   8.890s] (current)
     Parsing rest_over_grpc v0.2.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-rest_over_grpc-0_2_0-default-251561ef64dea3fc/target/doc/rest_over_grpc.json
(supported formats are v55, v56, v57)

rest_over_grpc_examples

     Cloning origin/main
    Building rest_over_grpc_examples v0.0.0 (current)
       Built [  18.358s] (current)
     Parsing rest_over_grpc_examples v0.0.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-rest_over_grpc_examples-0_0_0-default-01666ec060466c14/target/doc/rest_over_grpc_examples.json
(supported formats are v55, v56, v57)

rest_over_grpc_tests

     Cloning origin/main
    Building rest_over_grpc_tests v0.0.0 (current)
       Built [  18.072s] (current)
     Parsing rest_over_grpc_tests v0.0.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-rest_over_grpc_tests-0_0_0-default-01666ec060466c14/target/doc/rest_over_grpc_tests.json
(supported formats are v55, v56, v57)

routerama

     Cloning origin/main
    Building routerama v0.1.0 (current)
       Built [   3.638s] (current)
     Parsing routerama v0.1.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-routerama-0_1_0-default-385221f229ef9206/target/doc/routerama.json
(supported formats are v55, v56, v57)

seatbelt

     Cloning origin/main
    Building seatbelt v0.8.0 (current)
       Built [   4.452s] (current)
     Parsing seatbelt v0.8.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-seatbelt-0_8_0-default-0cae1599156c7909/target/doc/seatbelt.json
(supported formats are v55, v56, v57)

seatbelt_http

     Cloning origin/main
    Building seatbelt_http v0.8.0 (current)
       Built [   8.185s] (current)
     Parsing seatbelt_http v0.8.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-seatbelt_http-0_8_0-default-b6ff85dfca11b668/target/doc/seatbelt_http.json
(supported formats are v55, v56, v57)

templated_uri

     Cloning origin/main
    Building templated_uri v0.5.0 (current)
       Built [   5.802s] (current)
     Parsing templated_uri v0.5.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-templated_uri-0_5_0-default-4343b0346f1eaeb1/target/doc/templated_uri.json
(supported formats are v55, v56, v57)

templated_uri_macros_impl

     Cloning origin/main
    Building templated_uri_macros_impl v0.5.0 (current)
       Built [   4.597s] (current)
     Parsing templated_uri_macros_impl v0.5.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-templated_uri_macros_impl-0_5_0-default-01666ec060466c14/target/doc/templated_uri_macros_impl.json
(supported formats are v55, v56, v57)

thread_aware

     Cloning origin/main
    Building thread_aware v0.11.0 (current)
       Built [   5.122s] (current)
     Parsing thread_aware v0.11.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-thread_aware-0_11_0-default-b9ec4e9faeb9d95c/target/doc/thread_aware.json
(supported formats are v55, v56, v57)

thread_aware_benchmarking

     Cloning origin/main
    Building thread_aware_benchmarking v0.0.0 (current)
       Built [   3.063s] (current)
     Parsing thread_aware_benchmarking v0.0.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-thread_aware_benchmarking-0_0_0-default-01666ec060466c14/target/doc/thread_aware_benchmarking.json
(supported formats are v55, v56, v57)

thread_aware_macros_impl

     Cloning origin/main
    Building thread_aware_macros_impl v0.11.0 (current)
       Built [   1.713s] (current)
     Parsing thread_aware_macros_impl v0.11.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-thread_aware_macros_impl-0_11_0-default-01666ec060466c14/target/doc/thread_aware_macros_impl.json
(supported formats are v55, v56, v57)

tick

     Cloning origin/main
    Building tick v0.6.0 (current)
       Built [   2.226s] (current)
     Parsing tick v0.6.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-tick-0_6_0-default-d3b4fd8dc0a15942/target/doc/tick.json
(supported formats are v55, v56, v57)

uniflight

     Cloning origin/main
    Building uniflight v0.5.0 (current)
       Built [   2.948s] (current)
     Parsing uniflight v0.5.0 (current)
error: unsupported rustdoc format v60 for file: /home/runner/work/oxidizer/oxidizer/target/semver-checks/local-uniflight-0_5_0-default-01666ec060466c14/target/doc/uniflight.json
(supported formats are v55, v56, v57)

Copilot AI review requested due to automatic review settings August 28, 2026 14:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 15 out of 15 changed files in this pull request and generated no new comments.

Suppressed comments (1)

crates/routerama/src/dyn_builder.rs:154

  • The #[cfg(test)] mod tests block in this file is missing the repo-standard #[cfg_attr(coverage_nightly, coverage(off))] annotation used to keep unit-test-only lines out of the coverage gate (e.g. crates/tick/src/error.rs:103-105). Since this PR modifies the test module, please add the attribute above the module so coverage instrumentation focuses on non-test code.
    #[cfg(miri)]
    const DEEP_TRIE_SEGMENTS: usize = 512;
    #[cfg(not(miri))]
    const DEEP_TRIE_SEGMENTS: usize = 4_096;


# Run selected Miri test artifacts with CPU-based parallelism.
[script("pwsh")]
_anvil-miri-test:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is intentional, but I really would like to already see an accompanying PR into cargo-anvil (or at least a cargo tool that does this).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants