Node JVM

sigilaris-node-jvm is the JVM runtime bundle layered on top of sigilaris-node-common. It owns the current runtime lifecycle seams, config and bootstrap assembly, HotStuff integration, Armeria HTTP transport adapters, and SwayDB-backed persistence helpers.

Current Baseline

Transaction Pipeline Admission Identity

New integrations should inject a TxPipelineIdentityStrategy[F] into TxPipelineAdmissionService. Admission invokes it exactly once after request normalization and reuses the returned hash/id pair throughout that submission. The default is TxPipelineIdentityStrategy.v1(identityScope).

The pre-0.2.12 constructor that accepts TxPipelineIdGenerator and identityScope remains available. It adapts those arguments to the new single identity-result path. TxPipelineIdGenerator.deterministicSha256 consumes the already calculated hash when its scope matches the constructor's identityScope, so the legacy default behavior does not hash the normalized identity payload twice. Historically mismatched scopes remain byte-compatible: the pipeline id still uses the generator scope while the canonical hash uses the admission scope. New integrations should keep the scopes equal. Existing custom id generators remain source-compatible, but their callback now runs once for every normalized submission, including idempotent replays and requests rejected by later admission checks, because identity is calculated before replay lookup and those checks.

Custom identity strategies must keep canonicalPayloadHash deterministic and collision-resistant over the normalized request and identity scope. Admission treats equal hashes as the same canonical request for replay, alias binding, and keyless convergence. Keep the pipelineId and hash/id pair stable. Roll out strategy changes across all writers/readers together; otherwise replay and collision decisions can diverge across nodes.

Section Guide

Current Limitations

Follow-Up Work