Add Fensalir runtime surface fixture

This commit is contained in:
Meta Vens 2026-07-09 01:18:19 +01:00
commit 8fee12fc6b
7 changed files with 228 additions and 12 deletions

View file

@ -280,6 +280,13 @@ Exit criteria:
Recently cut:
- Fensalir now has a recorded runtime-pack
`gamecult.eve.surface.v1` adapter fixture at
`web/fixtures/fensalir-direct2d-surface.json`. The browser local catalog uses
that contract-shaped surface instead of the older dashboard-state sketch, and
the parity harness validates embedded-slot preservation, command descriptors,
runtime authority witnesses, and style tokens. Direct2D capture and
runtime-owned command smoke remain the activation blockers.
- UIKit and Kotlin device-edge runtimes now declare unsupported Sai/Norn/TeX
plugin projection explicitly. They remain generic embedded-document and
device-edge proofs; plugin projection authority belongs to EveFlutter,

View file

@ -235,7 +235,9 @@ The harness tracks every target runtime:
Required nested-surface evidence: `cargo test -p cultnet-rs
rust_preserves_cultui_embedded_surface_slots_through_typed_document_sync`
in CultLib.
- Fensalir Direct2D: specialized native target, adapter/capture still missing.
- Fensalir Direct2D: specialized native target with a runtime-pack
`gamecult.eve.surface.v1` adapter fixture; runtime-owned command smoke and
Direct2D capture are still missing.
Pending runtimes are allowed. Silent fake parity is not.

View file

@ -38,7 +38,7 @@ proves the same contract at the CultMesh typed document sync layer.
| iOS / UIKit | Active native screenshot target | SSH capture stages selected fixture JSON, EveCanvas renders it, and emits a PNG from `/var/mobile/Library/EveCanvas/latest-screenshot.png`; `embedded-surface` is part of the required fixture matrix | Plugin projection is explicitly unsupported until EveIOS owns adapters; still needs provider picker and command transport |
| Android / Kotlin device edge | Active lightweight renderer | Native APK consumes CultMesh dashboard/sensor documents and preserves `surface.slot` / `embeddedDocuments` identity in the dashboard renderer | Plugin projection is explicitly unsupported; full graphical parity belongs to Flutter unless EveAndroid grows adapters |
| Rust / CultMesh | Document-sync contract runtime | CultLib replicates the `gamecult.eve.surface.v1` embedded slot contract through typed document sync | Not a pixel renderer |
| Fensalir Direct2D | External adapter spike, not active parity runtime | Fensalir has `src/Aquarium.EveSurface/EveSurfaceRuntime.cs`, reads an Eve broker, and lowers into `AquariumUiDocument` / `DirectWriteOverlay` | Needs recorded `gamecult.eve.surface.v1` fixture replay, command emission through the advertised boundary, DirectWrite/Direct2D token lowering, frame capture, and a clear reason to stay separate from Flutter for desktop UI |
| Fensalir Direct2D | External adapter spike, not active parity runtime | Fensalir has `src/Aquarium.EveSurface/EveSurfaceRuntime.cs`, reads an Eve broker, lowers into `AquariumUiDocument` / `DirectWriteOverlay`, and now has a runtime-pack `gamecult.eve.surface.v1` fixture in Eve | Needs runtime-owned command smoke, DirectWrite/Direct2D frame capture, and a clear reason to stay separate from Flutter for desktop UI |
## Spawned Surfaces
@ -51,8 +51,10 @@ provider picker:
and `web/fixtures/aetheria-world-surface.json`.
- `Sai VN Surface`: loads `web/fixtures/sai-vn.provider-advertisement.json`
and `web/fixtures/sai-vn-surface.json`.
- `Fensalir Direct2D`: loads `web/fixtures/fensalir-client-surface.json`, a
recorded surface describing the Direct2D client lowering path.
- `Fensalir Direct2D`: loads
`web/fixtures/fensalir-direct2d-surface.json`, a recorded
`gamecult.eve.surface.v1` runtime-adapter surface for the Direct2D lowering
path.
- `Huginn .cc`: compiles `web/fixtures/huginn-cc-surface.eve`.
- `Reactive DSL`: compiles `web/fixtures/reactive-composition.eve`.
- `CultUI Inspector`: compiles `web/fixtures/cultui-slider-inspector.eve`

View file

