Publish Weksa command boundary store records

This commit is contained in:
Meta Vens 2026-06-16 11:30:32 +01:00
commit 54272da0d5
2 changed files with 143 additions and 10 deletions

View file

@ -38,11 +38,19 @@ and trace.
- `.weksa/provider-advertisement.cc`: read-only provider advertisement witness.
- `.weksa/provider-advertisement-store.cc`: CultMesh/CultCache provider store
containing `gamecult.eve.provider_advertisement.v1`,
`gamecult.eve.interface_binding.v1`, and `gamecult.eve.surface_state.v1`
records for Odin discovery.
`gamecult.eve.interface_binding.v1`, `gamecult.eve.surface_state.v1`,
`weksa.operator_state.v0`, `weksa.command_boundary.v1`, and
`weksa.transport_profile.v1` records for Odin discovery.
- `.weksa/operator-state.cc`: daemon health, readiness, and runtime witness
index used by Idunn health checks and operator inspection.
- `.weksa/eve-surfaces.cc`: current Weksa operator Eve surface witness.
- `.weksa/command-boundary.cc`: provider-owned command and lifecycle boundary
naming Weksa as owner, Idunn as lifecycle requester, and the remaining MiMo
VoiceDesign HTTP route as compatibility command ingress.
- `.weksa/transport-profile.cc`: target/current transport profile. Health is
published through `cultnet.transport.rudp.v0`; provider state is carried by
the CultMesh store; the MiMo VoiceDesign command route remains compatibility
HTTP debt until a CultNet/RUDP command document ingress replaces it.
- `.weksa/cultmesh-publications.cc`: publication index naming current Weksa
witness surfaces and compatibility routes.
- `.weksa/intent/{intentId}.cc`: conversational intent documents.
@ -96,7 +104,10 @@ those endpoints are operator/debug projections, not daemon liveness owners.
Odin ingests the Starfire Weksa provider through
`.weksa/provider-advertisement-store.cc`. Idunn tracks the daemon as target
`weksa` in the `starfire-local` swarm profile and owns restart authority through
the Weksa restart script.
the Weksa restart script. Odin should read Weksa's provider advertisement,
operator state, command boundary, transport profile, and Eve surface from the
typed provider store; HTTP endpoints are debug/operator lowerings and do not own
provider truth.
## Eve Surfaces

View file

