Skip to content

Releases: gsmlg-dev/hell

Hell v0.1.3

Choose a tag to compare

@gsmlg gsmlg released this 25 Oct 09:34

Adds Hell.Handler.set_read_timeout/2 so connection owners can disable the persistent read-idle timeout when their first long-lived stream opens and restore a finite policy when their last stream closes. The operation supports GenServer call, cast, info, and continuation callbacks; retain its returned socket in handler state.

Read timers now carry a Hell-specific tag and timer reference. Queued or late notifications from a replaced timer are ignored, while application-owned timers and existing callback timeout returns retain their behavior. Explicit receive, transport send, and handshake deadlines remain independent.

Fixes #2.

Validation: 166 ExUnit tests; compilation with warnings as errors; formatting, unused-dependency checks, strict Credo, Dialyzer, and docs; packaged TCP/TLS echo and graceful-shutdown smoke tests. All 12 Linux/macOS toolchain jobs and static CI passed on the release commit. A fresh Hex-only consumer passed 41 tests against the published package; its checksum and all 24 packaged files match the tagged source.

Static CI · Linux/macOS tests

Hell 0.1.2

Choose a tag to compare

@gsmlg gsmlg released this 19 Oct 04:26
  • Preserve the listening socket when the acceptor pool restarts, so supervision
    can recover without taking down the server.
  • Clean up handlers whose acceptor exits before completing socket handoff,
    preserving connection capacity across suspension and acceptor failures.
  • Apply handshake_timeout to TCP-to-TLS upgrades. Add an optional transport
    upgrade/3 callback while retaining support for existing upgrade/2 transports.
  • Honor one-shot and persistent read timeout overrides after transport upgrades,
    independently of GenServer mailbox timeouts.
  • Accept raw socket options without merging distinct native options.
  • Enforce the documented binary mode for bare :list and :binary aliases as
    well as mode tuples on TCP and TLS listeners.

Existing handler callbacks, startup/readiness messages and required transport
callbacks remain compatible. Stalled TLS upgrades now close after the configured
handshake deadline; handshake_timeout: :infinity restores unbounded waiting.
Callers relying on the unintended :list override now receive binary data.

Validation:

  • Local full suite: 155 tests, 0 failures; compilation, formatting, strict Credo, Dialyzer and docs passed.
  • Linux and macOS test matrix.
  • Static checks.
  • Package smoke exercises TCP, certificate-verified TLS and graceful shutdown.

CI evidence: the final matrix passed on attempt 2. Attempt 1 failed the unchanged 100ms heartbeat timing test in one macOS/OTP 26 job; that job passed on the bounded diagnostic rerun without code or test changes. Its spontaneous failure cause remains unresolved. The original failure and baseline comparison are retained.

Published artifact verification: Hex SHA256 and workflow archive match; all 24 packaged source files match the tag. Fresh Hex-only consumer passed 27 regression tests and 3 TCP/TLS/graceful-shutdown smoke tests. HexDocs is publicly available.

Hell 0.1.1

Choose a tag to compare

@gsmlg gsmlg released this 15 Oct 13:46

Hell 0.1.1

Hell 0.1.1 fixes an inherited shutdown race that could omit acceptor stop telemetry. The listener now waits for live acceptors to finish their existing cleanup before pool teardown, within the existing 5000ms child shutdown bound. This can add shutdown latency; forced termination can still interrupt cleanup.

  • Retain existing event names, measurements, metadata, socket options, ownership and configured connection timeouts.
  • Stabilize macOS test fixtures with handler-entry acknowledgment, absolute traffic schedules and earlier log capture, preserving original timeouts and assertions. Add deterministic shutdown and multiple-listener regressions.
  • Add Copyright (c) 2026 GSMLG Limited for fork contributions while retaining Mat Trudel's notice and all MIT terms.

Hell is derived from Thousand Island at upstream commit e3eb2a7a05f98d79436abcefd8c954da2f8b05c0. Historical upstream releases keep their original identity. Hell 0.1.0 was the first Hex package, published by the fork maintainer.

Validation on commit 3baf60d2bfedadc78c6bebd2b818a777759758f4:

  • Linux/macOS matrix: 12/12 jobs passed on attempt 1, 1528 test executions and zero failures.
  • Static checks: passed.
  • macOS ARM64 / Elixir 1.19.5 / OTP 28.3: 129 tests and 404 focused executions, zero failures; compile, format, Credo, Dialyzer, strict docs and local package build passed.
  • Nonpublishing package preparation: 129 tests and 3 package-consumer tests, zero failures. Safe package contents, identity, metadata and license audited against the commit.
  • Normalized upstream AST comparison: 33/36 existing source/test/example files unchanged; the remaining differences are the reviewed shutdown correction and two test files. Dependency lock and application/dependency configuration are unchanged.

Elixir >= 1.18.0 is required. Consumers migrating from Thousand Island must update namespaces, OTP/package identity, telemetry/process-label prefixes and custom-handler readiness messages as documented in MIGRATION.md.

Workflow publication succeeded. The public Hex package and versioned documentation were independently verified. The attached archive is byte-for-byte identical to the published package (SHA-256 6136e7f6ae01cfe6e89fbf91b177a6f5eeeb6e6340fd8aef3a486120a4065af2).