Skip to main content

NthLayer core — reliability-critical verdict store, case management, and HTTP API

Project description

nthlayer-core

Tier 1 of the NthLayer ecosystem. Reliability-critical HTTP API server: verdict store, case management, change-freezes, manifest catalogue, heartbeats, component state.

pip install nthlayer-core
nthlayer serve --host 0.0.0.0 --port 8000

What it is

nthlayer-core is the single source of truth for the NthLayer runtime. It owns the SQLite store, exposes an HTTP API, and is the only component that touches the database. Tier 2 workers (nthlayer-workers) and the Tier 3 operator TUI (nthlayer-bench) talk to core exclusively over HTTP — never directly to SQLite.

Core availability = product availability. Worker failure is degradation; core failure is an outage.

  • Stateful, no LLM. Pure transport. Decisions live elsewhere.
  • Python · Starlette · uvicorn · SQLite (WAL).
  • Apache 2.0 licensed.

Why a single API server

The v1.5 architecture moved away from per-component SQLite databases for two reasons:

  1. Lineage and case state need a single consistent view. A verdict written by the measure module must be linkable from a case opened by the bench TUI without cross-DB joins.
  2. Workers should be replaceable. Any worker can crash, restart, or be re-deployed without touching shared state. Core holds the state; workers hold cursors.

HTTP API surface

Core exposes the following resources. All responses are JSON. Verdicts are immutable — the outcome_resolution pattern creates a NEW verdict with parent_ids=[original_id] rather than mutating the original.

Resource Endpoints
Verdicts POST /verdicts, GET /verdicts, GET /verdicts/{id}, GET /verdicts/{id}/ancestors, GET /verdicts/{id}/descendants, POST /verdicts/{id}/outcome
Assessments POST /assessments, GET /assessments
Cases POST /cases, GET /cases, GET /cases/{id}, PUT /cases/{id}/lease, DELETE /cases/{id}/lease, PUT /cases/{id}/resolve
Change freezes POST /change-freezes, GET /change-freezes, PUT /change-freezes/{name}/lift
Heartbeats POST /heartbeats, GET /heartbeats
Component state PUT /component-state/{component}, GET /component-state/{component}
Suppressions POST /suppressions, GET /suppressions
Manifests GET /manifests, GET /manifests/{service}, POST /manifests/-/reload
Monitoring GET /monitoring/stuck-action-requests
Health GET /health

Priority derivation

Cases without an explicit priority are derived from blast_radius + has_active_incident:

blast_radius active_incident priority
production true P0
production false P1
staging true P1
staging false P2
dev / ephemeral / unknown any P3

Configuration

Env var Purpose Default
NTHLAYER_STORE_PATH SQLite database path nthlayer.db
NTHLAYER_MANIFESTS_DIR Directory of OpenSRM YAML manifests unset (catalogue empty)

Schema (v1.5.0)

10 tables, string IDs, JSON TEXT content:

  • verdicts — immutable records with lineage
  • assessments — non-decision component outputs
  • cases — bench domain model with lease management
  • change_freezes — RBAC §7 freeze documents
  • heartbeats — component liveness (upsert per instance)
  • component_state — persistent worker state across restarts
  • suppressions — suppression audit trail
  • rekor_anchors — empty in v1.5; populated in v2 (forward-compat)
  • lineage — pre-computed transitive closure for fast ancestor/descendant queries
  • schema_meta — schema version

WAL mode + PRAGMA synchronous=NORMAL + busy_timeout=5000. Thread-local connection pool. BEGIN IMMEDIATE for all writes. Retention is policy-driven (verdicts only pruned when old AND no younger descendants AND no surviving case references); rekor_anchors are never pruned.

CLI

nthlayer serve [--host 0.0.0.0] [--port 8000]   # start the HTTP server
nthlayer -V                                       # print version

NthLayer ecosystem

nthlayer-core is one of seven repos. Each component works alone; composition happens through OpenSRM manifests + the core HTTP API.

Repo Tier Role
opensrm The OpenSRM specification
nthlayer-common Shared library (verdicts, manifests, LLM wrapper, CoreAPIClient)
nthlayer-generate Build-time compiler: specs → Grafana, Prometheus, SLOs, Backstage
nthlayer-core 1 This repo — HTTP API + state
nthlayer-workers 2 observe / measure / correlate / respond / learn worker modules
nthlayer-bench 3 Operator TUI
nthlayer Project front door + meta-package (pip install nthlayer)

Licence

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nthlayer_core-1.6.0.tar.gz (33.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nthlayer_core-1.6.0-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file nthlayer_core-1.6.0.tar.gz.

File metadata

  • Download URL: nthlayer_core-1.6.0.tar.gz
  • Upload date:
  • Size: 33.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nthlayer_core-1.6.0.tar.gz
Algorithm Hash digest
SHA256 c3b4e567360e4dc7e241374b0feb64215288ef03a679701397b87fb986f66d3f
MD5 86aa401e357f295e297bc317e20dfd3f
BLAKE2b-256 dbbbfbd04bc47b3ae21ca4cb4016ed1b87df2365541a464be7689f1417588b2a

See more details on using hashes here.

Provenance

The following attestation bundles were made for nthlayer_core-1.6.0.tar.gz:

Publisher: release.yml on rsionnach/nthlayer-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nthlayer_core-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: nthlayer_core-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nthlayer_core-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6930abf5c0e36d73e223ce6414707cc5ad58b8d4c18867643e23d1ec2d1e792c
MD5 6f59e316aa74bcfa74feeefa70694fc6
BLAKE2b-256 7b03a8fb15fd2181143cdf84b36befca3a08185299bba48e1ca3b1777b1dc7d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for nthlayer_core-1.6.0-py3-none-any.whl:

Publisher: release.yml on rsionnach/nthlayer-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page