{"id":16752,"plugin_id":"plugins_6a690ee33ddc819185a57c208dcf0711","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:13:44.655Z","digest":"4470ceffcdd19968937f206d79f157154d158578e5670a678ddaf06a92b5bfa1","against":null,"payload":{"name":"run-ai-dm-4-engine","description":"Run, validate, inspect, transact, checkpoint, or export campaign-agnostic AI-DM 4 text campaigns bound through a Contract-1.1 CAMPAIGN_MANIFEST.json. Use for AI-DM gameplay and slash commands when the user supplies or explicitly selects a Campaign directory or ZIP, and for synthetic campaign/package validation. Never use chat memory as campaign storage or infer authority from filenames.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":215},{"relative_path":"references/CAMPAIGN_BINDING.md","size_in_bytes":1171},{"relative_path":"references/ENGINE_CAMPAIGN_CONTRACT_v1.1.md","size_in_bytes":4127},{"relative_path":"references/PROGRESS_MODEL_1.0.md","size_in_bytes":701},{"relative_path":"references/TRANSACTION_INTERFACE.md","size_in_bytes":1842},{"relative_path":"scripts/aidm4_core/__init__.py","size_in_bytes":482},{"relative_path":"scripts/aidm4_core/audit.py","size_in_bytes":13432},{"relative_path":"scripts/aidm4_core/compiler.py","size_in_bytes":25360},{"relative_path":"scripts/aidm4_core/db.py","size_in_bytes":2831},{"relative_path":"scripts/aidm4_core/jsonutil.py","size_in_bytes":668},{"relative_path":"scripts/aidm4_core/kernel.py","size_in_bytes":19840},{"relative_path":"scripts/aidm4_core/living_world.py","size_in_bytes":58892},{"relative_path":"scripts/aidm4_core/projections.py","size_in_bytes":6175},{"relative_path":"scripts/aidm4_core/rules.py","size_in_bytes":42763},{"relative_path":"scripts/aidm4_core/temporal.py","size_in_bytes":6859},{"relative_path":"scripts/aidm4_core/travel.py","size_in_bytes":11319},{"relative_path":"scripts/aidm4_core/verify.py","size_in_bytes":4855},{"relative_path":"scripts/aidm_campaign.py","size_in_bytes":69264}],"skill_md_contents":"---\nname: run-ai-dm-4-engine\ndescription: Run, validate, inspect, transact, checkpoint, or export campaign-agnostic AI-DM 4 text campaigns bound through a Contract-1.1 CAMPAIGN_MANIFEST.json. Use for AI-DM gameplay and slash commands when the user supplies or explicitly selects a Campaign directory or ZIP, and for synthetic campaign/package validation. Never use chat memory as campaign storage or infer authority from filenames.\n---\n\n# AI-DM 4 Engine\n\nTreat the Engine as immutable reusable software, the Campaign package as mutable\ncanon/state, and this Skill as the adapter between them.\n\n## Mandatory boot sequence\n\n1. Resolve the Campaign package the user explicitly supplied or selected.\n2. Read `CAMPAIGN_MANIFEST.json` before any other Campaign artifact.\n3. Run:\n\n   ```bash\n   python3 scripts/aidm_campaign.py validate --campaign <path>\n   ```\n\n4. Stop before gameplay or current-state claims when validation fails.\n5. Read the Campaign-owned `AI_DM_RUNTIME_PRIMER.md`, then\n   `STORY_SO_FAR.md`, then only relevant current records/books.\n6. Never select authority by `CURRENT`, `MASTER`, `FINAL`, recency, file size,\n   or semantic similarity.\n\nIf the surface cannot execute the bundled script or cannot return a changed\nCampaign/checkpoint file, state the write limitation before adjudicating. Do\nnot claim a turn committed when only chat context changed.\n\nRead [ENGINE_CAMPAIGN_CONTRACT_v1.1.md](references/ENGINE_CAMPAIGN_CONTRACT_v1.1.md)\nfor authority and transaction invariants. Read\n[CAMPAIGN_BINDING.md](references/CAMPAIGN_BINDING.md) for directory/ZIP handling.\n\n## Commands\n\nRun visible commands through one manifest-selected projection head:\n\n```bash\npython3 scripts/aidm_campaign.py command \\\n  --campaign <path> --name /status\n```\n\nSupported commands are `/status`, `/ledger`, `/projects`, `/timeline`, `/recap`,\nand `/save`. For `/save`, provide `--output <checkpoint.zip>`.\n\nCommands do not advance gameplay. Never reveal data marked `SEALED`.\n\n## Substantive turns\n\nPreserve the user's declaration byte-for-byte. Never invent the player\ncharacter's voluntary action, dialogue, tactics, power use, beliefs,\nconclusions, emotions, priorities, allocations, or acceptance of a bargain.\n\nBefore committing:\n\n1. identify phase and Campaign time;\n2. retrieve only relevant current authority;\n3. adjudicate fair consequences;\n4. draft a domain delta;\n5. audit arithmetic, chronology, NPC knowledge, correction scope, provenance,\n   sealed leakage, and player sovereignty;\n6. use one stable unique `turn_id`.\n\nCommit with:\n\n```bash\npython3 scripts/aidm_campaign.py turn \\\n  --campaign <path> \\\n  --turn-id <stable-id> \\\n  --declaration '<exact declaration>' \\\n  --delta-file <delta.json>\n```\n\nFor a ZIP Campaign, also pass `--output <changed-campaign.zip>`. A directory\nCampaign is updated in place and may additionally be exported with `--output`.\n\nSame `turn_id` plus the same exact declaration is an idempotent replay. The\nsame `turn_id` with different text must be rejected.\n\nThe delta grammar and examples are in\n[TRANSACTION_INTERFACE.md](references/TRANSACTION_INTERFACE.md).\n\n## Checkpoints and persistence\n\nCommit internal Campaign state after each substantive turn. Create an external\ncheckpoint on `/save`, explicit request, major boundary, migration, or major\nmilestone:\n\n```bash\npython3 scripts/aidm_campaign.py checkpoint \\\n  --campaign <path> --output <checkpoint.zip>\n```\n\nA checkpoint must not advance the gameplay state head or transaction hash.\nReturn the changed Campaign/checkpoint file to the user. Chat memory is never a\nsave mechanism.\n\n## Provenance and progress\n\nUse only these material provenance classes:\n\n- `EXACT`\n- `DERIVED`\n- `GENERATED_CANON`\n- `NORMALIZED`\n- `BOUNDED`\n- `FUTURE_UNKNOWN`\n- `SEALED`\n- `NOT_TRACKED`\n\nUse the typed Progress Models in\n[PROGRESS_MODEL_1.0.md](references/PROGRESS_MODEL_1.0.md). Do not flatten every\nunfinished fact into one generic X/Y clock.\n\n## First Establishment and corrections\n\nGenerate a previously undefined world fact only when fair live simulation\nrequires it and the in-world method can establish it. Never use First\nEstablishment to excuse impossible knowledge, arithmetic errors, retroactive\nprecision, hidden-interface leakage, or post-hoc counters.\n\nKeep corrections narrow unless the user explicitly generalizes them. Record\nwhat changed, why, what remains preserved, and the affected projections.\n\n## Refusal boundary\n\nDo not resume gameplay without a valid bound Campaign and explicit gameplay\nauthorization. Do not embed Campaign state in this Skill. Do not mutate a\nproduction Campaign during engine development; use synthetic fixtures or an\nexplicit disposable copy.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}