@davmash/bygone 0.8.16 → 0.9.4
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 +47 -0
- package/cli/present.js +50 -9
- package/cli/tourFile.js +9 -0
- package/cli/tourHistory.js +359 -16
- package/docs/change-tour-format.md +168 -16
- package/docs/generating-change-tours.md +70 -17
- package/docs/present.md +126 -5
- package/docs/product-surface.md +56 -4
- package/examples/bygone-history.bygone +52 -10
- package/examples/navigation-lab.bygone.yaml +420 -0
- package/media/webview.css +1 -1
- package/media/webview.js +557 -186
- package/out/changeTour.js +423 -44
- package/out/standalone-main.js +5167 -1156
- package/out/tourCoverage.js +432 -49
- package/package.json +2 -2
- package/schemas/change-tour-source.schema.json +166 -2
- package/skills/pr-tour-guide/SKILL.md +104 -13
- package/standalone/index.html +5 -5
- package/web/index.html +111 -84
- package/web/presenter.css +564 -231
- package/web/web-host.js +374 -5
|
@@ -8,10 +8,56 @@ suffix, and explicitly supplied files are validated by content rather than
|
|
|
8
8
|
rejected by extension.
|
|
9
9
|
|
|
10
10
|
An authored source is Git-backed, not portable: resolving refs and anchors
|
|
11
|
-
requires the corresponding local repository and Git objects. Version 2
|
|
11
|
+
requires the corresponding local repository and Git objects. Version 2 and 3
|
|
12
12
|
compiled manifests remain bound to that repository so the presenter can load
|
|
13
13
|
live file history. Version 1 manifests remain readable as legacy portable
|
|
14
|
-
artifacts, without the mode switcher.
|
|
14
|
+
artifacts, without the mode switcher. Version 3 adds independent authored
|
|
15
|
+
tours, scene directory overviews, and review notes; versions 1 and 2 remain
|
|
16
|
+
accepted without those fields.
|
|
17
|
+
|
|
18
|
+
## Version 3 stability and compatibility
|
|
19
|
+
|
|
20
|
+
Format version **3 is the stable authoring contract for Bygone 0.9.2**. The
|
|
21
|
+
application version (`0.9.2`) and document version (`version: 3`) are separate:
|
|
22
|
+
UI fixes, navigation changes, and application patch releases do not require
|
|
23
|
+
rewriting a tour or incrementing its format version.
|
|
24
|
+
|
|
25
|
+
| Document version | Reader support in 0.9.2 | Contract |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| 1 | Supported | Legacy source and portable compiled manifests |
|
|
28
|
+
| 2 | Supported | Repository-bound manifests, real revision stacks, and endpoint walkthroughs |
|
|
29
|
+
| 3 | Supported; use for new sources | Version 2 capabilities plus independent authored tours, scene directory overviews, and review notes |
|
|
30
|
+
| Greater than 3 | Rejected with an upgrade message | Never interpreted as version 3 |
|
|
31
|
+
|
|
32
|
+
The v3 field names, types, required fields, enum values, and meanings are fixed
|
|
33
|
+
by the [source schema](../schemas/change-tour-source.schema.json) and the
|
|
34
|
+
semantic rules in this document. Valid v3 sources and compiled manifests must
|
|
35
|
+
remain readable by later compatible releases; required fields must not be
|
|
36
|
+
added, existing fields removed, or evidence and mode semantics repurposed under
|
|
37
|
+
the same format number. New syntax that existing v3 readers cannot accept
|
|
38
|
+
requires a new document version, even when the new field is optional. Fixes
|
|
39
|
+
that enforce the documented contract do not make malformed documents valid.
|
|
40
|
+
|
|
41
|
+
The source is strict: unknown properties are errors, not an extension
|
|
42
|
+
mechanism. JSON Schema covers document structure; `bygone tour validate`
|
|
43
|
+
additionally checks IDs and references, Git objects, unique anchor matches,
|
|
44
|
+
stage coverage, comparison endpoints, and review freshness. A schema-only pass
|
|
45
|
+
does not prove that the source compiles. Validate against the intended local
|
|
46
|
+
repository before sharing a tour.
|
|
47
|
+
|
|
48
|
+
Keep authored YAML as the editable source. Compiled JSON is generated evidence,
|
|
49
|
+
not a second authoring syntax; v2/v3 manifests retain repository identity and
|
|
50
|
+
resolved Git objects. Stable format support does not make missing repositories
|
|
51
|
+
or pruned objects available, and does not promise byte-identical generated
|
|
52
|
+
timestamps or presentation layout. Pin full commit IDs in `range` when the
|
|
53
|
+
underlying comparison must stay fixed.
|
|
54
|
+
|
|
55
|
+
The compatibility checks cover v1/v2 acceptance, v3-only field gates,
|
|
56
|
+
independent authored modes, overview evidence and fallback semantics, review
|
|
57
|
+
freshness, and rejection of future versions. Run `npm test` before releasing a
|
|
58
|
+
parser, compiler, or schema change; update those checks with any new contract.
|
|
59
|
+
|
|
60
|
+
## Opening and compiling a source
|
|
15
61
|
|
|
16
62
|
Packaged macOS builds register `.bygone` with Bygone, allowing a presentation
|
|
17
63
|
inside its repository to open directly from Finder. Windows and Linux builds
|
|
@@ -40,10 +86,71 @@ The optional `windowTitle` sets the native window title for the tour presenter.
|
|
|
40
86
|
Use a short label such as a pull request number when several tours may be open at
|
|
41
87
|
once. When omitted, the presenter falls back to `title`, then a generic tour label.
|
|
42
88
|
|
|
89
|
+
## Independent authored tours
|
|
90
|
+
|
|
91
|
+
Version 3 can supply `tours.historical.chapters` and
|
|
92
|
+
`tours.deconstructed.chapters`. Each uses the chapter and scene structure below,
|
|
93
|
+
with the document's shared range, anchors, and connections. This lets one file
|
|
94
|
+
explain actual revisions and also teach the change through synthetic stages.
|
|
95
|
+
|
|
96
|
+
The required root `chapters` remain the compatible default tour. When a mode is
|
|
97
|
+
not explicitly supplied, its authored content can come from those chapters:
|
|
98
|
+
real walkthroughs and stacks supply Historical tour; deconstructed scenes supply
|
|
99
|
+
Deconstructed tour. Explicit endpoint walkthrough steps on a deconstructed scene
|
|
100
|
+
can supply Historical content, but a generated revision stack alone cannot.
|
|
101
|
+
|
|
102
|
+
Historical tour accepts walkthroughs and real stacked diffs, including a stack
|
|
103
|
+
with just two endpoints. It rejects synthetic deconstructed scenes.
|
|
104
|
+
Deconstructed tour requires at least one deconstructed scene; other walkthrough
|
|
105
|
+
scenes can add context and proof. Its synthetic stages do not need a matching
|
|
106
|
+
authored historical step. Both modes retain their own chapter, scene, and step
|
|
107
|
+
order; the presenter does not infer cross-tour mappings.
|
|
108
|
+
|
|
109
|
+
See `examples/navigation-lab.bygone.yaml` for both tours in one file, and
|
|
110
|
+
[presentation navigation](./present.md#explore-and-follow-tours) for History and
|
|
111
|
+
Compare.
|
|
112
|
+
|
|
113
|
+
## Scene directory overviews
|
|
114
|
+
|
|
115
|
+
In version 3, an authored walkthrough, stacked-diff, or deconstructed-diff scene may carry a
|
|
116
|
+
directory overview for the presenter to render alongside the current scene:
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
overview:
|
|
120
|
+
kind: directory-diff
|
|
121
|
+
path: web
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`path` is optional and is relative to the repository root. Omit it or use `.`
|
|
125
|
+
for the root directory. Absolute paths, backslashes, and `..` path segments are
|
|
126
|
+
rejected. The compiler preserves this evidence on the corresponding compiled
|
|
127
|
+
scene in the root tour and any authored mode or fallback that contains it; it
|
|
128
|
+
does not create a separate scene kind.
|
|
129
|
+
|
|
130
|
+
The comparison is stable regardless of the saved step. Stacked and deconstructed
|
|
131
|
+
scenes default to their first and last panels and compare only files materialized
|
|
132
|
+
in those scene panels. Walkthroughs use the review's base-to-head comparison and
|
|
133
|
+
its tour files, including omitted entries. Any of the three scene types can
|
|
134
|
+
scope the overview to a subdirectory. For a narrower authored comparison, add:
|
|
135
|
+
|
|
136
|
+
```yaml
|
|
137
|
+
comparison:
|
|
138
|
+
from: before
|
|
139
|
+
to: hierarchy
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Place `comparison` inside `overview`. For stacked scenes, endpoints are `stack`
|
|
143
|
+
entry IDs. For deconstructed scenes, use `explanation-baseline` or
|
|
144
|
+
`explanation-stage-<stage-id>`. Both endpoints must exist and differ. Walkthroughs
|
|
145
|
+
reject this option. When a deconstructed scene produces a fallback Historical
|
|
146
|
+
or walkthrough view, its synthetic endpoints are not mapped to real revisions:
|
|
147
|
+
the fallback retains the directory scope and uses its default full comparison.
|
|
148
|
+
Use an explicit authored Historical scene to choose a narrower real comparison.
|
|
149
|
+
|
|
43
150
|
## Structure
|
|
44
151
|
|
|
45
152
|
```yaml
|
|
46
|
-
version:
|
|
153
|
+
version: 3
|
|
47
154
|
title: A reviewer-facing title
|
|
48
155
|
windowTitle: PR-1234
|
|
49
156
|
sourceUrl: https://example.test/pull/123
|
|
@@ -80,7 +187,7 @@ chapters:
|
|
|
80
187
|
steps:
|
|
81
188
|
- id: persist-first
|
|
82
189
|
title: Persist the recommendation
|
|
83
|
-
body: This exact line establishes the ordering guarantee.
|
|
190
|
+
body: This exact line establishes the ordering guarantee before the side effect runs.
|
|
84
191
|
focus: durable-decision
|
|
85
192
|
connection: contract-to-write
|
|
86
193
|
requirement:
|
|
@@ -91,6 +198,49 @@ chapters:
|
|
|
91
198
|
confidence: high
|
|
92
199
|
```
|
|
93
200
|
|
|
201
|
+
Scene fields provide framing: `summary` states the scene's purpose, `bullets`
|
|
202
|
+
give supporting points, and `takeaway` states what the reader should retain.
|
|
203
|
+
Step `body` is the canonical place for the evidence-specific explanation,
|
|
204
|
+
including why the focused code matters and any rationale or tradeoff that the
|
|
205
|
+
source supports. Keeping that explanation beside `focus` lets the reader assess
|
|
206
|
+
the claim while the code is visible and avoids repeating it in scene framing.
|
|
207
|
+
|
|
208
|
+
The source schema has no ad hoc `notes` field. In v3, use the top-level `review`
|
|
209
|
+
block below for evidence-linked review observations and unresolved questions;
|
|
210
|
+
do not present those questions as settled step rationale.
|
|
211
|
+
|
|
212
|
+
## Review notes
|
|
213
|
+
|
|
214
|
+
The optional v3 `review` block records authored interpretation separately from
|
|
215
|
+
the narrative and deterministic evidence. It contains `baseOid`, `headOid`, and
|
|
216
|
+
a nonempty `items` array. Both OIDs must be full 40- or 64-character hexadecimal
|
|
217
|
+
Git IDs, matching the resolved **merge base** and head, respectively. A changed
|
|
218
|
+
range makes the review stale and compilation fails rather than silently
|
|
219
|
+
carrying the conclusions forward.
|
|
220
|
+
|
|
221
|
+
Each item has a unique nonblank `id`, a `kind` (`concept`, `boundary`,
|
|
222
|
+
`tradeoff`, or `question`), nonblank `title` and `body`, and an `evidence` array
|
|
223
|
+
of `{ sceneId, stepId }` references to endpoint walkthrough steps in the root
|
|
224
|
+
`chapters` (not scenes defined only inside an independent `tours` mode).
|
|
225
|
+
Synthetic stage IDs and stacked-diff step IDs are not walkthrough evidence.
|
|
226
|
+
Claims require at least one reference. Questions may use an empty evidence
|
|
227
|
+
array but require a nonblank `nextCheck`; other items may also supply it.
|
|
228
|
+
Validation confirms the references, not the truth of an author's claim or the
|
|
229
|
+
state of an external deployment.
|
|
230
|
+
|
|
231
|
+
For example, add this item to `review.items` alongside the structure above:
|
|
232
|
+
|
|
233
|
+
```yaml
|
|
234
|
+
- id: check-caller
|
|
235
|
+
kind: question
|
|
236
|
+
title: Is the caller compatible?
|
|
237
|
+
body: The source shows persistence, but the deployed caller has not been checked.
|
|
238
|
+
evidence:
|
|
239
|
+
- sceneId: decision-flow
|
|
240
|
+
stepId: persist-first
|
|
241
|
+
nextCheck: Verify the deployed caller contract against this exact head revision.
|
|
242
|
+
```
|
|
243
|
+
|
|
94
244
|
## Requirements
|
|
95
245
|
|
|
96
246
|
A walkthrough step may carry an optional `requirement` that names the stated
|
|
@@ -120,24 +270,26 @@ results search the compiled base and head snapshots, open the exact file and
|
|
|
120
270
|
side, and preserve **Return to tour** so exploration does not lose authored
|
|
121
271
|
context.
|
|
122
272
|
|
|
123
|
-
Version 2 tours show one mode control for
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
273
|
+
Version 2 and 3 tours show one mode control for moving among live Git History,
|
|
274
|
+
arbitrary Compare ranges, and the authored tours available in that manifest.
|
|
275
|
+
Previously compiled version 2 deconstructed tours retain their authored final
|
|
276
|
+
endpoint walkthrough as **Final tour** beside **Deconstructed tour**. Other
|
|
277
|
+
version 2 tours appear as **Historical tour**, while their endpoint comparison
|
|
278
|
+
remains available through **Final diff** in Compare. Each mode retains its own
|
|
279
|
+
location; switching back restores that location exactly.
|
|
129
280
|
|
|
130
281
|
Use a walkthrough by default. Use a [stacked-diff example](../examples/stacked-diff.bygone)
|
|
131
282
|
only when every panel is a real selected Git revision. Use a
|
|
132
283
|
[deconstructed-diff example](../examples/deconstructed-diff.bygone) when
|
|
133
284
|
the teaching order is clearer than the real commit history; its cumulative
|
|
134
285
|
panels are synthetic explanation stages and must never be described as
|
|
135
|
-
commits. In
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
286
|
+
commits. In versions 2 and 3, a `deconstructed-diff` scene in root `chapters`
|
|
287
|
+
requires a real `stack` with the same base and final endpoints and nonempty
|
|
288
|
+
walkthrough `steps` for compatibility. In version 3, a scene authored inside
|
|
289
|
+
`tours.deconstructed` may omit both because that tour is synthetic by design.
|
|
290
|
+
Explicit `tours.historical` content supplies its own explanation of real
|
|
291
|
+
revisions. Bygone does not infer a real stack from Git history. Every changed
|
|
292
|
+
hunk must be assigned once or explicitly excluded.
|
|
141
293
|
|
|
142
294
|
See [Bygone's self-referencing history tour](../examples/bygone-history.bygone) for a complete walkthrough that pins and explains the commit where branch review was introduced.
|
|
143
295
|
|
|
@@ -30,9 +30,10 @@ The skill documents how to install Bygone itself when the CLI is missing.
|
|
|
30
30
|
3. Identify the small set of reviewer questions that explain why the change exists and how it works.
|
|
31
31
|
4. Arrange those questions into conceptual chapters rather than filename order.
|
|
32
32
|
5. Attach every walkthrough step to an exact snippet in either the base or head revision.
|
|
33
|
-
6.
|
|
34
|
-
7.
|
|
35
|
-
8.
|
|
33
|
+
6. Put the reason the focused code matters, including any evidence-grounded tradeoff, in that step's `body`.
|
|
34
|
+
7. Add a connection only when it explains a meaningful relationship between two pieces of evidence.
|
|
35
|
+
8. Write the `.bygone` source.
|
|
36
|
+
9. Validate it and repair every reported problem:
|
|
36
37
|
|
|
37
38
|
```sh
|
|
38
39
|
bygone tour validate review.bygone --json
|
|
@@ -53,10 +54,12 @@ Use `bygone tour schema` to print the current JSON Schema. The checked-in schema
|
|
|
53
54
|
- Lead with contracts, invariants, or architectural boundaries before their consumers.
|
|
54
55
|
- Pair behavior with the tests or evidence that prove it.
|
|
55
56
|
- Keep mechanical, generated, and lockfile changes out of the authored narrative unless they alter the reviewer’s conclusion; they remain visible in the complete Files rail.
|
|
56
|
-
- Make each
|
|
57
|
+
- Make each step body explain why the focused code matters, including a concise rationale or tradeoff when the source supports one; do not merely paraphrase its syntax.
|
|
58
|
+
- Use scene summary, bullets, and takeaway for the scene's purpose and retained point. Do not repeat step bodies there when the step already carries the explanation.
|
|
57
59
|
- Avoid claims about runtime behavior, safety, or intent that have no linked evidence.
|
|
58
60
|
- Use connections sparingly. A connection should answer “how are these two facts related?”
|
|
59
61
|
- Preserve access to the complete change instead of presenting the tour as exhaustive review.
|
|
62
|
+
- In a version 3 source, keep unresolved questions and review decisions in the top-level `review` block rather than presenting them as settled scene narration.
|
|
60
63
|
|
|
61
64
|
## Anchor rules
|
|
62
65
|
|
|
@@ -68,20 +71,70 @@ Use `bygone tour schema` to print the current JSON Schema. The checked-in schema
|
|
|
68
71
|
|
|
69
72
|
## Suggested generation prompt
|
|
70
73
|
|
|
74
|
+
The missing-tour buttons in History and Compare supply a short handoff like:
|
|
75
|
+
|
|
71
76
|
```text
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
Requirements:
|
|
78
|
-
- pin the exact base and head commits;
|
|
79
|
-
- organize the narrative by concepts, not filenames;
|
|
80
|
-
- link every step to a unique source snippet;
|
|
81
|
-
- connect code locations only when the relationship adds explanatory value;
|
|
82
|
-
- include behavior and its proof;
|
|
83
|
-
- leave secondary files to Bygone's complete Files rail;
|
|
84
|
-
- run `bygone tour validate <file> --json` and repair all errors before finishing.
|
|
77
|
+
Read and follow the Bygone tour skill at /path/to/SKILL.md.
|
|
78
|
+
Create a v3 deconstructed tour for /path/to/repository, from <base OID> to <head OID>.
|
|
79
|
+
Scope: <selected paths, or the whole repository>.
|
|
80
|
+
Additional context: …
|
|
85
81
|
```
|
|
86
82
|
|
|
83
|
+
The desktop supplies the actual installed Markdown path; the instructions are
|
|
84
|
+
outside the application archive so local coding agents can read them. Use
|
|
85
|
+
**Read instructions** to inspect the Markdown, **Save an editable copy** to fork
|
|
86
|
+
it, and **Use my copy** after editing your file or adding project-specific context.
|
|
87
|
+
Re-select a file after editing it to refresh the displayed instructions. Copies
|
|
88
|
+
belong to you and are not overwritten by application updates.
|
|
89
|
+
|
|
90
|
+
Browser prompts refer to an attachment instead of inventing a local filesystem
|
|
91
|
+
path. Download the Markdown and attach it with the prompt. Do the same when using
|
|
92
|
+
a desktop prompt with an agent that cannot access local files. The UI never
|
|
93
|
+
invokes an agent automatically. Edited prompt drafts survive instruction changes;
|
|
94
|
+
use **Reset prompt** to regenerate their file reference and workspace context.
|
|
95
|
+
|
|
87
96
|
The generated prose remains a proposal. Validation proves that its evidence exists and is reproducible; a reviewer must still judge whether its interpretation is correct.
|
|
97
|
+
|
|
98
|
+
## Optional review notes
|
|
99
|
+
|
|
100
|
+
A version 3 authored source may add a top-level `review` block when a reviewer needs a
|
|
101
|
+
small set of concepts, boundaries, tradeoffs, or open questions alongside the
|
|
102
|
+
walkthrough. This is opt-in: the Present header shows a **Review notes** button
|
|
103
|
+
only when the compiled manifest includes review notes, and the button opens a
|
|
104
|
+
read-only panel. The panel is an authored interpretation layer; its linked
|
|
105
|
+
scene/step evidence is checked, while its conclusions remain claims for the
|
|
106
|
+
reviewer to assess. The complete Files rail remains available and unchanged.
|
|
107
|
+
|
|
108
|
+
Review notes pin the exact range they describe:
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
review:
|
|
112
|
+
baseOid: 292fe9248c5c49f762489dc688296fc100d120bc
|
|
113
|
+
headOid: 75b6d7c0303124ec314aa790d6b808c4a9d9ea0e
|
|
114
|
+
items:
|
|
115
|
+
- id: range-contract
|
|
116
|
+
kind: concept
|
|
117
|
+
title: The range has one historical boundary
|
|
118
|
+
body: The note explains the invariant a reviewer should keep in mind.
|
|
119
|
+
evidence:
|
|
120
|
+
- sceneId: review-pipeline
|
|
121
|
+
stepId: establish-boundary
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Each item uses one of `concept`, `boundary`, `tradeoff`, or `question`.
|
|
125
|
+
Concept, boundary, and tradeoff items need at least one link to an existing
|
|
126
|
+
walkthrough scene and step. A question may leave `evidence` empty, but it must
|
|
127
|
+
include a `nextCheck` describing the follow-up that would resolve it. Evidence
|
|
128
|
+
resolves against the **Final walkthrough**. If the reader is in history or a
|
|
129
|
+
revisions view, following an evidence link first returns to that final range
|
|
130
|
+
before selecting the scene and step.
|
|
131
|
+
|
|
132
|
+
The `baseOid` pin is the resolved merge-base OID, which may differ from the
|
|
133
|
+
requested base ref; `headOid` is the resolved head OID. Both pins must match
|
|
134
|
+
the resolved range. Compilation rejects a review whose pins describe a changed
|
|
135
|
+
range, and imported manifests reject a review whose pins do not match the
|
|
136
|
+
manifest range. `tour validate` checks the shape, OIDs, and scene/step
|
|
137
|
+
grounding of review notes; it does not verify that an authored interpretation
|
|
138
|
+
is semantically correct. It also does not run or attest to external checks such
|
|
139
|
+
as tests, CI, or the `nextCheck` follow-up. Those claims belong in the note only
|
|
140
|
+
when the author has evidence for them.
|
package/docs/present.md
CHANGED
|
@@ -9,25 +9,124 @@ source evidence while keeping the complete changed-file set available.
|
|
|
9
9
|
reading order for the committed merge-base-to-tip range. It begins with a
|
|
10
10
|
change overview that reports range size, recommends a **Start here** file when
|
|
11
11
|
the evidence supports one, and separates **Pay attention** from **Usually
|
|
12
|
-
skip** first-pass reading hints.
|
|
12
|
+
skip** first-pass reading hints. Continue through the reading flow to reach
|
|
13
|
+
the recommended file.
|
|
13
14
|
- **Open Authored Tour…** or `bygone present --tour path.bygone` opens a
|
|
14
15
|
narrative whose anchors have been compiled to exact source locations.
|
|
15
16
|
|
|
16
|
-
The
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
The left navigator switches directly among **Tour**, **Files**, and **Commits**;
|
|
18
|
+
only one of those lists is visible at a time. The Tour outline has independently
|
|
19
|
+
collapsible chapters and scenes; selecting a title jumps to that reading stop
|
|
20
|
+
without changing which sections are expanded.
|
|
21
|
+
|
|
22
|
+
The reading panel flows continuously through the tour title, chapters, scene
|
|
23
|
+
overviews, and steps. Scroll the narrative or use keyboard navigation to move
|
|
24
|
+
through that order; the corresponding code evidence follows. Scrolling the code
|
|
25
|
+
does not advance the narrative. Each scene overview is a distinct stop with its
|
|
26
|
+
supporting points and takeaway. Each step keeps a collapsed **Scene context**
|
|
27
|
+
disclosure above its title and explanation. Expanding that disclosure does not
|
|
28
|
+
move the reading position.
|
|
29
|
+
|
|
30
|
+
A direct link to a step opens that step immediately. The header reports the
|
|
31
|
+
current position as `Scene N of M · Step N of M`, or identifies the overview.
|
|
32
|
+
The reading panel scrolls within a bounded area above the evidence; no Start,
|
|
33
|
+
Resume, or Previous/Next buttons interrupt the flow. Returning from History or
|
|
34
|
+
Compare restores the tour's saved reading position. On narrow screens, the
|
|
35
|
+
navigator becomes an overlay instead of stacking another permanent region
|
|
36
|
+
above the diff.
|
|
37
|
+
|
|
38
|
+
The code view uses the available width for an added or deleted file when only
|
|
39
|
+
one side is present. An empty **Present** view keeps the regular split layout.
|
|
40
|
+
When the current step has an exact source target, **Show in code** refocuses the
|
|
41
|
+
corresponding file and line.
|
|
42
|
+
|
|
43
|
+
Choose **Files** in the navigator to browse the complete change set without
|
|
44
|
+
changing the active tour position. While reading a step, browsing another file
|
|
45
|
+
keeps the active tour anchor visible; **Return to Tour** restores the scene's
|
|
46
|
+
intended focus. While a directory **Overview** is active, files open in its
|
|
47
|
+
comparison and files outside that comparison are disabled. Opening a file keeps
|
|
48
|
+
the overview text and reading position. Select **Overview** above the diff to
|
|
49
|
+
return to the tree, or continue through the narrative to the next step.
|
|
50
|
+
|
|
51
|
+
**Tour details** is available on demand and contains the source link, range,
|
|
52
|
+
change counts, and authored diff-hunk coverage. Coverage describes how much
|
|
53
|
+
code the author anchored; it does not measure your reading progress. The
|
|
54
|
+
header shows your current step. Tour search is likewise disclosed on demand or
|
|
55
|
+
opened by `Cmd/Ctrl+Shift+F`.
|
|
19
56
|
|
|
20
57
|
Generated overview ranking is deterministic for the resolved Git object IDs.
|
|
21
58
|
It never hides files and does not invent an entry point for a test-only,
|
|
22
59
|
lockfile-only, binary, or generated-only change. Authored tours keep their
|
|
23
60
|
authored first scene and order.
|
|
24
61
|
|
|
62
|
+
## Explore and follow tours
|
|
63
|
+
|
|
64
|
+
Version 2 and 3 presentations expose **History**, **Compare**, and the available
|
|
65
|
+
authored tours as direct mode buttons.
|
|
66
|
+
Independent Historical and Deconstructed tours require version 3:
|
|
67
|
+
|
|
68
|
+
- **History** uses all commits reachable from the presentation's head, in stable
|
|
69
|
+
topological order, including commits that did not change the current file.
|
|
70
|
+
Left/right moves through commits; up/down moves through the Files list without
|
|
71
|
+
changing the loaded revisions. History starts with a commit and the preceding
|
|
72
|
+
commit on this axis (or the empty tree). Panel `+` controls expand into
|
|
73
|
+
older or newer revisions; `×` removes a panel, with a minimum of two. Returning
|
|
74
|
+
from Compare restores the expanded History workspace. Activating a loaded
|
|
75
|
+
revision focuses its panel; another revision moves the history window while
|
|
76
|
+
retaining its panel count where older history is available. Shortcuts compare
|
|
77
|
+
the active revision with its parent or the review base.
|
|
78
|
+
- **Compare** shows one panel per selected revision, oldest to newest, with a
|
|
79
|
+
diff between each adjacent pair. The Commit navigator remains available for
|
|
80
|
+
editing a draft selection; **Update comparison** applies it. Activating a loaded revision focuses its
|
|
81
|
+
panel. **Compare selected** includes all changed files. Parent/base shortcuts
|
|
82
|
+
stay on the current file; **Show all changed files** expands the same range.
|
|
83
|
+
**Final diff** selects the review base
|
|
84
|
+
and head across all changed files.
|
|
85
|
+
|
|
86
|
+
All modes share the expanded **Commits** navigator. Check two or more revisions,
|
|
87
|
+
then choose **Compare selected** (or **Update comparison** in Compare).
|
|
88
|
+
Checkboxes edit a shared draft without reloading panels or leaving the tour.
|
|
89
|
+
Numbered badges and highlights identify loaded real revisions independently of
|
|
90
|
+
that draft. A dot marks commits that changed the current file, following renames;
|
|
91
|
+
the **Tour** tag identifies commits in the authored range. Synthetic explanation
|
|
92
|
+
stages are not labeled as Git revisions. Parent/base revisions outside the
|
|
93
|
+
commit list appear as labeled extra rows.
|
|
94
|
+
**Clear selection** unchecks draft revisions without changing modes or panels;
|
|
95
|
+
**Reset selection** selects the real revisions currently loaded in the workspace.
|
|
96
|
+
|
|
97
|
+
- **Historical tour** explains actual revision states, including intermediate
|
|
98
|
+
changes, updates, and reverts. It retains chapters, scenes, steps, and narration.
|
|
99
|
+
- **Deconstructed tour** explains the change through authored, synthetic
|
|
100
|
+
cumulative stages. Its panels are explanation stages, not Git commits.
|
|
101
|
+
|
|
102
|
+
Previously compiled version 2 deconstructed tours retain their separate
|
|
103
|
+
authored **Final tour** alongside the synthetic stages. Existing `mode=final`
|
|
104
|
+
links open that walkthrough; other final-diff links open Compare at the review
|
|
105
|
+
endpoints.
|
|
106
|
+
|
|
107
|
+
Only available authored tours appear. A real revision stack does not by itself
|
|
108
|
+
create a Historical tour. Each mode remembers its own reading or browsing
|
|
109
|
+
position and navigator tab during the session; entering a tour for the first time starts at its
|
|
110
|
+
beginning. Entering History for the first time keeps the file currently being
|
|
111
|
+
inspected; later returns restore History's own file and revision. Switching
|
|
112
|
+
modes does not infer a corresponding step in another tour.
|
|
113
|
+
The active tour position or comparison is also reflected in the URL for refresh.
|
|
114
|
+
|
|
115
|
+
While reading a step, expand **Scene context** beneath it to keep the scene's
|
|
116
|
+
summary, supporting points, and takeaway visible without leaving the step.
|
|
117
|
+
|
|
25
118
|
## Listen to a tour
|
|
26
119
|
|
|
27
|
-
Use **Listen**
|
|
120
|
+
Use **Listen** beside the reading breadcrumb or **Present → Listen to Tour** in the
|
|
28
121
|
desktop app to read the tour aloud with a device voice. Narration works
|
|
29
122
|
offline and does not send tour text to a hosted speech service.
|
|
30
123
|
|
|
124
|
+
Narration controls are available from **‹ Narration** beside the reading
|
|
125
|
+
breadcrumb, with sentence navigation, Stop, voice, and speed. Use the
|
|
126
|
+
right-edge chevron to collapse them again. Listen becomes Pause or Resume
|
|
127
|
+
during playback. The overview opens when its
|
|
128
|
+
text is spoken so the highlighted sentence remains visible.
|
|
129
|
+
|
|
31
130
|
- **Pause/Resume** retains the current sentence; **Stop** clears playback. The
|
|
32
131
|
outer jump controls move one sentence backward or forward within the current
|
|
33
132
|
narration item.
|
|
@@ -64,6 +163,11 @@ conversation. Those remain separate from the offline, device-first baseline.
|
|
|
64
163
|
Tour content is read-only. Author or revise the YAML and recompile it rather
|
|
65
164
|
than editing historical or synthetic panels in the presenter.
|
|
66
165
|
|
|
166
|
+
Version 3 authored tours may expose a separate, read-only **Review notes** panel
|
|
167
|
+
for evidence-linked concepts, boundaries, tradeoffs, and open questions. Scene
|
|
168
|
+
and step narrative should still explain the implemented change and the tradeoffs
|
|
169
|
+
supported by its evidence.
|
|
170
|
+
|
|
67
171
|
## Authoring workflow
|
|
68
172
|
|
|
69
173
|
Use the CLI or the repository's tour-generation skill:
|
|
@@ -79,3 +183,20 @@ See [the change tour format](./change-tour-format.md) and
|
|
|
79
183
|
[LLM-assisted generation](./generating-change-tours.md) for the complete
|
|
80
184
|
contract. Checked-in examples include real stacked revisions and explicitly
|
|
81
185
|
synthetic deconstructed stages.
|
|
186
|
+
|
|
187
|
+
### Directory evidence in an Overview
|
|
188
|
+
|
|
189
|
+
In version 3, an authored scene can show a directory comparison in its Overview. Open a file
|
|
190
|
+
to inspect the same comparison while keeping the overview text, narration, and
|
|
191
|
+
reading position. The **Overview** breadcrumb returns to its file tree;
|
|
192
|
+
scroll through the narrative or select a step in the outline to continue the
|
|
193
|
+
authored explanation.
|
|
194
|
+
|
|
195
|
+
Stacked and Deconstructed scenes use a stable comparison: by default, the first
|
|
196
|
+
and last scene panels, or explicit endpoints chosen by the author. Moving between
|
|
197
|
+
steps never changes this comparison. The column labels identify its endpoints.
|
|
198
|
+
Their overviews include only files materialized in the scene panels.
|
|
199
|
+
Walkthrough scenes use the review's base-to-head comparison and the tour files,
|
|
200
|
+
retaining omitted-file entries. Any scene type can limit the overview to a
|
|
201
|
+
subdirectory. While browsing a file, `Overview › file path` shows where you are,
|
|
202
|
+
with a reminder that narration still describes the overview.
|
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 |
|
|
@@ -46,17 +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 with a deterministic overview first scene and complete Files
|
|
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 |
|
|
51
|
-
|
|
|
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 |
|
|
52
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 |
|
|
53
93
|
| Explain a real stack | `stacked-diff` scene | Exact real Git revisions per panel | Read-only | Advanced | `examples/stacked-diff.bygone` |
|
|
54
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` |
|
|
55
|
-
| 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 |
|
|
56
97
|
|
|
57
98
|
Tour authoring remains file/CLI/agent driven. The desktop UI opens and presents
|
|
58
99
|
tours but does not attempt to duplicate schema-aware authoring forms.
|
|
59
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
|
+
|
|
60
112
|
## VS Code companion
|
|
61
113
|
|
|
62
114
|
| Command | Intended ownership | Current state | Editing contract | Follow-up |
|