@davmash/bygone 0.8.16 → 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.
@@ -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: 2
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 jumping directly among the authored
124
- explanation, real revisions, the final endpoint diff, and live Git history.
125
- Only modes at or above the tour's maximum authored depth appear. A two-panel
126
- stack therefore collapses into Final diff rather than creating a duplicate
127
- Revisions mode. Each mode retains its own location; switching back without
128
- navigating restores that location exactly.
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 version 2, every deconstructed scene must also provide the regular
136
- endpoint tour's `steps` and an explicit `stack` of the real revisions with the
137
- same base and final endpoints. Final diff presents those authored walkthrough
138
- steps, while Explanation stages presents the synthetic reconstruction. Bygone
139
- does not infer the stack from Git history. Every changed hunk must be assigned
140
- once or explicitly excluded.
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. Add a connection only when it explains a meaningful relationship between two pieces of evidence.
34
- 7. Write the `.bygone` source.
35
- 8. Validate it and repair every reported problem:
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 annotation explain why the focused code matters; do not merely paraphrase its syntax.
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
- Create a Bygone change tour for the supplied Git range.
73
-
74
- First identify the central reviewer questions and the concrete code evidence for each answer.
75
- Then produce YAML conforming to the schema returned by `bygone tour schema`.
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. Next advances to the recommended file.
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 Files rail is independent of the narrative. Browsing another file keeps
17
- the active tour anchor visible and offers **Return to Tour** to restore the
18
- scene's intended focus.
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** in the narrative header or **Present → Listen to Tour** in the
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.
@@ -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 an independent changed-files rail.
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 rail | Read-only; authored tours retain their authored order | Core | attention-model, presentation launch, generated-tour, and desktop menu tests |
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
- | Assess authored tour coverage | Coverage indicators in the Present sidebar | Distinct hunks referenced by authored walkthrough anchors; v2 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 coverage and presenter-host 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 |
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 rail, 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 |
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 |