Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
170 commits
Select commit Hold shift + click to select a range
55d8314
perf(scheduler): streamline cooperative yields
zsumz Sep 2, 2026
b90a3fa
perf(scheduler): streamline dispatch and admission
zsumz Sep 2, 2026
4d70518
perf(scheduler): keep tasks in carrier slabs
zsumz Sep 2, 2026
ec1e8d2
perf(scheduler): publish progress per carrier
zsumz Sep 2, 2026
cb38aee
perf(scheduler): fuse yield checkpoints into dispatch
zsumz Sep 3, 2026
db9b2ac
perf(scheduler): compact task hot set
zsumz Sep 3, 2026
cc143ec
fix(benchmarks): equalize May stack sizes
zsumz Sep 3, 2026
e8d435b
perf(scheduler): accelerate task lifecycle
zsumz Sep 3, 2026
ec12c77
perf(benchmarks): expose lifecycle allocation costs
zsumz Sep 3, 2026
ecc6b57
perf(benchmarks): attribute scheduler lifecycle phases
zsumz Sep 3, 2026
ee8d856
chore: refresh architecture lock
zsumz Sep 3, 2026
7a39d9c
perf(scheduler): consolidate task lifecycle allocation
zsumz Sep 3, 2026
658369a
perf(scheduler): consume unobserved task envelopes
zsumz Sep 3, 2026
17619c8
perf(scheduler): streamline task materialization
zsumz Sep 3, 2026
c5d0690
perf(scheduler): trim task lifecycle overhead
zsumz Sep 3, 2026
597f11a
perf(cancellation): streamline task token lifecycle
zsumz Sep 3, 2026
7e13df0
perf(scheduler): reuse cancellation epoch probes
zsumz Sep 3, 2026
792527d
perf(cancellation): compact task ancestry
zsumz Sep 3, 2026
04a508d
perf(cancellation): specialize direct ancestry
zsumz Sep 3, 2026
2949838
perf(cancellation): streamline direct retirement
zsumz Sep 3, 2026
dce8e9b
perf(lifecycle): localize task records
zsumz Sep 3, 2026
4f30f77
perf(scheduler): count yields only under backlog
zsumz Sep 3, 2026
59979b7
perf(net): defer readiness while carrier work remains
zsumz Sep 3, 2026
690f008
perf(scheduler): scale carrier admission
zsumz Sep 3, 2026
8fc9e38
perf(scheduler): fuse fiber context mount
zsumz Sep 3, 2026
94834fe
perf(runtime): accelerate wait handoffs
zsumz Sep 3, 2026
fb98600
bench(perf): cover wait-path workloads
zsumz Sep 3, 2026
185a506
feat: own fiber stack mappings
zsumz Sep 3, 2026
56bdb9d
chore: refresh architecture lock
zsumz Sep 3, 2026
3097352
perf(runtime): accelerate multi-carrier wake paths
zsumz Sep 4, 2026
c32af27
refactor: seam the fiber wrapper from its engine
zsumz Sep 4, 2026
9206fd1
feat: add native macOS ARM64 fiber engine
zsumz Sep 4, 2026
bbbaa3d
chore: refresh architecture lock
zsumz Sep 4, 2026
ea20474
feat: add native Linux x86-64 fiber port
zsumz Sep 4, 2026
e7be7ef
ci: check both stack engines
zsumz Sep 4, 2026
0867204
chore: refresh architecture lock
zsumz Sep 4, 2026
fca7ee5
test: qualify both stack engines differentially
zsumz Sep 4, 2026
e14348d
chore: refresh architecture lock
zsumz Sep 4, 2026
00eeda3
feat: make the native stack engine the default
zsumz Sep 4, 2026
f0b5c04
ci: qualify the corosensei engine behind its flag
zsumz Sep 4, 2026
6d5ec16
feat: complete the native stack engine
zsumz Sep 4, 2026
faf1320
chore: refresh architecture lock
zsumz Sep 4, 2026
7f2285d
perf: restore floating-point control only when it changes
zsumz Sep 4, 2026
a511cc1
perf: draw unwind cookies from carrier-local blocks
zsumz Sep 4, 2026
177d31d
chore: refresh architecture lock
zsumz Sep 4, 2026
8243fa0
perf(cancellation): compact wait registration
zsumz Sep 4, 2026
f193a34
perf(runtime): integrate native stacks and wake routing
zsumz Sep 4, 2026
f96fbe3
bench(perf): remove wake-tail observer locks
zsumz Sep 4, 2026
6f58a69
bench(perf): add bounded SPSC channel parity
zsumz Sep 4, 2026
f12cd3a
bench(perf): expose wake fairness and placement
zsumz Sep 4, 2026
0f5b022
bench(perf): isolate uncontended mutex cost
zsumz Sep 4, 2026
2621015
perf(sync): defer wait state until contention
zsumz Sep 4, 2026
71af7e2
perf(wait): publish selections in one state word
zsumz Sep 4, 2026
85ff6f7
perf(channel): defer wait state until contention
zsumz Sep 4, 2026
7967f85
perf(mutex): retain the native value guard
zsumz Sep 4, 2026
c8576f1
perf(mutex): hand ownership directly to waiters
zsumz Sep 4, 2026
c6ae0cb
perf(wake): compact routed wake slots
zsumz Sep 4, 2026
ae4cc57
perf(mutex): avoid uncontended queue locking
zsumz Sep 4, 2026
4a7fca0
perf(mutex): borrow task-resident wait state
zsumz Sep 4, 2026
c8ca26d
perf(wait): bypass shared task wait handoff
zsumz Sep 4, 2026
06df1cc
perf(timer): route expirations directly
zsumz Sep 4, 2026
99ba598
perf(scheduler): gate borrowed revocation scans
zsumz Sep 4, 2026
5fd03a1
perf(mutex): eliminate native value locking
zsumz Sep 4, 2026
51b3922
perf(wait): cache resident cancellation routes
zsumz Sep 4, 2026
90c0fc5
perf(channel): reuse task-owned waits
zsumz Sep 4, 2026
f3bc6df
perf(channel): pop successful waiters directly
zsumz Sep 4, 2026
caa69ee
perf(wait): retire notification wakes directly
zsumz Sep 4, 2026
09207d1
perf(channel): borrow resident wait handles
zsumz Sep 4, 2026
edcc899
perf(channel): streamline metadata locking
zsumz Sep 4, 2026
c713806
test(wait): cover resident cancellation activation race
zsumz Sep 4, 2026
2e7fd0c
perf(mutex): spin on waiter metadata
zsumz Sep 4, 2026
95ced5b
perf(mutex): retire permit handoffs directly
zsumz Sep 4, 2026
9aebc40
perf(wait): skip clean recycle exchanges
zsumz Sep 4, 2026
cb0810f
perf(mutex): eliminate handoff recycle exchanges
zsumz Sep 4, 2026
6dbbf71
test(mutex): preserve selected waiter bounds
zsumz Sep 4, 2026
1979df9
bench: expose May handoff migration
zsumz Sep 4, 2026
8727d62
bench: expose May channel migration
zsumz Sep 4, 2026
e63c56b
bench: observe May mutex migration
zsumz Sep 4, 2026
088a6ce
bench: eliminate disabled migration probes
zsumz Sep 5, 2026
e151184
test(sync): cover handoff release races and panics
zsumz Sep 5, 2026
cf05262
test(lab): soak contended mutex handoffs
zsumz Sep 5, 2026
e1dd02f
test(timer): control sleep expiry ordering
zsumz Sep 5, 2026
3932912
docs(perf): record handoff review evidence
zsumz Sep 5, 2026
fc03b42
fix(sync): release closed gate waits for reuse
zsumz Sep 5, 2026
d7d6422
docs(perf): record park cache and wait reuse evidence
zsumz Sep 5, 2026
fca6bca
bench: expose provisioned runtime capacity
zsumz Sep 5, 2026
d9f67ec
fix(scope): ignore terminal-only completion gaps in stall detection
zsumz Sep 5, 2026
c099601
test(blocking): isolate failure and shutdown ordering
zsumz Sep 5, 2026
e10e516
test(wake): cover bounded observations and route reuse
zsumz Sep 5, 2026
a75bb7b
docs(perf): record capacity tradeoffs and qualified repairs
zsumz Sep 5, 2026
47447c6
test(runtime): order foreign owner drop before carrier release
zsumz Sep 5, 2026
2e8ce50
docs(perf): record dequeue profiles and retention decision
zsumz Sep 5, 2026
eded1ae
test(sync): model bounded wake mailbox publication
zsumz Sep 5, 2026
43fafd4
test(sync): qualify wake routing and sleep composition
zsumz Sep 5, 2026
7ef0b96
feat(bench): add verified carrier pinning controls
zsumz Sep 5, 2026
19c22dd
fix(sync): close mutex handoff cancellation race
zsumz Sep 5, 2026
7035795
docs(perf): record rejected mutex ownership experiments
zsumz Sep 5, 2026
bd44786
refactor(scheduler): track borrowed occupancy in constant time
zsumz Sep 5, 2026
b48b673
test(stack): add terminal regressions and native CI
zsumz Sep 5, 2026
1cd2a8d
fix(stack): return ARM64 terminal outcomes in x0
zsumz Sep 5, 2026
c6ae9d0
docs(stack): record real ARM64 terminal qualification
zsumz Sep 5, 2026
ea7f33b
fix(scheduler): bound wake and normal dispatch cohorts
zsumz Sep 5, 2026
5945990
test(runtime): order stall and service drain qualification
zsumz Sep 5, 2026
39cfe22
fix(scheduler): bound pending admission across mixed traffic
zsumz Sep 5, 2026
636a946
test(runtime): order target waiter accounting checks
zsumz Sep 5, 2026
21720b7
test(runtime): expose paused wake publication dependency
zsumz Sep 5, 2026
695e436
feat(diagnostics): profile carrier batching and idle work
zsumz Sep 5, 2026
00a4009
fix(scheduler): remember ingress observed before notification
zsumz Sep 5, 2026
1a280ba
docs(perf): preserve capacity and ingress attribution
zsumz Sep 5, 2026
2e935a5
test(bench): add exact shared bounded-channel control
zsumz Sep 5, 2026
55cb8cb
docs(perf): preserve channel and idle attribution
zsumz Sep 5, 2026
190a71a
test(bench): sample channel endpoint latency
zsumz Sep 5, 2026
63e2386
docs(perf): preserve channel CPU and tail gate failures
zsumz Sep 5, 2026
099aaf9
feat(diagnostics): attribute handoff and idle costs
zsumz Sep 6, 2026
0047e7b
docs(perf): preserve channel publication rejection evidence
zsumz Sep 6, 2026
220e921
docs(perf): consolidate progress and rejected experiments
zsumz Sep 6, 2026
5c3c6e6
test(runtime): require native debug and release qualification
zsumz Sep 6, 2026
dcca933
test(wait): model deferred publication and owner completion
zsumz Sep 6, 2026
8a9aff3
fix(wait): defer incomplete publication off carrier stacks
zsumz Sep 6, 2026
10a8131
docs(perf): reject admission-only polling reductions
zsumz Sep 6, 2026
24bef44
docs(perf): preserve held incremental readiness evidence
zsumz Sep 6, 2026
d9ad68c
docs(perf): attribute channel rearming and publication costs
zsumz Sep 6, 2026
c093585
test(wait): accept independent publication observer order
zsumz Sep 6, 2026
3dbfeb7
bench(mutex): qualify explicit handoff mechanism controls
zsumz Sep 6, 2026
e4b6384
test(net): order readiness retry and admission evidence
zsumz Sep 6, 2026
bd03bd8
test(cancellation): separate history semantics from timing
zsumz Sep 6, 2026
3ba3669
docs(perf): preserve partial mutex mechanism measurements
zsumz Sep 6, 2026
306bb08
test(wait): order selected timer evidence before resumption
zsumz Sep 6, 2026
d91a539
test(join): preserve ordered cross-runtime recovery evidence
zsumz Sep 6, 2026
5161dd5
test(join): order deadline selection before late completion
zsumz Sep 6, 2026
7817b5a
test(carrier): capture refill evidence before cleanup
zsumz Sep 6, 2026
1045b5b
test(bench): add bounded offered-load application controls
zsumz Sep 6, 2026
66c860c
docs(perf): record finishing checkpoint and open gates
zsumz Sep 6, 2026
fff8e80
docs(perf): complete quiet mutex mechanism evidence
zsumz Sep 6, 2026
a57ead7
docs(perf): preserve counter-free checkpoint and failed controls
zsumz Sep 6, 2026
bfd54de
docs(perf): predeclare counter-free candidate acceptance
zsumz Sep 6, 2026
fe17f2e
docs(perf): reject scan-only recovery with counter-free evidence
zsumz Sep 6, 2026
4811d03
docs(perf): hold readiness recovery after counter-free confirmation
zsumz Sep 6, 2026
bdb2be4
docs(perf): reject duplicate admission publication candidate
zsumz Sep 6, 2026
15b0c03
fix(runtime): count live tasks in stalled scope errors
zsumz Sep 6, 2026
90e08bc
docs(perf): record bounded wake service rejection
zsumz Sep 6, 2026
6b488c7
docs(perf): record counter-free channel recovery
zsumz Sep 6, 2026
a25c4a1
feat(diagnostics): account for mutex handoffs
zsumz Sep 6, 2026
4f561c0
docs(perf): preserve lazy wait-fault candidate evidence
zsumz Sep 7, 2026
e56e92d
fix(scheduler): inspect ready tasks exactly once during cleanup
zsumz Sep 7, 2026
2d770d8
fix(stack): preserve borrow and reclamation context safety
zsumz Sep 7, 2026
12753c0
chore(release): prepare runtime-only 0.0.2-rc.2 sources
zsumz Sep 7, 2026
b32e289
docs(release): preserve rc2 qualification and package evidence
zsumz Sep 7, 2026
c2c11f5
docs: polish project presentation and release guides
zsumz Sep 7, 2026
225e213
docs: restore concise README presentation
zsumz Sep 7, 2026
301e358
docs: move release evidence out of the source tree
zsumz Sep 7, 2026
23ae6d6
chore(release): prepare 0.0.2
zsumz Sep 7, 2026
38883cf
docs: write reader-facing README copy
zsumz Sep 7, 2026
174faae
ci: run application qualification on main
zsumz Sep 7, 2026
b458b51
ci: require full application and package qualification
zsumz Sep 7, 2026
db7e22c
chore(release): prepare 0.1.0 for public feedback
zsumz Sep 7, 2026
5b995ac
docs(release): record 0.1.0 closeout qualification
zsumz Sep 7, 2026
f92e5de
fix(scheduler): harden coalesced inbox progress
zsumz Sep 8, 2026
1ac097c
fix(scheduler): wake parked carriers across publishers
zsumz Sep 9, 2026
39f0a1a
chore(release): prepare 0.1.0-rc.1
zsumz Sep 9, 2026
4fd6a86
fix(runtime): isolate suspension during panic
zsumz Sep 9, 2026
a62929e
test(runtime): qualify panic-time mutex contention
zsumz Sep 9, 2026
c4ab5ac
fix(runtime): preserve local admission capacity
zsumz Sep 10, 2026
c4b2380
fix(runtime): roll back local construction panics
zsumz Sep 10, 2026
a564747
ci(release): adopt zrelease workspace rehearsals
zsumz Sep 11, 2026
c225cd2
fix(packaging): omit workspace-only synchronization models
zsumz Sep 11, 2026
43db453
ci(release): use compact workspace rehearsals
zsumz Sep 11, 2026
5953345
ci(release): update zrelease artifact runtimes
zsumz Sep 11, 2026
1d2bc28
chore(release): reconcile reviewed RC history
zsumz Sep 11, 2026
793e675
ci(release): prepare lockstep rc.2 qualification
zsumz Sep 11, 2026
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
35 changes: 7 additions & 28 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ name: check
on:
pull_request:
push:
branches: [main, "release/**"]
tags: ["v*"]
branches: [main]
workflow_dispatch:
workflow_call:

