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
22 changes: 22 additions & 0 deletions .github/releases/v1.0.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
First tagged release: a zero-copy shared-memory IPC framework for local AI workloads. C++17 core, lock-free SPSC data path, crash-resilient, with a frozen C ABI driven from Python and Rust.

## Highlights

- **Bipartite buffer (BipBuffer) ring**: every payload is physically contiguous, so the zero-copy pointer handoff is always valid.
- **Lock-free hot path**: single-writer atomic cursors published with release/acquire ordering; zero locks taken when the peer isn't parked.
- **Parking, not polling**: blocked peers sleep at ~0.05% CPU and wake in microseconds; every wait is a bounded timedwait.
- **Crash resilience**: heartbeat liveness on both platforms plus robust-mutex (`EOWNERDEAD`) recovery on Linux; a peer SIGKILLed mid-transfer leaves the survivor with a clean `PEER_DEAD` error, never a deadlock.
- **Frozen C ABI v1** with Python (cffi, zero-copy `memoryview`) and Rust (compile-time borrow enforcement) bindings.
- **New in this release**: opt-in transparent huge pages via the additive `shuttle_create_ex` + `SHUTTLE_CREATE_HUGEPAGES` (advisory `madvise` on Linux, no-op elsewhere; the frozen v1 surface is untouched).

## Verification

29-test suite green under AddressSanitizer and ThreadSanitizer on macOS (native Apple silicon) and Linux (glibc); the correctness suite runs in CI on ubuntu-24.04. Consolidated API reference in [docs/API.md](https://github.com/allandng/shuttle/blob/main/docs/API.md); direction triage in [docs/ROADMAP.md](https://github.com/allandng/shuttle/blob/main/docs/ROADMAP.md).

## Benchmark honesty

Headline figures (50 MB end-to-end in ~5 µs vs ~9 ms over Unix sockets) are development measurements on native Apple M-series hardware. The production target is Linux and the headline claim remains provisional until the harness runs on bare-metal Linux; see the README's "Benchmark honesty" section for methodology and caveats.

## Scope

Same-host, single-producer/single-consumer, one-way channels. Linux is the hard-guarantee platform; macOS crash recovery is best-effort by design.
37 changes: 29 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
# Publish a GitHub Release when a version tag (v*) is pushed. The annotated
# tag's message becomes the release notes (--notes-from-tag), so notes are
# curated at tag time and live in git history, not in this file.
# Publish a GitHub Release. Two triggers:
# - push of a version tag (v*): the annotated tag's message becomes the
# release notes (--notes-from-tag), curated at tag time.
# - workflow_dispatch with a tag input: creates the tag at the dispatched
# ref and publishes the release, taking notes from
# .github/releases/<tag>.md when that file exists (falling back to
# GitHub's generated notes). This path exists for environments that can
# push branches but not tags.
name: Release

on:
push:
tags: ["v*"]
workflow_dispatch:
inputs:
tag:
description: "Tag to release (created at the dispatched ref if it does not exist)"
required: true

permissions:
contents: write
Expand All @@ -15,11 +25,22 @@ jobs:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Create GitHub release from tag annotation
- name: Create GitHub release
env:
GH_TOKEN: ${{ github.token }}
EVENT_NAME: ${{ github.event_name }}
INPUT_TAG: ${{ inputs.tag }}
run: |
gh release create "$GITHUB_REF_NAME" \
--verify-tag \
--title "Shuttle $GITHUB_REF_NAME" \
--notes-from-tag
if [ "$EVENT_NAME" = "workflow_dispatch" ]; then
NOTES=".github/releases/${INPUT_TAG}.md"
if [ -f "$NOTES" ]; then
gh release create "$INPUT_TAG" --target "$GITHUB_SHA" \
--title "Shuttle $INPUT_TAG" --notes-file "$NOTES"
else
gh release create "$INPUT_TAG" --target "$GITHUB_SHA" \
--title "Shuttle $INPUT_TAG" --generate-notes
fi
else
gh release create "$GITHUB_REF_NAME" --verify-tag \
--title "Shuttle $GITHUB_REF_NAME" --notes-from-tag
fi
Loading