Medical Education · Operational Psychiatry

War Psychiatry Editorial Command

Updated edition · Lead Editor Sean Wilkes, MD · Co-Editors William Pitts, MD & Connie Thomas, MD

Editorial pipeline

chapters + appendices by stage — click a row to filter

Progress by section

mean stage weight per section

Attention queue

what the lead editor should look at first

Up next

Drag a card to move it to a new stage. Click a card to open it.
The book's spine, approval through publication. Drag milestones to set their display order; click one to edit.

Export

Whole project

The full-JSON export is the canonical interchange format — the same entities and snake_case fields as the Excel workbook's DB_ sheets. Hand it to an LLM to update the workbook, or archive it as a snapshot.

"Save HTML" downloads a copy of this entire app with the current data baked in — that file replaces this one wholesale, so it is also your backup.

Per-entity CSV

ClickUp packet

Exports open tasks (and chapters missing a ClickUp id) as a JSON packet an assistant can push through the ClickUp API or MCP: name, status, priority, due date, and the tracker sync key. Store returned ClickUp ids back in each record's clickup_id.

Import & merge

Import JSON

Accepts a full-JSON export from this app or one built from the Excel workbook. Records are matched by primary-key ID; for each match the side with the newer last_updated wins; unmatched records are added. Nothing is deleted by import.

Password screen

Browser autosave

Sync contract

for LLMs and the Excel notebook
{ "project": "war-psychiatry-textbook", "exported_at": "ISO-8601 timestamp", "entities": { "chapters": [ { "chapter_id": "CH-01", …, "clickup_id": "", "last_updated": "YYYY-MM-DD" } ], "people": [ { "person_id": "PER-001", … } ], "tasks": [ { "task_id": "TSK-001", …, "clickup_id": "", "clickup_url": "" } ], "milestones": [ { "milestone_id": "MIL-01", … } ], "meetings": [ { "meeting_id": "MTG-001", … } ], "comms": [ { "comm_id": "COM-001", … } ], "decisions": [ { "record_id": "DEC-001", … } ] } } Rules: IDs are immutable and never reused · every edit sets last_updated (YYYY-MM-DD) · newer last_updated wins on merge · computed fields (stage %, meeting past/upcoming) are derived, never imported · vocabularies match the workbook's Lists sheet · Excel entry sheets keep headers in row 6 with data from row 7; DB_ sheets mirror them for machines.
How to use the sync contract

Tracker → Excel notebook

  1. In Data & Sync, select Export full JSON. Use the newest export as the tracker-side source.
  2. Give the JSON and the Excel notebook to an LLM, and tell it to preserve the entity names, snake_case field names, controlled vocabulary values, and JSON shape shown above.
  3. Write each entity into its matching Excel entry sheet. Match records by primary-key ID—never by title—and keep the headers in row 6 with records beginning in row 7.
  4. For a matching ID, compare last_updated and keep the newer record. Add unmatched records without renumbering or reusing IDs. If the dates do not resolve a conflict, keep the Excel version and append [SYNC CONFLICT date] to notes.

Excel notebook → tracker

  1. Have the LLM read the notebook's DB_ sheets and build the exact full-JSON shape above for chapters, people, tasks, milestones, meetings, comms, and decisions.
  2. Keep every primary-key ID unchanged and set last_updated to YYYY-MM-DD for every edited record. Do not import computed fields such as stage percentage or meeting past/upcoming status.
  3. In Import & merge, choose the JSON file or paste it. The tracker matches by ID, keeps the record with the newer last_updated, adds unmatched records, and does not delete records.
  4. Use Replace all from file only for an intentional wholesale replacement. After any merge, verify the entity counts and export a fresh full-JSON snapshot.