{ "schema": "gamecult.eve.plugin.v1", "pluginId": "sai.vn", "title": "Sai Visual Novel", "owner": "Sai", "incubation": { "ownerRepo": "Sai", "currentHostRepo": "Eve", "splitTarget": "Sai/sai-vn-plugin", "graduationTrigger": "Split when VN/Ink semantics, story command fixtures, and ABI describe/validate/project/lower/measure/apply cases are stable." }, "componentKinds": [ "vn.stage", "panel.dialogue", "text.dialogue", "rail.actions" ], "commands": [ { "command": "story.continue", "schema": "sai.vn.story_command.v1", "effect": "advance-story" }, { "command": "story.choose", "schema": "sai.vn.story_command.v1", "effect": "choose-branch" }, { "command": "story.jump", "schema": "sai.vn.story_command.v1", "effect": "jump-to-knot" } ], "runtime": { "invocationModel": "executable-sidecar", "contract": "gamecult.eve.plugin_abi.v1", "transports": ["cultmesh", "stdio"], "authority": [ "renderer-independent", "no-provider-state-mutation", "provider-accepts-or-denies-commands" ], "sidecar": { "processKind": "long-running-daemon", "protocol": "cultmesh-rpc-with-stdio-dev-transport", "requestSchema": "gamecult.eve.plugin_abi.request.v1", "responseSchema": "gamecult.eve.plugin_abi.response.v1", "operations": ["describe", "validate", "project", "lower", "measure", "apply"], "commandEnvelope": "gamecult.eve.command.v1", "receiptSchema": "gamecult.eve.command_receipt.v1", "stateAuthority": "proposes-plugin-state-only-provider-accepts" } }, "stateSchemas": [ "sai.vn.story_session.v1", "sai.vn.visual_manifest.v1" ], "fixtures": [ { "fixtureId": "sai-vn", "schema": "gamecult.eve.surface.v1", "path": "web/fixtures/sai-vn-surface.json" } ], "abiFixtures": [ "plugins/incubating/sai-vn.plugin-abi-fixture.json" ], "capabilities": { "requires": [ "vn.stage", "story.choose", "story.continue", "story.jump" ], "optionalPlugins": [ { "pluginId": "norn.graph", "relationship": "optional-nested-composition", "authority": "Sai can place an embed.norn surface when norn.graph is available; Norn remains the independent graph plugin owner and Sai must not import graph internals.", "capabilities": [ "embed.norn", "graph.node.activate" ] }, { "pluginId": "tex.math", "relationship": "optional-nested-composition", "authority": "Sai can place an embed.tex surface when tex.math is available; TeX remains the independent math plugin owner and Sai must not import TeX internals.", "capabilities": [ "embed.tex", "tex.inline", "tex.block" ] } ] } }