Commit graph Odin/test
Author SHA1 Message Date
Meta Vens
3f22fd1d76 Hermodr leaves Odin
Hermodr is a browser lowering, not an all-seer organ. It lived here as Node
inside a Rust repository, sharing a module directory with the coordinator, and
until this week it ran its own provider ingress and accepted publications into a
private store. The ingress went first on purpose: extracting it beforehand would
have relocated a second acceptance authority and called that progress.

Removed: the daemon, its provider subscription source and state stream, both
test files, four lifecycle scripts, the persona avatar, the hermodr:start
script, and src/odin/utils.cjs, whose only remaining consumer was Hermodr and
which it used for one of six functions.

src/odin/ falls from fourteen modules to eleven. The CommonJS surface falls from
sixteen files to twelve. What is left is the coordinator, the Rust organs, and
two adapters declaring contracts other repositories own.

The plan document stays as the record of what left and why. Phase 5, static
lowering, is Hermodr's business now.

5 tests pass, syntax check clean over twelve files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 19:46:06 +02:00
Meta Vens
ac3336adeb Reduce Odin's Idunn health publisher to Idunn's contract
idunn-rudp.cjs was 324 lines of which almost none were about Idunn. The
transport moved to CultLib as cultnet-ts's signed-daemon-health module, beside
the RUDP session it was already built on. What is left here is 65 lines: the
three constants naming Idunn's wire contract, and the call shapes Odin's
consumers already use.

The constants are declared, not decided. Idunn defines them in
docs/signed-daemon-health-authority.md, which until today did not state the
connection id at all -- the value describing how to reach Idunn existed only in
this consumer. Declaring two constants against a documented contract is not
duplicated authority; duplicating 311 lines of transport across Odin and a
future Hermodr repository would have been.

The module also stops resolving CultLib by walking up three directories from its
own location. It now honours CULTLIB_ROOT with that walk as a fallback, matching
what hermodr-daemon.cjs already did. The old assumption held only while Odin sat
beside CultLib, and Erycina broke on exactly that when it moved.

The signed-health test now supplies IDUNN_HEALTH_CONTRACT to the publisher it
builds by hand, and still asserts the literal wire values, so a change to the
contract constants fails loudly rather than being absorbed.

Verified: 22 tests pass across six files, including signature verification
against the relocated implementation, and the syntax check is clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 19:29:53 +02:00
Meta Vens
b6f3296484 Hermodr reads providers instead of accepting from them
Hermodr constructed its own OdinLivePublicationSource, opened its own
provider-session ingress on its own bind address with its own token, and served
that private store to browsers. A surface reached a browser only if its provider
bound to Hermodr specifically, which made a required ingress out of something
named a bridge, and meant a provider had to publish twice: once where the Verse
expects it, and once into Hermodr so an operator could watch their own command
land.

Providers own their state. Odin advertises where it lives. Hermodr now resolves
a provider through the catalog and reads that provider directly, which is what
the command path has always done: findProviderCommandRoute looks a route up in
the catalog and publishes intent to the provider's own endpoint. The state leg
now matches the intent leg, and the round trip closes without the provider
publishing anywhere twice.

ProviderSubscriptionSource presents the same narrow port the store did, so
HermodrStateStreamRegistry is untouched and browsers keep their sequence numbers
and stale/reconnected transitions. Its read is injected, which is what makes the
lifecycle semantics testable without a live Verse.

One invariant is worth naming because getting it wrong is silent: a failed read
is not a withdrawal. A provider restart or a dropped packet must not render as
the provider retracting state it still holds, so read errors are reported and
the previous value stands, while genuine absence withdraws. Both are tested.

Route resolution is cached for thirty seconds and the state is not cached at
all, since routes change slowly and state is the thing being watched. A wedged
peer is dropped so the next poll reconnects.

Deleted: the ingress construction, --provider-session-bind and
--provider-session-token, live-publication-source.cjs,
provider-session-ingress.cjs, their test, parseBind, and three imports left
unused. src/odin/ falls from fourteen modules to twelve. The removed options and
env vars now fail loudly through the existing rejectRemovedOptions path in both
spellings parseArgs can produce.

Polling is a first cut, not the destination. CultMesh ships
cultMeshPollingDocumentWatcher for exactly this shape, and the cadence is
--provider-poll-interval-ms. A push subscription belongs here later; it does not
change the authority, which is the point of this commit.

Verified: 22 tests pass across six files, syntax check clean over sixteen
CommonJS files. Not verified: behaviour against a live provider over RUDP, which
needs a running Verse and is an operator step.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 18:41:39 +02:00
Meta Vens
a8db89d961 Expose typed Eve surfaces beyond loopback 2026-08-25 03:56:53 +02:00
Meta Vens
ed56dab812 Persist Ghostlight public schema catalogs 2026-08-23 19:31:47 +02:00
Meta Vens
b4f9a2e95f Register Heimdall access discovery documents 2026-08-22 03:53:10 +02:00
Meta Vens
c7012a87c9 Admit Odin as a signed Idunn target 2026-08-21 19:50:24 +02:00
Meta Vens
5cb819e94c Ingest live provider session state 2026-07-15 01:45:23 +01:00
Meta Vens
2796884d26 Revert "Stream typed provider state to Eve clients"
This reverts commit 0df723e4c1.
2026-07-15 01:39:24 +01:00
Meta Vens
0df723e4c1 Stream typed provider state to Eve clients 2026-07-15 01:37:58 +01:00
Meta Vens
188ffedadf Unwrap Rust provider advertisements 2026-07-12 20:00:19 +01:00
Meta Vens
b9339fc0a3 Preserve provider surface authority in Hermodr 2026-07-10 14:42:08 +01:00