Skip to content

Release Notes

0.2.0

Added

  • Live actor registry controls on ActorSystem, including refs(), refs_by_type(), broadcast(), and stop_all().
  • system.control_panel() for a printable snapshot of actor ids, addresses, names, actor classes, lifecycle state, and hierarchy.
  • ActorRef.is_alive() for lightweight liveness checks.
  • Async actor proxies via ref.proxy(), allowing method-style calls such as await proxy.reserve(...) while preserving actor mailbox isolation.
  • Fire-and-forget proxy method calls with await proxy.method.defer(...).
  • Direct proxy messages (ProxyCall, ProxyGetAttr, ProxySetAttr) for integrations that need lower-level control.
  • Real-world documentation for actor registries, control-panel usage, and actor proxies.

Fixed

  • Persisted lifecycle event and dead-letter records now store stable actor address strings instead of leaking runtime-shaped address values.
  • Actor parent references now expose their address consistently through context.parent.address.
  • Watchers now receive one termination notification per stopped actor.
  • Startup persistence hooks are awaited correctly before actors are allowed to run.
  • Actor mailbox and internal event streams now close cleanly during shutdown and failed startup.
  • ActorAddress.parse() accepts the documented system://actor_id form while preserving the existing system:actor_id form.
  • Added the correctly spelled persistence_recovery property while keeping persistance_recovery as a compatibility alias.

0.1.1

Fixed

  • When using the settings it was causing a conflict with the types and not casting properly to the right type due to the from future import __annotations__.
  • Settings inheritance now preserves typed fields from parent classes when type hint resolution falls back, allowing child settings classes to override inherited values without re-annotating fields.

0.1.0

Added

  • Core async actor system with strict message isolation and single-threaded actor execution
  • ActorSystem lifecycle management (startup, shutdown, supervision)
  • Base Actor API with lifecycle hooks:
  • on_start
  • receive
  • on_stop
  • on_child_failure
  • Supervision model with restart, stop, escalate, and ignore strategies
  • Built-in persistence subsystem with pluggable backends:
  • In-memory backend
  • JSON file backend
  • Rotating file backend
  • Redis Streams backend (including consumer groups)
  • Retention policies based on:
  • Maximum record count
  • Maximum age
  • Maximum storage size
  • Compaction mechanisms to reclaim storage safely
  • Persistence health scanning and anomaly detection
  • Recovery strategies:
  • In-place repair
  • Quarantine-based recovery
  • First-class metrics system with:
  • Write/read counters
  • Error tracking
  • Recovery and compaction statistics
  • CLI tooling for operational control:
  • Persistence scan, recovery, compaction, and inspection
  • Doctor command for pre-flight health checks
  • Metrics inspection and reset
  • ASGI integrations with Lilya and Ravyn:
  • Automatic lifecycle hooks
  • Health endpoints
  • Metrics endpoints (JSON-compatible)
  • OpenTelemetry-compatible metrics exposure hooks

Notes

  • This is the initial public release of Papyra.
  • APIs are considered stable enough for early adopters, but minor breaking changes may occur before 1.0.0.
  • The project prioritizes correctness, observability, and operational safety over premature optimization.