The foundation of the Einherjar framework. Pure interfaces. Zero dependencies. A constitution, not a changelog.
`contracts` defines the interfaces and minimal types that every Einherjar starter depends on. Nothing is above it in the dependency graph. Its interfaces, once published, are permanent — adding a method is a breaking change in Go, and breaking changes require a major version bump and coordinated updates across the entire framework.
---
## What Is Einherjar
In Norse mythology, the Einherjar are the chosen — warriors who fell in battle and were carried to Valhalla by the Valkyries. There they train, day after day, preparing for Ragnarök. They are not preserved for themselves. They are prepared for what comes after.
This framework carries that name deliberately. Every interface defined here, every ADR written, every pattern documented exists for the developer who will build on this code without ever being in the room where it was designed. No tribal knowledge. No implicit conventions. The documentation is the system.
---
## Module
```
code.nochebuena.dev/einherjar/contracts
```
**Dependencies:** none. This module imports only the Go standard library.
**Stability guarantee:** existing interface signatures are permanent. New interfaces may be added. Existing ones are not modified.
**Changes flow outward from `contracts`, never inward.** A starter never drives a
contracts change. Before any modification, calculate the blast radius: which interfaces
are affected → which starters implement them → which starters consume those starters.
Release sequence is always contracts first, then implementors, then consumers.
---
## Compliance
```bash
go build ./... # zero external dependencies
go vet ./...
go test ./... # structural (one type per file) + behavioural tests
gofmt -l . # no output
```
---
*The Einherjar did not train for themselves. They trained for Ragnarök — for the battle they knew was coming, for those who would need them to be ready. Write code the same way.*