wei-wuwei 0.6.0 → 0.6.1

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 CHANGED
@@ -4,6 +4,10 @@ One section per published version, newest first. `wuwei update` prints the
4
4
  sections between the installed version and the new one before it asks;
5
5
  `wuwei check` fails when package.json's version has no section here.
6
6
 
7
+ ## 0.6.1
8
+
9
+ - fix(retro): review rounds — prose sweep, later-phase artifacts, escalation by section (#106)
10
+
7
11
  ## 0.6.0
8
12
 
9
13
  - feat(brief): wuwei brief — the personal dashboard (stream personal-dashboard) (#75)
@@ -21,6 +21,11 @@ the phase context, the ladder (climb it before writing), and step 4's floor.
21
21
  `wuwei-tdd` governs the task; commit as `wuwei-commit-hygiene` says — one
22
22
  concern per commit, the why in the body.
23
23
 
24
+ **A task or a fix ends with the prose sweep** (step 2): grep every name,
25
+ path, number and fact your change removed, renamed or changed — `wuwei sites
26
+ <term>…` over docs, comments, SPEC, ACCEPTANCE and phase files — and fix each
27
+ hit in the same commit.
28
+
24
29
  ## Out of scope
25
30
 
26
31
  - Another task, or the phase's next step — hand back instead.
@@ -31,4 +36,5 @@ concern per commit, the why in the body.
31
36
  ## Output contract
32
37
 
33
38
  What landed (commit shas, one line each), the tests that ran and their
34
- result, and anything you stopped short of — with why.
39
+ result, the sweep's terms and any hit left unfixed, and anything you stopped
40
+ short of — with why.
@@ -169,6 +169,9 @@ to `review:claims`. Categories: `wrong-claim` | `unsupported` | `stale`.
169
169
  said, `PLAUSIBLE` when you reasoned it — or when you constructed it on your
170
170
  machine and the claim is about the author's or CI's. **Nothing PLAUSIBLE is
171
171
  rated HIGH.**
172
+ - **A failure that fires only once a later phase's artifact exists is LOW at
173
+ most**; its `Action` is a requirement for that phase's file, not more
174
+ procedure here.
172
175
 
173
176
  Quote the line, name what it contradicts, cite that. **And read past the line
174
177
  that confirms you** — a later section of the same file can reverse it, and
@@ -179,12 +182,14 @@ proposing how to correct a stale claim, grep the repo for how the same kind
179
182
  of staleness was resolved elsewhere — a sibling document's frontmatter field,
180
183
  a prior correction to the same kind of record. A repo with an existing
181
184
  convention for this already answered the question; inventing a new shape is
182
- itself an unsupported claim. **The anchor must survive the repo's merge
183
- settings**: a commit SHA dies under `allow_squash_merge` (`gh api
185
+ itself an unsupported claim. **The anchor must survive the merge**: a commit
186
+ SHA dies when this target is squash-merged — the merge method it records
187
+ (sign-off, PR body) before `allow_squash_merge` (`gh api
184
188
  repos/<owner>/<repo> --jq .allow_squash_merge`); anchor to a tracked path, a
185
189
  heading, or a symbol that still exists. **A record is corrected, not
186
190
  rewritten**: for a plan, a summary or a decision log, the fix is a dated
187
- correction beside the original sentence.
191
+ correction beside the original sentence; a self-declared snapshot (dated
192
+ banner, executed phase's summary, generated codebase map) is not stale.
188
193
 
189
194
  **The `Action` cell carries `wuwei-review` §7's bar** — a fix is a claim about
190
195
  a mechanism and is verified like one, or the cell says it is untested.
@@ -155,6 +155,9 @@ to `review:drift`. Categories: `stale` | `wrong-claim` | `contradiction`.
155
155
  two quotes that disagree without that is `PLAUSIBLE`, because "which is
156
156
  wrong" is the finding; so is a side observed on your machine when the
157
157
  claim is about the author's or CI's. **Nothing PLAUSIBLE is rated HIGH.**
158
+ - **A failure that fires only once a later phase's artifact exists is LOW at
159
+ most**; its `Action` is a requirement for that phase's file, not more
160
+ procedure here.
158
161
 
159
162
  **Read past the line that confirms you.** A quote from one section is not
160
163
  evidence until the rest of the file has been checked for the line that
@@ -167,11 +170,14 @@ corrected before — a sibling `REVIEW.md`'s convention for a status field, a
167
170
  prior fix to the same kind of stale record. Match that shape; do not invent
168
171
  one the repo has already answered differently. **A record is corrected, not
169
172
  rewritten**: for a plan, a summary or a decision log, the fix is a dated
170
- correction beside the original sentence — the record is also evidence of what
171
- was believed when.
172
-
173
- **The anchor must survive the repo's merge settings.** A commit SHA dies
174
- under `allow_squash_merge` (`gh api repos/<owner>/<repo> --jq
173
+ correction beside the original sentence. **A document that declares itself
174
+ a snapshot** — a dated banner, an executed phase's summary, a generated
175
+ codebase map — **is not stale**: one dated banner at most, never a row per
176
+ line.
177
+
178
+ **The anchor must survive the merge.** A commit SHA dies when this target is
179
+ squash-merged: the merge method it records (sign-off, PR body) before
180
+ `allow_squash_merge` (`gh api repos/<owner>/<repo> --jq
175
181
  .allow_squash_merge`); anchor to a tracked path, a heading, or a symbol that
176
182
  still exists.
177
183
 
@@ -82,6 +82,9 @@ to `review:structure`. Categories: `missing` | `unfindable` |
82
82
  following §8 stops at step 1 believing nothing can deploy" is.
83
83
  - **Ev** — `CONFIRMED` when you followed the document's own order and hit it,
84
84
  `PLAUSIBLE` when you inferred it. **Nothing PLAUSIBLE is rated HIGH.**
85
+ - **A failure that fires only once a later phase's artifact exists is LOW at
86
+ most**; its `Action` is a requirement for that phase's file, not more
87
+ procedure here.
85
88
 
86
89
  **Name the intended reader in the report's opening line, and where you got
87
90
  it** — what the document declares, what dispatch said, or that you asked. A
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wei-wuwei",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "為無為,則無不治 — a source-of-truth skills & agents framework that compiles to Claude Code and Codex (Cursor and Gemini CLI planned). Write once, run in every agent, govern without forcing.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -207,16 +207,19 @@ get.
207
207
  | 6 | can it be one line? | `shrink:` |
208
208
  | 7 | only then: the minimum code that works | — |
209
209
 
210
- Rung 2 is the one that has to be caught here rather than later: `stdlib:`
211
- and `native:` are visible to anyone reading the diff, while a helper three
212
- files over is invisible unless you already looked. `review:defects` looks
213
- too — **both sides gate** — and **a `reuse:` finding from either is a rung
214
- that was skipped**, so it counts in the round's convergence like any other.
210
+ Rung 2 is caught here first; `review:defects` looks too — **both sides
211
+ gate** — and **a `reuse:` finding from either is a rung that was skipped**,
212
+ so it counts in the round's convergence like any other.
215
213
 
216
214
  **The ladder shortens the solution, never the reading.** Trace every file
217
215
  the change touches and the flow it really takes first, then climb — the
218
216
  smallest change in the wrong place is not lazy, it is a second bug.
219
217
 
218
+ **A task ends with its prose sweep.** Before hand-back, grep every name,
219
+ path, number and fact the task removed, renamed or changed (`wuwei sites
220
+ <term>…`) across docs, comments, SPEC, ACCEPTANCE and phase files; fix each
221
+ hit in the same commit, and list the terms in the hand-back.
222
+
220
223
  **A fix goes at the proven cause, and when the cause is in a shared
221
224
  function, one guard there beats one per caller** — smaller diff, and the
222
225
  siblings stop being broken too. Find the call sites the way `## Invariants`
@@ -287,10 +290,8 @@ get.
287
290
  asked for. A `yagni:` on "config nobody sets" is exactly how one of these
288
291
  leaves.
289
292
 
290
- The linter clause is deliberate: wuwei does not carry its own opinion on
291
- what a project must check for — `review:code` already runs whatever the
292
- project configured. A category with no configured check and no name in
293
- `## Sign-off`'s threats is not this step's floor to enforce alone.
293
+ A category with no configured check and no name in `## Sign-off`'s threats
294
+ is not this step's floor to enforce alone.
294
295
 
295
296
  **Two ways the same size → the one that is correct on edge cases.** Fewer
296
297
  lines, never a flimsier algorithm.
@@ -347,8 +348,7 @@ get.
347
348
  and `contested` findings, **its `unread:` scopes**, and the phase's full
348
349
  range as something a lens may widen to. The unread scopes have to be passed
349
350
  explicitly and **read before the delta**: they are unchanged code by
350
- definition, so nothing else in a delta round would bring them back. Rounds 2 and 3 otherwise pay four lenses to re-read code four
351
- lenses already read.
351
+ definition, so nothing else in a delta round would bring them back.
352
352
 
353
353
  **Full scope comes back whenever the delta cannot be trusted**, and
354
354
  `wuwei-review` §6 lists when: the sync above actually moved the base, or the
@@ -372,6 +372,10 @@ get.
372
372
  find nothing, so nothing is given up — except one seam, named with the
373
373
  skip: a code-only fix can falsify prose it never touched, and until the
374
374
  stream audit only `review:defects`' prose-inside-code rule watches it.
375
+ **The mirror**: a delta with no code (§1 classifies by content) and no open
376
+ code-panel finding dispatches only `review:defects` from the code panel;
377
+ `review:code` still sits in the document panel. Each panel is sent only
378
+ its own files.
375
379
  Round 1 is untouched by this — it runs full scope, where §1's
376
380
  classification already decides which panels exist at all. Inside a phase the panel has two obligations it does not
377
381
  have standalone:
@@ -414,7 +418,8 @@ get.
414
418
  coordinate is where the defect became visible; the cause can sit in a file
415
419
  it never opened. Locate it first, and where it is not already proven that
416
420
  is `wuwei-debug-root-cause` — the skill is not only for red tests, and a
417
- finding whose cause is a guess is the same situation.
421
+ finding whose cause is a guess is the same situation. **A fix that changes
422
+ a stated fact runs step 2's prose sweep** before its commit.
418
423
 
419
424
  **The finding disappearing is not the test; the cause being gone is.** One
420
425
  closed by widening a type, wrapping the call in a `try`, deleting the
@@ -474,7 +479,8 @@ get.
474
479
  | 1 or 2 | otherwise | next round |
475
480
  | ≥ 3 | no HIGH, no MED | **exit the loop** |
476
481
  | ≥ 3 | converging, HIGH or MED still open | next round |
477
- | ≥ 2 | **`HIGH + MED` did not fall** | **stop and escalate**, recorded in the phase file |
482
+ | ≥ 2 | **`HIGH + MED` did not fall** — new findings replacing fixed ones is not falling | **stop and escalate**, recorded in the phase file |
483
+ | ≥ 2 | **one section raised MED or above two rounds running** | **stop and escalate**, offering to cut or defer that section |
478
484
 
479
485
  The round-1 exit is the only way out before three — **every lens that ran**,
480
486
  zero findings, not a size guess about the diff, and a mixed phase runs two
@@ -121,11 +121,12 @@ tags: [planning, workflow]
121
121
  in the reverted phase, no screen claiming what is no longer so;
122
122
  - a task checklist inside the file, each task carrying **`depends-on`**
123
123
  when it has one (omit when it has none, so an absent field means
124
- independent, never forgotten). One task ≈ one commit;
124
+ independent, never forgotten). One task ≈ one commit. **A task documents
125
+ only what exists when its phase ends**: how to operate something a later
126
+ phase builds is a requirement list in that phase's file, not a runbook
127
+ here;
125
128
  - **a task dependency diagram** — mermaid, in the phase file, from the
126
- `depends-on` fields. Order in a list cannot distinguish "this must come
127
- second" from "I wrote it second"; the field carries the intent and the
128
- diagram makes it readable at a glance. Omit only for a single-task
129
+ `depends-on` fields. Omit only for a single-task
129
130
  phase, and say so in one line;
130
131
  - an `## Intended design` section — the target structure as a mermaid
131
132
  diagram: the modules/interfaces this phase adds or changes and how they
@@ -39,4 +39,5 @@ changed in one is changed in the other.
39
39
  | drift | **a cross-branch or cross-version comparison uses §6's three-dot form** (`<a>...<b>`), not `<a> <b>` — tip-to-tip answers "do these differ", not "did `<b>` change what `<a>` changed", and is wrong exactly when `<a>` moved since the merge base. Three-dot fails closed (errors with no common ancestor); state which form you used |
40
40
  | drift | **a claim about an external platform's live configuration is checked against that platform, not the repo's copy of it** — on GitHub check both `.../branches/<branch>/protection` (classic, 404s under rulesets) and `.../rules/branches/<branch>` (rulesets); GET only, `per_page=100`, every page — a list endpoint's first page is a pattern with a reach. **A platform fact the dispatcher supplied (§1) is that check**; re-query only to dispute it. Can't query it → `PLAUSIBLE`, name what went unqueried, never fall back to the repo's copy as settling it |
41
41
  | drift | **a hit on a removed name is a finding only if its clause still asserts the name as current** — a clause recording the removal is not one. Quote the clause |
42
- | claims, drift | **a suggested fix is checked against precedent, not invented** — grep the repo for how the same kind of staleness was corrected before, and match that shape. A repo with an existing convention already answered the question. **And the anchor must survive the repo's merge settings** — a commit SHA dies under `allow_squash_merge`; anchor to the file tree. **A record (a plan, a summary, a decision log) is corrected beside the sentence, dated, not rewritten** — it is also evidence of what was believed |
42
+ | claims, drift | **a suggested fix is checked against precedent, not invented** — grep the repo for how the same kind of staleness was corrected before, and match that shape. A repo with an existing convention already answered the question. **And the anchor must survive the merge** — a commit SHA dies when the target is squash-merged (recorded merge method first); anchor to the file tree. **A record (a plan, a summary, a decision log) is corrected beside the sentence, dated, not rewritten**; a self-declared snapshot (dated banner, executed phase's summary, generated codebase map) is not stale |
43
+ | claims, structure, drift | **a failure that fires only once a later phase's artifact exists is LOW at most**, its `Action` a requirement in that phase's file |
@@ -149,10 +149,10 @@ but most carry `Bash`, and **`Bash` is bounded by instruction, not by the tool
149
149
  list**: a suite run rewrites snapshots, a build writes artifacts. **A control
150
150
  that needs a write — a mutation, a suite run against it — is taken in the
151
151
  lens's own throwaway worktree of the reviewed sha** (`wuwei worktree <lens>
152
- <sha>`, a path no other lens can pick; `--prune` after), never the
153
- dispatched tree and never another lens's: a
154
- mutation another lens reverts under you reads as "green after mutation", the
155
- second cause below. No worktree → `PLAUSIBLE`, naming the control. Base sync
152
+ <sha>`, a path no other lens can pick; the dispatcher's `--prune <sha>`
153
+ after the panel), never the dispatched tree and never another lens's: a
154
+ mutation another lens reverts under you reads as "green after mutation". No
155
+ worktree → `PLAUSIBLE`, naming the control. Base sync
156
156
  happens before dispatch, by the session dispatching — a reviewer that can move
157
157
  HEAD can change what it was sent to review.
158
158