Skip to content

docs(thread_aware): add a thread-aware authoring guide - #742

Open
Pato Sandaña (psandana) wants to merge 6 commits into
mainfrom
u/psandana/thread-aware-authoring-guide
Open

docs(thread_aware): add a thread-aware authoring guide#742
Pato Sandaña (psandana) wants to merge 6 commits into
mainfrom
u/psandana/thread-aware-authoring-guide

Conversation

@psandana

Copy link
Copy Markdown
Contributor

What & why

Adds a _documentation module to thread_aware with a task-oriented authoring guide, the piece the crate''s (otherwise reference-style) docs are missing. Follows the recoverable::_documentation pattern and renders on docs.rs.

Addresses 7552151 (publish the thread-aware authoring guide) and folds in 7722787 (the 3S / oxidizer-spawner migration experience).

Contents

  • Why thread-awareness exists — the thread-per-core motivation and the "relocation is a performance cooperation, not a correctness guarantee" principle.
  • Authoring a type — prefer the derive; #[thread_aware(skip)]; what the field-type bounds mean; hand-written impls.
  • Choosing an implementation — derive vs. manual vs. [Unaware] vs. strategy [Arc], as a decision table.
  • Anti-patterns (from the 3S migration) — Clone copies stored affinity instead of relocating; #[thread_aware(skip)] on a sole field is a silent no-op; don''t trust inherited markings; relocate the whole graph once at the boundary.
  • Testing — the Tracker observation pattern (assert relocation reaches non-skipped fields and not skipped ones).
  • Debugging & telemetry*.thread_mismatch-style warnings, and why their absence doesn''t prove correctness.
  • Validating correctness — what the compiler/derive/clippy check, and what only your tests can.

Notes

  • All four code examples are doctested and pass under default and all-feature builds.
  • The "what the generated bounds mean" section describes the field-type bound model implemented in fix(thread_aware_macros): express derive bounds on the relocated field type #740 (sibling story under the same feature); the two are best merged together.
  • This is an initial draft — happy to adjust depth, structure, or voice to the team''s preference.

Refs AB#7552151, AB#7722787.

Copilot AI lite review requested due to automatic review settings September 8, 2026 13:15

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.

🟡 Changes recommended

_documentation is currently exported unconditionally, which unintentionally commits it as part of the crate’s normal public API instead of keeping it doc/test-only like other crates’ _documentation modules.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds a task-oriented authoring guide for thread_aware by introducing a dedicated _documentation module intended to render on docs.rs and complement the crate’s existing reference-style docs.

Changes:

  • Exposes a new _documentation module from thread_aware to host longer-form guidance.
  • Adds a comprehensive authoring guide covering implementation choices, common pitfalls, testing patterns, and debugging/telemetry.
File summaries
File Description
crates/thread_aware/src/lib.rs Exposes the new _documentation module from the crate root.
crates/thread_aware/src/_documentation/mod.rs New documentation module containing the authoring guide and doctest examples.
Review details
  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

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

Comment thread crates/thread_aware/src/lib.rs
@codecov

codecov Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.6%. Comparing base (efd8178) to head (c90d9f4).
⚠️ Report is 4 commits behind head on main.

❌ Your project check has failed because the head coverage (98.6%) is below the target coverage (100.0%). You can increase the head coverage or adjust the target coverage.

Additional details and impacted files
@@            Coverage Diff            @@
##             main    #742      +/-   ##
=========================================
- Coverage   100.0%   98.6%    -1.4%     
=========================================
  Files         583     626      +43     
  Lines       62930   86406   +23476     
=========================================
+ Hits        62930   85279   +22349     
- Misses          0    1127    +1127     
Flag Coverage Δ
linux 95.1% <ø> (-4.9%) ⬇️
linux-arm 95.1% <ø> (-4.9%) ⬇️
scheduled ?

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.


/// A guide to authoring thread-aware types: how to implement, test, and debug them, and the
/// anti-patterns to avoid. See [the guide](_documentation).
pub mod _documentation;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

  • this should go into thread_aware_core
  • rename to just documentation (also could you apply the same rename across all our crates)
  • protect with #[cfg(any(doc, test))] so this module doesn't become part of our public API

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks! I've gated it with #[cfg(any(doc, test))] (705d1a9) so the module is doc/test-only and out of the normal public API, matching the existing _documentation modules in recoverable and fetch.

