Skip to content

Releases: Dicklesworthstone/asupersync

asupersync v0.3.9

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 15 Jul 07:10

asupersync v0.3.9

Correctness + hardening release (successor to v0.3.6; 0.3.7/0.3.8 were internal version-only steps).

Correctness (fresh-eyes bug sweep, each with a regression test)

  • time: sleeps/timeouts beyond the ~7-day timer-wheel horizon no longer complete early — the clamped wheel fire is now tracked (registered_partial + TimerDriverApi::max_timer_duration) and re-armed, while legitimate fires (including across driver migration / fallback) still complete authoritatively.
  • combinator/bulkhead: try_acquire is no longer starved indefinitely by an abandoned enqueue — it drains only timed-out entries before the fast path (now threaded through try_acquire/call/call_weighted).
  • http/1 client: a withheld Expect: 100-continue request body no longer returns the connection to the keep-alive pool in an indeterminate framing state (body_withheld forces a drop, matching hyper).
  • scheduler: CancelProtocolValidator no longer leaks one state-machine entry per task/region/obligation ever created (unbounded growth) — retirement paths now remove them.
  • channel/watch send_modify lost-update; stream Merge >64-pending 100%-CPU busy-poll; runtime blocking_pool ARM Dekker SeqCst fences; io_uring rearm-failure dropping a completion batch.
  • database/mysql stops advertising CLIENT_MULTI_RESULTS (silent wrong-result on reuse); kafka commit_offsets moved off the executor.
  • observability: coherent single-snapshot Prometheus histogram export (fixes +Inf != _count torn read); TLA export keys entities on (index, generation).

Performance (non-atp hotspots)

  • BytesMut::advance zero-alloc front-offset bump; the h1/grpc/h2 discard-only decode paths now use it (-5.8% http1/parse).
  • stream Merge cooperative-park (eliminates the >64-pending busy spin).

All changes landed on main with per-fix regression tests; library suite + clippy -D warnings (pedantic + nursery) green.

v0.3.6

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 09 Jul 19:57

First tagged release since v0.3.4 (v0.3.5 was a crates.io-only version marker with no git tag). Published across the workspace to crates.io: asupersync, asupersync-macros, franken-kernel, franken-evidence, franken-decision — all v0.3.6.

Headline changes since 0.3.5

