@davmash/bygone 0.8.14 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/README.md +2 -2
- package/cli/commandSpec.js +12 -2
- package/cli/completions.js +1 -1
- package/cli/present.js +89 -7
- package/cli/tour.js +13 -2
- package/cli/tourFile.js +9 -0
- package/cli/tourHistory.js +432 -0
- package/completions/_bygone +2 -1
- package/completions/bygone +1 -1
- package/completions/bygone.fish +1 -0
- package/docs/change-tour-format.md +199 -7
- package/docs/explore.md +21 -1
- package/docs/generating-change-tours.md +70 -17
- package/docs/present.md +134 -5
- package/docs/product-surface.md +64 -8
- package/docs/releasing.md +25 -29
- package/examples/bygone-history.bygone +52 -10
- package/examples/navigation-lab.bygone.yaml +420 -0
- package/media/diff.worker.js +3 -3
- package/media/webview.css +1 -1
- package/media/webview.js +546 -178
- package/out/changeTour.js +1391 -469
- package/out/gitComparison.js +354 -0
- package/out/standalone-main.js +13989 -4749
- package/out/tourCoverage.js +1434 -461
- package/package.json +2 -2
- package/schemas/change-tour-source.schema.json +222 -3
- package/skills/pr-tour-guide/SKILL.md +111 -11
- package/standalone/index.html +6 -1
- package/web/index.html +114 -73
- package/web/presenter.css +658 -230
- package/web/web-host.js +374 -5
package/docs/product-surface.md
CHANGED
|
@@ -9,7 +9,7 @@ or materially changed.
|
|
|
9
9
|
- **Explore — desktop:** open-ended file, directory, history, revision,
|
|
10
10
|
multi-panel, and branch-change investigation.
|
|
11
11
|
- **Present — desktop/browser:** generated and authored tours with narrative,
|
|
12
|
-
exact source evidence, and
|
|
12
|
+
exact source evidence, and one task navigator for Tour, Files, or Commits.
|
|
13
13
|
- **VS Code companion:** contextual file comparison and file history near the
|
|
14
14
|
current editor. Repository-, directory-, multi-panel-, and tour-scale work
|
|
15
15
|
should hand off to desktop.
|
|
@@ -21,6 +21,45 @@ or materially changed.
|
|
|
21
21
|
The shared Monaco renderer supplies diff semantics and presentation. Sharing a
|
|
22
22
|
renderer does not make every workflow appropriate in every host.
|
|
23
23
|
|
|
24
|
+
## Shared workspace
|
|
25
|
+
|
|
26
|
+
Desktop Explore uses **History · Compare · Historical tour · Deconstructed
|
|
27
|
+
tour** without requiring an authored document. Missing tour buttons open an
|
|
28
|
+
short, editable prompt referencing the bundled v3 tour skill and the workspace's
|
|
29
|
+
repository, revisions, and selected paths. Read instructions exposes the Markdown;
|
|
30
|
+
Save an editable copy and Use my copy support user-owned forks. Desktop prompts
|
|
31
|
+
reference a real filesystem path outside the application archive. Browser prompts
|
|
32
|
+
name a Markdown attachment to download and supply alongside the prompt; selecting
|
|
33
|
+
a local file does not disclose its full path. Custom instructions and prompt drafts
|
|
34
|
+
stay in the current workspace; edited prompts are preserved with a reset notice
|
|
35
|
+
when the selected instructions change. No model request or shell command runs
|
|
36
|
+
automatically. Prompt ranges use exact committed identities or explicitly ask for
|
|
37
|
+
a range choice. Existing tour loading remains available.
|
|
38
|
+
|
|
39
|
+
**Open in History** resolves the comparison's Git ownership and path scope.
|
|
40
|
+
Its commit axis includes the selected revisions and their ancestry, including
|
|
41
|
+
commits that did not change the active file. File-change markers and numbered
|
|
42
|
+
active panels are distinct from unapplied comparison checkboxes. Clear clears
|
|
43
|
+
the draft without changing modes. History retains add/remove-panel controls.
|
|
44
|
+
**Back to comparison** restores the originating ordered comparison and its
|
|
45
|
+
navigation. Mode transitions use the native unsaved-edit guard; writable
|
|
46
|
+
working files remain writable and explicit read-only launches stay read-only.
|
|
47
|
+
|
|
48
|
+
Opening an authored document from this workspace keeps the same native window.
|
|
49
|
+
A different repository, range, or scoped context requires confirmation; the
|
|
50
|
+
tour is read-only and the original comparison remains available. Explicit
|
|
51
|
+
Present launches may use their dedicated window. Browser tour uploads are
|
|
52
|
+
validated within the presentation server's existing repository and do not
|
|
53
|
+
acquire local-path or desktop-write capabilities. VS Code retains its desktop
|
|
54
|
+
handoff boundary.
|
|
55
|
+
|
|
56
|
+
Legacy v1 presentations retain their authored tour and missing-tour help;
|
|
57
|
+
History and Compare explain that a v2-or-newer repository backend is required.
|
|
58
|
+
|
|
59
|
+
Verification: `test/workspace*.test.js` and the native
|
|
60
|
+
`--smoke-test-workspace` launch exercise ownership, range safety, restoration,
|
|
61
|
+
prompt behavior, and the normal-mode controls.
|
|
62
|
+
|
|
24
63
|
## Standalone Explore
|
|
25
64
|
|
|
26
65
|
| User question | Discovery and launch | Session/source | Mutability and lifecycle | Maturity | Verification |
|
|
@@ -30,7 +69,7 @@ renderer does not make every workflow appropriate in every host.
|
|
|
30
69
|
| Compare directories | File → Compare Directories; drag/drop; two or more directory arguments | Directory comparison | Directory rows are read-only; writable file drill-down depends on source/review state | Core | directory smoke and directory-diff tests |
|
|
31
70
|
| Follow one file or directory through Git | File → View File or Directory History; one path; `--history` | Git commits plus supported index/worktree states | Commits are read-only; worktree/index provenance is explicit | Core | Git history and directory-history tests |
|
|
32
71
|
| Compare named revisions | Git → Compare Revisions; `bygone --git-diff <refs…>` | Git blobs/revisions | Read-only snapshots | Core | Git comparison tests and desktop menu contract |
|
|
33
|
-
| Explore a branch change | Git → Review Branch Change; `bygone review` |
|
|
72
|
+
| Explore a branch change | Git → Review Branch Change; `bygone review` | Deterministic start-here overview plus the complete merge-base-to-tip inventory | Read-only review snapshots; attention is a reading-order hint, viewed state remains session-local, and dirty state is reported rather than included | Core | attention-model, branch comparison, review-path, and desktop menu tests |
|
|
34
73
|
| Search comparison code | Edit → Find or Search Comparison | Active, visible, all loaded panels, unopened changed text snapshots, or one file's Git history | Search is read-only; history distinguishes content occurrence from introduction/removal; Replace requires the active writable model | Core | find, comparison-search, change-set-search, and history-search tests |
|
|
35
74
|
| Search or safely replace in a filesystem tree | Edit → Search in Files; explicit directory root | System ripgrep 14+ with include/exclude, hidden, ignore, and result-limit controls | Search is read-only and cancellable; completed case-sensitive literal searches can build an exclusion-aware, revalidated, atomic replacement preview with guarded undo | Optional system capability | repository search/replace contracts, benchmark, and host-protocol tests |
|
|
36
75
|
| Move through a multi-panel comparison | Strip buttons, panel headers, gutters, wheel, or `Alt+Arrow` | Active panel and adjacent pair | Does not change source identity | Core | focused-strip controller and standalone smoke tests |
|
|
@@ -46,16 +85,30 @@ appear only when Electron is not packaged.
|
|
|
46
85
|
|
|
47
86
|
| User question | Discovery and launch | Identity/provenance | Mutability | Maturity | Verification |
|
|
48
87
|
| --- | --- | --- | --- | --- | --- |
|
|
49
|
-
| Explain a branch automatically | Present → Present Current Branch or Present Branch or Ref; `bygone present` | Committed merge-base-to-tip range
|
|
88
|
+
| Explain a branch automatically | Present → Present Current Branch or Present Branch or Ref; `bygone present` | Committed merge-base-to-tip range with a deterministic overview first scene and complete Files navigator | Read-only; authored tours retain their authored order | Core | attention-model, presentation launch, generated-tour, and desktop menu tests |
|
|
50
89
|
| Open an authored walkthrough | Present → Open Authored Tour; `bygone present --tour`; VS Code hand-off | Manifest range, scene, step, exact source anchor | Read-only | Core | reproducible example and tour validation tests |
|
|
90
|
+
| Read optional authored review notes | Browser or desktop Present shows an opt-in **Review notes** button when a v3 manifest includes `review` | `baseOid`/`headOid` pins and evidence links into the Final walkthrough | Immutable range; read-only panel; no scores or persisted reviewer state | Local prototype | `examples/bygone-history.bygone`, `test/reviewNotes.test.js`, and manual browser navigation check |
|
|
91
|
+
| Assess authored tour coverage | Coverage indicators in the Present sidebar | Distinct hunks referenced by authored walkthrough anchors; v2/v3 Final walkthrough coverage remains separate from deconstructed Explanation assignment completeness | Read-only authoring diagnostics; generated tours have no authored coverage metric | Advanced authoring | v1/v2/v3 coverage and presenter-host tests |
|
|
51
92
|
| Listen to a generated or authored tour | Narrative Listen controls; Present → Listen to Tour | Existing manifest narrative segmented locally by scene/step and visible sentence | Read-only device TTS; voice/rate preferences remain local; continuous playback follows tour navigation and direct exploration pauses it | Core | narration model/controller and presenter-host tests |
|
|
52
93
|
| Explain a real stack | `stacked-diff` scene | Exact real Git revisions per panel | Read-only | Advanced | `examples/stacked-diff.bygone` |
|
|
53
94
|
| Explain a change in conceptual stages | `deconstructed-diff` scene | Explicitly labeled synthetic explanation stages backed by exact hunk IDs | Read-only | Advanced/experimental authoring | `examples/deconstructed-diff.bygone` |
|
|
54
|
-
| Browse away from the narration | Files
|
|
95
|
+
| Browse away from the narration | Files navigator, change navigation | Browsed file versus active tour focus remain distinct | Read-only; Return to Tour restores narrative focus | Core | tour focus and persistent-anchor tests |
|
|
96
|
+
| Browse commits or build a comparison while reading | Shared Commits navigator in every mode; check revisions, then Compare selected | All commits reachable from the presentation head; separate file-change markers, tour membership, and numbered loaded panels | Read-only snapshots; checkbox draft does not navigate; History preserves revision columns across files | Core | tour-history backend, stable-axis workspace tests, and browser mode-transition checks |
|
|
55
97
|
|
|
56
98
|
Tour authoring remains file/CLI/agent driven. The desktop UI opens and presents
|
|
57
99
|
tours but does not attempt to duplicate schema-aware authoring forms.
|
|
58
100
|
|
|
101
|
+
Tour reading is one continuous document: title, chapter headings, scene
|
|
102
|
+
overviews, and steps. Scrolling the narrative selects the active passage and
|
|
103
|
+
its source evidence; scrolling code does not advance the narrative. The
|
|
104
|
+
sidebar is a collapsible outline with separate disclosure and jump controls.
|
|
105
|
+
Scene overviews are independent reading stops, and each step includes a
|
|
106
|
+
collapsed scene-context disclosure above its text. Opening that disclosure
|
|
107
|
+
does not navigate. Keyboard previous/next follows the same document order;
|
|
108
|
+
History/Compare round-trips restore the passage and reading scroll position.
|
|
109
|
+
There are no title-screen, start-steps, or resume gates. Verification:
|
|
110
|
+
`test/tourReading.test.js` and `standalone/tourReadingSmoke.js`.
|
|
111
|
+
|
|
59
112
|
## VS Code companion
|
|
60
113
|
|
|
61
114
|
| Command | Intended ownership | Current state | Editing contract | Follow-up |
|
|
@@ -78,22 +131,25 @@ VS Code's native Search rather than another bundled ripgrep process.
|
|
|
78
131
|
|
|
79
132
|
| Surface | Purpose | Mutability/maturity |
|
|
80
133
|
| --- | --- | --- |
|
|
81
|
-
| `bygone`, paths, `--diff`, `--history`, `--git-diff`, `review` | Launch Explore sessions | Core launcher; desktop owns writes |
|
|
134
|
+
| `bygone`, paths, `--diff`, `--history`, `--git-diff`, `--read-only`, `review` | Launch Explore sessions | Core launcher; desktop owns writes; `--read-only` is a persisted capability ceiling for that launch |
|
|
82
135
|
| `present` and `present --tour` | Launch Present sessions | Core, read-only presentation |
|
|
83
136
|
| `tour context` | Produce a bounded provider-neutral change dossier | Authoring support, read-only |
|
|
84
|
-
| `tour validate`, `compile`, `schema`, and coverage options | Validate exact evidence and build
|
|
137
|
+
| `tour validate`, `compile`, `schema`, and coverage options | Validate exact evidence and build repository-bound manifests | Advanced authoring, read-only except explicit output files |
|
|
85
138
|
| `completion` | Generate shell completions from the shared command specification | Supporting tooling |
|
|
86
139
|
|
|
87
140
|
## Provenance and mutability vocabulary
|
|
88
141
|
|
|
89
142
|
Use these labels consistently:
|
|
90
143
|
|
|
91
|
-
- **Writable file:** filesystem
|
|
144
|
+
- **Writable file:** filesystem content and a live `WORKTREE` column participating in dirty, undo,
|
|
92
145
|
save, reload, watcher, and refresh behavior.
|
|
146
|
+
- **Read-only file:** live filesystem content intentionally opened with editing
|
|
147
|
+
disabled; external changes and explicit session refresh remain available.
|
|
93
148
|
- **Read-only snapshot:** committed Git, history, tour, or supplied content that
|
|
94
149
|
cannot be replaced or saved over a source file.
|
|
95
150
|
- **INDEX** and **WORKTREE:** repository work states; do not describe them as
|
|
96
|
-
commits.
|
|
151
|
+
commits. `INDEX` is a read-only snapshot; `WORKTREE` is live and writable in
|
|
152
|
+
revision comparisons unless the launch uses `--read-only`.
|
|
97
153
|
- **Explanation stage:** synthetic deconstructed content; never imply that it
|
|
98
154
|
is a real commit.
|
|
99
155
|
- **Real revision:** a panel resolved from an exact Git object identity.
|
package/docs/releasing.md
CHANGED
|
@@ -23,7 +23,6 @@ Publish everything:
|
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
export BYGONE_HOMEBREW_TAP=/path/to/homebrew-tap
|
|
26
|
-
npm whoami
|
|
27
26
|
gh auth status
|
|
28
27
|
npm run release:publish
|
|
29
28
|
```
|
|
@@ -34,10 +33,9 @@ aborts unless the worktree is clean and the current branch is `main`, pushes
|
|
|
34
33
|
installs the artifacts locally, then publishes npm, GitHub, and Homebrew.
|
|
35
34
|
The Homebrew tap defaults to the sibling `homebrew-bygone` checkout; set
|
|
36
35
|
`BYGONE_HOMEBREW_TAP` only when the tap is elsewhere.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
passkey prompt.
|
|
36
|
+
Creating the GitHub release pushes the version tag. That tag starts the
|
|
37
|
+
protected Release workflow, which waits for approval and publishes npm through
|
|
38
|
+
OIDC trusted publishing without a long-lived npm token.
|
|
41
39
|
|
|
42
40
|
Upload `bygone-<version>.vsix` from the Visual Studio Marketplace publisher
|
|
43
41
|
page. GitHub OIDC support has merged into `vsce`, but Marketplace has not yet
|
|
@@ -62,12 +60,11 @@ The main scripts are:
|
|
|
62
60
|
- requires a clean `main` worktree
|
|
63
61
|
- pushes `main` and waits for that commit's GitHub Release Check workflow
|
|
64
62
|
- rebuilds and installs the release locally, including a graceful desktop restart
|
|
65
|
-
- logs into npm when needed and pauses immediately before the interactive npm publish challenge
|
|
66
|
-
- publishes npm
|
|
67
63
|
- creates a GitHub release with desktop artifacts
|
|
64
|
+
- triggers the protected GitHub Actions workflow that publishes npm through OIDC
|
|
68
65
|
- updates and pushes the Homebrew tap
|
|
69
66
|
- `npm run release:publish:npm`
|
|
70
|
-
- publishes only the staged npm package
|
|
67
|
+
- manual fallback that publishes only the staged npm package
|
|
71
68
|
|
|
72
69
|
Related packaging commands:
|
|
73
70
|
|
|
@@ -91,17 +88,16 @@ You need accounts on three services:
|
|
|
91
88
|
|
|
92
89
|
### 1. npm
|
|
93
90
|
|
|
94
|
-
This is required for publishing the standalone package.
|
|
91
|
+
This is required for publishing the standalone package. Routine releases use
|
|
92
|
+
npm trusted publishing from GitHub Actions, so no npm token is stored in the
|
|
93
|
+
repository.
|
|
95
94
|
|
|
96
95
|
- Sign up: [npm signup](https://www.npmjs.com/signup)
|
|
97
96
|
- Docs: [npm getting started](https://docs.npmjs.com/getting-started)
|
|
98
97
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
npm login
|
|
103
|
-
npm whoami
|
|
104
|
-
```
|
|
98
|
+
Configure `@davmash/bygone` with a trusted publisher for the
|
|
99
|
+
`davidmashburn/bygone` repository, the `release.yml` workflow, and the
|
|
100
|
+
`npm-publish` environment.
|
|
105
101
|
|
|
106
102
|
### 2. GitHub
|
|
107
103
|
|
|
@@ -165,17 +161,12 @@ This repository should contain the tap structure used by the release script:
|
|
|
165
161
|
- `Formula/`
|
|
166
162
|
- `Casks/`
|
|
167
163
|
|
|
168
|
-
### 1. npm
|
|
169
|
-
|
|
170
|
-
```bash
|
|
171
|
-
npm whoami
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
If that fails:
|
|
164
|
+
### 1. npm trusted publishing
|
|
175
165
|
|
|
176
|
-
|
|
177
|
-
npm
|
|
178
|
-
|
|
166
|
+
The npm package must trust `.github/workflows/release.yml` in
|
|
167
|
+
`davidmashburn/bygone`, scoped to the `npm-publish` environment. The GitHub
|
|
168
|
+
environment should require a reviewer so pushing a tag does not publish by
|
|
169
|
+
itself.
|
|
179
170
|
|
|
180
171
|
### 2. GitHub authentication
|
|
181
172
|
|
|
@@ -305,9 +296,11 @@ npm run release:publish
|
|
|
305
296
|
|
|
306
297
|
This runs the full publish path:
|
|
307
298
|
|
|
308
|
-
1. `
|
|
309
|
-
2.
|
|
310
|
-
3.
|
|
299
|
+
1. `gh release create v<version> ... --notes-file CHANGELOG.md`
|
|
300
|
+
2. the pushed tag starts `.github/workflows/release.yml`
|
|
301
|
+
3. after environment approval, Actions validates the tag and package metadata,
|
|
302
|
+
runs `npm run release:check`, and publishes `dist/npm-package` through OIDC
|
|
303
|
+
4. update, commit, and push the Homebrew tap
|
|
311
304
|
|
|
312
305
|
Publish the VS Code extension separately by uploading the already-built
|
|
313
306
|
`bygone-<version>.vsix` through the Marketplace publisher page.
|
|
@@ -344,10 +337,13 @@ The repository-local packaging notes are also in:
|
|
|
344
337
|
|
|
345
338
|
Check:
|
|
346
339
|
|
|
347
|
-
- `npm whoami`
|
|
348
340
|
- `gh auth status`
|
|
349
341
|
- `echo $BYGONE_HOMEBREW_TAP`
|
|
350
342
|
|
|
343
|
+
If the GitHub release succeeds but npm publishing does not, inspect the Release
|
|
344
|
+
workflow and confirm that both the GitHub `npm-publish` environment and npm
|
|
345
|
+
trusted-publisher configuration match `.github/workflows/release.yml`.
|
|
346
|
+
|
|
351
347
|
### VS Code publishing is not automated
|
|
352
348
|
|
|
353
349
|
This is currently intentional. `vsce` has merged GitHub OIDC support, but the
|
|
@@ -1,10 +1,52 @@
|
|
|
1
|
-
version:
|
|
1
|
+
version: 3
|
|
2
2
|
title: How Bygone learned to review a branch
|
|
3
3
|
sourceUrl: https://github.com/davidmashburn/bygone/commit/75b6d7c0303124ec314aa790d6b808c4a9d9ea0e
|
|
4
4
|
range:
|
|
5
5
|
base: 292fe9248c5c49f762489dc688296fc100d120bc
|
|
6
6
|
head: 75b6d7c0303124ec314aa790d6b808c4a9d9ea0e
|
|
7
7
|
|
|
8
|
+
review:
|
|
9
|
+
baseOid: 292fe9248c5c49f762489dc688296fc100d120bc
|
|
10
|
+
headOid: 75b6d7c0303124ec314aa790d6b808c4a9d9ea0e
|
|
11
|
+
items:
|
|
12
|
+
- id: merge-base-contract
|
|
13
|
+
kind: concept
|
|
14
|
+
title: Merge-base defines the reviewed history
|
|
15
|
+
body: "resolveBranchReviewRange selects one merge base, then derives changed paths and commits from that boundary. The review is the merge-base-to-head story."
|
|
16
|
+
evidence:
|
|
17
|
+
- sceneId: review-pipeline
|
|
18
|
+
stepId: establish-boundary
|
|
19
|
+
- sceneId: review-pipeline
|
|
20
|
+
stepId: lock-the-semantics
|
|
21
|
+
- id: git-directory-boundary
|
|
22
|
+
kind: boundary
|
|
23
|
+
title: Git-specific work ends at two trees
|
|
24
|
+
body: "The Git layer discovers the range and materializes snapshots; FileComparator then hands those temporary roots to the ordinary directory comparison. A reader needs the range model before the reusable directory surface is meaningful."
|
|
25
|
+
evidence:
|
|
26
|
+
- sceneId: review-pipeline
|
|
27
|
+
stepId: make-range-portable
|
|
28
|
+
- sceneId: review-pipeline
|
|
29
|
+
stepId: turn-history-into-files
|
|
30
|
+
- sceneId: review-pipeline
|
|
31
|
+
stepId: reuse-the-diff-surface
|
|
32
|
+
- id: setup-owns-complexity
|
|
33
|
+
kind: tradeoff
|
|
34
|
+
title: Review support moves complexity into range and snapshot setup
|
|
35
|
+
body: "Reusing directory comparison avoids a branch-only renderer, while range resolution and temporary snapshot creation add complexity before that renderer."
|
|
36
|
+
evidence:
|
|
37
|
+
- sceneId: review-pipeline
|
|
38
|
+
stepId: establish-boundary
|
|
39
|
+
- sceneId: review-pipeline
|
|
40
|
+
stepId: turn-history-into-files
|
|
41
|
+
- sceneId: review-pipeline
|
|
42
|
+
stepId: reuse-the-diff-surface
|
|
43
|
+
- id: partial-materialization-cleanup
|
|
44
|
+
kind: question
|
|
45
|
+
title: Does a failed materialization clean up both temporary roots?
|
|
46
|
+
body: "The focused walkthrough follows the successful handoff, but it does not prove cleanup when git show fails after one root has been partially populated."
|
|
47
|
+
evidence: []
|
|
48
|
+
nextCheck: "Inspect the preparation-error path and add a fault-injection fixture only if a failed materialization leaves either temporary root behind."
|
|
49
|
+
|
|
8
50
|
anchors:
|
|
9
51
|
choose-merge-base:
|
|
10
52
|
file: src/gitComparison.ts
|
|
@@ -47,34 +89,34 @@ chapters:
|
|
|
47
89
|
scenes:
|
|
48
90
|
- id: review-pipeline
|
|
49
91
|
title: From Git history to a visual workspace
|
|
50
|
-
summary: Follow the branch-review feature
|
|
92
|
+
summary: Follow the branch-review feature from its historical boundary to the reusable comparison surface and the test that fixes its semantics.
|
|
51
93
|
bullets:
|
|
52
|
-
-
|
|
53
|
-
- Git-specific
|
|
54
|
-
-
|
|
94
|
+
- Resolve the range before materializing files for the comparison.
|
|
95
|
+
- Keep Git-specific preparation at the temporary-tree handoff.
|
|
96
|
+
- Read the fixture as a proof of range semantics, separate from the renderer.
|
|
55
97
|
tags: [git, architecture, dogfood]
|
|
56
98
|
takeaway: Bygone reviews its own history using the same boundary it introduced in this commit.
|
|
57
99
|
steps:
|
|
58
100
|
- id: establish-boundary
|
|
59
101
|
title: Establish the historical boundary
|
|
60
|
-
body:
|
|
102
|
+
body: Using the unique merge base makes the review start at branch divergence; the resolver rejects multiple merge bases instead of silently choosing one.
|
|
61
103
|
focus: choose-merge-base
|
|
62
104
|
- id: make-range-portable
|
|
63
105
|
title: Describe the review as data
|
|
64
|
-
body:
|
|
106
|
+
body: BranchReviewRange carries changed paths and commits once, so the renderer can consume prepared history rather than rediscovering Git state.
|
|
65
107
|
focus: describe-range
|
|
66
108
|
- id: turn-history-into-files
|
|
67
109
|
title: Materialize two review trees
|
|
68
|
-
body:
|
|
110
|
+
body: Materializing only changed paths creates the two snapshots the diff can read; the temporary roots add setup and cleanup around the read-only comparison.
|
|
69
111
|
focus: materialize-boundary
|
|
70
112
|
connection: range-to-snapshot
|
|
71
113
|
- id: reuse-the-diff-surface
|
|
72
114
|
title: Reuse directory comparison
|
|
73
|
-
body:
|
|
115
|
+
body: Passing the roots to compareDirectories keeps branch review on the established directory workflow, so navigation and drill-down are reused instead of implemented in a branch-specific renderer.
|
|
74
116
|
focus: open-review-surface
|
|
75
117
|
connection: snapshot-to-surface
|
|
76
118
|
- id: lock-the-semantics
|
|
77
119
|
title: Prove the range starts at divergence
|
|
78
|
-
body: The
|
|
120
|
+
body: The fixture asserts the merge base, changed paths, and commit count; renderer behavior needs separate checks.
|
|
79
121
|
focus: prove-merge-base
|
|
80
122
|
connection: semantics-to-proof
|