Sai/plugins/sai-vn.plugin-abi-fixture.json
2026-07-10 07:31:37 +01:00

76 lines
2.7 KiB
JSON

{
"schema": "gamecult.eve.plugin_abi_fixture.v1",
"fixtureId": "sai-vn-live-playback",
"pluginId": "sai.vn",
"ownerRepo": "Sai",
"contract": "gamecult.eve.plugin_abi.v1",
"requestSchema": "gamecult.eve.plugin_abi.request.v1",
"responseSchema": "gamecult.eve.plugin_abi.response.v1",
"operations": [
{
"operation": "describe",
"input": {},
"expect": {
"pluginId": "sai.vn",
"componentKinds": ["vn.stage", "panel.dialogue", "text.dialogue", "rail.actions"],
"commands": ["story.continue", "story.choose", "story.jump"],
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"],
"sessionAuthority": "sai-sidecar",
"optionalPlugins": ["norn.graph", "tex.math"]
}
},
{
"operation": "validate",
"input": { "componentKinds": ["vn.stage", "panel.dialogue", "text.dialogue", "rail.actions", "combat.timeline"] },
"expect": {
"acceptedComponentKinds": ["vn.stage", "panel.dialogue", "text.dialogue", "rail.actions"],
"rejectedComponentKinds": ["combat.timeline"],
"requiredCapabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
}
},
{
"operation": "open",
"input": { "sessionId": "witness", "storyId": "sai-example", "storyPath": "examples/static-site/story.ink.json" },
"expect": {
"sessionId": "witness",
"line": "Ink is not alive by itself. A page gives it a body.",
"revision": 0
}
},
{
"operation": "apply",
"input": { "sessionId": "witness", "command": "story.choose", "index": 0 },
"expect": {
"line": "Then the story should feel like it belongs here, not like a widget escaped from somewhere else.",
"revision": 1,
"command": "story.choose",
"commandEffects": {
"story.continue": "advance-story",
"story.choose": "choose-branch",
"story.jump": "jump-to-knot"
},
"receiptSchema": "gamecult.eve.command_receipt.v1"
}
},
{
"operation": "project",
"input": { "sessionId": "witness", "providerId": "sai.witness" },
"expect": {
"projectionKind": "semantic-surface",
"ownedComponentKinds": ["vn.stage", "panel.dialogue", "text.dialogue", "rail.actions"],
"delegatedPlugins": ["norn.graph", "tex.math"],
"sessionId": "witness",
"revision": 1
}
},
{
"operation": "jump",
"input": { "sessionId": "witness", "targetPath": "gather" },
"expect": {
"line": "Good. The brush moves. The scene answers.",
"revision": 2,
"command": "story.jump"
}
}
]
}