Runtime

  • block_on on the current_thread runtime now drives ambient timers and parks to the next deadline, so sub-250ms timeouts after the first timer are no longer floored to the ~250ms idle-poll cap (fixes #52).

ATP / QUIC transport

  • ACK SACK-range window widened 32→96.
  • Handshake loss recovery: retain client Finished flight; server re-offers on early 1-RTT evidence.
  • Control-stream un-starvation under paced bulk (stall-PTO backoff, threshold requeue, control-priority flush).
  • Sender-generate telemetry un-confounded (pacer sleeps timed separately).

Toolchain / API

  • Pinned nightly-2026-07-05; adopted the fetch_updatetry_update rename.
  • API surface (breaking vs pre-0.3.5 consumers): Cx::for_testing removed in favor of Cx::current / Cx::with_current; LockError gained TimedOut(Time).

Full landed-capability detail is in CHANGELOG.md (Unreleased → 0.3.6 section).

v0.3.4

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 07 Jun 06:09

Asupersync v0.3.4 — corrects a broken 0.3.3 and is the recommended release.

Why 0.3.4 (0.3.3 is yanked)

asupersync 0.3.3 shipped a compile regression in src/atp/policy/scope.rs ((start, end).into() where &[u8] was expected), so the crate failed to build for any downstream enabling tls (E0277). 0.3.3 is yanked from crates.io. 0.3.4 fixes the digest call and is verified to compile as a dependency with test-internals + tls-native-roots.

[dependencies]
asupersync = "0.3.4"

All workspace crates are published at 0.3.4 (asupersync, asupersync-macros, asupersync-conformance, asupersync-browser-core, asupersync-tokio-compat, franken-kernel, franken-evidence, franken-decision, frankenlab).

Binaries

  • asupersync-v0.3.4-linux-amd64.tar.gz — Linux x86_64 (gnu)
  • asupersync-v0.3.4-windows-amd64.zip — Windows x86_64
  • SHA256SUMS.txt

v0.3.3

v0.3.3 Pre-release
Pre-release

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 07 Jun 05:11

⚠️ YANKED / BROKEN — do not use. Superseded by v0.3.4.

asupersync 0.3.3 on crates.io is yanked: it fails to compile for downstream consumers that enable tls features (E0277 in src/atp/policy/scope.rs). Use 0.3.4, which fixes this.

v0.3.1

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 22 Apr 00:13

asupersync v0.3.1

Patch release carrying the output of a deep-dive post-v0.3.0 test-suite hardening pass: 25 real production-code bugs fixed (most of them pre-existing, surfaced by the recently-expanded metamorphic test suite), plus a large batch of test-harness drift fixes that unblock cargo test --workspace --lib.

Production bugs fixed (highest severity → lowest)

Concurrency correctness:

  • src/runtime/reactor/epoll.rs — SIGABRT IO Safety violation: owned file descriptor already closed under parallel tests. Test was closing a raw fd that OwnedFd still claimed; concurrent allocations could grab the freed number and get their fds silently closed by the test's subsequent dup2. Replaced with dup2 that keeps the fd number continuously-valid. Also added early EBADF rejection for raw_fd < 0 and an orphaned tombstone set for idempotent deregister after EBADF/ENOENT.
  • src/observability/runtime_integration.rs — parking_lot RwLock self-deadlock. if let Some(x) = self.task_traces.write().remove(&id) { ... self.task_traces.read() ... } extended the write guard's lifetime into the if let body where the subsequent .read() deadlocked on the same non-reentrant lock.
  • src/runtime/epoch_gc.rs — epoch reclamation left safe items stranded behind unsafe ones. try_advance_and_cleanup / force_advance_and_cleanup passed new_epoch - 1 as the safe boundary instead of new_epoch, so items tagged with the just-retired epoch were never reclaimed.
  • src/runtime/epoch_tracking.rsGlobalEpochCounter::try_advance had "simplified: always try to advance" stubbed in place of the rate limiting the docstring promised. Restored CAS-based rate limiting. DeferredCleanupQueue::execute_safe_cleanups used <= instead of strict < on the safe-epoch comparison — violated the pinning invariant.

HTTP protocol correctness / security:

  • src/http/h1/codec.rs — missing bare-CR scan (RFC 9112 §2.2 request-smuggling vector) and no printable-ASCII validation on the request target (raw NUL, DEL, non-ASCII accepted). Both closed.
  • src/http/h3_native.rs — RFC 9297 DATAGRAM frame decode treated a truncated payload as a streaming short-read instead of peer misbehavior. Also can_send_early_data used saturating_add and silently returned true for over-budget 0-RTT sends.

WebSocket protocol:

  • src/net/websocket/handshake.rs::selected_protocol violated RFC 6455 §4.2.2 by iterating the server's list rather than the client's offered order, and silently returned None instead of ProtocolMismatch when client offers did not match a non-empty supported set.

Observability:

  • src/observability/diagnostics.rs::find_leaked_obligations flagged obligations held by Completed tasks as leaks (false positives). Now skips Completed holders.
  • src/observability/obligation_tracker.rs>>= on age-threshold so leak_age_threshold = Duration::ZERO actually performs the documented "immediate leak detection".

Channel / combinator:

  • src/channel/atomicity_test.rs::CancellationInjector::should_cancel — bit-shift bug: (state >> 16) as f64 / u32::MAX as f64 produced values up to 2^48, so random < probability was almost never true. Masked to u32.
  • src/channel/broadcast.rs — ring-buffer overrun when sender burst > capacity. Now interleaves drain with send.
  • src/combinator/bulkhead.rs — utilization boundary off-by-one (documented "at 80% or above" used strict >).

Cancel / progress-certificate:

  • src/cancel/progress_certificate.rsEvidenceEntry.bound is contractually a probability but production wrote step magnitudes into it. Downstream verifiers generating false "bound not tight" alerts. Fixed all 7 construction sites to emit probabilities.

RaptorQ:

  • src/raptorq/systematic.rschecked_add(padding_delta).expect(...) panicked at the u32::MAX ESI boundary. RFC 6330 requires wrapping.
  • src/raptorq/linalg.rs — Gaussian solvers preferentially reported Inconsistent when both Singular and Inconsistent were present, obscuring correct failure classification.
  • src/raptorq/decoder.rs::inactivate_and_solve_with_proof — recorded inactivations into the elimination trace AFTER fallible validation, so fail-closed paths left the trace empty.

Plus misc: obligation::saga::compensation MR reframing, lab::oracle::* count/threshold contracts, fs::uring unused import, three_lane.rs missing let mut.

Known remaining failures

~85 tests in runtime::scheduler, plan::fixtures, service::retry, supervision, and misc modules continue to fail. These are tracked for a follow-up release; none block library consumers that don't touch those specific surfaces.

Verification

  • cargo check --workspace --all-targets on ts2 via rch: clean.
  • cargo test --workspace --lib: 14,257 pass, 86 fail, 0 SIGABRT (v0.3.0 was 9,350 pass, 110 fail, SIGABRT abort).

crates.io (all v0.3.1)

asupersync · asupersync-macros · asupersync-conformance · asupersync-browser-core · asupersync-tokio-compat · franken-kernel · franken-evidence · franken-decision · frankenlab

Binaries (local DSR fallback — GH Actions was still throttled)

  • asupersync-v0.3.1-linux-amd64.tar.gz — Linux x86_64 (cli feature)
  • asupersync-v0.3.1-windows-amd64.zip — Windows x86_64 (native MSVC)
  • SHA256SUMS.txt — digests

darwin/arm64 missing again — the Mac build host could not reach crates.io during the build (same network issue as v0.3.0). Will be added when the Mac host is back online.

See CHANGELOG.md for the full release entry.

v0.3.0

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 21 Apr 19:32

asupersync v0.3.0

Six-week multi-agent development sweep landing hundreds of metamorphic relations, golden snapshots, fuzz targets, and conformance fixtures, plus a coordinated dependency refresh and a large compile-and-test hygiene pass.

crates.io publishes (all v0.3.0)

Dependency wave

sha1 0.10→0.11, sha2 0.10→0.11, hmac 0.12→0.13 (coordinated digest-0.11 bump), hashbrown 0.15→0.17, rusqlite 0.38→0.39, lz4_flex 0.12→0.13, signal-hook 0.3→0.4, rayon 1.11→1.12, plus wide semver-compatible refresh via cargo update.

Concurrency bugs fixed

  • src/observability/runtime_integration.rs: parking_lot RwLock self-deadlock in on_task_cancel_completed / on_region_closed — write guard's lifetime extended into if let block where a read-lock was reacquired. Fixed by extracting the removal to a let binding.
  • src/service/discover.rs: DNS Condvar coalesce gained waiters: AtomicUsize + waiter_count() observability so tests can wait for a follower to park before releasing the leader. 5 previously-racy tests rewired.
  • src/runtime/scheduler/three_lane.rs: one-line test-only let mut scheduler fix.

See CHANGELOG.md for the full entry.

Binaries (local DSR fallback — GH Actions was throttled)

  • asupersync-v0.3.0-linux-amd64.tar.gz — Linux x86_64 (cargo build --release --bin asupersync --features cli)
  • asupersync-v0.3.0-windows-amd64.zip — Windows x86_64 (native MSVC build)
  • SHA256SUMS.txt — digests for both

darwin/arm64 is missing — the Mac build host could not reach crates.io during the build (network connectivity issue). Will be added in a follow-up release.

v0.2.9

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 22 Mar 01:12

Full Changelog: v0.2.8...v0.2.9

v0.2.8

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 15 Mar 15:58

Asupersync v0.2.8

Massive release: 956 commits since v0.2.7 spanning 410 bug fixes, 222 features, and comprehensive audit coverage across 500+ files.

Highlights

Runtime & Scheduler

  • Fixed ThreeLaneLocalWaker priority inversion for cancelled local tasks
  • Actual cancel masking in commit_section (was previously a no-op)
  • Reactor chaos stats aggregation and auto-advance for lab-reactor events
  • Spurious wake injection with per-task deduplication

RaptorQ (RFC 6330)

  • Validated ObjectParams block-layout metadata drift detection
  • Infinity-safe decode threshold calculations
  • Pre-calibration e-process evidence protection
  • Source payload hash in decode proofs for replay verification
  • GF(256) SIMD threshold fix and c==1 addmul fast path
  • SparseRow duplicate/out-of-range canonicalization

Networking & HTTP

  • HTTP/1.1 Expect: 100-continue early handling with codec preview
  • HEAD response body suppression per RFC 9110
  • WebSocket cancellation-triggered close handshake timeout
  • DNS resolver fail-closed on custom nameservers
  • MySQL IPv6 bracket support and connect timeout

Channels & Sync

  • FlushGuard RAII prevents message loss in FaultSender
  • Watch channel borrow_and_update atomic TOCTOU fix
  • Reference-counted gRPC HealthReporters

Correctness & Safety

  • Double-panic guards across all Drop-based leak detectors
  • Obligation ledger abort_by_id for drain paths and reset safety
  • Kafka consumer partition validation and duplicate detection
  • Generation-based stale DNS resolution protection
  • Snapshot trailing bytes rejection
  • Distributed region quorum-loss close on last replica

Testing & Observability

  • Structured logging schema enforcement (rch-backed repro commands)
  • Phase marker validation for E2E test logs
  • Comprehensive audit coverage: 500+ files, ~65 bugs found and fixed

Platforms

Platform Architecture File
Linux x86_64 asupersync-0.2.8-linux-amd64.tar.gz
macOS Apple Silicon (arm64) asupersync-0.2.8-darwin-arm64.tar.gz
Windows x86_64 asupersync-0.2.8-windows-amd64.tar.gz

Checksums (SHA-256)

See SHA256SUMS.txt for verification.

Install

# Linux
curl -sSL https://github.com/Dicklesworthstone/asupersync/releases/download/v0.2.8/asupersync-0.2.8-linux-amd64.tar.gz | tar xz
sudo mv asupersync-linux-amd64 /usr/local/bin/asupersync

# macOS (Apple Silicon)
curl -sSL https://github.com/Dicklesworthstone/asupersync/releases/download/v0.2.8/asupersync-0.2.8-darwin-arm64.tar.gz | tar xz
sudo mv asupersync-darwin-arm64 /usr/local/bin/asupersync

v0.2.5

Choose a tag to compare

@Dicklesworthstone Dicklesworthstone released this 19 Feb 01:44

Release v0.2.5\n\n- workspace crate versions aligned to 0.2.5\n- release train prepared for crates.io publication with license-file metadata (MIT + OpenAI/Anthropic rider)\n