Architectural Lineage (Credits):
SwarmCraft is an architectural fork and deep rewrite of the multi-agent swarm engine created by Mojomast in mojomast/swarmussy.
SwarmCraft’s deterministic “Architect-style” layering is also derived from the meta-structure of Abstract Wiki Architect (AWA).
Full details: Credits & Lineage
SwarmCraft supports a human-friendly grid editor for the outline and a CSV round-trip workflow.
Goal:
This page specifies how outline.json maps to a grid and how CSV import/export should behave.
Source of truth:
templates/<template_id>.jsonoutline.jsonGiven:
threads = template.threads[]for each chapter in chapters[]: chapter.part_ids[]Cell mapping:
cell(thread, part_id) = outline.parts[part_id].beats[thread] (string or empty)
If the key is missing, treat it as empty when projecting:
Part 1, Part 2, … in display orderpart_id values (recommended)The beats-only CSV is a projection of the grid (threads × parts).
Row 1 (human labels):
ThreadPart 1, Part 2, … (or chapter-aware labels)Row 2 (machine IDs):
part_idP001, P002, …This allows the CSV to remain stable even if “Part 3” is moved into a different chapter.
,Part 1,Part 2,Part 3
part_id,P001,P002,P003
Plot,"The World in Turmoil...","The Revelation...","A Seed of Hope..."
Character Development,"King Klown feels helpless...","Insight sparks vision...","Cautious optimism..."
Conflict,"Global crisis escalates...","Self-doubt...","Opposition begins..."
Import SHOULD use the part_id row as the canonical mapping.
part_id row MUST be used.Rows are matched by thread name (first column).
Exact match is recommended.
Whitespace trimming is recommended.
Unknown thread names:
outline.parts[*].beats only if the system supports custom threads (not recommended by default)Importer MUST respect outline locks:
outline.parts[part_id].locks.beats == true, that part’s beats MUST NOT be modified by CSV import.Recommended behavior:
import produces a report:
If the user changes template (or template version):
The grid row set changes (threads list changes)
The system SHOULD provide a migration layer:
Recommended: do not silently delete beats.
If the user changes parts_per_chapter:
part_id row remains stable.Rule:
Beats CSV is intentionally simple. If you want contract editing in CSV, use a second file:
outline_contract.csv (recommended)
Shape:
part_id,chapter_id,title,goal,obstacle,turn,outcome
P001,CH01,Part 1,"...","...","...","..."
Contract import MUST respect locks.contract.
The grid is a scaffold. The engine uses it slice-by-slice:
See: