You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The engine resolves success/fail; great D&D treats failure as NEW CONTENT — fail forward. The botched lockpick wakes the guard who knows your name. Today a failed check is a dead end the DM must improvise around; make complications a first-class engine output.
Design
Complication roll (additive in dice.py/check resolution): on a failed check (and on a natural-1 / failed-by-5+), the engine rolls on a complication table seeded by context (location danger, active quest, present NPCs) — emitting complication: {kind, seed} in the check result. Kinds: noise/attention, cost (gear/resource), new-arrival, information-leak, time-pressure. "Probability proposes, DM disposes" — the DM is TOLD the complication and weaves it; content stays DM-advisory per invariant Epic 2: Characters & progression #3.
Success-at-cost: failed-by-1-2 offers the DM a success_at_cost option (the classic "yes, but").
Complication debts: complications log into scene_debt.py so unresolved ones resurface (the guard remembers).
Files
servers/engine/dice.py (or the check-resolution path in server.py), a data/srd/complications.json table (authored, ~40 entries by kind), scene_debt.py (logging), dungeon-master skill (the weave directive). Engine tests: deterministic complication on seeded rolls; debt logged; no complication on plain success.
Acceptance
Engine tests green; a duo transcript shows a failed check producing a woven complication (story-lens evidence); behavioral GREEN unaffected.
Concept
The engine resolves success/fail; great D&D treats failure as NEW CONTENT — fail forward. The botched lockpick wakes the guard who knows your name. Today a failed check is a dead end the DM must improvise around; make complications a first-class engine output.
Design
dice.py/check resolution): on a failed check (and on a natural-1 / failed-by-5+), the engine rolls on a complication table seeded by context (location danger, active quest, present NPCs) — emittingcomplication: {kind, seed}in the check result. Kinds: noise/attention, cost (gear/resource), new-arrival, information-leak, time-pressure. "Probability proposes, DM disposes" — the DM is TOLD the complication and weaves it; content stays DM-advisory per invariant Epic 2: Characters & progression #3.success_at_costoption (the classic "yes, but").scene_debt.pyso unresolved ones resurface (the guard remembers).Files
servers/engine/dice.py(or the check-resolution path in server.py), adata/srd/complications.jsontable (authored, ~40 entries by kind),scene_debt.py(logging), dungeon-master skill (the weave directive). Engine tests: deterministic complication on seeded rolls; debt logged; no complication on plain success.Acceptance
Engine tests green; a duo transcript shows a failed check producing a woven complication (story-lens evidence); behavioral GREEN unaffected.
Moves
story_craft (failure becomes story), mechanical (the Angry-DM lens rewards consequence-bearing checks), cross_persona_sat.