PulseTrade.Comm.Actor.Registry 0.1.0-alpha4

This is a prerelease version of PulseTrade.Comm.Actor.Registry.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package PulseTrade.Comm.Actor.Registry --version 0.1.0-alpha4
                    
NuGet\Install-Package PulseTrade.Comm.Actor.Registry -Version 0.1.0-alpha4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PulseTrade.Comm.Actor.Registry" Version="0.1.0-alpha4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PulseTrade.Comm.Actor.Registry" Version="0.1.0-alpha4" />
                    
Directory.Packages.props
<PackageReference Include="PulseTrade.Comm.Actor.Registry" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PulseTrade.Comm.Actor.Registry --version 0.1.0-alpha4
                    
#r "nuget: PulseTrade.Comm.Actor.Registry, 0.1.0-alpha4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PulseTrade.Comm.Actor.Registry@0.1.0-alpha4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PulseTrade.Comm.Actor.Registry&version=0.1.0-alpha4&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=PulseTrade.Comm.Actor.Registry&version=0.1.0-alpha4&prerelease
                    
Install as a Cake Tool

PulseTrade.Comm.Actor.Registry

PulseTrade.Comm.Actor.Registry is the low-dependency PTC actor lifecycle package introduced by RFC-PTC-0017.

The package owns:

  • explicit ActorOfRegistered / registeredActorOf wrappers;
  • register / unregister lifecycle events;
  • terminated watcher support for classic Akka actors;
  • sharding lifecycle vocabulary for region, proxy, and entity state;
  • renderer-neutral ActorTreeDocument;
  • deterministic ActorTreeMarkdown report generation;
  • a small in-memory outbox helper for sink retry tests and bootstrap scenarios;
  • an optional UTF-8 JSONL append/replay baseline for package-level restart tests.

The package does not reference PTCS, GW, RN, PTCS.Dynamic, or any host project. PTCS.Host is expected to subscribe to lifecycle events and project them into PCSL, /actors/api/snapshot, /sync/ws, IndexedDB refresh, and report APIs.

Journal / Snapshot / DB

This package does not use Akka.Persistence or SQL Server. It does not create Akka journal tables, snapshot-store tables, or SQL tables.

Durability status:

  • 0.1.0-alpha3 is a package-level JSONL baseline plus machine-readable durability profile only.
  • It can append lifecycle events to a caller-selected file and replay them from a fresh store instance after process restart.
  • It is not a production durable actor registry provider.
  • It is not a persistent actor and does not configure akka.persistence.journal or akka.persistence.snapshot-store.
  • Production non-volatile /actors truth is expected to come from PTCS.Host projection into PTCS PCSL/SQL-backed storage, plus the future durable outbox/provider work tracked by PTC3-071/072/076.

Current durable baseline:

  • ActorRegistryFileJsonlStore.create <path> stores lifecycle events as UTF-8 JSONL.
  • The verifier path is .pcsl/verify.ptcActorRegistryPackage/registry.jsonl.
  • The caller owns the file path; there is no hardcoded database name.
  • There is no current database name and no CREATE TABLE statement in this package.

Machine-readable profile:

let profile = ActorRegistryDurabilityProfile.fileJsonl true

profile.ProviderKey                 // "file-jsonl"
profile.LocalReplayCapable          // true when a path is configured
profile.UsesAkkaPersistence         // false
profile.CreatesAkkaJournalTables    // false
profile.CreatesAkkaSnapshotTables   // false
profile.UsesSqlServer               // false
profile.CreatesSqlTables            // false
profile.ProductionReady             // false

Reserved provider keys are pcsl and sql-server, exposed through ActorRegistryDurabilityProfile.reservedPcsl and ActorRegistryDurabilityProfile.reservedSqlServer. They are not implemented in this core package and return ProductionReady=false.

JSONL record shape is one ActorRegistryLifecycleEvent per line:

{
  "contractVersion": "ptc.actor-registry.lifecycle-event.v1",
  "eventId": "registered-0001",
  "eventKind": "Registered",
  "runtimeKind": "Actor",
  "systemName": "DemoSystem",
  "address": "akka://DemoSystem/user/worker",
  "fullPath": "/user/worker",
  "parentPath": "/user",
  "name": "worker",
  "status": "Active",
  "statusVersion": 1,
  "generation": "gen-1",
  "nodeId": "node-a",
  "role": null,
  "shardId": null,
  "entityId": null,
  "typeName": null,
  "tags": ["ptc"],
  "metadata": { "package": "demo" },
  "observedAtUtc": "2026-06-28T00:00:00.0000000+00:00"
}

SQL Server / PCSL projection providers are intentionally not embedded in this low-dependency package yet. Production PTCS.Host should project lifecycle events into its own PCSL/SQL-backed actor registry stream and materialized snapshot when that host slice is enabled. Do not treat the JSONL file as the production database.

Basic Usage

open System.Threading.Tasks
open Akka.Actor
open PulseTrade.Comm.Actor.Registry

let events = System.Collections.Concurrent.ConcurrentQueue<ActorRegistryLifecycleEvent>()

let sink : ActorRegistryEventSink =
    fun event ->
        events.Enqueue event
        Task.CompletedTask

let settings =
    ActorRegistrySettings.create sink
    |> ActorRegistrySettings.withTags [ "ptc"; "demo" ]

let system = ActorSystem.Create("Demo")
let props = Props.Create(fun () -> UntypedActor.Empty)

let registered =
    system.ActorOfRegistered(settings, props, "worker")

Use the wrapper deliberately. F# extension members do not override Akka.NET instance ActorOf; callsites must opt in by calling ActorOfRegistered or ActorRegistryActorOf.registeredActorOf.

Documents

  • doc/SDK_API.md describes the public SDK/API surface.
  • doc/ActorArchitecture.md describes watcher, outbox, ActorTree, and sharding lifecycle boundaries.
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on PulseTrade.Comm.Actor.Registry:

Package Downloads
PulseTrade.Comm.GW

Durable facade package for Generic Gateway task-ticket, recovery, delivery, forwarding, and host adapter integration.

PulseTrade.Comm.ResourceNode.DurableProxy

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-alpha5 0 6/29/2026
0.1.0-alpha4 49 6/28/2026
0.1.0-alpha3 54 6/27/2026
0.1.0-alpha2 49 6/27/2026