Skip to content

Nerthus.Core

Nerthus.Core (until cutover). This page describes the frozen system that runs today and is deleted at cutover. Replaced by: Work on Nerthus.Platform.

The REST daemon and the thin PowerShell client over it. Every other component in the estate either calls this one or is called by it.

Read at nerthus.core 126bd73 (2026-08-28).

Architecture owns what runs inside a daemon. This page is about the repository: what it holds, what its pipeline produces, and what stops if it does.

What it owns

  • The closed route table. daemon/routes.ps1 is the one list of what the API answers, with each route's capability, write flag and query parameters. A behaviour that is not a row there is not a feature anywhere in the estate.
  • The data model as code — entities, sessions, PU, currency, locations, governance, the contributor store — reading and writing Polish Markdown in the lore repository.
  • The capability ACL and the single write gate every mutating route passes.
  • The container image every fleet host runs.
  • The Verb-Nerthus* cmdlets, which are wrappers over the routes and hold no logic of their own.

Computation-heavy parts are C# under src/Nerthus.Core.Substrate/; everything else is PowerShell 7 with no external dependencies.

Where its CI runs

On the group's self-hosted runner. Ten jobs, and three of them are the ones to know:

Job What it does
build:substrate compiles the C# substrate, so a syntax error is one red branch rather than a boot failure on every host
pester the PowerShell suite, including the API reference replay
package · package:amd64 · package:arm64 builds and publishes the image, and writes its digest
publish:image-pin proposes that digest to Nerthus.Core.Infra.Dev

pester clones nerthus.docs at $CI_COMMIT_REF_NAME before falling back to main. That is how a documentation branch and a code branch of the same name are tested together, and it is why a reference page that lands alone reddens this repository's next pipeline.

What it pins, and what pins it

Nothing pins Nerthus.Core; it is the thing others pin.

It pins the fleet by digest. package publishes an image and records its digest; publish:image-pin rewrites image: and the source sha in Nerthus.Core.Infra.Dev's versions.lock and changes nothing else in that file. Every host converges on the digest that lands there, so a merge in this repository does not reach a host until that pin moves.

lib/ is a build output of the C# substrate and is gitignored. It is not a dependency somebody installs; it is a directory that can be stale on a clone while git status stays clean.

What breaks if it stops

Development stops; the estate does not. Hosts keep serving the image they are pinned to, the dashboard keeps reading them, and the committed lore is untouched. What ends is every route the next version was going to add, and the replay that proves the API reference is still true.

A host cannot fall back to an older daemon on its own. Rolling one back is a pin change and a converge, which is Roll the fleet back.

See also