You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Introduces arty_io_core, the shared contracts for integrating independently developed I/O drivers with an async runtime. The crate provides neither a runtime nor an I/O implementation.
IoContext selects a DriverProvider, which creates a driver/context pair for each worker and returns initialization failures through DriverError.
ProviderOptions, DriverOptions, DriverHandle, and on_peer_registered supply registration inputs and same-worker peer discovery.
Cycle supplies a shared time snapshot, wait bound, blocking permission, and mutable registration through a runtime-owned PendingWorkTracker.
Cycle::start_work registers a native interruption waker and returns a non-cloneable PendingWork. Completing or dropping the handle sends the same completion notification; interruption state, counters, and parking belong to the runtime.
SystemTaskSpawner supplies blocking system work without exposing runtime ownership internals.
Consuming shutdown closes admission and drains driver resources within a bounded wait, reporting graceful-cleanup failures through ShutdownError.
The single-thread runtime example demonstrates registration and peer discovery with a no-op tracker for sample drivers that perform no I/O.
Integration
Integrated the runtime-owned work-tracking refactor unchanged, as a fast-forward from the previous PR head. The separate atomic-coordinator experiment is not included.
Requirements, design notes, API documentation, benchmarks, and tests accompany the contracts. COMPLETION_COORDINATION.md remains an exploratory runtime-implementation discussion.
CI
All 38 checks passed on the previous PR head, including coverage and mutation gates. The integrated revision passes cargo check --locked -p arty_io_core; fresh CI results are pending and are being monitored.
The reason will be displayed to describe this comment to others. Learn more.
[AI AGENT]: I reviewed all eight added public contracts (Driver, DriverContext, DriverInit, DriverProvider, Parker, Shutdown, SystemTask, and SystemTaskSpawner), their rustdoc, the example runtime, dependencies, naming, object safety, shutdown behavior, and the new public-surface tests. Two targeted probes reproduced lifecycle contradictions below. The remaining public surface is documented and intentionally narrow; I found no additional dependency, naming, performance, resilience, or test-weakening issue. CI was still running with no reported failures at the final check.
✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.0%. Comparing base (81f1b39) to head (6065ff9). ⚠️ Report is 6 commits behind head on main.
The reason will be displayed to describe this comment to others. Learn more.
[AI AGENT]: Pragmatic Rust public API review completed with no findings. Verified the all-features cargo public-api surface, generated rustdoc JSON, package tests, clippy, spelling, the two-driver example, and the 100% coverage gate.
Coverage: reviewed Driver, DriverContext, DriverProvider, DriverInit, Parker, SystemTasks, and SystemTask from the downstream consumer and evolution perspective. The audit cannot prove runtime behavior or soundness from API output alone; those were covered separately by tests and multi-model review.
The resulting surface removes speculative Clone from DriverInit, hides Arc<dyn ...> behind the cloneable SystemTasks handle, and documents the boxed shutdown future as the deliberate object-safe shape for Box<dyn Driver<Context = C>>.
The reason will be displayed to describe this comment to others. Learn more.
Posted by an AI agent
Reviewed the exact PR head across API design, correctness, tests, performance, naming, telemetry, resilience, consistency, public API, and public documentation. I found three blocking issues and two non-blocking issues. Four are anchored inline; the remaining non-blocking issue is that the PR description still documents the obsolete DriverContext/Parker/boxed-future API and should be refreshed to match the current IoContext, interruptor, and blocking shutdown(self) contract.
Focused validation: cargo check -p arty_io_core passed; specialist runs also passed the 13 public-surface tests and the two-thread example. The focused correctness probe reproduced shutdown returning while admitted I/O was still active.
Posted by an AI agent · Non-blocking
The PR summary describes an obsolete arty_io_core API
Problem
The PR body still says DriverContext selects the provider, Driver exposes only shared-reference callbacks, Parker defines waiting, and shutdown returns an object-safe boxed future. At the pinned head, IoContext::provider selects the provider, process_completions takes &mut self, interruptor returns Waker, and shutdown(self) blocks and returns Result<(), ShutdownError>.
Why this matters
Reviewers and future readers are given a materially different registration, completion, and shutdown contract from the code and the new requirements/design documents.
Suggested fix
Refresh the PR summary to name IoContext, process_completions/interruptor, and the consuming blocking shutdown result, removing the obsolete Parker, shared-reference-callback, and boxed-future claims.
Add a separate proposal for coordinating independently registered I/O drivers across shared IOCP and multiple io_uring sources. Document participation modes, notification routing, service and parking, safe draining, trade-offs, and public references without changing the current contract.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 9fcc1db7-eda6-4c33-bbbe-77ff8b5e5ae6
The reason will be displayed to describe this comment to others. Learn more.
Posted by an AI agent
Reviewed the current PR head across API design, correctness, tests, performance, naming, telemetry, resilience, consistency, public API, and public documentation. Three blocking issues and two non-blocking issues remain applicable.
Four are already represented by unresolved current threads: provider creation mandates panic, graceful shutdown can return before admitted I/O drains, SystemTasks::Debug remains untested, and Driver::interruptor obscures its Waker contract. One new non-blocking naming issue is posted inline: SystemTasks names submitted work rather than its spawning capability.
Focused validation passed all 13 arty_io_core public-surface tests and the two-thread runtime example. Paired cargo public-api and rustdoc JSON extraction completed for the exact base/head snapshot.
Reuse coordinator state guards, avoid idle notifications, and preserve callback retirement semantics. Expand paired benchmarks and regression coverage, and record the Linux instruction-count campaign.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3f5d6831-e488-460c-aca0-f4eaa70576dd
Exercise the diagnostic paths reported uncovered by CI and distinguish coordinator buffer-recycling and notification invariants caught by surviving mutations. Keep production behavior and validation thresholds unchanged.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3f5d6831-e488-460c-aca0-f4eaa70576dd
Assert completed-work accounting before cycle reset in the new fixtures, so the four completion-removal mutations fail deterministically instead of waiting forever.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3f5d6831-e488-460c-aca0-f4eaa70576dd
Use Linux path separators in coordinator-tools installation instructions
docs/arty-io-core-coordinator-performance.md:213
The reproduction instructions say they are for Linux, but this sentence renders the install location with Windows separators (target\\coordinator-tools). In the stated shell, that does not describe the directory created by the preceding command; use target/coordinator-tools so the documented GUNGRAUN_RUNNER path is actionable.
Keep pending-work registration behind a runtime-owned tracker in Cycle. Use one completion notification for both explicit completion and drop, replace the example coordinator with a no-op, and tighten the public contract documentation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Introduce stable I/O-driver contracts for thread-aware runtimes, explain driver operation and primary/secondary roles, and polish public rustdoc and lifecycle references using high-reasoning reviews. Regenerate the README from crate docs while preserving all runtime and driver obligations.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3f5d6831-e488-460c-aca0-f4eaa70576dd
Consuming PendingWork already invokes its destructor at function exit. Remove the redundant explicit drop call while preserving complete/drop equivalence, eliminating the equivalent CI mutation without exclusions or weakened tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3f5d6831-e488-460c-aca0-f4eaa70576dd
Use POSIX paths in Linux reproduction instructions
docs/arty-io-core-coordinator-performance.md:213
This section is explicitly written for a Linux checkout, but the inline path uses Windows backslashes. On Linux target\coordinator-tools is a different literal path from the target/coordinator-tools path used by the command above, and the later artifact paths repeat the same separator issue. Use POSIX separators consistently in the Linux reproduction instructions.
Restore the explicit drop of the completion handle to satisfy Clippy's unused_self check. Preserve the completion contract and documentation without adding lint or mutation exclusions.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3f5d6831-e488-460c-aca0-f4eaa70576dd
cargo semver-checks could not complete the following comparisons. These failures are informational because an unbuildable baseline is not evidence of a breaking API change.
metabench (exit 101)
Cloning 81f1b39b133ece73a377e8673f882444ffcd3cab
Building metabench v0.1.1 (current)
error: running cargo-doc on crate 'metabench' failed with output:
-----
Compiling proc-macro2 v1.0.107
Compiling quote v1.0.47
Compiling unicode-ident v1.0.26
Compiling serde_core v1.0.229
Compiling zmij v1.0.23
Compiling serde v1.0.229
Compiling serde_json v1.0.151
Compiling libc v0.2.189
Checking cfg-if v1.0.5
Checking itoa v1.0.18
Compiling syn v3.0.6
Compiling syn v2.0.119
Checking memchr v2.8.3
Compiling zerocopy v0.8.59
Checking bitflags v2.13.2
Compiling find-msvc-tools v0.1.14
Compiling semver v1.0.28
Compiling shlex v2.0.1
Compiling hashbrown v0.17.1
Compiling rustversion v1.0.23
Compiling winnow v1.0.4
Compiling equivalent v1.0.2
Compiling indexmap v2.14.2
Compiling cc v1.5.1
Compiling toml_parser v1.1.3+spec-1.1.0
Compiling serde_derive v1.0.229
Compiling rustc_version v0.4.1
Compiling zerocopy-derive v0.8.59
Compiling derive_more-impl v2.1.1
Compiling toml_datetime v1.1.1+spec-1.1.0
Compiling rustix v1.1.5
Compiling autocfg v1.5.1
Compiling toml_edit v0.25.15+spec-1.1.0
Compiling num-traits v0.2.19
Compiling alloca v0.4.0
Compiling gungraun-macros v0.9.1
Checking either-or-both v0.3.1
Compiling proc-macro-error-attr3 v3.1.1
Checking regex-syntax v0.8.11
Compiling thiserror v2.0.21
Checking anstyle v1.0.14
Compiling bincode-next v3.1.1
Compiling cfg_aliases v0.2.2
Checking either v1.18.0
Checking ciborium-io v0.2.2
Compiling getrandom v0.4.3
Checking linux-raw-sys v0.12.1
Checking clap_lex v1.1.1
Checking clap_builder v4.6.7
Checking itertools v0.13.0
Compiling nix v0.31.3
Checking half v2.7.1
Checking regex-automata v0.4.18
Checking ciborium-ll v0.2.2
Compiling proc-macro-error3 v3.1.1
Checking rapidhash v4.5.1
Compiling proc-macro-crate v3.5.0
Compiling derive_more v2.1.1
Compiling thiserror-impl v2.0.21
Compiling gungraun v0.19.4
Checking cast v0.3.0
Checking unty-next v0.1.2
Compiling pastey v0.2.3
Checking same-file v1.0.6
Checking walkdir v2.5.0
Checking criterion-plot v0.8.2
Checking regex v1.13.1
Compiling metabench_macros_impl v0.1.1 (/home/runner/work/oxidizer/oxidizer/crates/metabench_macros_impl)
Checking gungraun-runner v0.20.0
Checking ciborium v0.2.2
Checking clap v4.6.7
Checking gungraun-runner v0.19.4
Checking folo_utils v0.1.14
Checking tinytemplate v1.2.1
Checking nix v0.27.1
Checking page_size v0.6.0
Checking oorandom v11.1.5
Checking fastrand v2.5.0
Checking once_cell v1.21.4
Compiling metabench v0.1.1 (/home/runner/work/oxidizer/oxidizer/crates/metabench)
Checking jiff-core v0.1.1
Checking anes v0.1.6
Checking criterion v0.8.2
Checking gungraun-summary v6.0.0
error[E0432]: unresolved import `gungraun_runner::api::ValgrindTool`
--> /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gungraun-summary-6.0.0/src/v6.rs:10:59
|
10 | CachegrindMetric, DhatMetric, ErrorMetric, EventKind, ValgrindTool,
| ^^^^^^^^^^^^ no `ValgrindTool` in `api`
error[E0432]: unresolved imports `gungraun_runner::metrics::model::MetricsDiff`, `gungraun_runner::metrics::model::MetricsSummary`
--> /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gungraun-summary-6.0.0/src/v6.rs:12:63
|
12 | pub use gungraun_runner::metrics::model::{Metric, MetricKind, MetricsDiff, MetricsSummary};
| ^^^^^^^^^^^ ^^^^^^^^^^^^^^ no `MetricsSummary` in `metrics::model`
| |
| no `MetricsDiff` in `metrics::model`
error[E0432]: unresolved imports `gungraun_runner::summary::model::Diffs`, `gungraun_runner::summary::model::FlamegraphSummary`, `gungraun_runner::summary::model::ProfileInfo`, `gungraun_runner::summary::model::SummaryFormat`, `gungraun_runner::summary::model::SummaryOutput`, `gungraun_runner::summary::model::ToolMetricSummary`
--> /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gungraun-summary-6.0.0/src/v6.rs:14:38
|
14 | BenchmarkKind, BenchmarkSummary, Diffs, FlamegraphSummary, Profile, ProfileData, ProfileInfo,
| ^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ no `ProfileInfo` in `summary::model`
| | |
| | no `FlamegraphSummary` in `summary::model`
| no `Diffs` in `summary::model`
15 | ProfilePart, ProfileTotal, Profiles, SCHEMA_VERSION, SummaryFormat, SummaryOutput,
| ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ no `SummaryOutput` in `summary::model`
| |
| no `SummaryFormat` in `summary::model`
16 | ToolMetricSummary, ToolRegression,
| ^^^^^^^^^^^^^^^^^ no `ToolMetricSummary` in `summary::model`
Checking command-group v5.0.1
For more information about this error, try `rustc --explain E0432`.
error: could not compile `gungraun-summary` (lib) due to 3 previous errors
warning: build failed, waiting for other jobs to finish...
-----
error: failed to build rustdoc for crate metabench v0.1.1
note: this is usually due to a compilation error in the crate,
and is unlikely to be a bug in cargo-semver-checks
note: the following command can be used to reproduce the error:
cargo new --lib example &&
cd example &&
echo '[workspace]' >> Cargo.toml &&
cargo add --path /home/runner/work/oxidizer/oxidizer/crates/metabench &&
cargo check &&
cargo doc
error: aborting due to failure to build rustdoc for crate metabench v0.1.1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Introduces
arty_io_core, the shared contracts for integrating independently developed I/O drivers with an async runtime. The crate provides neither a runtime nor an I/O implementation.IoContextselects aDriverProvider, which creates a driver/context pair for each worker and returns initialization failures throughDriverError.ProviderOptions,DriverOptions,DriverHandle, andon_peer_registeredsupply registration inputs and same-worker peer discovery.Cyclesupplies a shared time snapshot, wait bound, blocking permission, and mutable registration through a runtime-ownedPendingWorkTracker.Cycle::start_workregisters a native interruption waker and returns a non-cloneablePendingWork. Completing or dropping the handle sends the same completion notification; interruption state, counters, and parking belong to the runtime.SystemTaskSpawnersupplies blocking system work without exposing runtime ownership internals.ShutdownError.Integration
Integrated the runtime-owned work-tracking refactor unchanged, as a fast-forward from the previous PR head. The separate atomic-coordinator experiment is not included.
Requirements, design notes, API documentation, benchmarks, and tests accompany the contracts.
COMPLETION_COORDINATION.mdremains an exploratory runtime-implementation discussion.CI
All 38 checks passed on the previous PR head, including coverage and mutation gates. The integrated revision passes
cargo check --locked -p arty_io_core; fresh CI results are pending and are being monitored.