@ -137,11 +137,15 @@ async function publishWitnesses() {
await writeWitness("provider-advertisement.cc", snapshot.providerAdvertisement);
await writeWitness("operator-state.cc", snapshot.operatorState);
await writeWitness("eve-surfaces.cc", snapshot.operatorSurface);
await writeWitness("command-boundary.cc", snapshot.commandBoundary);
await writeWitness("transport-profile.cc", snapshot.transportProfile);
await writeWitness("cultmesh-publications.cc", snapshot.cultMeshPublications);
await writeCultMeshStore(snapshot);
await writeJson(resolve(stateRoot, "provider-advertisement.json"), snapshot.providerAdvertisement);
await writeJson(resolve(stateRoot, "operator-state.json"), snapshot.operatorState);
await writeJson(resolve(stateRoot, "eve-operator-surface.json"), snapshot.operatorSurface);
await writeJson(resolve(stateRoot, "command-boundary.json"), snapshot.commandBoundary);
await writeJson(resolve(stateRoot, "transport-profile.json"), snapshot.transportProfile);
await writeJson(resolve(stateRoot, "cultmesh-publications.json"), snapshot.cultMeshPublications);
cachedSnapshot = snapshot;
lastPublishedAt = snapshot.operatorState.updated_at;
@ -223,7 +227,9 @@ async function buildSnapshot() {
},
latest_affect_tuning: tuning,
};
const operatorSurface = buildOperatorSurface({ providerAdvertisement, operatorState, cultureCatalog, tuning });
const commandBoundary = buildCommandBoundary(updatedAt);
const transportProfile = buildTransportProfile(updatedAt);
const operatorSurface = buildOperatorSurface({ providerAdvertisement, operatorState, commandBoundary, cultureCatalog, tuning });
const cultMeshPublications = {
schema: "weksa.cultmesh_publications.v0",
service_id: "weksa.intent.service",
@ -238,11 +244,13 @@ async function buildSnapshot() {
publication("weksa.service/provider-advertisement", "gamecult.eve.provider_advertisement.v1", ".weksa/provider-advertisement-store.cc", "/provider-advertisement"),
publication("weksa.operator/status", "weksa.operator_state.v0", ".weksa/operator-state.cc", "/operator-state"),
publication("weksa.eve.surface.operator", "gamecult.eve.surface.v1", ".weksa/eve-surfaces.cc", "/eve/operator"),
publication("weksa.command-boundary", "weksa.command_boundary.v1", ".weksa/command-boundary.cc", null),
publication("weksa.transport-profile", "weksa.transport_profile.v1", ".weksa/transport-profile.cc", null),
publication("weksa.cultmesh/publications", "weksa.cultmesh_publications.v0", ".weksa/cultmesh-publications.cc", "/cultmesh/publications"),
publication("weksa.speech-provider/mimo/voicedesign", "weksa.mimo_tts_request.v0", ".weksa/speech-provider/mimo/{requestId}.cc", "/speech-provider/mimo/voicedesign"),
],
};
return { providerAdvertisement, operatorState, operatorSurface, cultMeshPublications };
return { providerAdvertisement, operatorState, operatorSurface, commandBoundary, transportProfile, cultMeshPublications };
}
async function writeCultMeshStore(snapshot) {
@ -251,8 +259,22 @@ async function writeCultMeshStore(snapshot) {
await appendLog(`CultMesh store write skipped: ${runtime.error.message}`);
return;
}
const { providerAdvertisementDefinition, interfaceBindingDefinition, surfaceDefinition } = defineCultMeshDocuments(runtime.defineDocumentType);
const documents = [providerAdvertisementDefinition, interfaceBindingDefinition, surfaceDefinition];
const {
providerAdvertisementDefinition,
interfaceBindingDefinition,
surfaceDefinition,
operatorStateDefinition,
commandBoundaryDefinition,
transportProfileDefinition,
} = defineCultMeshDocuments(runtime.defineDocumentType);
const documents = [
providerAdvertisementDefinition,
interfaceBindingDefinition,
surfaceDefinition,
operatorStateDefinition,
commandBoundaryDefinition,
transportProfileDefinition,
];
await rm(cultMeshStorePath, { force: true });
const node = await createCultMeshNodeWithOwnedStoreReset(runtime.CultMesh, cultMeshStorePath, documents);
await node.put(providerAdvertisementDefinition, snapshot.providerAdvertisement.providerId, snapshot.providerAdvertisement);
@ -285,6 +307,9 @@ async function writeCultMeshStore(snapshot) {
updatedAt: snapshot.operatorState.updated_at,
surface: snapshot.operatorSurface,
});
await node.put(operatorStateDefinition, "weksa", snapshot.operatorState);
await node.put(commandBoundaryDefinition, "weksa", snapshot.commandBoundary);
await node.put(transportProfileDefinition, "weksa", snapshot.transportProfile);
await node.flush?.(true);
}
@ -352,7 +377,41 @@ function defineCultMeshDocuments(defineDocumentType) {
name: (value) => value?.providerId || "provider",
schema: { parse: (value) => value },
});
return { providerAdvertisementDefinition, interfaceBindingDefinition, surfaceDefinition };
const operatorStateDefinition = defineDocumentType({
type: "weksa.operator_state",
schemaName: "weksa.operator_state",
schemaId: "weksa.operator_state.v0",
schemaVersion: "weksa.operator_state.v0",
global: false,
name: (value) => value?.daemon_id || value?.provider_id || "weksa",
schema: { parse: (value) => value },
});
const commandBoundaryDefinition = defineDocumentType({
type: "weksa.command_boundary",
schemaName: "weksa.command_boundary",
schemaId: "weksa.command_boundary.v1",
schemaVersion: "weksa.command_boundary.v1",
global: false,
name: (value) => value?.boundary_id || value?.daemon_id || "weksa",
schema: { parse: (value) => value },
});
const transportProfileDefinition = defineDocumentType({
type: "weksa.transport_profile",
schemaName: "weksa.transport_profile",
schemaId: "weksa.transport_profile.v1",
schemaVersion: "weksa.transport_profile.v1",
global: false,
name: (value) => value?.profile_id || value?.daemon_id || "weksa",
schema: { parse: (value) => value },
});
return {
providerAdvertisementDefinition,
interfaceBindingDefinition,
surfaceDefinition,
operatorStateDefinition,
commandBoundaryDefinition,
transportProfileDefinition,
};
}
function loadProviderAdvertisement(updatedAt) {
@ -362,6 +421,7 @@ function loadProviderAdvertisement(updatedAt) {
...fixture,
mode: "daemon-live",
status: "active",
daemonId: "weksa",
updatedAt,
canonicalService: "asgard.weksa",
locatedService: "asgard.starfire.weksa",
@ -384,13 +444,74 @@ function loadProviderAdvertisement(updatedAt) {
],
health: {
state: "healthy",
endpoint: `http://${host}:${port}/health`,
endpoint: idunnHealthPublisher ? `${CULTNET_RUDP_PROTOCOL_ID}:idunn-health` : `http://${host}:${port}/health`,
witness: ".weksa/operator-state.cc",
checkedBy: "idunn.desired_daemon.v1",
},
};
}
function buildCommandBoundary(updatedAt) {
return {
schema: "weksa.command_boundary.v1",
boundary_id: "weksa",
daemon_id: "weksa",
provider_id: "weksa.intent.service",
service_id: "weksa.intent.service",
updated_at: updatedAt,
owner: "Weksa daemon",
lifecycle_authority: "idunn.local-command",
health_publication: {
contract: "weksa.cultnet-rudp-provider-health",
transport: CULTNET_RUDP_PROTOCOL_ID,
publication_source: "daemon-published",
state_owner: "Weksa daemon",
},
commands: [
{
command: "speech_provider.mimo.voicedesign",
ingress: "compatibility-http",
endpoint: `http://${host}:${port}/speech-provider/mimo/voicedesign`,
owner: "Weksa daemon",
input_schema: "weksa.mimo_tts_request.v0",
output_schema: "weksa.mimo_voicedesign_receipt.v0",
authority: "Weksa accepts the request, commits typed witnesses, and treats MiMo as an external renderer.",
},
],
forbidden_writers: [
"HTTP clients may request commands but do not own Weksa intent state.",
"Odin, Eve, and renderers may lower Weksa surfaces but do not mutate command authority.",
],
compatibility: {
http: `http://${host}:${port}`,
status: "debug-and-command-lowering-only",
cut_line: "Replace speech_provider.mimo.voicedesign compatibility HTTP with a CultNet/RUDP command document ingress before deleting the HTTP command route.",
},
};
}
function buildTransportProfile(updatedAt) {
return {
schema: "weksa.transport_profile.v1",
profile_id: "weksa",
daemon_id: "weksa",
provider_id: "weksa.intent.service",
updated_at: updatedAt,
target_transport: CULTNET_RUDP_PROTOCOL_ID,
current_transport: idunnHealthPublisher
? "rudp-health-and-cultmesh-store + compatibility-http-command"
: "cultmesh-store + compatibility-http",
health_transport: idunnHealthPublisher ? CULTNET_RUDP_PROTOCOL_ID : "compatibility-http",
state_transport: "cultmesh-store",
command_transport: "compatibility-http",
compatibility: {
http: `http://${host}:${port}`,
endpoints_are_lowerings: true,
},
cut_line: "Weksa health and provider state are daemon-owned typed records; the remaining command ingress debt is the MiMo VoiceDesign HTTP route.",
};
}
function loadLatestAffectTuning() {
const root = resolve(repoRoot, ".weksa-runs/metame-affect-tuning");
if (!existsSync(root)) {
@ -440,7 +561,7 @@ async function inspectCultureCatalog() {
};
}
function buildOperatorSurface({ providerAdvertisement, operatorState, cultureCatalog, tuning }) {
function buildOperatorSurface({ providerAdvertisement, operatorState, commandBoundary, cultureCatalog, tuning }) {
return {
schema: "gamecult.eve.surface.v1",
providerId: providerAdvertisement.providerId,
@ -463,6 +584,7 @@ function buildOperatorSurface({ providerAdvertisement, operatorState, cultureCat
fact("culture profiles", String(cultureCatalog.profile_count)),
fact("target profiles", String(cultureCatalog.target_language_profile_count)),
fact("commands", operatorState.readiness.command_ingress),
fact("command boundary", commandBoundary.boundary_id),
fact("mimo voicedesign", operatorState.readiness.mimo_voicedesign),
],
},