@ -201,6 +201,30 @@
"commandReferencesDeclared": true
}
},
{
"id": "fensalir-direct2d",
"title": "Fensalir Direct2D Adapter",
"pack": "runtime",
"ownerRepo": "Fensalir",
"surface": {
"transport": "local-json",
"path": "web/fixtures/fensalir-direct2d-surface.json"
},
"metadataPath": "web/fixtures/fensalir-direct2d-surface.conformance.json",
"expect": {
"providerId": "fensalir.direct2d",
"componentKinds": ["surface", "card", "text", "metric", "partition", "surface.slot", "control.button"],
"styleTokens": ["colorBackground", "colorPanel", "colorText", "colorMuted", "colorAccent"],
"bindings": ["fensalir.overlay.phase"],
"embeddedDocuments": ["fensalir.adapter.detail"],
"commandDescriptors": ["fensalir.overlay.commands"],
"commandDescriptorSchema": "gamecult.eve.command.v1",
"commandReferencesDeclared": true,
"authorityStates": ["fresh"],
"authorityOwners": ["runtime"],
"witnessRefs": 1
}
},
{
"id": "authority-staleness",
"title": "Authority And Staleness Witness",
@ -910,16 +934,16 @@
"splitTarget": "Fensalir or EveDirect2D if it earns a separate body",
"graduationTrigger": "Do not graduate until the Eve-to-AquariumUiDocument adapter and Direct2D frame capture exist.",
"adapterSpike": "external",
"demotionReason": "Fensalir has an external Aquarium.EveSurface adapter spike, but Eve has no Direct2D frame capture and the local fensalir fixture is still legacy dashboard-state instead of gamecult.eve.surface.v1 conformance input.",
"demotionReason": "Fensalir has an external Aquarium.EveSurface adapter spike and a recorded gamecult.eve.surface.v1 adapter fixture, but Eve still has no Direct2D frame capture or runtime-owned command smoke.",
"activationCriteria": [
"Fensalir runs recorded gamecult.eve.surface.v1 fixtures without provider-specific renderer knowledge.",
"Fensalir emits gamecult.eve.command.v1 intents through the advertised provider command boundary.",
"Direct2D capture artifacts are produced and attached to the parity report."
],
"requiredFixtures": ["embedded-surface"],
"pluginFixtures": ["sai-vn"],
"supportedFeatures": [],
"expectedPaths": ["web/fixtures/fensalir-client-surface.json"],
"requiredFixtures": ["fensalir-direct2d"],
"pluginFixtures": [],
"supportedFeatures": ["embeddedDocuments"],
"expectedPaths": ["web/fixtures/fensalir-direct2d-surface.json"],
"expectedExternalPaths": [
"E:\\Projects\\Fensalir\\src\\Aquarium.EveSurface\\EveSurfaceRuntime.cs",
"E:\\Projects\\Fensalir\\docs\\eve-direct2d-client-surface.md"
@ -938,7 +962,7 @@
],
"capture": {
"status": "missing",
"note": "External Fensalir adapter spike exists; Eve still needs recorded surface replay and Direct2D frame capture before this runtime can become active."
"note": "External Fensalir adapter spike and recorded surface fixture exist; Eve still needs runtime-owned command smoke and Direct2D frame capture before this runtime can become active."
}
}
]

View file

@ -0,0 +1,21 @@
{
"schema": "gamecult.eve.conformance_fixture.v1",
"fixtureId": "fensalir-direct2d",
"title": "Fensalir Direct2D Adapter",
"pack": "runtime",
"ownerRepo": "Fensalir",
"surface": {
"transport": "local-json",
"path": "web/fixtures/fensalir-direct2d-surface.json"
},
"purpose": "Proves Fensalir has a recorded gamecult.eve.surface.v1 runtime-adapter fixture before Direct2D capture becomes active evidence.",
"exitCriteria": "Move to Fensalir when AquariumUiDocument lowering, command emission, embedded-slot preservation, and Direct2D frame capture are runtime-owned.",
"asserts": [
"runtime adapter surface contract",
"AquariumUiDocument lowering target",
"command descriptor and command references",
"embedded document slot preservation",
"Direct2D style tokens"
],
"splitTarget": "Fensalir"
}

View file

