Expand description
The estate values the installer’s door feeds (monetize key, clock key and peer), taken instead of the medium’s — see the module. The estate values the installer’s door FEEDS, taken instead of the medium’s — so one medium serves any estate.
The join reply the pairing loop receives carries a feed table
(nordisk_pairing::join::JoinReply::feed); the loop persists the whole
reply to <data>/pairing/joined.toml ([crate::pairing::JOINED_REL]).
Three of its keys configure this box:
| key | what it replaces on the medium | applied |
|---|---|---|
monetize_pubkey | GUNNAR_MONETIZE_PUBKEY / --monetize-pubkey | at start, or LIVE when it arrives |
clock_key | ESTATE_CLOCK_KEY / GUNNAR_CLOCK_KEY (korp.env. / clock_key= param) | on every clock sync |
clock_peer | ESTATE_CLOCK / GUNNAR_CLOCK (korp.env. / clock= param) | on every clock sync |
(admin_pubkey is the fourth feed key; the pairing loop installs it itself.)
§Precedence: there is none — a disagreement is REFUSED by name
Medium alone → the medium’s. Door alone → the door’s. Both and EQUAL →
that value. Both and DIFFERENT → FEED_MISMATCH, never a silent pick:
the medium and the installer disagree about which estate this box is in,
and choosing either one is choosing whose money or whose time to trust
without saying so (the reasoning of ops’ monetize-pubkey-mismatch
preflight, which refuses a bring-up over the same disagreement).
- The monetize key at start: a refusal to start (
resolve_monetize). - The monetize key arriving while running (first boot): the key in force
stays, the
Admin.HealthalarmFEED_MISMATCHis raised. - The clock: every sync reads the effective configuration
(
clock_config), and a disagreement is the sync’smisconfiguredreport namingFEED_MISMATCH— the clock is left alone.
§The monetize key applies LIVE (owner 2026-09-25: avoid restarts)
A metered box on a fed medium starts KEYLESS: its entitlement slot and
its growth go-ahead policy are built with no key (every namespace Free,
Entitlement.Set refused, a monetize go-ahead refused) and registered
as takers (on_monetize_key). When the installer feeds the key (or vm1
offers it), monetize_arrived hands it to each taker, which swaps it in
place — the slot re-verifies every stored fact under it — and the key is
persisted in joined.toml for the next start as before. Until 2026-09-25
this was a restart of the machine. The clock (clock_key, clock_peer)
and the fed principals were already live: the clock reads the feed on
every sync, and the primary installs principals on every feed.
§The bus is the shared one (L10, 2026-10-20)
Every feed this process takes is published on nordisk-pairing’s process-wide
feed bus (feedbus::publish, Skidbladnir 0.5.15, A7 row 8): a part that
applies a fed value LIVE subscribes with feedbus::on_published and reads
the typed Fed::from_feed; Fed::current is the typed view of the
value in force. Gunnar’s own bus (this module’s publish, on_published,
current) is gone; this module is the typed view over the shared one.
Structs§
- Fed
- What the door fed, as far as this box’s configuration goes.
- Withheld
- A fed value that is a credential: kept, compared, never shown.
Enums§
Constants§
- FEED_
BILLING_ URL - The SITE’s pay page (UW-6, feed key
refusal_link: the open build names no money): a{tenant}template,https://<site>/billing/{tenant}— a page the site’s own console serves. The medium is one for every estate, so the page it bakes (--billing-url) is a placeholder this replaces, LIVE ([crate::entitlement::EntitlementSlot::set_billing_url]). - FEED_
CLOCK_ KEY - FEED_
CLOCK_ PEER - FEED_
EGRESS - The front’s egress door (Skidbladnir nordisk-pairing
egress::FEED_EGRESS, the lean estate, A19): fed by the shop to a box laid with no public IPv4. The box’s clients that reach the internet (the identity provider’s, the webhooks’, the mirrors’, the mail relay’s) leave through it (take_egress,nordisk_pairing::egress::proxy). - FEED_
FLEET - The ONE monetize’s
Fleetdoor (5.4, ONE monetize, M-D35): what--fleetnames on the medium. shop-pairing feeds it to the front, the front offers it to every box; the box’s pull channel reports there ([crate::repair::resolve_fleet]). - FEED_
FLEET_ AT - Where the pull channel connects (
host:port), fed besideFEED_FLEETwhen the door’s name is not what this box should dial (a test bench whose guests resolve no names). TLS still verifies the certificate underFEED_FLEET’s host. Absent: the URL’s own host, resolved. A BENCH address only (ST-19, [crate::repair::seam_refusal]). - FEED_
FLEET_ CA - The PEM the pull channel’s door is checked against, fed beside
FEED_FLEETwhen its certificate is not under the public roots. Absent: the public roots. Only beside a benchFEED_FLEET_AT(ST-19). - FEED_
FLEET_ INSTANCE - The estate this box reports for (
--fleet-instance), fed besideFEED_FLEET. - FEED_
MISMATCH - The alarm/refusal word for a medium value and a DIFFERENT fed value.
- FEED_
MONETIZE - The feed keys this module reads (the contract’s names; never renamed).
- FEED_
NOT_ APPLIED - The alarm for a fed monetize key this running process could not apply
(no entitlement slot to apply it to, or a taker refused it). It used to be
pairing.feed_restartand a reboot; the key is applied live now. - FEED_
REPAIR_ AUTO - Auto-fix, fed (main rebuild, 2026-10-12): exactly
trueturns the box’s auto-fix on, as--repair-autodoes. The estate’s opt-in, carried by its installer; nothing else changes what the guard allows (gunnar_repair::rebuild). - FEED_
REPAIR_ KEY - The repair key, fed (main rebuild, 2026-10-12): an OpenSSH private key this box signs
its repair calls with when no
--repair-keyis given — a re-laid main holds no twin key, and without one every pulled order and the auto recharge were refused. The installer feeds its public half as a principal, so the twin reads its log to it and a fresh main takes itsBootstrap.Restore. - FEED_
SELLS_ ROOM - This estate SELLS room (2026-10-08):
trueon a selling shop’s boxes (gunnar.rs, test2), absent everywhere else — a SOLD estate and the open build keep “no fact is uncapped”. Applied LIVE (Fed::sells_room, gunnar-grpcselling). - FEED_
SMTP_ FROM - FEED_
SMTP_ URL - The relay a sold estate’s main mails through, as the shop feeds it (monetize-server
estate_order::FEED_SMTP_*, P1). - FEED_
SSO_ PRIVATE_ IDP_ CIDRS - The operator’s internal networks a company IdP may live on (owner
2026-10-06, a private gunnar): a list of CIDRs, estate config the
installer feeds; never an account admin’s. Empty or absent: today’s guard
(
gunnar_grpc::sso::PrivateNets). Applied LIVE on every feed.
Functions§
- alarms
- The feed alarms, for
Admin.Health. - clock_
config - The clock configuration in force now: the process environment (the
medium’s
korp.env.ESTATE_CLOCK*, or Gunnar’skorp.env.GUNNAR_CLOCK*read as its alias,estate_clock::config::var) merged with the current feed. Read on EVERY sync, so a feed that arrives while running applies to the next one. - clock_
fed - Whether the door fed a clock source.
- kept_
feed - A build without the pairing loop has no door to be fed by.
- load_
at_ start - Read
joined.tomlunderrootand publish its feed on the shared bus (feedbus::publish). Called once at start; an unreadable file is logged and treated as no feed (the loop re-joins and rewrites it). - monetize_
arrived - The fed monetize key arriving while running (the pairing loop’s
answer, or vm1’s offer carried by the installer): APPLIED IN PLACE by every
registered taker (
on_monetize_key), with no restart (owner 2026-09-25).None= nothing to do (no key fed, the same key already in force, or a process that recorded none — a community build or a test). - monetize_
in_ force - offered_
by vm’s offer ofkey(offer.<vm>.<key>), trimmed; blank is absent.- on_
monetize_ key - Register a taker of the monetize key (owner 2026-09-25: avoid
restarts) — called by
servefor the entitlement slot and the go-ahead policy it built keyless, so a key the installer feeds later is applied in place bymonetize_arrived. - raise
- Raise (or re-raise, counting) a feed alarm; said on the log too.
- record_
monetize_ in_ force - resolve_
clock - The clock’s two values, medium against door — edda estate-clock’s
(
offer::resolve_clock, moved there from here AS IS; the refusal namesFEED_MISMATCH, the same word).Ok((clock, key))is whatestate_clock::config::Config::parseis handed. The clock’s two values, medium against door.Ok((clock, key))is whatcrate::config::Config::parseis handed. Both set and DIFFERENT is a refusal namingFEED_MISMATCH, never a silent pick. - resolve_
monetize - The monetize key at start.
mediumis the resolved key off--monetize-pubkey/GUNNAR_MONETIZE_PUBKEY;fedis the door’s spelling (64 hex). A fed value that is not a key, or that differs from the medium’s, is refused by name. - seam_
refusal - The mock’s seam, honoured only as the mock feeds it (ST-19): a fed
fleet_atis a bench forward — an address literalip:porton a private, loopback, link-local or shared (100.64/10) network — and a fedfleet_cacomes only beside one. Anything else (a public address, a name, a CA with no bench address) is refused by name: a release box never dials elsewhere, nor re-roots its trust, on a feed’s word. - sso_
private_ nets - The operator’s internal networks a company IdP may live on, as
fednames them: none when nothing is fed. A list gunnar refuses (a public or loopback range) is an error, said by the caller and applied as none. - take_
egress - This box leaves through the door it was fed (
FEED_EGRESS): kept process-wide (nordisk_pairing::egress::set_proxy, the first wins: the door is the front’s overlay address, the same for the life of the estate) for every client that reaches the internet. Called with each feed published (serve); a feed with no door changes nothing.
Type Aliases§
- Monetize
Taker - Something that takes the monetize key LIVE: the entitlement slot (both
front doors’ plan gate and
Entitlement.Setread it) and the growth go-ahead policy. Registered byserveonce each is built.