permissions:
contents: read
Expand Down Expand Up @@ -52,11 +52,8 @@ jobs:
if-no-files-found: warn

qualification:
name: qualify release (${{ matrix.target }})
if: >-
github.ref == 'refs/heads/main' ||
startsWith(github.ref, 'refs/tags/v') ||
startsWith(github.ref, 'refs/heads/release/')
name: qualify application (${{ matrix.target }})
if: github.event_name != 'pull_request'
needs: check
strategy:
fail-fast: false
Expand All @@ -68,22 +65,12 @@ jobs:
target: macos-arm64
runs-on: ${{ matrix.runner }}
env:
CARGO_TARGET_DIR: /tmp/vthread-release-build
CARGO_TARGET_DIR: /tmp/vthread-application-build
CARGO_HOME: ${{ github.workspace }}/target/cargo-home
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Rust
run: rustup toolchain install 1.96.1 --profile minimal
- name: Verify release ref
run: |
version="$(awk -F '"' '/^version = "/ { print $2; exit }' Cargo.toml)"
case "$GITHUB_REF" in
refs/heads/main) test "$GITHUB_REF_NAME" = main ;;
refs/tags/v*) test "$GITHUB_REF_NAME" = "v$version" ;;
refs/heads/release/*) test "$GITHUB_REF_NAME" = "release/$version" ;;
*) exit 1 ;;
esac
grep --fixed-strings "## $version - " CHANGELOG.md
- name: Cache locked dependencies
run: cargo fetch --locked
- name: Qualify application
Expand All @@ -93,20 +80,12 @@ jobs:
python3 scripts/run-application.py
--out .qualification/application
--offered-rates 2000 --offered-count 256
--context "GitHub release qualification ${{ matrix.target }}"
- name: Verify workspace packages
shell: bash
run: |
set -euo pipefail
mkdir -p .qualification/package
cargo package --locked --offline --workspace --exclude vthread-lab 2>&1 | tee .qualification/package/verification.log
--context "GitHub application qualification ${{ matrix.target }}"
- name: Upload qualification evidence
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: qualification-${{ github.run_id }}-${{ matrix.target }}
path: |
.qualification/
${{ env.CARGO_TARGET_DIR }}/package/*.crate
path: .qualification/
include-hidden-files: true
if-no-files-found: warn
3 changes: 2 additions & 1 deletion .github/workflows/native-stack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ name: native stack
on:
pull_request:
push:
branches: [main, "perf/scheduler-hot-path", "release/**"]
branches: [main, "perf/scheduler-hot-path"]
workflow_dispatch:
workflow_call:

permissions:
contents: read
Expand Down
31 changes: 31 additions & 0 deletions .github/workflows/rehearse.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Generated by zrelease; preserve CI prerequisites, branch rehearsal and consumer smoke inputs.
name: Rehearse
run-name: Rehearse @ ${{ github.ref_name }}
'on':
push:
branches: ["release/**"]
workflow_dispatch:
permissions:
contents: read
jobs:
canonical:
uses: ./.github/workflows/ci.yml
native-stack:
uses: ./.github/workflows/native-stack.yml
rehearsal:
needs: [canonical, native-stack]
permissions:
contents: read
id-token: write
attestations: write
deployments: write
uses: zsumz/zrelease/.github/workflows/rehearse.yml@1993b45bfae19a00e61a9138565b79e029c2d7f4
with:
members: '[{"name":"vthread-stack","needs":[]},{"name":"vthread-sync-core","needs":[]},{"name":"vthread","needs":["vthread-stack","vthread-sync-core"]},{"name":"vthreads","needs":["vthread"]}]'
workspace: true
lockstep: true
pipeline-ref: '1993b45bfae19a00e61a9138565b79e029c2d7f4'
toolchain: '1.96.1'
manifest-path: 'Cargo.toml'
base-branch: ${{ github.ref_type == 'branch' && github.ref_name || 'main' }}
smoke-sources: '{"vthread":"scripts/fixtures/release/main.rs","vthreads":"scripts/fixtures/release/main.rs"}'
119 changes: 119 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# Generated by zrelease; preserve CI prerequisites, publish guards and consumer smoke when regenerating.
name: Release
run-name: ${{ inputs.publish && 'Publish' || 'Rehearse' }} @ ${{ github.ref_name }}
'on':
workflow_dispatch:
inputs:
publish:
description: Publish this release? Requires a release tag and one approval.
type: boolean
default: false
required: true
permissions:
contents: read
concurrency:
group: zrelease-${{ github.repository }}
cancel-in-progress: false
jobs:
canonical:
uses: ./.github/workflows/ci.yml
native-stack:
uses: ./.github/workflows/native-stack.yml
plan:
needs: [canonical, native-stack]
permissions:
contents: read
id-token: write
attestations: write
uses: zsumz/zrelease/.github/workflows/plan.yml@1993b45bfae19a00e61a9138565b79e029c2d7f4
with:
members: '[{"name":"vthread-stack","needs":[]},{"name":"vthread-sync-core","needs":[]},{"name":"vthread","needs":["vthread-stack","vthread-sync-core"]},{"name":"vthreads","needs":["vthread"]}]'
workspace: true
lockstep: true
pipeline-ref: '1993b45bfae19a00e61a9138565b79e029c2d7f4'
toolchain: '1.96.1'
manifest-path: 'Cargo.toml'
publish: ${{ github.event_name == 'workflow_dispatch' && inputs.publish }}
base-branch: ${{ !inputs.publish && github.ref_type == 'branch' && github.ref_name || 'main' }}
crate_0:
name: vthread-stack
needs: [plan]
permissions:
contents: read
id-token: write
attestations: write
deployments: write
uses: zsumz/zrelease/.github/workflows/release.yml@1993b45bfae19a00e61a9138565b79e029c2d7f4
with:
package: 'vthread-stack'
pipeline-ref: '1993b45bfae19a00e61a9138565b79e029c2d7f4'
toolchain: '1.96.1'
manifest-path: 'Cargo.toml'
publish: ${{ github.event_name == 'workflow_dispatch' && inputs.publish }}
base-branch: ${{ !inputs.publish && github.ref_type == 'branch' && github.ref_name || 'main' }}
plan-artifact-id: ${{ needs.plan.outputs.artifact-id }}
plan-sha256: ${{ needs.plan.outputs.plan-sha256 }}
approval-artifact-id: ${{ needs.plan.outputs.approval-artifact-id }}
crate_1:
name: vthread-sync-core
needs: [plan, crate_0]
permissions:
contents: read
id-token: write
attestations: write
deployments: write
uses: zsumz/zrelease/.github/workflows/release.yml@1993b45bfae19a00e61a9138565b79e029c2d7f4
with:
package: 'vthread-sync-core'
pipeline-ref: '1993b45bfae19a00e61a9138565b79e029c2d7f4'
toolchain: '1.96.1'
manifest-path: 'Cargo.toml'
publish: ${{ github.event_name == 'workflow_dispatch' && inputs.publish }}
base-branch: ${{ !inputs.publish && github.ref_type == 'branch' && github.ref_name || 'main' }}
plan-artifact-id: ${{ needs.plan.outputs.artifact-id }}
plan-sha256: ${{ needs.plan.outputs.plan-sha256 }}
approval-artifact-id: ${{ needs.plan.outputs.approval-artifact-id }}
crate_2:
name: vthread
needs: [plan, crate_0, crate_1]
permissions:
contents: read
id-token: write
attestations: write
deployments: write
uses: zsumz/zrelease/.github/workflows/release.yml@1993b45bfae19a00e61a9138565b79e029c2d7f4
with:
package: 'vthread'
smoke-source: 'scripts/fixtures/release/main.rs'
pipeline-ref: '1993b45bfae19a00e61a9138565b79e029c2d7f4'
toolchain: '1.96.1'
manifest-path: 'Cargo.toml'
publish: ${{ github.event_name == 'workflow_dispatch' && inputs.publish }}
base-branch: ${{ !inputs.publish && github.ref_type == 'branch' && github.ref_name || 'main' }}
plan-artifact-id: ${{ needs.plan.outputs.artifact-id }}
plan-sha256: ${{ needs.plan.outputs.plan-sha256 }}
approval-artifact-id: ${{ needs.plan.outputs.approval-artifact-id }}
dependency-artifact-ids: '${{ needs.crate_0.outputs.candidate-artifact-id }},${{ needs.crate_1.outputs.candidate-artifact-id }}'
dependency-shas: '["${{ needs.crate_0.outputs.candidate-sha256 }}","${{ needs.crate_1.outputs.candidate-sha256 }}"]'
crate_3:
name: vthreads
needs: [plan, crate_0, crate_1, crate_2]
permissions:
contents: read
id-token: write
attestations: write
deployments: write
uses: zsumz/zrelease/.github/workflows/release.yml@1993b45bfae19a00e61a9138565b79e029c2d7f4
with:
package: 'vthreads'
smoke-source: 'scripts/fixtures/release/main.rs'
pipeline-ref: '1993b45bfae19a00e61a9138565b79e029c2d7f4'
toolchain: '1.96.1'
manifest-path: 'Cargo.toml'
publish: ${{ github.event_name == 'workflow_dispatch' && inputs.publish }}
base-branch: ${{ !inputs.publish && github.ref_type == 'branch' && github.ref_name || 'main' }}
plan-artifact-id: ${{ needs.plan.outputs.artifact-id }}
plan-sha256: ${{ needs.plan.outputs.plan-sha256 }}
approval-artifact-id: ${{ needs.plan.outputs.approval-artifact-id }}
dependency-artifact-ids: '${{ needs.crate_0.outputs.candidate-artifact-id }},${{ needs.crate_1.outputs.candidate-artifact-id }},${{ needs.crate_2.outputs.candidate-artifact-id }}'
dependency-shas: '["${{ needs.crate_0.outputs.candidate-sha256 }}","${{ needs.crate_1.outputs.candidate-sha256 }}","${{ needs.crate_2.outputs.candidate-sha256 }}"]'
34 changes: 27 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,35 @@

## Unreleased

## 0.1.0 - 2026-09-07

- Prepare an early public-feedback release with compatible public API updates in
`0.1.x`; breaking API or contract changes move to `0.2`.
- Retain the existing runtime without promoting held performance experiments.
## 0.1.0-rc.2 - 2026-09-11

- Keep the signed-off RC runtime and reconcile its history with public main.
- Enforce matching RC tags, shared workspace versions and exact internal pins.
- Preflight all release crate names before approval or upload, with explicit
first-publication bootstrap instructions. Update artifact actions to Node 24.
- Replace custom release packaging and closeout instructions with pinned zrelease
workspace automation, gated by both-target CI, with registry rehearsals and
fresh README-example consumers. The automatic rehearsal uses a compact
workspace graph with per-crate logs and receipts.
- Keep cross-crate synchronization model tests in workspace CI and omit them
from the standalone sync-core archive so its packaged tests are self-contained.

## 0.1.0-rc.1 - 2026-09-09

- Prepare a production release candidate for the supported platforms. The eventual
`0.1.0` release and subsequent `0.1.x` releases will keep compatible public API
updates within `0.1`; breaking API or contract changes move to `0.2`.
- Retain the established runtime architecture without promoting held performance
experiments.
- Harden inbox progress for active and parked carriers: published depth is
authoritative while driving, later publishers wake a registered carrier when
the first notifier is delayed, and wait registration rechecks the queue under
its mutex.
- Reject suspension boundaries while a carrier is handling a panic, before
publishing wait or resource state, preserving panic isolation between tasks.
- Require the full fixed-arrival application matrix and offline package builds in
release qualification on Linux x86_64 and macOS ARM64.
- Update installation examples to `0.1` and use `52` throughout the examples.
- Keep the historical refill stall unresolved and visible in [release notes](RELEASE.md).
- Pin installation examples to `=0.1.0-rc.1` and use `52` throughout the examples.

## 0.0.2 - 2026-09-07

Expand Down
5 changes: 3 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,6 @@ harness. Set `CARGO_TARGET_DIR` to an absolute local path to use a separate buil
Use small PGP-signed Conventional Commits: one concise subject, no body and no
coauthor trailers. Maintainer commits use `zsumz <shawn@zsumz.com>`.

Run `zcheck run check` before submitting changes. Release qualification has
[additional gates](RELEASE.md); a green local check alone is not a release verdict.
Run `zcheck run check` before submitting changes. The [rehearsal and release workflows](RELEASE.md) require both-target CI before zrelease
packages and rehearses the workspace. Push a `release/**` branch to practice;
actual publication requires an explicit tagged dispatch and release approval.
10 changes: 5 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@ members = ["crates/vthread", "crates/vthreads", "crates/vthread-stack", "crates/
resolver = "3"

[workspace.package]
version = "0.1.0"
version = "0.1.0-rc.2"
edition = "2024"
rust-version = "1.96"
license = "Apache-2.0"
repository = "https://github.com/zsumz/vthread"
authors = ["vthread contributors"]

[workspace.dependencies]
vthread = { path = "crates/vthread", version = "=0.1.0" }
vthread-stack = { path = "crates/vthread-stack", version = "=0.1.0" }
vthread-sync-core = { path = "crates/vthread-sync-core", version = "=0.1.0" }
vthread = { path = "crates/vthread", version = "=0.1.0-rc.2" }
vthread-stack = { path = "crates/vthread-stack", version = "=0.1.0-rc.2" }
vthread-sync-core = { path = "crates/vthread-sync-core", version = "=0.1.0-rc.2" }
zio = { version = "=0.0.1-dev.1", default-features = false }
socket2 = { version = "=0.6.5", default-features = false }
libc = "=0.2.189"
Expand Down
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ so they can keep values such as `Rc` across suspension.

Task admission, queues, stacks, waiters, timers, I/O registrations, and native jobs
have explicit bounds. Cancellation is cooperative and observed at checkpoints.
An operation that reaches a suspension boundary returns
`Error::SuspensionDuringPanic` instead of switching tasks while its carrier is
handling a panic.

The runtime provides synchronization, bounded channels, networking, DNS,
filesystem operations, and native blocking delegation. Diagnostics expose task
Expand All @@ -42,7 +45,7 @@ Add vthread to your project:

```toml
[dependencies]
vthread = "0.1"
vthread = "=0.1.0-rc.2"
```

```rust
Expand Down Expand Up @@ -73,9 +76,11 @@ for verification coverage and known limitations.

## Compatibility

vthread is in early development, intended for evaluation and feedback. The `0.1.x`
series preserves public API compatibility; breaking API or contract changes move
to `0.2`. Tested configurations and known limitations are in the [release notes](RELEASE.md).
vthread `0.1.0-rc.2` is a candidate for production use on its supported platforms
within the documented boundaries. The eventual `0.1.0` release and subsequent
`0.1.x` releases will keep compatible public API updates within `0.1`; breaking API
or contract changes move to `0.2`. Tested configurations and known limitations are
in the [release notes](RELEASE.md).

## Docs

Expand Down
Loading
Loading