Files
Hop/wiki/Architecture.md
T
Hop de99aad4d4 Reconcile Gitea distribution with current alpha behavior and release tooling
Hop-State: A_06FN55REVAR7VQG4BWJBCD8
Hop-Proposal: R_06FN55QTEWKH16NSR59YJYG
Hop-Task: T_06FN3MBF98GWD4NA5PA1RWG
Hop-Attempt: AT_06FN55BQ80H2S8WHNDD24G0
2026-07-11 12:10:59 -07:00

1.6 KiB

Architecture

Hop uses Git under the hood, but it is not merely a directory of metadata files inside .git.

Git responsibilities

Git provides:

  • content-addressed blobs and trees;
  • synthetic commits for immutable snapshots;
  • detached worktrees for attempt isolation;
  • three-way merge behavior;
  • diffs and path inspection; and
  • interoperability with existing repositories.

Hop never needs to move the user's active branch or rewrite the real index. Private objects are pinned beneath refs/hop/states/*; accepted history is mirrored at refs/hop/accepted.

Hop responsibilities

.hop/hop.db is a SQLite WAL database containing:

  • prompt/task/attempt identity;
  • typed state edges and accepted lineage;
  • evidence tied to exact source trees;
  • session heads for Desktop follow-ups;
  • materialized-root state; and
  • immutable audit events.

Project layout

.hop/
├── hop.db
├── workspaces/
├── checks/
├── integration/
└── *.lock

.hop/ is added to .git/info/exclude, not the public .gitignore. Hop refuses initialization when .hop is already tracked as user-owned project content.

Acceptance consistency

Acceptance is serialized and compare-and-swapped. SQLite is authoritative; derived Git refs can be repaired by hop doctor --repair. Desktop landing also tracks which accepted state is physically visible, allowing safe catch-up with hop sync without treating a divergent folder as disposable.

For the full product direction, read the product blueprint.