thurview 0.17.0 → 0.17.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/dist/cli.js +7 -3
- package/dist/cli.js.map +1 -1
- package/dist/presence.js +37 -7
- package/dist/presence.js.map +1 -1
- package/dist/ui/app.css +18 -1
- package/dist/ui/app.js +72 -26
- package/dist/ui/app.js.map +3 -3
- package/package.json +1 -1
- package/skills/thurview/SKILL.md +3 -2
- package/skills/thurview/references/components.md +45 -0
- package/skills/thurview/references/document-authoring.md +7 -11
- package/skills/thurview/references/lifecycle.md +7 -4
- package/skills/thurview-design/SKILL.md +24 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thurview",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.2",
|
|
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",
|
package/skills/thurview/SKILL.md
CHANGED
|
@@ -294,8 +294,9 @@ nothing: keep `--timeout` under that limit and run `wait` again on `timeout`.
|
|
|
294
294
|
When the tool can run a command in the background and wake you when it exits,
|
|
295
295
|
run `wait` that way, so the user has the terminal back while they read.
|
|
296
296
|
|
|
297
|
-
While `wait` runs
|
|
298
|
-
|
|
297
|
+
While `wait` runs, and while you answer a `question` it returned, the
|
|
298
|
+
reader's page says an agent is listening; it says the opposite within
|
|
299
|
+
seconds of `wait` returning anything else. Do not loop it to look present: a
|
|
299
300
|
question asked with nobody waiting is queued, not lost, and `thurview`
|
|
300
301
|
reports it as `needsAgent` the next time you run any command in the
|
|
301
302
|
worktree.
|
|
@@ -3,6 +3,51 @@
|
|
|
3
3
|
`data.yaml` holds typed inputs. `review.md` references them by id. Validation
|
|
4
4
|
is strict: an unknown key fails `publish`.
|
|
5
5
|
|
|
6
|
+
## Choosing a shape
|
|
7
|
+
|
|
8
|
+
Pick a component by the question the reader is asking. One shape answers one
|
|
9
|
+
question; used for another it is decoration the reader has to decode.
|
|
10
|
+
|
|
11
|
+
| The reader is asking | Shape |
|
|
12
|
+
| ------------------------------------------------------ | ---------------------------- |
|
|
13
|
+
| in what order, and between whom? | `sequence` |
|
|
14
|
+
| where does the journey go, and where does it branch? | `flow` |
|
|
15
|
+
| how did we get here, and what did the change do to it? | `callstack` |
|
|
16
|
+
| what shape is the data, and who reads or writes it? | `database` |
|
|
17
|
+
| what does this code actually say? | `peek`, or an anchor link |
|
|
18
|
+
| what parts is this system in, and what moved? | `map.yaml`, not a fence |
|
|
19
|
+
| why this way and not the other way? | **none** — prose and anchors |
|
|
20
|
+
|
|
21
|
+
Only the fences in this file render. A `mermaid`, `plantuml`, `dot` or `d2`
|
|
22
|
+
fence is a publish error rather than a plain code block (see
|
|
23
|
+
[Fences thurview does not render](#fences-thurview-does-not-render)); to quote
|
|
24
|
+
diagram source as code, fence it as `text`.
|
|
25
|
+
|
|
26
|
+
### A design choice is a comparison
|
|
27
|
+
|
|
28
|
+
Reach for a diagram of a design and what you draw is the design you picked: the
|
|
29
|
+
happy path, the way it works. That tells the reader what was built and nothing
|
|
30
|
+
about what was rejected or why — which is the question a design document, and a
|
|
31
|
+
review that made a non-obvious call, is there to answer.
|
|
32
|
+
|
|
33
|
+
The vocabulary compares along two axes and no others:
|
|
34
|
+
|
|
35
|
+
- **One call path, base against head.** `callstack`, in a review. Every frame
|
|
36
|
+
it reports as added or removed is checked against the pinned diff, and an
|
|
37
|
+
explainer and a design have no diff, so there both lists must be the same
|
|
38
|
+
frames in the same order. `publish` refuses most of what differs; the rest it
|
|
39
|
+
renders as unchanged, the diff being over the callee anchor alone. Either way
|
|
40
|
+
only the head list reaches the reader, and nothing contrasts.
|
|
41
|
+
- **Structure, before against after.** `map.yaml`'s `base` beside `nodes` —
|
|
42
|
+
the system as it stands against the system the change or the design would
|
|
43
|
+
leave. See [Software map](software-map.md).
|
|
44
|
+
|
|
45
|
+
**Neither axis is option A against option B.** Both put today against the one
|
|
46
|
+
outcome you shipped or propose, so write the choice instead: a short paragraph
|
|
47
|
+
per option, each anchored to the code it would land in or to the constraint
|
|
48
|
+
that rules it out, and the reason the loser lost. That is the argument. A
|
|
49
|
+
picture of the winner is not.
|
|
50
|
+
|
|
6
51
|
## data.yaml
|
|
7
52
|
|
|
8
53
|
```yaml
|
|
@@ -139,17 +139,13 @@ A claim you cannot anchor is a question, not a fact. Write it as one.
|
|
|
139
139
|
|
|
140
140
|
## Diagrams
|
|
141
141
|
|
|
142
|
-
Use
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
Each message, frame, step and operation carries an anchor, so the reader can
|
|
150
|
-
open the code behind every arrow. `mermaid` and the other general diagram
|
|
151
|
-
languages are a publish error rather than a fifth option: thurview draws only
|
|
152
|
-
what it can anchor. See [Components](components.md).
|
|
142
|
+
Use a fenced component for behaviour that prose explains badly, and pick it by
|
|
143
|
+
the question the reader is asking: [Choosing a shape](components.md#choosing-a-shape)
|
|
144
|
+
holds one row per question, including the ones whose answer is no diagram at
|
|
145
|
+
all. Frames, steps and operations carry an anchor, and a message carries an
|
|
146
|
+
anchor or the code it stands for, so the reader can open what is behind the
|
|
147
|
+
arrow. `mermaid` and the other general diagram languages are a publish error
|
|
148
|
+
rather than another option: thurview draws only what it can anchor.
|
|
153
149
|
|
|
154
150
|
Add a diagram only when it materially helps. A document with one good
|
|
155
151
|
sequence diagram beats one with four.
|
|
@@ -111,7 +111,9 @@ While `thurview wait` runs it writes a heartbeat to
|
|
|
111
111
|
it back as one of two sentences: an agent is listening now, or nothing is
|
|
112
112
|
listening and what you send is queued until one checks in. Nothing else
|
|
113
113
|
writes it, so presence is never inferred and never faked. A heartbeat older
|
|
114
|
-
than 15 seconds is a dead `wait`, not an agent.
|
|
114
|
+
than 15 seconds is a dead `wait`, not an agent. When `wait` returns
|
|
115
|
+
`question` it leaves a last heartbeat that holds for ten minutes, since you
|
|
116
|
+
are answering and will wait again; the next `wait` takes over from it.
|
|
115
117
|
|
|
116
118
|
That is why a question asked while you are away is not lost and does not need
|
|
117
119
|
you to sit in `wait`: it is queued, `thurview` reports it as `needsAgent` the
|
|
@@ -130,7 +132,7 @@ thurview threads resolve <threadId> --review <id>
|
|
|
130
132
|
${THURVIEW_HOME:-~/.thurview}/
|
|
131
133
|
├── THURVIEW.md user guidance (optional)
|
|
132
134
|
├── server.json running server, if any
|
|
133
|
-
├── agents/<id>.json heartbeat of a running `wait`,
|
|
135
|
+
├── agents/<id>.json heartbeat of a running `wait`, or of an agent answering what it returned
|
|
134
136
|
├── forge/<id>.json what the forge last said of the change request: head, state, CI, last pass posted
|
|
135
137
|
├── passes/<id>.json the submission `forge pass` wrote, for `forge submit`
|
|
136
138
|
└── reviews/<id>/
|
|
@@ -180,7 +182,8 @@ again.
|
|
|
180
182
|
`thurview threads get <id>` truncates bodies over 1500 characters; pass
|
|
181
183
|
`--full` when the hint says so.
|
|
182
184
|
|
|
183
|
-
While `wait` runs,
|
|
184
|
-
|
|
185
|
+
While `wait` runs, and while you answer the question it returned, the
|
|
186
|
+
reader's page says an agent is listening; when it returns anything else, the
|
|
187
|
+
page says the opposite within seconds. Do not leave `wait`
|
|
185
188
|
running to look present when you are not going to answer, and do not loop it
|
|
186
189
|
to keep a queue drained: the queue survives you, and the reader is told so.
|
|
@@ -173,9 +173,27 @@ finishes is a design nobody decided on. A shape that works:
|
|
|
173
173
|
code that exists at the pinned commit; a plain fence is a sketch. The reader
|
|
174
174
|
tells them apart at a glance, and that difference is the whole trust model.
|
|
175
175
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
176
|
+
**Pick the diagram by the reader's question, or draw none.** The `thurview`
|
|
177
|
+
skill's Components reference carries the table under "Choosing a shape" and the
|
|
178
|
+
shape of every fence. Two rows decide most design documents:
|
|
179
|
+
|
|
180
|
+
- A proposed flow across actors is a `sequence`: give a message a `code:`
|
|
181
|
+
string where the code does not exist yet, and an `anchor:` where it does.
|
|
182
|
+
- **A choice between two designs is not a diagram.** Drawing the one you picked
|
|
183
|
+
shows the reader how it works and never why it beat the other. That argument
|
|
184
|
+
is prose with anchors, under **What was considered and dropped** above.
|
|
185
|
+
|
|
186
|
+
No component renders two options side by side, and a design has no diff, so a
|
|
187
|
+
`callstack` here must list the same frames in the same order on both sides.
|
|
188
|
+
`publish` refuses most of what differs; the rest it renders as unchanged,
|
|
189
|
+
because the diff runs on the callee anchor alone and a `{ calls: [...] }` hop
|
|
190
|
+
whose parent differs reads as the same frame. Either way the reader never sees
|
|
191
|
+
the base list.
|
|
192
|
+
|
|
193
|
+
The map is the one before-and-after the vocabulary carries, and it puts today
|
|
194
|
+
against your one proposal rather than one proposal against another: `base` for
|
|
195
|
+
the structure as it stands, `nodes` for the structure proposed (step 5). It
|
|
196
|
+
shows what the design moves, never why that beat the alternative.
|
|
179
197
|
|
|
180
198
|
### 5. Map the shape, when there is one
|
|
181
199
|
|
|
@@ -250,6 +268,9 @@ A design with no stated cost and no rejected alternative reads as advocacy, and
|
|
|
250
268
|
readers approve it without deciding anything — which is the failure this whole
|
|
251
269
|
document kind exists to prevent.
|
|
252
270
|
|
|
271
|
+
A diagram of the design you picked is not a stated cost. It renders the option
|
|
272
|
+
that won, so it reads as advocacy too, however carefully it is drawn.
|
|
273
|
+
|
|
253
274
|
## Completion criteria
|
|
254
275
|
|
|
255
276
|
Report completion only when all of these hold:
|