Repository navigation
Post Merge Checks
There is no merge queue. Following the model Anthropic describes for Scion, main is checked after each merge rather than before, and bisect and revert are cheap.
av repo settings myrepo --check "python -m pytest -q"
av runner --repo myrepo --trust # checks main, then every merge as it lands
av health --repo myrepo # green, or red since which merge and its task
av log --repo myrepo # ✓ passed · ✗ failed · · unchecked
av bisect --repo myrepo --trust # which merge broke main, and its task
av revert <task> --reason "..." # take one merge out of main, even an older one
av why app/util.py:42 --repo myrepo # the task, goal and decisions behind a line-
The daemon never runs commands.
av runnerruns on the machine where the code should be tested. It fetches each new main through the read API (no checkout), runs the command and posts the result. Because that command comes from the daemon's database, the runner refuses to start without--trust. - While main is red, every context pack opens with a warning naming the culprit merge.
-
av whyreads a per-path blame computed from each commit's parent blame and cached by commit id, so it is computed once and never needs invalidating. -
Required conventions can carry check commands, and
submitrefuses leftover conflict markers.
av repo backup myrepo --remote git@github.com:me/myrepo.git [--branch av-main]Main is pushed after every merge and undo (AV_BACKUP_REMOTES sets this at start-up). The push runs in the background and is never forced. A failure is stored and retried with backoff (1 s, 2 s, 4 s … up to 5 min); av status and av repo backup show it. A backup failure never fails the merge. --branch av-main pushes to a separate branch, for example to open a pull request from it.
| Idea from the article | In Scholion |
|---|---|
| A thin client; the server owns history, merges and rebases | The daemon owns all state; the CLI and MCP tools are thin HTTP clients |
| An API complete enough that jobs need no checkout |
GET /v1/repos/{r}/files, /tree, /diff, /log and the MCP tools read_file, list_files, diff, log
|
| Derived data computed per change from its parent's value | Blame cached by immutable commit id; av why path:line
|
| No global merge queue: merge, test after, bisect and revert |
av runner, av health, av bisect, av revert
|
| Approvals with constraints, so a mechanical rebase needs no fresh review | An approval carries over when the task's own patch is unchanged, or the only overlap is in carry_globs files |
| Push instead of polling |
GET /v1/events long-poll and av events --follow
|
Scholion is independent and not affiliated with Anthropic; it only borrows ideas from the public article Redesigning source control.
Scholion is MIT-licensed. The README in the repository is the reference; where this wiki and the code disagree, the code wins.