Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 1 addition & 13 deletions crates/durable-ioring/CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,19 +194,7 @@ milestone; the decision rows named below carry the reasons.
- [ ] **DI-12.3** -- **The `epoch_log` merge-or-delete decision**, once DI-3.2 is proven
([DI-D-7](DESIGN-NOTES.md#di-d-7)).

- [ ] **DI-12.4** -- **Pin `windows-ioring-sys` by version once the set of changes is about to
release** ([DI-D-16](DESIGN-NOTES.md#di-d-16)). Gated on that release, not on `DI-12.3`. Add the
`version` of the `windows-ioring-sys` release carrying everything dioring relies on (at least
[D-80](../windows-ioring-sys/DESIGN-NOTES.md#d-80) and
[D-81](../windows-ioring-sys/DESIGN-NOTES.md#d-81)), keeping the `path`. This must land before
dioring's first release PR merges, because its publish job fails on a path-only dependency.
`DI-3.2.2.1` added two more path-only dependencies, pinned the same way: `win-sync-sys` (the
readiness signal's `Event`), at its first release, and `windows-threadpool-sys` (the readiness
check's wait), at the release carrying its `M-T14.1` (`From<Event> for WaitableHandle`).
win-time-sys' `WT-2.2.2` adds a fourth, `win-time-sys` (the failure timestamps' clock), at its
first release. Since `DI-8.2` these dependencies are `win-durable-ioring`'s, with a fifth: its
path-only dependency on `durable-ioring`, pinned at `durable-ioring`'s first release, which must
publish first. `durable-ioring` itself has only `io-buffers`, already pinned.
- [x] **DI-12.4** -- The five path-only dependencies of `win-durable-ioring` are pinned by version, keeping the path. -> [completed 2026-10-14](COMPLETED-CHECKLIST.md#di-124)

## DI-M4 -- Evidence: Windows' flush-failure behaviour (ungated; gates nothing)

Expand Down
6 changes: 6 additions & 0 deletions crates/durable-ioring/COMPLETED-CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -2859,3 +2859,9 @@ From the second round of the review of [PR 126](https://github.com/MikeGrier/win
### <a id="di-982"></a>DI-9.8.2 -- The portable CI job's first run is read: the crate's tests run on Linux and macOS. *(completed 2026-10-14 19:26:34 -04:00)*

Draft PR 126 gave the branch a pull request, which is what [ci.yml](../../.github/workflows/ci.yml)'s trigger waits for. Its `portable` job builds, tests and lints `wtf-string`, `io-buffers` and `durable-ioring` on `ubuntu-latest` and `macos-latest`, and both runs passed; the checks are listed on the pull request as `wtf-string (non-Windows)`, a name the job shares with its first crate. Nothing in the crate needed to change for a non-Windows host.

## Moved 2026-10-14 21:11:41 -04:00 -- DI-12.4: the version pins

### <a id="di-124"></a>DI-12.4 -- The five path-only dependencies of `win-durable-ioring` are pinned by version, keeping the path. *(completed 2026-10-14 21:11:41 -04:00)*

The item was meant to land before the first release PR merged, and did not: the release merged first, `publish-crate` refused `win-durable-ioring` 0.1.0 for a dependency with no version, and its tag points at that commit. The pins landed afterwards: `durable-ioring`, `windows-ioring-sys`, `win-sync-sys`, `windows-threadpool-sys` and `win-time-sys`, each at the version release-please published or was asked to. `win-time-sys` had not been released at all, which stalled every crate waiting on it, so it was published by the `workflow_dispatch` escape hatch at the version its manifest declares. `win-durable-ioring` 0.1.0 cannot publish from its tag, so it is published by the same dispatch from the commit that carries the pins.
30 changes: 13 additions & 17 deletions crates/win-durable-ioring/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,24 @@ description = "A ring for Windows file I/O with durability scheduled into its wo
readme = "README.md"

[dependencies]
# The contract, the core and the traits this crate drives and implements (DI-D-50). **Path only,
# with no `version`, deliberately**: durable-ioring is unreleased, and a version written now would
# guess the number release-please will choose. A path-only dependency also makes `cargo publish`
# refuse, so the pin cannot be skipped at release: DI-12.4 adds the version, keeping the path.
durable-ioring = { path = "../durable-ioring" }
# **Path only, with no `version`, deliberately** (DI-D-16 in durable-ioring's DESIGN-NOTES.md).
# This crate is built against the ring crate's unreleased tree, and a version written now would
# guess the number release-please will choose. DI-12.4 adds the version, keeping the path.
windows-ioring-sys = { path = "../windows-ioring-sys" }
# The contract, the core and the traits this crate drives and implements (DI-D-50). A version and a
# path, as `cargo publish` requires: the version is the release that carries the split.
durable-ioring = { version = "0.1.0", path = "../durable-ioring" }
# The ring crate (DI-D-16 in durable-ioring's DESIGN-NOTES.md): the release that carries the typed
# ring, `leave_queued` and the registrations this driver is built on.
windows-ioring-sys = { version = "0.7.1", path = "../windows-ioring-sys" }
# The file target's type (DI-D-29): a consumer's file is a `SharedHandle`, and this crate hands that
# same handle to the ring, which takes the type directly.
win-shared-os-owned-handle = { version = "0.1.0", path = "../win-shared-os-owned-handle" }
# The readiness signal's type (DI-D-28): an `Event`, so a front end can hand it to a thread-pool
# wait without `unsafe`. Path only, as for the ring crate: it is unreleased, and DI-12.4 pins it.
win-sync-sys = { path = "../win-sync-sys" }
# The thread-pool wait the drain and the readiness check wait through. Path only: it needs
# `From<Event> for WaitableHandle`, which is unreleased, and DI-12.4 pins it.
windows-threadpool-sys = { path = "../windows-threadpool-sys" }
# wait without `unsafe`.
win-sync-sys = { version = "0.0.2", path = "../win-sync-sys" }
# The thread-pool wait the drain and the readiness check wait through. It needs
# `From<Event> for WaitableHandle`, which this release carries.
windows-threadpool-sys = { version = "0.2.1", path = "../windows-threadpool-sys" }
# This driver's one time base, interrupt time (DI-D-37), read through `InterruptClock`: the crate
# forbids `unsafe`, so it cannot call `QueryInterruptTime` itself. Path only, as for the ring
# crate: it is unreleased, and DI-12.4 pins it.
win-time-sys = { path = "../win-time-sys" }
# forbids `unsafe`, so it cannot call `QueryInterruptTime` itself.
win-time-sys = { version = "0.1.0", path = "../win-time-sys" }

[features]
# The fault seam (DI-3.2.4): `Dioring::fail_next_flush`, failures on demand for tests. Off by
Expand Down
Loading