On the other two points:

  • Move to thread_aware_core: this guide is written around the thread_aware facade#[derive(ThreadAware)], Unaware, the strategy-partitioned Arc, ThreadBuilder — none of which live in thread_aware_core. Placing it there would need thread_aware as a dev-dependency of core (which risks the cyclic-deps gate) and would break the intra-doc links to those facade types. Keeping it where those APIs live seems most useful to readers. If you'd instead like a separate, trait-contract-focused guide in core, I'm happy to split it — just let me know.
  • Rename _documentationdocumentation across all crates: glad to, but since every crate currently uses the _documentation name it's a repo-wide convention change; I'd rather land it as its own sweep so it isn't tangled with this guide. I'll open a follow-up unless you'd prefer it here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Gated with #[cfg(any(doc, test))] (705d1a9). Opened AB#7857350 for the repo-wide _documentation -> documentation rename so it can land as its own sweep. On the core move: this guide leans on the thread_aware facade - the derive, Unaware, strategy Arc, Relocator - none of which live in thread_aware_core, so moving it there breaks those intra-doc links (and would need thread_aware as a dev-dependency of core, risking the cyclic-deps gate). Happy to instead split out a separate, trait-contract-focused guide for core if you'd prefer.

Copilot AI review requested due to automatic review settings September 8, 2026 13:48

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.

🔵 Needs a closer look

The new _documentation module export and its links should be aligned with the workspace’s doc/test-only _documentation pattern and avoid broken intra-doc links under default feature docs.

Review details

Suppressed comments (2)

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

crates/thread_aware/src/_documentation/mod.rs:230

  • This doc comment links to Relocator via an intra-doc link (crate::Relocator), but Relocator is behind the test-utils feature in this crate. When building docs with default features (without test-utils), this becomes a broken intra-doc link.

Consider referring to it as code (or conditionally documenting it) so the guide doesn’t produce broken links in default doc builds.

crates/thread_aware/src/lib.rs:181

  • _documentation modules in this workspace are typically doc/test-only so they render on docs.rs and in doctests without becoming part of the crate’s normal public API. Other crates gate the public _documentation module with #[cfg(any(doc, test))] (e.g., crates/recoverable/src/lib.rs:81-82, crates/fetch/src/lib.rs:860-862), but thread_aware currently exports it unconditionally here. Also, the (_documentation) markdown link is a relative URL and will resolve incorrectly when this doc comment is rendered on the module’s own page.

Consider gating the module and dropping the relative self-link (or converting it to an intra-doc link) to match the established pattern.

/// A guide to authoring thread-aware types: how to implement, test, and debug them, and the
/// anti-patterns to avoid. See [the guide](_documentation).
pub mod _documentation;
  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Pato Sandaña (psandana) added a commit that referenced this pull request Sep 9, 2026
Addresses review feedback on PR #742: export the `_documentation` module only
for rustdoc and tests, matching the established pattern in `recoverable` and
`fetch`, so it does not become part of the crate's public API in normal builds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 9, 2026 00:55

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.

🔵 Needs a closer look

The new guide contains a couple of documentation correctness issues (notably conflicting bounds semantics and missing std feature context for Arc) that should be reconciled before publishing.

Review details

Suppressed comments (2)

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

crates/thread_aware/src/_documentation/mod.rs:90

  • This section claims the derive bounds the relocated field type (e.g. emitting where Vec<T>: ThreadAware), but the derive macro's own docs in crates/thread_aware/src/lib.rs currently describe per-parameter T: ThreadAware bounds (see "# Generic Bounds" around lib.rs:211-217). To avoid contradicting the crate’s existing reference docs, consider rephrasing this section to describe bounds in terms of the derive’s traversal and link to the authoritative rules.
    crates/thread_aware/src/_documentation/mod.rs:122
  • Arc/PerThread/PerProcess are only exported when the std feature is enabled (see crates/thread_aware/src/lib.rs:263-266), but the decision table currently presents them without that constraint. Adding an explicit "(std feature)" note would make the guidance accurate for no_std users reading this guide.
  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

//!
//! ## Prefer the derive
//!
//! In almost all cases, implement [`ThreadAware`](crate::ThreadAware) with the derive macro. It

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

could we link to actual macro (in external crate)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in 53ca92f - now links to macro@crate::ThreadAware.

