← AI-DM 4 EngineCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to AI-DM 4 Engine
Snapshot Sep 30, 2026 · 23:13 UTC · version 0.3.1
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"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"
}SHA-256: 4470ceffcdd19968937f206d79f157154d158578e5670a678ddaf06a92b5bfa1