Finish the roadmap: history, remotes, conflicts and the agent workflow - #4
Merged
Merged
Conversation
…workflow The remaining phases, landed together because they were built together and because each one needed the others' plumbing: history reads what the operation banner pauses on, conflict resolution is entered from merge, rebase, cherry-pick and stash alike, and the agent-workflow actions are compositions of all of it. Phase 4 — history. A paginated, HEAD-anchored log per worktree with a lane-aware graph, commit detail, file history that follows renames, Monaco gutter blame, four explicit search modes, cherry-pick, revert, and an interactive rebase planner. A mutation validates the full object against the displayed HEAD, so a stale overlay cannot apply an unrelated commit. Phase 5 — remotes. Fetch, pull, push and tag push run under a credential-aware network intent, detached from the bridge with live progress and cancellation. GCM may open its own sign-in UI; terminal prompts stay disabled and embedded URL credentials are redacted everywhere they could surface. Force is always --force-with-lease. Pull rebases, merges or requires fast-forward, on request. Phase 6 — conflicts. One four-pane Monaco surface — base, ours, theirs and an editable result — shared by merge, rebase, cherry-pick, revert, mailbox apply and stash restore, each keeping its own continue/skip/abort semantics. Marker regions are first-class, binary sides are byte-exact, and rerere is available. Phase 8 — the differentiators. Cross-worktree comparison, accept an agent's work into main, reject and reset it, batch review with [ and ], the agent session link, and a per-worktree review watermark that ignored build output cannot bless. Also: PR integration through gh, kept at arm's length behind the same failure classification as git; clone as a detached operation with its destination checked before git starts; a repository-wide write lease so two Chapter windows cannot act on each other's stale snapshot; and .gitattributes, which pins the LF the index already holds so that an app which now writes files cannot start committing line endings. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Every item is now ticked, so the two cross-cutting ones say what they are: standing rules rather than closed boxes. A new destructive action needs a preview unless it is one of the named exceptions, and a new action of any kind needs a keyboard path. The notes keep the roadmap's habit of recording what running the thing taught, not only that it is done — that `worktree prune --verbose` reports on stderr, that a force push has to ask the remote what it would replace because the lease is decided against a tip only the server has, that the refs panel documented three shortcuts which fired only after a mouse click had moved focus out of its filter. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The repository had one workflow and it fires on tags, so a pull request's only status was a Vercel deployment of an app that has no web target — failing identically on main, and saying nothing about whether the code builds. Windows-only because the app is: Chapter.App targets net10.0-windows and hosts WebView2, so the whole suite runs here rather than a portable subset. The front-end is built before .NET because `dotnet build` only warns when src/Chapter.Web/dist is empty — a job that skipped npm would go green having packaged an empty window. That warning is an error here for the same reason. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the remaining roadmap items. Every box in
docs/ROADMAP.mdis now ticked.What's here
Phase 4 — history. Paginated, HEAD-anchored log per worktree with a lane-aware graph, commit detail, file history that follows renames, Monaco gutter blame, four explicit search modes, cherry-pick, revert, and an interactive rebase planner.
Phase 5 — remotes. Fetch, pull, push and tag push under a credential-aware network intent, detached from the bridge with live progress and cancellation. Force is always
--force-with-lease. Plus PR integration throughgh, kept at arm's length behind the same failure classification as git.Phase 6 — conflicts. One four-pane Monaco surface — base, ours, theirs, editable result — shared by merge, rebase, cherry-pick, revert, mailbox apply and stash restore, each keeping its own continue/skip/abort semantics.
Phase 8 — the differentiators. Cross-worktree comparison, accept an agent's work into main, reject and reset, batch review, agent session links, and a per-worktree review watermark.
Cross-cutting. Clone as a detached operation; a repository-wide write lease;
.gitattributes; a preview for every destructive action; and a keyboard path to everything the mouse can reach.Two things worth a reviewer's attention
The write lease and the network path. Every mutation takes a short repository-wide lease, held from re-reading state to classifying git's result — but fetch, push and push-tag deliberately run without it. Neither can change the worktree, both legitimately run for minutes, and holding a two-second lease across a transfer turned any stage made during a push into a refusal. Pull still takes it, because it merges into the working tree.
Previews ask git rather than guessing. Force-push runs
push --dry-runagainst the remote and names the commits the server would stop having, because--force-with-leaseis decided against a tip only the server has. Worktree removal lists ignored content, which git's own check omits — the case where nothing refuses is the one where a.envdisappears quietly.Verification
dotnet buildclean,tsc --noEmitcleanCtrl+B/Ctrl+Hfrom inside the editor, clone dialogNote
There is no PR workflow in this repository — the only one is
release.yml, which fires onv*tags. The numbers above are from a local run.🤖 Generated with Claude Code