← All field notesthe architecture · 4 min read

Three histories, one thread.

Thoughts evolve. Agents execute. Code changes. Those are related events, but they need different records.

Thought history belongs to the outline

The project contains a nested .threadvm/ Git repository. Its snapshot, operations, Markdown projection, proposals, and run summaries form the thought history. A human edit or accepted batch creates a commit. Proposal submissions, rejections, and delegation summaries are also recorded. The nested repository is excluded from the outer project repository.

Execution history records what happened

The local events.jsonl file is an append-only execution log. Runs report observations and agent activity. This is distinct from the versioned document: progress messages are useful without becoming outline edits. Runtime capabilities, worktrees, and transcripts are ignored by the thought repository.

Code history stays with the project

A local delegated run works in an isolated Git worktree on a threadvm/<node>-<run> branch. Its code changes stay in the project’s Git history. Finished run summaries link to the final code HEAD. Accepting an outline proposal updates thought history; it does not merge the run’s code branch.

Connect the records explicitly

Stable node IDs connect the original intent to a run. Run IDs connect execution events and summaries. Commit SHAs point to code. These links let you reconstruct the story without forcing every event into one document or one Git repository. The local outline and code repositories retain their own histories and can be inspected with familiar tools.