Add Fensalir runtime surface fixture
This commit is contained in:
parent
ea86c958d3
commit
8fee12fc6b
7 changed files with 228 additions and 12 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
21
web/fixtures/fensalir-direct2d-surface.conformance.json
Normal file
21
web/fixtures/fensalir-direct2d-surface.conformance.json
Normal 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"
|
||||
}
|
||||
160
web/fixtures/fensalir-direct2d-surface.json
Normal file
160
web/fixtures/fensalir-direct2d-surface.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in a new issue