//! call. The lessons in [Anti-patterns](#anti-patterns) are drawn from migrating a large
//! production service onto an Oxidizer-backed runtime.
//!
//! # Why thread-awareness exists

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this should just link to main lib.rs docs, too much duplication

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Trimmed to a pointer at the crate-level Theory of Operation (53ca92f); dropped the duplication.

//! "this field does not implement `ThreadAware` yet" - reach for [`Unaware`](crate::Unaware) or
//! [`Arc`](crate::Arc) for that, so the intent is visible in the type.
//!
//! ## What the generated bounds mean

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this might be too much detail, I myself had trouble grasping what is this traying to say

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Agreed - cut it down to a short pointer at the derive's Generic Bounds reference (53ca92f).

//! (`PhantomData<fn(*const T)>`), owe no bound at all. See
//! [the derive's reference](crate::ThreadAware#generic-bounds) for the full rules.
//!
//! ## Implementing the trait by hand

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am missing thread_aware::Arc guide here, when to implement this. (when we want to maintain separated PerThread instances)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added a "Per-worker state with Arc" section (53ca92f): when to reach for Arc<T, PerThread> to keep separate per-worker instances, vs PerProcess / PerNumaNode.

//! Relocating a subtree while its parent was built from a stale clone (see above) is how affinity
//! goes stale in practice.
//!
//! # Testing

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

check thread_aware::Relocator (under "test-util") that could be used for relocation testing. Also too much detail too, make it more concise.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Made Testing more concise and now lead with the test-utils Relocator helper for driving relocations (53ca92f).

//! `test-utils` feature additionally offers a [`Relocator`](crate::Relocator) helper for driving
//! relocations in tests.
//!
//! # Debugging and telemetry

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

we don't have any answer for this right now, I would just omit this section

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the Debugging and telemetry section (53ca92f).

Pato Sandaña (psandana) added a commit that referenced this pull request Sep 9, 2026
Per @martintmk's review of PR #742:
- Trim "Why thread-awareness exists" to a pointer at the crate-level Theory of
  Operation instead of duplicating it.
- Link "the derive macro" to the actual macro (`macro@crate::ThreadAware`).
- Simplify "What the generated bounds mean" - defer the detail to the derive's
  Generic Bounds reference rather than restating it.
- Add a "Per-worker state with `Arc`" section explaining when to reach for
  `Arc<T, PerThread>` (separate per-worker instances) vs `PerProcess`/`PerNumaNode`.
- Make "Testing" more concise and lead with the `test-utils` `Relocator` helper.
- Drop "Debugging and telemetry" - the telemetry story is not defined yet.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 9, 2026 14:51

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.

🟡 Changes recommended

The new docs introduce several feature-gated / derive-macro intra-doc links that will be broken or misleading in non-all-features doc builds and should be adjusted before merging.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (3)

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

crates/thread_aware/src/lib.rs:180

  • The module doc comment uses a Markdown URL link ([the guide](_documentation)), which is easy to interpret as a relative URL rather than a rustdoc intra-doc link. Since this comment is on the _documentation module itself, the extra link is also redundant; removing it avoids brittle/ambiguous linking.

crates/thread_aware/src/_documentation/mod.rs:79

  • This section header link targets the derive macro docs; it should use the derive@ disambiguator (not macro@) to match how derive macros are linked elsewhere in the repo and to avoid ambiguity with non-derive macros.
//! [Generic Bounds](macro@crate::ThreadAware#generic-bounds) reference has the rules.

crates/thread_aware/src/_documentation/mod.rs:121

  • These table rows link to crate::Arc, which is std-feature gated. In non-std doc builds this becomes a broken intra-doc link and the table reads as if Arc were always available. Consider marking these rows as std-only and using inline code instead of intra-doc links.
//! | Shared state that should differ per worker | [`Arc<T, PerThread>`](crate::Arc) | Materializes a separate `T` per destination. |
//! | Shared state that is the same everywhere | [`Arc<T, PerProcess>`](crate::Arc) | Behaves as a vanilla `Arc`. |
  • Files reviewed: 2/2 changed files
  • Comments generated: 3
  • Review effort level: Lite

Comment thread crates/thread_aware/src/_documentation/mod.rs
Comment thread crates/thread_aware/src/_documentation/mod.rs Outdated
Comment thread crates/thread_aware/src/_documentation/mod.rs Outdated
Pato Sandaña (psandana) added a commit that referenced this pull request Sep 9, 2026
…e configs

Addresses Copilot review comments on PR #742:
- Use the `derive@` disambiguator for the derive-macro links (matches the repo
  convention, e.g. `internity`), replacing `macro@`.
