Align Model Atlas service identity

This commit is contained in:
Meta Vens 2026-08-14 16:19:46 +02:00
commit 076d2124ed
3 changed files with 33 additions and 16 deletions

View file

@ -15,6 +15,7 @@
"defaultView": "attention",
"stateAuthority": "gamecult.model.entanglement_projection.v0",
"presentationState": "provider-owned-ephemeral",
"domainMutationRoute": "gamecult://swarm/{swarm_id}/workspace/{workspace_id}/epiphany/modeling",
"viewOrder": [
"attention",
"drilldown",
@ -110,7 +111,7 @@
{
"targetProp": "items",
"pointerId": "epiphany.model-atlas.attention.items",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#attention",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#attention",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "CultMesh projection of entanglements currently requiring operator or owner attention."
@ -132,7 +133,7 @@
{
"targetProp": "title",
"pointerId": "epiphany.model-atlas.selected.title",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#selected.title",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#selected.title",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "Provider-authored title for the selected entanglement."
@ -149,7 +150,7 @@
{
"targetProp": "text",
"pointerId": "epiphany.model-atlas.selected.summary",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#selected.summary",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#selected.summary",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "Provider-authored relationship summary."
@ -168,7 +169,7 @@
{
"targetProp": "value",
"pointerId": "epiphany.model-atlas.selected.state",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#selected.state",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#selected.state",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "Derived entanglement state owned by Epiphany Modeling."
@ -204,7 +205,7 @@
{
"targetProp": "items",
"pointerId": "epiphany.model-atlas.selected.claims",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#selected.claims",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#selected.claims",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "Endpoint-owned claims retained without merging their authority."
@ -240,7 +241,7 @@
{
"targetProp": "items",
"pointerId": "epiphany.model-atlas.selected.evidence",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#selected.evidence",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#selected.evidence",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "Verification evidence projected by Epiphany Modeling."
@ -294,7 +295,7 @@
{
"targetProp": "nodes",
"pointerId": "epiphany.model-atlas.graph.nodes",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#graph.nodes",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#graph.nodes",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "Derived repository nodes for graphical lowering."
@ -302,7 +303,7 @@
{
"targetProp": "edges",
"pointerId": "epiphany.model-atlas.graph.edges",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#graph.edges",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#graph.edges",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "Derived entanglement edges for graphical lowering."
@ -338,7 +339,7 @@
{
"targetProp": "items",
"pointerId": "epiphany.model-atlas.graph.linear",
"sourceId": "cultmesh://gamecult.swarm/epiphany/modeling/entanglements#graph.linear",
"sourceId": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#graph.linear",
"schemaId": "gamecult.model.entanglement_projection.v0",
"routeKind": "network",
"routeDescription": "Linear projection of the same graph for compact and TUI lowerings."

View file

@ -1,12 +1,12 @@
{
"schema": "gamecult.eve.provider_advertisement.v1",
"providerId": "epiphany.model-atlas",
"serviceId": "epiphany.modeling",
"verseId": "gamecult.swarm",
"rootVerse": "gamecult",
"canonicalService": "gamecult.epiphany.modeling",
"locatedService": "gamecult.swarm.epiphany.modeling",
"cultMeshAddress": "cultmesh://gamecult.swarm/epiphany/modeling",
"serviceId": "epiphany.model-entanglement-projector",
"verseId": "gamecult-local",
"rootVerse": "asgard",
"canonicalService": "asgard.epiphany.model-atlas",
"locatedService": "asgard.starfire.epiphany.model-atlas",
"cultMeshAddress": "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas",
"title": "Epiphany Model Atlas",
"kind": "modeling.projection",
"updatedAtUtc": "2026-08-14T00:00:00Z",
@ -46,6 +46,7 @@
"gamecult.model.entanglement_projection.v0"
],
"ownership": "epiphany-owns-entanglement-projection-eve-renders-one-retained-tree",
"domainMutationRoute": "gamecult://swarm/{swarm_id}/workspace/{workspace_id}/epiphany/modeling",
"summary": "Attention-first cross-repo Modeling view with drilldown and a secondary graph from one typed CultMesh projection."
}
],

View file

@ -4,6 +4,8 @@ import test from "node:test";
import { findProviderCatalogEntry, mergeProviderAdvertisement } from "./provider-advertisements.mjs";
const projectionSchema = "gamecult.model.entanglement_projection.v0";
const projectionSource = "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas/entanglements#";
const domainMutationRoute = "gamecult://swarm/{swarm_id}/workspace/{workspace_id}/epiphany/modeling";
const catalog = readJson("./local-provider-catalog.json");
const advertisement = readJson("./fixtures/epiphany-model-atlas.provider-advertisement.json");
const surface = readJson("./fixtures/epiphany-model-atlas-surface.json");
@ -27,6 +29,13 @@ test("advertises one canonical Model Atlas surface to GUI and TUI consumers", ()
const merged = mergeProviderAdvertisement(catalogProvider, advertisement);
assert.equal(merged.surfaces.length, 1);
assert.equal(advertisement.providerId, "epiphany.model-atlas");
assert.equal(advertisement.serviceId, "epiphany.model-entanglement-projector");
assert.equal(advertisement.verseId, "gamecult-local");
assert.equal(advertisement.rootVerse, "asgard");
assert.equal(advertisement.canonicalService, "asgard.epiphany.model-atlas");
assert.equal(advertisement.locatedService, "asgard.starfire.epiphany.model-atlas");
assert.equal(advertisement.cultMeshAddress, "cultmesh://gamecult-local/asgard/starfire/epiphany/model-atlas");
assert.equal(merged.surfaces[0].surfaceId, surface.surface.id);
assert.equal(merged.surfaces[0].url, "./fixtures/epiphany-model-atlas-surface.json");
assert.deepEqual(merged.surfaces[0].loweringTargets, ["gui", "tui"]);
@ -34,6 +43,8 @@ test("advertises one canonical Model Atlas surface to GUI and TUI consumers", ()
assert.equal(surface.surface.root.kind, "surface");
assert.equal("nodes" in surface, false);
assert.equal("selectedNodeId" in surface, false);
assert.equal(merged.surfaces[0].domainMutationRoute, domainMutationRoute);
assert.equal(surface.surface.root.props.domainMutationRoute, domainMutationRoute);
});
test("keeps attention primary while retaining drilldown and a secondary graph", () => {
@ -63,7 +74,7 @@ test("binds every modeled value to the Epiphany-owned CultMesh projection", () =
assert.ok(bindings.length >= 9);
assert.ok(bindings.every(binding => binding.schemaId === projectionSchema));
assert.ok(bindings.every(binding => binding.sourceId.startsWith("cultmesh://gamecult.swarm/epiphany/modeling/entanglements#")));
assert.ok(bindings.every(binding => binding.sourceId.startsWith(projectionSource)));
assert.ok(bindings.every(binding => binding.routeKind === "network"));
assert.deepEqual(
component("epiphany.model-atlas.graph").stateBindings.map(binding => binding.targetProp),
@ -83,6 +94,10 @@ test("limits select and filter operations to provider-owned presentation state",
.filter(Boolean);
assert.deepEqual([...surfaceCommands.keys()].sort(), [...advertisedCommands.keys()].sort());
assert.deepEqual([...surfaceCommands.keys()].sort(), [
"epiphany.model-atlas.presentation.filter",
"epiphany.model-atlas.presentation.select",
]);
assert.deepEqual(controlCommands.sort(), [...surfaceCommands.keys()].sort());
for (const command of [...advertisement.commands, ...surface.commands]) {
assert.equal(command.presentationOnly, true);