← QuestforgeCONTENT HISTORY

Update to Questforge

Snapshot Sep 30, 2026 · 23:13 UTC · version 1.3.1

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "questforge-campaign",
  "description": "Manage Questforge campaign memory, sessions, clocks, NPCs, factions, inventory, clues, state patches, canonical save files, and continuity between sessions.",
  "included_files": [],
  "skill_md_contents": "---\nname: questforge-campaign\ndescription: Manage Questforge campaign memory, sessions, clocks, NPCs, factions, inventory, clues, state patches, canonical save files, and continuity between sessions.\n---\n\n# Questforge Campaign\n\nUse this skill when starting, continuing, closing, or auditing a campaign.\n\nUse `questforge-save` for durable snapshots, cloud sync, ZIP export, conflict handling, and migration. When local file access is unavailable, use a player-selected writable storage connector if one is explicitly authorized. Otherwise keep a compact spoiler-free state block in the conversation with hero status, inventory, objective, clues, open threads, and the last checkpoint label; do not claim durable persistence beyond the current task.\n\n## Campaign Workspace\n\nCreate campaign memory with:\n\n```powershell\npython ../../scripts/campaign_memory.py new --campaigns-dir campaigns --name \"<name>\"\n```\n\nRecommended layout:\n\n```text\ncampaigns/<campaign-slug>/\n  campaign-conception.json\n  campaign-state.md\n  game-state.json\n  checkpoints/\n  player-journal.md\n  dm/\n    adventure-spine.md\n    puzzle-ledger.md\n  visual-bible.md\n  opening-brief.md\n  questforge.json\n  characters/\n  sessions/\n  images/\n    prompts/\n    assets/\n    viewers/\n    visual-gallery.html\n    visual-index.md\n  rules/\n```\n\n## Session Loop\n\nFor each scene:\n\n1. Recap only what the current decision needs.\n2. Frame location, pressure, NPC intent, visible risks, and one sensory detail.\n3. Ask one clear action question.\n4. Use `questforge-rules` for uncertain meaningful actions.\n5. Apply consequences to character state, clocks, factions, inventory, clues,\n   NPC attitudes, and the structured mechanical ledger in `game-state.json`.\n6. Award XP, useful loot, leverage, or contacts when the player solves a\n   meaningful problem. Avoid filling play with trivial junk loot.\n7. Update `dm/adventure-spine.md` when a hook is merged, changed, resolved, or\n   retired. Never let opening hooks silently drift.\n8. Use `questforge-puzzles` when a clue web can become a non-blocking deduction\n   beat or symbolic minigame.\n9. Use `questforge-visuals` for useful visual beats and refresh the local\n   gallery when a generated image is registered.\n10. At a scene boundary or after roughly three meaningful turns, update `player-journal.md` with spoiler-free current objective, known clues/NPCs, inventory, XP/rewards, damage/conditions, and open threads.\n11. Append compact analytics events for meaningful checks, choices, consequences, rewards, visuals, puzzles, repeated obstacles, and pacing notes with `../../scripts/session_analytics.py log-event`.\n12. Update the session log, campaign state, and DM spine at scene boundaries or session end. Mechanical changes in `game-state.json` remain immediate.\n13. After every action that changes fiction or mechanics, use `questforge-save` for a canonical autosave. At scene boundaries or after roughly three meaningful turns, save again after compacting the journal and continuity files. Do not make optional media synchronization block the canonical save.\n\n## State Patch\n\nAfter meaningful scenes, track:\n\n- party location;\n- immediate next choice;\n- clocks advanced or reduced;\n- NPC attitude changes;\n- faction moves;\n- clues discovered;\n- hook status changes in the DM-only adventure spine;\n- puzzle beats offered, solved, hinted, or bypassed;\n- inventory and rewards in `campaign-state.md`, plus mechanical inventory,\n  equipment, currency, and shops in `game-state.json`;\n- XP and advancement notes;\n- notable loot and currency changes;\n- HP, temporary HP, death saves, damage, conditions, rests, spell slots, hit\n  dice, limited-use resources, and level-up choices through\n  `../../scripts/game_state.py`;\n- persistent visible states, such as bandaged hands, disguises, carried clues,\n  or damaged gear;\n- visual gallery refreshes and 360 viewer paths shown to the player;\n- analytics events for checks, choices, consequences, rewards, visuals,\n  repeated obstacles, pacing friction, and player confusion;\n- spoiler-free player journal changes;\n- table rulings.\n\nUse `../../scripts/campaign_memory.py add-inventory-item`, `award-loot`,\n`award-xp`, `record-hook-status`, `record-puzzle-beat`, and `list-inventory`\nfor campaign-facing summaries.\n\nUse `../../scripts/game_state.py` for the player-facing mechanical source of truth:\n\n```powershell\npython ../../scripts/game_state.py status --campaign-root <campaign-root>\npython ../../scripts/game_state.py add-character --campaign-root <campaign-root> --name \"<hero>\" --class-name \"<class>\" --ancestry \"<ancestry>\" --max-hp 10 --armor-class 13\npython ../../scripts/game_state.py add-item --campaign-root <campaign-root> --character \"<hero>\" --name \"Reinforced gloves\" --value 12gp\npython ../../scripts/game_state.py equip --campaign-root <campaign-root> --character \"<hero>\" --item \"Reinforced gloves\" --slot gloves\npython ../../scripts/game_state.py start-combat --campaign-root <campaign-root> --name \"Workshop skirmish\" --combatant \"<hero>:14\" --combatant \"Saboteur:11:6:13:enemy\"\npython ../../scripts/game_state.py set-tactical-scene --campaign-root <campaign-root> --summary \"Worktables, brazier, east door, raised loading platform.\" --terrain \"worktables grant half cover\" --hazard \"brazier can spread fire\" --interactable \"rope pulley can drop sacks\"\npython ../../scripts/game_state.py spend-spell-slot --campaign-root <campaign-root> --character \"<hero>\" --slot-level 1\npython ../../scripts/game_state.py apply-damage --campaign-root <campaign-root> --character \"<hero>\" --amount 5\npython ../../scripts/game_state.py rest --campaign-root <campaign-root> --character \"<hero>\" --kind long\npython ../../scripts/game_state.py checkpoint --campaign-root <campaign-root> --label \"Before opening the black door\"\n```\n\nBefore a choice that could kill the hero, permanently spend rare resources, or radically branch the campaign, create a checkpoint. If the player regrets a decision out of character, use `restore-checkpoint` and explain the rollback as table control, not as an in-world retcon unless the table wants that.\n\nBefore narrating the use of equipment or a limited resource, verify it in `game-state.json`. Do not infer specific contents from a generic pack. When prose and structured state disagree, structured state wins and the correction must be visible to the player.\n\nUse `../../scripts/session_analytics.py analyze --session-log <session.md> --visual-index <campaign-root>/images/visual-index.md --events <campaign-root>/analytics/session-events.jsonl` after beta play to detect hidden patterns such as narrow DC ranges, repeated modifiers, missing disadvantage, thin visual variety, repeated obstacle stalls, or pacing friction. If DCs cluster, use `../../scripts/dc_planner.py` during the next session to choose no-roll, DC 10, DC 15, DC 20, contests, or resource tradeoffs intentionally.\n\nBefore human beta play or a long continuation, run:\n\n```powershell\npython ../../scripts/preflight.py --campaign-root <campaign-root> --repair-missing-templates --refresh-gallery --title \"<campaign title>\"\n```\n\nRun preflight for an explicitly requested beta/readiness pass, after a migration, or when continuing a campaign with suspected missing files. Do not run it in every live turn or delay a new player's first actionable scene with it. Fix preflight errors before the planned beta or continuation. Treat warnings as prep notes, especially empty visual-ledger continuity and missing player-facing recovery notes. For a manual readiness pass, use `../../docs/beta-preflight-checklist.md`.\n\nIf preflight reports a legacy manifest, a session mismatch, or a non-canonical journal/index copy, use `questforge-save` and run its migration dry-run. Never repair missing mechanical truth by invention or choose between divergent files silently.\n\nCreate the next session log with:\n\n```powershell\npython ../../scripts/campaign_memory.py next-session --campaign-root <campaign-root>\n```\n\n## Player Journal\n\nKeep `player-journal.md` spoiler-free and useful as the player's memory between sessions. Include only what the character or player already knows: current objective, immediate risk, known clues and NPCs, inventory, XP/rewards, damage or conditions, and open threads. Do not copy DM-only truths, hidden clocks, or unrevealed faction plans from `dm/adventure-spine.md`.\n\nContinuity must be recoverable from files, not only chat memory.\n"
}

SHA-256: 00a6855f0cef257b0ee0bbf38f975f2a446570470d23387a70af1cae6ac8efc1