How it all fits together

Parlance's features make sense individually, but the tool is really one loop. This page follows a single change — editing one suspect's dialogue in the demo mystery — all the way around it.

 author ──▶ validate ──▶ playtest ──▶ share ──▶ review ──▶ merge ──▶ CI ──▶ engine
   ▲                                                                          │
   └────────────────────────── the same JSON files ◀──────────────────────────┘

1. Author

You open dlg_wren_first on the dialogue canvas and sharpen a line. The change is written to data/dialogues/dlg_wren_first.json — a plain JSON file in your repo. No database, no project binary; the file is the story. (Schema-first data is why the form knew how to edit it and why bad data can't be saved.)

2. Validate — instantly, on save

The save re-runs the full validator and pushes results to every open editor window. If your edit orphaned a node or gated a choice on a flag nothing sets, the validation bar says so now, while the context is still in your head. (The validation model · check reference)

3. Playtest — in place, deterministically

You hit ▶ Play and walk the scene with a live game state: set observation = 7, seed the dice, fail the check on purpose with force ✗, rewind, try again. You edit the line again mid-session — the session keeps your state and re-reads the scene. (Playtest & determinism)

4. Share — one file, no install

The scene needs a writer's ear. ⇪ Share build exports a single self-contained HTML file that plays in any browser through the same runtime. You send it; they play it; nobody installs anything. (Share builds — the demo is one.)

5. Review — on a branch, like code

You push the change on a branch. A colleague opens Review, reads the narrative diff ("1 line edited in dlg_wren_first"), plays the branch's own content without checking it out, and leaves a comment anchored to the node — with a suggested replacement you can apply in one click. Verdicts are recorded against the commit they read. All of it lives in git; there is no server. (Git-native workflow)

6. Merge & CI

The branch merges. CI runs parlance ci-check --strict — the same validator, headless — plus your route fixtures: scripted playthroughs with assertions, reproducible because play is seeded. A story regression fails the build like any other regression.

7. Engine — the same files, verbatim

The game engine loads data/ directly. There is no export step to run and no drift to chase: the runtime behavior is a published contract, and engine ports prove themselves against conformance vectors. (The engine contract · integrations)

The point

Every stop on the loop reads or writes the same per-entity JSON files. That's the whole trick: because the story is plain versioned data with a published meaning, each feature — validation, playtest, review, CI, the engine itself — is just a different consumer of one truth, and none of them can disagree with the others.

Next: run the loop yourself, starting with your first project.