@ -0,0 +1,160 @@
{
"type": "surface-state",
"schema": "gamecult.eve.surface.v1",
"providerId": "fensalir.direct2d",
"providerKind": "runtime.adapter",
"title": "Fensalir Direct2D Adapter Surface",
"version": 1,
"updatedAtUtc": "2026-07-09T00:00:00Z",
"surface": {
"id": "fensalir.direct2d.adapter",
"root": {
"id": "fensalir.direct2d.root",
"kind": "surface",
"props": {
"runtimeTarget": "Fensalir",
"loweringTarget": "AquariumUiDocument"
},
"children": [
{
"id": "fensalir.direct2d.summary",
"kind": "card",
"props": {
"title": "Direct2D Runtime Boundary",
"authorityOwner": "runtime",
"authorityState": "fresh",
"witnessRef": "E:\\Projects\\Fensalir\\src\\Aquarium.EveSurface\\EveSurfaceRuntime.cs"
},
"children": [
{
"id": "fensalir.direct2d.summary.text",
"kind": "text",
"props": {
"text": "Fensalir owns DirectWrite/Direct2D projection, focus, pointer dispatch, frame timing, and capture. Eve owns the contract this surface exercises."
},
"children": []
}
]
},
{
"id": "fensalir.direct2d.pipeline",
"kind": "partition",
"props": {
"direction": "horizontal"
},
"children": [
{
"id": "fensalir.direct2d.aquarium",
"kind": "card",
"props": {
"title": "AquariumUiDocument"
},
"children": [
{
"id": "fensalir.direct2d.aquarium.metric",
"kind": "metric",
"props": {
"label": "Overlay Phase",
"value": "D3D12 scene -> D2D overlay",
"bind": "fensalir.overlay.phase"
},
"children": []
},
{
"id": "fensalir.direct2d.aquarium.detail",
"kind": "text",
"props": {
"text": "The adapter lowers Eve components into Aquarium UI panels without importing provider game state."
},
"children": []
}
]
},
{
"id": "fensalir.direct2d.commands",
"kind": "card",
"props": {
"title": "Command Boundary"
},
"children": [
{
"id": "fensalir.direct2d.command.focus",
"kind": "control.button",
"props": {
"label": "Focus Adapter Node",
"command": "fensalir.overlay.commands",
"commandId": "fensalir.overlay.focus",
"action": {
"schema": "gamecult.eve.command.v1",
"command": "fensalir.overlay.commands",
"operation": "focus_node",
"nodeId": "aquarium-ui"
}
},
"children": []
},
{
"id": "fensalir.direct2d.command.capture",
"kind": "control.button",
"props": {
"label": "Request Frame Capture",
"command": "fensalir.overlay.commands",
"commandId": "fensalir.overlay.capture",
"action": {
"schema": "gamecult.eve.command.v1",
"command": "fensalir.overlay.commands",
"operation": "capture_frame",
"target": "direct2d-overlay"
}
},
"children": []
}
]
}
]
},
{
"id": "fensalir.direct2d.embedded-slot",
"kind": "surface.slot",
"props": {
"slotId": "fensalir.adapter.detail",
"documentId": "cultmesh://fensalir/eve/adapter/detail",
"schemaId": "gamecult.eve.surface.v1",
"presentationKind": "runtime.detail"
},
"children": [],
"embeddedDocuments": [
{
"slotId": "fensalir.adapter.detail",
"documentId": "cultmesh://fensalir/eve/adapter/detail",
"schemaId": "gamecult.eve.surface.v1",
"presentationKind": "runtime.detail",
"routeHint": {
"kind": "CultMesh",
"description": "Fensalir runtime detail surface"
}
}
]
}
]
},
"styles": {
"tokens": {
"colorBackground": "#090D10",
"colorPanel": "#182024",
"colorText": "#EDF7F2",
"colorMuted": "#9FB6B1",
"colorAccent": "#67D3B0"
}
}
},
"commands": [
{
"command": "fensalir.overlay.commands",
"schema": "gamecult.eve.command.v1",
"transport": "cultmesh",
"authority": "FensalirOverlayCommandBoundary",
"result": "accepted-denied-or-replayed"
}
]
}

View file

@ -50,8 +50,8 @@
"surfaces": [
{
"transport": "local-json",
"surfaceId": "fensalir.direct2d.fixture",
"url": "./fixtures/fensalir-client-surface.json"
"surfaceId": "fensalir.direct2d.adapter",
"url": "./fixtures/fensalir-direct2d-surface.json"
}
]
},