@brainervirus/workit-claude-code 7.4.0 → 7.5.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/.claude-plugin/plugin.json +1 -1
- package/dist/workit.js +1121 -116
- package/package.json +3 -3
- package/skills/fanout/SKILL.md +27 -27
- package/skills/fanout/references/brief.md +5 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brainervirus/workit-claude-code",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.5.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Workit Claude Code plugin — session and per-turn task context, branch policy on git shell commands, workit method skills, and verifier/reviewer/implementer agents",
|
|
6
6
|
"keywords": [
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"build": "bun scripts/build.ts"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@brainervirus/workit-cli": "^7.
|
|
43
|
-
"@brainervirus/workit-core": "^7.
|
|
42
|
+
"@brainervirus/workit-cli": "^7.5.0",
|
|
43
|
+
"@brainervirus/workit-core": "^7.5.0"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
|
46
46
|
"node": ">=24"
|
package/skills/fanout/SKILL.md
CHANGED
|
@@ -14,30 +14,30 @@ ceremony; do it yourself.
|
|
|
14
14
|
per slice an id, branch, TIER, the file-scope manifest (SCOPE globs),
|
|
15
15
|
`owns` for shared files (lockfile, registry, barrels), `dependsOn` only for
|
|
16
16
|
a real dependency (independent PRs off trunk are the default), and the
|
|
17
|
-
brief fields. `workit fanout plan <plan.json>` refuses an empty
|
|
18
|
-
(exit 2) and two slices that may
|
|
19
|
-
owner for a shared file, or a
|
|
20
|
-
re-run: refuse to spawn while
|
|
21
|
-
Its `waves` say which slices may
|
|
17
|
+
brief fields. `workit fanout plan <plan.json>` refuses an empty or
|
|
18
|
+
placeholder (`<goal>`, `TBD`) brief field (exit 2) and two slices that may
|
|
19
|
+
write one file (exit 3) with a fix: an owner for a shared file, or a
|
|
20
|
+
dependency that serializes them. Apply it and re-run: refuse to spawn while
|
|
21
|
+
a field is empty or the plan is refused. Its `waves` say which slices may
|
|
22
|
+
run together; keep 4-6 in flight.
|
|
22
23
|
2. **Brief each worker** from its slice with the fixed template: GOAL, SCOPE,
|
|
23
24
|
CONTEXT (pointers, not pasted text), ACCEPTANCE (Given/When/Then), VERIFY
|
|
24
|
-
(exact commands), TIER, TIMEBOX, FORBIDDEN, REPORT, STANDING.
|
|
25
|
-
every standing order and user directive so far, pasted
|
|
26
|
-
spawn and respawn
|
|
25
|
+
(exact commands), TIER, TIMEBOX, SCRATCH, FORBIDDEN, REPORT, STANDING.
|
|
26
|
+
STANDING is every standing order and user directive so far, pasted
|
|
27
|
+
verbatim into each spawn and respawn: directives decay across resumes.
|
|
27
28
|
3. **Spawn all workers in one message**, in the background, each in its own
|
|
28
|
-
worktree
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
4. **Judge liveness by side effects only:**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
twice, then re-slice or report the gap. Never chain resumes.
|
|
29
|
+
worktree: Claude Code's `implementer` agent (first command `workit git
|
|
30
|
+
branch <branch> --base <base>`); elsewhere `workit fanout worktree create
|
|
31
|
+
<slice>`, which prints the SCRATCH dir. Refill from `fanout status`.
|
|
32
|
+
4. **Judge liveness by side effects only:** `workit fanout status` (head age,
|
|
33
|
+
PR, CI, verdict, landed; STUCK past the TIMEBOX, default 30 min). Stop a
|
|
34
|
+
stuck worker and observe that it exited (a timeout is not proof). Removing
|
|
35
|
+
a worktree drops its uncommitted changes: `workit fanout worktree release
|
|
36
|
+
<slice>` records `git status` in the ledger first and refuses them without
|
|
37
|
+
`--force` (native worktrees: record `git -C <wt> status --short` first).
|
|
38
|
+
Respawn in `MODE: resume` (brief, directives, last report), same branch.
|
|
39
|
+
Never two live workers on one branch. Replace at most twice, then re-slice
|
|
40
|
+
or report the gap. Never chain resumes.
|
|
41
41
|
5. **Verify each slice independently.** A fresh agent that did not write it
|
|
42
42
|
(Claude Code: the `verifier` agent) runs VERIFY and verify-<app>, then
|
|
43
43
|
`workit ledger verdict <result> --branch <b> --how "<evidence>"` under the
|
|
@@ -47,12 +47,12 @@ ceremony; do it yourself.
|
|
|
47
47
|
6. **Fan in** with `workit fanout check`: out-of-scope files (any file outside
|
|
48
48
|
it stops the fan-in), and `git merge-tree` conflicts with trunk and between
|
|
49
49
|
siblings, charged to the slice that lands later. Fix what it names (an
|
|
50
|
-
out-of-scope edit becomes a follow-up slice) until it exits 0. A
|
|
51
|
-
|
|
52
|
-
`
|
|
53
|
-
|
|
54
|
-
`
|
|
55
|
-
rebase, retarget or merge. Then workit-ship.
|
|
50
|
+
out-of-scope edit becomes a follow-up slice) until it exits 0. A slice
|
|
51
|
+
whose PR merged reads as landed; its dependents stop waiting. Then
|
|
52
|
+
`workit ledger check --branch <b>` per slice, land in `fanout status` order
|
|
53
|
+
and release the worktrees you made. Stacks: `workit stack plan <bottom> …
|
|
54
|
+
<top>` once, then `stack sync` and `land`. Only you touch topology: workers
|
|
55
|
+
never rebase, retarget or merge. Then workit-ship.
|
|
56
56
|
|
|
57
57
|
## Example
|
|
58
58
|
|
|
@@ -14,6 +14,7 @@ ACCEPTANCE:
|
|
|
14
14
|
VERIFY: <exact commands, e.g. `workit check test`, the verify-<app> feature to drive>
|
|
15
15
|
TIER: <mundane | standard | hard: how much model the slice needs>
|
|
16
16
|
TIMEBOX: <wall clock or turn budget; past it without a new commit you will be replaced>
|
|
17
|
+
SCRATCH: <your own temp dir: the one `fanout worktree create` printed, else `mktemp -d`; never a shared path>
|
|
17
18
|
FORBIDDEN: <no edits outside SCOPE; no rebase, retarget, merge or force-push; no new dependencies; ...>
|
|
18
19
|
REPORT: branch, head SHA, files changed, each VERIFY command with its exit code,
|
|
19
20
|
each ACCEPTANCE line met / not met, rulings you made (`workit ledger ruling`),
|
|
@@ -37,6 +38,7 @@ ACCEPTANCE:
|
|
|
37
38
|
VERIFY: `workit check test`; verify-api feature "usage"
|
|
38
39
|
TIER: standard
|
|
39
40
|
TIMEBOX: 45 minutes
|
|
41
|
+
SCRATCH: ../app-wt/usage-endpoint/.workit-scratch
|
|
40
42
|
FORBIDDEN: no edits outside SCOPE; no schema migration; no rebase or force-push; no new packages
|
|
41
43
|
REPORT: as in the template
|
|
42
44
|
STANDING: conventional commits; no comments that restate code; ask nothing, record rulings instead
|
|
@@ -50,7 +52,9 @@ verify, forbidden must be filled; tier is mundane, standard or hard). `base`
|
|
|
50
52
|
defaults to the trunk, or to the branch of a single `dependsOn` slice (a
|
|
51
53
|
stack); `worktree` defaults to `../<repo>-wt/<id>`. `owns` claims a shared
|
|
52
54
|
file another slice's glob also matches. Globs that match no file yet are compared
|
|
53
|
-
through a sample path.
|
|
55
|
+
through a sample path. Use `/` as the separator; a backslash only escapes
|
|
56
|
+
literal brackets: `"app/\\[id\\]/page.tsx"`. A `timebox` such as `45 minutes`
|
|
57
|
+
is the slice's STUCK threshold in `workit fanout status`.
|
|
54
58
|
|
|
55
59
|
```json
|
|
56
60
|
{
|