@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainervirus/workit-claude-code",
3
- "version": "7.4.0",
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.4.0",
43
- "@brainervirus/workit-core": "^7.4.0"
42
+ "@brainervirus/workit-cli": "^7.5.0",
43
+ "@brainervirus/workit-core": "^7.5.0"
44
44
  },
45
45
  "engines": {
46
46
  "node": ">=24"
@@ -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 brief field
18
- (exit 2) and two slices that may write one file (exit 3) with a fix: an
19
- owner for a shared file, or a dependency that serializes them. Apply it and
20
- re-run: refuse to spawn while a field is empty or the plan is refused.
21
- Its `waves` say which slices may run together; keep 4-6 in flight.
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. STANDING is
25
- every standing order and user directive so far, pasted verbatim into each
26
- spawn and respawn, because directives decay across resumes.
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 (Claude Code: the `implementer` agent; elsewhere
29
- `git worktree add --detach ../<repo>-wt/<slug> origin/<base>`). The first
30
- command a worker runs is `workit git branch <branch> --base <base>`.
31
- 4. **Judge liveness by side effects only:** new commits and pushes
32
- (`git log <branch>`), PR and check changes (`workit pr status --branch <b>`).
33
- No progress past the timebox means stuck. Stop the old worker and observe
34
- that it exited (a timeout is not proof). `git worktree remove --force`
35
- drops its uncommitted changes, so first record `git -C <wt> status --short`
36
- in the ledger or your report; only then remove the worktree. Respawn with
37
- the brief in `MODE: resume` (original, later directives, its last report):
38
- the new worker runs `git switch <branch>` in its fresh worktree instead of
39
- `workit git branch`. Never two live workers on one branch. Replace at most
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 landed
51
- slice reads as not found: re-plan without it and drop it from dependents'
52
- `dependsOn`. Then `workit ledger check --branch <b>` per slice; land in its
53
- order. Stacked slices: `workit stack plan <bottom> … <top>` once, then
54
- `workit stack sync` and `land`. Only you touch topology: workers never
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. Escape literal brackets: `"app/\\[id\\]/page.tsx"`.
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
  {