Skip to content
Flag of Europe
Made in the European Union · Independently built · Released under EUPL 1.2

00.80.00

Available on Maven Central. The Operations & Forensics release: 7 new modules (reactor 54 → 61) deliver a metrics/health export SPI, production-grade event integrations on the signed-envelope base (logging, webhook, OpenTelemetry, SIEM), and a tamper-evident, independently verifiable audit hash chain — plus the strict-mode wiring of the consume-side verification failure paths. 13 feature prompts, all additive. The current release is 00.83.00.

Release date: 2026-07-21 Previous release: 00.79.41 Maven coordinates (parent): com.svenruppert.jsentinel:jSentinel-parent:00.80.00 Full changelog: GitHub release v00.80.00

The operations and forensics release: runtime metrics and health export points (concept goal 9), production-grade event integrations on the signed envelope base (goal 8), a tamper-evident, independently verifiable audit hash chain (goal 7), and the strict-mode wiring of the consume-side verification failure paths (goal 10 subset). 7 new modules (reactor 54 → 61 library + demo modules), 13 feature prompts (P001–P013), 11 in-cycle entry-review fixes and 2 exit-review fixes, full reactor green.

Headline change — one tap, every exporter

Before 00.80, signed envelopes only reached remote consumers through the REST/SSE bridge; locally published envelopes had no integration point. Now there is one contract for every operational integration:

bus.subscribeEnvelope(new LoggingEventPublisher());                            // grep-able EVENT lines
bus.subscribeEnvelope(new WebhookEventPublisher(config));                      // signed envelopes over HTTPS
bus.subscribeEnvelope(new OpenTelemetryEventPublisher(otel.getLogsBridge()));  // OTel log records
bus.subscribeEnvelope(new SiemEventExporter(new CefEnvelopeFormatter(), out)); // CEF/LEEF/NDJSON
new MetricsEventBusListener(metrics).subscribeTo(bus);                         // security.eventbus.* counters
new AuditIntegrityListener(appender).subscribeTo(bus);                         // tamper-evident hash chain

A failing integration is isolated and counted — it can never break publish(...).

What’s new in detail

GoalModule(s)Delivered
9 — Operations & MonitoringjSentinel-monitoringJSentinelMetricsPublisher (counters + push gauges, never-throw), NoOpJSentinelMetricsPublisher, ServiceLoader discovery; JSentinelMetricNames — the 9 concept-verbatim security.eventbus.* names plus minted security.auth.* / security.authz.* / security.session.* / security.audit.store.lag; the MetricsEventBusListener bridge; a JSentinelHealthIndicator SPI + JSentinelHealthCheck aggregator with diagnostics, audit-store-saturation and no-metrics-publisher indicators.
8 — Event integrationsjSentinel-events(-rest), -events-webhook, -events-opentelemetry, -events-siemSelf-observability events on the six integrity records (loop-free direct dispatch); SignedEnvelopePublisher SPI + subscribeEnvelope(...) fan-out with per-publisher failure isolation; in-tree LoggingEventPublisher / EventStreamPublisher / alert sink; WebhookEventPublisher (bounded queue, virtual-thread worker, retry with backoff+jitter, https-mandatory, bearer per attempt, never logged); OpenTelemetryEventPublisher over the Logs Bridge (api-only, noop-safe); SiemEventExporter with CEF 0, LEEF 2.0 and NDJSON formatters. The wire codec moved to events.wire with a deprecated delegator for one release.
7 — Tamper-evident auditjSentinel-audit-integrity (+ testkit + eclipsestore)AuditChainEntry + append-only AuditChainStore SPI + injective length-prefixed AuditChainEntryHasher (H(prev‖entry), fail-closed, golden-pinned); AuditIntegrityVerifier (paged + range, sealed result with 5 break reasons); signed audit batches (rotated keys keep verifying, revoked do not); AuditExportService + NDJSON codec (re-verification needs only the text + public keys); restart-safe Eclipse-Store persistence — entries written before and after a restart verify as one chain.
10 subset — strict-mode consumejSentinel-eventsConsumeFailureAction / ConsumeFailurePolicy (strict() fail-closed, operationalDefaults(), custom()) and ConsumeFailureHandler — the one place a failure becomes observable: exactly one self-observability event, optional dead letter, one operator log line per kind with stable events/... codes; total and never-throwing; a dead-lettering policy without a store fails at wiring time.

Additivity

Everything is additive. No published API was removed; the one relocation (EnvelopeWireCodec → …events.wire) keeps a @Deprecated(forRemoval = true, since = "00.80.00") delegator at the old events.rest location for one release. All new public types carry @ExperimentalJSentinelApi + @since 00.80.00.

What it does not do

  • No bundled monitoring stack, scrape endpoint, histograms or metric tags/dimensions (a deliberate V1 cardinality decision) — the SPI is the export point.
  • No SIEM as part of the framework and no vendor binding — formatters only; the transport belongs to the host.
  • No transport-level HMAC on the webhook — the signed envelope is the integrity layer; receivers verify with the events SPIs.
  • No per-tenant audit chains (single chain per store in V1).
  • Deferred concept goals stay deferred: MFA/step-up, WebAuthn, device/remember-me, risk-based auth, CSRF, privacy/retention.

Quality

Measured with the reactor PIT setup against the ≤ 3 pp acceptance bar; new modules set new baselines. jSentinel-core held at 84 % (2231/2658); jSentinel-events 84 % at +49 % code; new baselines include jSentinel-monitoring 79 %, jSentinel-events-siem 94 %, jSentinel-events-opentelemetry 100 %, jSentinel-audit-integrity 78 % and its Eclipse-Store persistence 77 %. Every feature ships no-mock tests (real implementations, recording doubles, real HttpServer/SDK/storage). Full 61-module reactor build with tests green. No mocks.

Roadmap

00.80.x candidates: SSE reconnect counter hook, per-tenant audit chains, dx↔events STRICT bridging, optional webhook HMAC opt-in. 00.81+: the deferred concept goals (MFA/step-up, WebAuthn, device management, risk-based auth, CSRF, privacy/retention).