Skip to content

Architecture Non-Negotiables

“Non-negotiable” means do not violate casually. Evidence can still change a rule through an explicit architecture update and ADR.

  1. Task ≠ Agent Run ≠ Agent Turn ≠ OS process.
  2. Agent Adapter ≠ Execution Environment.
  3. Provider Driver ≠ Agent Instance ≠ Adapter Strategy; capabilities belong to Strategy.
  4. Domain transitions do not perform Git/process/network/SQLite side effects.
  5. Important external side effects are preceded by durable Operation intent.
  6. Command accepted ≠ side effect complete.
  7. Process exit ≠ provider semantic completion ≠ Task ready for Review.
  8. Raw provider input is persisted before parsing once provider ingestion exists.
  9. Normalized events that come from raw input carry a RawRef.
  10. Fact and Claim provenance is never omitted/merged.
  11. Review and Verification are valid only for the revision they evaluated.
  12. Use the real Git executable and real temporary repos in Git tests.
  13. Worktree path identity uses immutable IDs.
  14. Never automatically destroy dirty/unrecoverable work.
  15. Worktree creation/cleanup are lifecycles, not fire-and-forget commands.
  16. Live streaming ≠ historical storage; histories are bounded/paged.
  17. Realtime replay is bounded; large gaps use snapshots.
  18. Transport connected ≠ state fresh.
  19. Unsupported capability never silently degrades to weaker semantics.
  20. Provider probe ≠ provider Start.
  21. Host safety gating ≠ conversational Involvement Mode.
  22. Managed processes go through one argv-based ProcessRunner boundary.
  23. Renderer does not own filesystem/Git/provider/process execution.
  24. TanStack Query owns authoritative client-side server data; Zustand is ephemeral UI only.
  25. Canonical docs remain current; ADRs explain reasons rather than patch stale specs.

Forge is local-first. The docs are part of the product engineering system.