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 +4 -0
- package/agents/wuwei-implementer/agent.md +7 -1
- package/agents/wuwei-review-claims/agent.md +8 -3
- package/agents/wuwei-review-drift/agent.md +11 -5
- package/agents/wuwei-review-structure/agent.md +3 -0
- package/package.json +1 -1
- package/skills/wuwei-execute-phase/skill.md +19 -13
- package/skills/wuwei-plan-phases/skill.md +5 -4
- package/skills/wuwei-review/references/lens-rules.md +2 -1
- package/skills/wuwei-review/skill.md +4 -4
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
|
|
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
|
|
183
|
-
|
|
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
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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.
|
|
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
|
|
211
|
-
and `
|
|
212
|
-
|
|
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
|
-
|
|
291
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
153
|
-
dispatched tree and never another lens's: a
|
|
154
|
-
mutation another lens reverts under you reads as "green after mutation"
|
|
155
|
-
|
|
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
|
|