thurview 0.6.0 → 0.7.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thurview",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Guided, evidence-anchored reviews of agent-written code. A coding agent authors the review; you read, ask, comment and decide in the browser.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -150,11 +150,18 @@ reader who wanted them would have run those instead.
150
150
  Read every range you anchor from the pinned commit, not the working tree:
151
151
  `git show <head>:<path>` or `git show <base>:<path>`.
152
152
 
153
- ### 4. Start the map
153
+ ### 4. Decide on the map, then start it
154
154
 
155
- Dispatch one sub-agent to write `map.yaml` per
156
- [Software map](references/software-map.md) now, so it works while you write
157
- the document, with this prompt filled in:
155
+ The Map tab answers where the change landed in the system and what sits next
156
+ to it. A change that lands in one place does not raise that question: leave
157
+ `nodes: []`, say why in the handover, and go to step 5. A change that crosses a
158
+ boundary, adds or removes a part, or reaches code the diff does not show, does:
159
+ map it. [Software map](references/software-map.md) makes that call in full, and
160
+ a map that earns nothing is worse for the reader than none.
161
+
162
+ When it earns its place, dispatch one sub-agent to write `map.yaml` per that
163
+ reference now, so it works while you write the document, with this prompt
164
+ filled in:
158
165
 
159
166
  ```text
160
167
  Use the thurview skill's software-map reference (`thurview skill` prints the
@@ -226,6 +233,7 @@ Tell the user, in a few lines and nothing more:
226
233
  - the interface delta `verdict`, in its own words
227
234
  - which theme source you used: the user's request, the project's design
228
235
  system (name the files), or the default skin
236
+ - when the review has no map, why not, in one clause
229
237
  - that you are now waiting for their questions and their decision
230
238
 
231
239
  The page explains its own controls; do not describe them.
@@ -1,8 +1,66 @@
1
1
  # Software map
2
2
 
3
- `map.yaml` describes the repository structure at head, and optionally at
4
- base, as nested nodes. The Map tab lets the reader drill from systems to code
5
- and shows what the change added, removed or touched.
3
+ ## What it is for
4
+
5
+ The Files tab already answers *which lines changed*. The map answers the one
6
+ question no other tab does: **where the change landed in the system, and what
7
+ sits next to it.** A reader opens it to find out which parts the diff touched,
8
+ what those parts connect to, and therefore what could break that the diff
9
+ never mentions — and where to start reading.
10
+
11
+ That makes the map a reviewing instrument, not a picture of the architecture.
12
+ The Map tab reads it that way: parts the change touched are drawn before the
13
+ parts it did not, a part carrying changed files says how many, links into a
14
+ changed part are marked as the seams where two sides can fall out of step, and
15
+ the reader is offered one part to start at. A node that answers none of *where
16
+ did the change land*, *what does it sit next to*, *where do I start* does not
17
+ sit there harmlessly — it makes the ones that do harder to find.
18
+
19
+ Write it, then read it as the reader: does it send someone to the part of the
20
+ change that needs attention faster than scrolling the diff would? If not,
21
+ either cut nodes until it does, or ship no map at all.
22
+
23
+ ## When to ship without a map
24
+
25
+ `nodes: []` is a real answer, not a gap. A map that adds nothing costs the
26
+ reader a tab they open, learn nothing from, and distrust on the next review.
27
+ An absent one costs nothing.
28
+
29
+ Ship without a map when:
30
+
31
+ - The change lands in one place and stays there. The Files tab already says
32
+ where it is; a map would only restate it with rounded corners.
33
+ - Every part you could name is a file the diff already lists. The map would be
34
+ the Files tab with fewer details.
35
+ - The repository has no structure worth naming at review scale — a handful of
36
+ modules with no boundary between them.
37
+
38
+ Author one when:
39
+
40
+ - The change crosses a boundary: one part now calls, stores or serves
41
+ something another part owns.
42
+ - It adds or removes a part, so the shape of the system is different after it.
43
+ - What the change touches is used by code the diff does not show, and the
44
+ reader has to know what that is before judging it.
45
+ - The review is an architecture review. There the map is the subject, not the
46
+ orientation for one.
47
+
48
+ When you skip it, say so in the handover, with the reason, in one line. Silence
49
+ reads as an oversight.
50
+
51
+ ## What to model
52
+
53
+ Model the people, systems, containers, components and code elements a reader
54
+ must hold in mind to judge **this** change. Do not model incidental
55
+ implementation detail, and do not aim for completeness: an exhaustive map and
56
+ no map cost the reader about the same. For a large repository, keep the top
57
+ level small and put detail one level down, so the first screen is a short list
58
+ of places the change could be.
59
+
60
+ ## Schema
61
+
62
+ `map.yaml` describes the repository structure at head, and optionally at base,
63
+ as nested nodes.
6
64
 
7
65
  ```yaml
8
66
  nodes:
@@ -25,17 +83,20 @@ Rules:
25
83
  `app.cli`). Identity is the id; keep ids stable between base and head.
26
84
  - `kind`: `person`, `system`, `container`, `component`, `code`.
27
85
  - `files`: globs relative to the repository root (`*`, `**`, `?`). They link
28
- the node to changed files in the Files tab. A glob matching nothing at the
29
- pinned commit is a warning.
30
- - `anchor`: an anchor id from `data.yaml` that opens representative code.
86
+ the node to changed files in the Files tab, and they are what makes a node
87
+ say how much of the change it holds. A glob matching nothing at the pinned
88
+ commit is a warning.
89
+ - `anchor`: an anchor id from `data.yaml` that opens representative code. Give
90
+ one to every node the change touched; it is the shortest path from the map
91
+ to the code.
31
92
  - Edges reference node ids. Labels are short verbs.
32
93
 
33
- Model the important people, systems, containers, components and code
34
- elements. Do not model incidental implementation detail. For a large
35
- repository, keep the top level small and put detail one level down.
94
+ ## Base and head
36
95
 
37
96
  Work base first, then apply only the structural changes of the diff to get
38
- head. Without `base`, nodes touched by the diff show as changed and nothing
97
+ head. That is what lets the tab say *added*, *removed* and *changed* rather
98
+ than *touched*, and those three words are most of what a reader takes from the
99
+ map. Without `base`, nodes touched by the diff show as changed and nothing
39
100
  shows as added or removed.
40
101
 
41
102
  `thurview publish` validates the map with the document; map errors block