- The `Arc` strategy section pointed at `crate::Arc` / `crate::PerThread` /
  `crate::PerNumaNode`, which are `std`-gated, so the links broke under
  `--no-default-features`. Name the `std` feature and drop the feature-gated
  intra-doc links in favour of plain code spans.
- `Relocator` is `test-utils`-gated; its intra-doc link broke in doc builds
  without that feature. Reword to a plain code span.

Doctests still pass under default and all-feature builds; the guide no longer
contributes any broken-intra-doc-link warnings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 9, 2026 22: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.

🔵 Needs a closer look

The new guide contains feature-gated intra-doc usage (crate::Arc, #[derive(ThreadAware)]) that should be shimmed/worded to remain correct across the crate’s supported feature sets.

Review details

Suppressed comments (4)

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

crates/thread_aware/src/_documentation/mod.rs:46

  • This example uses #[derive(ThreadAware)], but the derive macro is feature-gated (pub use ::thread_aware_macros::ThreadAware is behind feature = "derive"). Wrapping the doctest body in a hidden #[cfg(feature = "derive")] shim keeps the guide’s examples copy/paste-able across feature sets (and matches the crate-level docs’ pattern).

This issue also appears in the following locations of the same file:

  • line 58
  • line 197
    crates/thread_aware/src/_documentation/mod.rs:72
  • Arc is only exported when the std feature is enabled (see lib.rs’s #[cfg(any(test, feature = "std"))] pub use ... Arc). Linking to it here makes this paragraph only correct in std builds; prefer plain code and explicitly mention the std feature, as you do later in the guide.

crates/thread_aware/src/_documentation/mod.rs:62

  • This doctest also depends on the derive feature for #[derive(ThreadAware)]. Consider gating the doctest body with a hidden #[cfg(feature = "derive")] block so the documentation remains valid when derive is disabled.
//! ```rust
//! use thread_aware::ThreadAware;
//!
//! #[derive(ThreadAware)]
//! struct Request {

crates/thread_aware/src/_documentation/mod.rs:201

  • This doctest uses #[derive(ThreadAware)] for UnderTest, which is unavailable when the derive feature is off. Gating just the derived portion with a hidden #[cfg(feature = "derive")] shim keeps the rest of the example (the Tracker observation pattern) visible while making the doctest resilient to different feature sets.
//! #[derive(ThreadAware)]
//! struct UnderTest {
//!     tracked: Tracker,
//!     #[thread_aware(skip)]
//!     skipped: Tracker,
  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 10, 2026 13:32
@psandana

Copy link
Copy Markdown
Contributor Author

Thanks — addressed in c90d9f4:

  • crate::Arc link (line 72): good catch, I missed one. That last [Arc](crate::Arc) in "Skipping a field" is now a plain code span naming the std feature, consistent with the rest of the guide. Verified the module contributes zero broken-intra-doc-link warnings in the --no-default-features doc build.

  • Gating #[derive(ThreadAware)] doctests behind #[cfg(feature = "derive")]: I looked into this and don't think it applies here. docs/feature-gated-doctests.md scopes that rule to non-default features, and CI runs doctests with default features and --all-featuresderive is in default = ["std", "derive"], so it's present in both legs. The crate's own convention matches: the ThreadAware derive example in lib.rs (# Example) is not derive-shimmed, and the std-gated example there wraps only the std-dependent body (Arc/PerThread) in # #[cfg(feature = "std")], using #[derive(ThreadAware)] freely inside. None of this guide's doctests use std-gated items (they import only Thread/ThreadAware, both unconditional), so no std shim is needed either. Adding derive shims would diverge from the crate's existing derive examples. Happy to add them if you'd prefer the belt-and-braces version.

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.

🟢 Approval recommended

The changes are isolated to documentation (plus a docs/test-only module export) and align with existing repo patterns without introducing behavioral or API changes in normal builds.

Review details
  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@github-actions

Copy link
Copy Markdown

⚠️ SemVer check advisory

Potential breaking changes

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.

allocation_hints

     Cloning efd8178fcc3ec808f7f69fc339da9f5b641afcf2
    Building allocation_hints v0.1.0 (current)
       Built [   0.359s] (current)
     Parsing allocation_hints v0.1.0 (current)
      Parsed [   0.002s] (current)
    Building allocation_hints v0.1.0 (baseline)
       Built [   0.368s] (baseline)
     Parsing allocation_hints v0.1.0 (baseline)
      Parsed [   0.007s] (baseline)
    Checking allocation_hints v0.1.0 -> v0.1.0 (no change; assume minor)
     Checked [   0.016s] 196 checks: 192 pass, 4 fail, 0 warn, 58 skip

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/enum_missing.ron

Failed in:
  enum allocation_hints::heap::Kind, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:22
  enum allocation_hints::backend::ClaimPolicy, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/backend.rs:99
  enum allocation_hints::heap::CreationError, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:262
  enum allocation_hints::domain::CreationError, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/domain.rs:13
  enum allocation_hints::heap::UsageKind, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:170
  enum allocation_hints::ErrorKind, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/lib.rs:87
  enum allocation_hints::heap::InfoKind, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:123
  enum allocation_hints::heap::CreationPolicy, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:32

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/function_missing.ron

Failed in:
  function allocation_hints::heap::thread_heap, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:556
  function allocation_hints::try_with_hint, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/lib.rs:251

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/module_missing.ron

Failed in:
  mod allocation_hints::domain, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/domain.rs:4
  mod allocation_hints::backend, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/backend.rs:4
  mod allocation_hints::heap::general, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/general.rs:4
  mod allocation_hints::heap, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:4
  mod allocation_hints::heap::bump, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/bump.rs:4

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/struct_missing.ron

Failed in:
  struct allocation_hints::heap::Info, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:114
  struct allocation_hints::heap::bump::Usage, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/bump.rs:25
  struct allocation_hints::heap::HeapId, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:294
  struct allocation_hints::heap::general::Info, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/general.rs:19
  struct allocation_hints::Hint, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/lib.rs:150
  struct allocation_hints::backend::RawDomain, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/backend.rs:69
  struct allocation_hints::heap::general::Options, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/general.rs:12
  struct allocation_hints::heap::bump::Info, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/bump.rs:19
  struct allocation_hints::heap::general::Usage, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/general.rs:34
  struct allocation_hints::backend::RawHint, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/backend.rs:19
  struct allocation_hints::backend::Backend, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/backend.rs:128
  struct allocation_hints::heap::Heap, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:284
  struct allocation_hints::heap::Usage, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:158
  struct allocation_hints::domain::Domain, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/domain.rs:36
  struct allocation_hints::heap::Options, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/mod.rs:41
  struct allocation_hints::heap::general::AllocationUsage, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/general.rs:26
  struct allocation_hints::heap::bump::Options, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/heap/bump.rs:10
  struct allocation_hints::Error, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/lib.rs:80
  struct allocation_hints::backend::RawHeap, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/allocation_hints/src/backend.rs:108

     Summary semver requires new major version: 4 major and 0 minor checks failed
    Finished [   1.019s] allocation_hints

rallocator

     Cloning efd8178fcc3ec808f7f69fc339da9f5b641afcf2
    Building rallocator v0.1.0 (current)
       Built [   3.245s] (current)
     Parsing rallocator v0.1.0 (current)
      Parsed [   0.010s] (current)
    Building rallocator v0.1.0 (baseline)
       Built [   3.051s] (baseline)
     Parsing rallocator v0.1.0 (baseline)
      Parsed [   0.010s] (baseline)
    Checking rallocator v0.1.0 -> v0.1.0 (no change; assume minor)
     Checked [   0.017s] 196 checks: 189 pass, 7 fail, 0 warn, 58 skip

--- failure declarative_macro_missing: macro_rules declaration removed or renamed ---

Description:
A `macro_rules!` declarative macro cannot be invoked by its prior name. The macro may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/reference/macros-by-example.html#path-based-scope
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/declarative_macro_missing.ron

Failed in:
  macro config, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/config/mod.rs:87
  macro tunable, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/tunables.rs:116

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/enum_missing.ron

Failed in:
  enum rallocator::telemetry::SnapshotErrorKind, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:195

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/function_missing.ron

Failed in:
  function rallocator::telemetry::snapshot, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:774
  function rallocator::telemetry::try_snapshot, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:784
  function rallocator::telemetry::track_callers, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:753
  function rallocator::initialize, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/lib.rs:308
  function rallocator::telemetry::stats, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:687

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/module_missing.ron

Failed in:
  mod rallocator::telemetry::snapshot, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/snapshot.rs:4
  mod rallocator::telemetry, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/mod.rs:4
  mod rallocator::tunables, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/tunables.rs:4
  mod rallocator::telemetry::stats, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/stats.rs:4

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/struct_missing.ron

Failed in:
  struct rallocator::telemetry::stats::Sampler, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:168
  struct rallocator::tunables::StandardSizeClasses, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/tunables.rs:71
  struct rallocator::telemetry::SnapshotError, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:208
  struct rallocator::telemetry::stats::OperationStats, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:120
  struct rallocator::tunables::Standard, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/tunables.rs:81
  struct rallocator::telemetry::stats::Sample, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:158
  struct rallocator::telemetry::stats::MemoryStats, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:111
  struct rallocator::telemetry::stats::RemoteStats, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:137
  struct rallocator::telemetry::stats::Stats, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:93
  struct rallocator::telemetry::stats::StatsDelta, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:145
  struct rallocator::telemetry::stats::SessionReport, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:185
  struct rallocator::telemetry::snapshot::Snapshot, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:1440
  struct rallocator::telemetry::stats::Estimate, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:44
  struct rallocator::telemetry::stats::Session, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:177
  struct rallocator::telemetry::stats::ReclamationStats, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/telemetry/core.rs:129

--- failure trait_missing: pub trait removed or renamed ---

Description:
A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/trait_missing.ron

Failed in:
  trait rallocator::tunables::SizeClassLayout, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/tunables.rs:13
  trait rallocator::tunables::Tunables, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/tunables.rs:55

--- failure trait_removed_associated_constant: trait's associated constant was removed ---

Description:
A public trait's associated constant was removed or renamed.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/trait_removed_associated_constant.ron

Failed in:
  associated constant Config::TRACK_AGGREGATES, previously at /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/config/mod.rs:13
  associated constant Config::TRACK_CALLERS, previously at /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/config/mod.rs:16
  associated constant Config::CALLER_EVENT_CAPACITY, previously at /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/config/mod.rs:24
  associated constant Config::CALLER_ALLOCATION_STACK_FRAMES, previously at /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/config/mod.rs:27
  associated constant Config::CALLER_DEALLOCATION_STACK_FRAMES, previously at /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/config/mod.rs:30
  associated constant Config::CALLER_TRACK_THREADS, previously at /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/config/mod.rs:33
  associated constant Config::CALLER_TRACK_HEAP_LIFETIMES, previously at /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/rallocator/src/config/mod.rs:38

     Summary semver requires new major version: 7 major and 0 minor checks failed
    Finished [   6.866s] rallocator

thread_aware

     Cloning efd8178fcc3ec808f7f69fc339da9f5b641afcf2
    Building thread_aware v0.11.0 (current)
       Built [   3.150s] (current)
     Parsing thread_aware v0.11.0 (current)
      Parsed [   0.002s] (current)
    Building thread_aware v0.11.0 (baseline)
       Built [   3.655s] (baseline)
     Parsing thread_aware v0.11.0 (baseline)
      Parsed [   0.004s] (baseline)
    Checking thread_aware v0.11.0 -> v0.11.0 (no change; assume minor)
     Checked [   0.017s] 196 checks: 192 pass, 4 fail, 0 warn, 58 skip

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/enum_missing.ron

Failed in:
  enum thread_aware::FromStorageError, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/thread_aware/src/cell/arc.rs:23

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/module_missing.ron

Failed in:
  mod thread_aware::storage, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/thread_aware/src/cell/storage.rs:4

--- failure struct_missing: pub struct removed or renamed ---

Description:

     Summary semver requires new major version: 4 major and 0 minor checks failed
    Finished [   7.336s] thread_aware
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/struct_missing.ron

Failed in:
  struct thread_aware::storage::Storage, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/thread_aware/src/cell/storage.rs:99
  struct thread_aware::PerProcess, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/thread_aware/src/cell/builtin.rs:49
  struct thread_aware::PerNumaNode, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/thread_aware/src/cell/builtin.rs:33
  struct thread_aware::PerThread, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/thread_aware/src/cell/builtin.rs:15
  struct thread_aware::Arc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/thread_aware/src/cell/arc.rs:203

--- failure trait_missing: pub trait removed or renamed ---

Description:
A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/trait_missing.ron

Failed in:
  trait thread_aware::storage::Strategy, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-efd8178fcc3ec808f7f69fc339da9f5b641afcf2/53843273912420725e40294a538f04c5ae7f9a8a/crates/thread_aware/src/cell/storage.rs:55

Adds a `_documentation` module with a task-oriented guide for authors of
thread-aware types, complementing the existing (reference-style) API docs.

Covers what thread-awareness is and why it exists, how to author a type
(derive, `#[thread_aware(skip)]`, hand-written impls, `Unaware`, strategy
`Arc`), how to choose among them, how to test that relocation reaches the
right fields, how to debug and read relocation telemetry, and how to
validate correctness.

The anti-patterns section folds in the migration experience of moving a
large production service onto an Oxidizer runtime - `Clone` copying stored
affinity rather than relocating, `#[thread_aware(skip)]` on a sole field
silently no-op'ing, not trusting inherited markings, and relocating the
whole dependency graph once at a boundary.

Follows the `recoverable::_documentation` pattern. All examples are
doctested under both default and all-feature configurations.

Refs AB#7552151, AB#7722787.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
`format_code_in_doc_comments` measures doc-comment code at the reduced width
left by the `//! ` prefix, so the two `assert_eq!` calls in the testing example
must wrap. Matches `cargo +nightly fmt --config-path ./unstable-rustfmt.toml`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Addresses review feedback on PR #742: export the `_documentation` module only
for rustdoc and tests, matching the established pattern in `recoverable` and
`fetch`, so it does not become part of the crate's public API in normal builds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Per @martintmk's review of PR #742:
- Trim "Why thread-awareness exists" to a pointer at the crate-level Theory of
  Operation instead of duplicating it.
- Link "the derive macro" to the actual macro (`macro@crate::ThreadAware`).
- Simplify "What the generated bounds mean" - defer the detail to the derive's
  Generic Bounds reference rather than restating it.
- Add a "Per-worker state with `Arc`" section explaining when to reach for
  `Arc<T, PerThread>` (separate per-worker instances) vs `PerProcess`/`PerNumaNode`.
- Make "Testing" more concise and lead with the `test-utils` `Relocator` helper.
- Drop "Debugging and telemetry" - the telemetry story is not defined yet.

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

Addresses Copilot review comments on PR #742:
- Use the `derive@` disambiguator for the derive-macro links (matches the repo
  convention, e.g. `internity`), replacing `macro@`.
- The `Arc` strategy section pointed at `crate::Arc` / `crate::PerThread` /
  `crate::PerNumaNode`, which are `std`-gated, so the links broke under
  `--no-default-features`. Name the `std` feature and drop the feature-gated
  intra-doc links in favour of plain code spans.
- `Relocator` is `test-utils`-gated; its intra-doc link broke in doc builds
  without that feature. Reword to a plain code span.

Doctests still pass under default and all-feature builds; the guide no longer
contributes any broken-intra-doc-link warnings.

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

Follow-up to 2ce36aa: the "Skipping a field" section still linked
`[Arc](crate::Arc)`, which is `std`-gated and breaks under
`--no-default-features`. Replace it with a plain code span that names the
`std` feature, matching the treatment applied to the other `Arc` references.

The guide now contributes no broken-intra-doc-link warnings in the
`--no-default-features` doc build; doctests still pass under default and
all-feature builds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 10, 2026 14:01
@psandana
Pato Sandaña (psandana) force-pushed the u/psandana/thread-aware-authoring-guide branch from c90d9f4 to 9681471 Compare September 10, 2026 14:01

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.

🟡 Changes recommended

The guide contains derive@... intra-doc links that can be feature-gated away (when derive is off), leaving docs builds without default features with unresolved link targets.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (1)

crates/thread_aware/src/_documentation/mod.rs:80

  • Same root issue as above: the derive@crate::ThreadAware#generic-bounds link is feature-gated (the macro isn’t exported without derive), so it can become a broken intra-doc link in docs built without default features. Consider rewording to refer to the section without linking, and call out that it’s available when derive is enabled.
//! You rarely need to reason about this: the derive adds exactly the `ThreadAware` bounds its
//! generated body needs and no more, so a correct type "just derives". When it matters - a generic
//! wrapper, or a marker field that should stay bound-free - the derive's
//! [Generic Bounds](derive@crate::ThreadAware#generic-bounds) reference has the rules.
  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment on lines +28 to +30
//! In almost all cases, implement [`ThreadAware`](crate::ThreadAware) with
//! [the derive macro](derive@crate::ThreadAware). It generates a
//! [`relocate`](crate::ThreadAware::relocate) that forwards the notification to every field, which
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.

3 participants