@ersbeth/codelife 0.0.0-stage → 0.11.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.
Files changed (214) hide show
  1. package/.claude-plugin/plugin.json +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +65 -2
  4. package/agents/evaluate.md +97 -0
  5. package/agents/ground.md +49 -0
  6. package/agents/implementer.md +49 -0
  7. package/agents/judge.md +128 -0
  8. package/agents/planner.md +45 -0
  9. package/agents/prerequisites.md +62 -0
  10. package/agents/reader.md +40 -0
  11. package/agents/reproduce.md +65 -0
  12. package/bin/codelife +4 -0
  13. package/package.json +38 -4
  14. package/presets/tsconfig.json +14 -0
  15. package/presets/vite.config.d.mts +3 -0
  16. package/presets/vite.config.mjs +49 -0
  17. package/scripts/audit/cadence.mjs +24 -0
  18. package/scripts/audit/close.mjs +57 -0
  19. package/scripts/audit/file.mjs +70 -0
  20. package/scripts/audit/fold.mjs +48 -0
  21. package/scripts/audit/lib.mjs +93 -0
  22. package/scripts/audit/prepare.mjs +180 -0
  23. package/scripts/audit/table.mjs +65 -0
  24. package/scripts/brainstorm/decided.mjs +6 -0
  25. package/scripts/brainstorm/lib.mjs +33 -0
  26. package/scripts/brainstorm/named.mjs +9 -0
  27. package/scripts/changelog.mjs +100 -0
  28. package/scripts/check-tag.mjs +19 -0
  29. package/scripts/checks.mjs +53 -0
  30. package/scripts/codelife.mjs +42 -0
  31. package/scripts/commit-msg.mjs +43 -0
  32. package/scripts/contract.mjs +179 -0
  33. package/scripts/former-form.mjs +170 -0
  34. package/scripts/git/branches.mjs +6 -0
  35. package/scripts/git/commit.mjs +40 -0
  36. package/scripts/git/diff.mjs +17 -0
  37. package/scripts/git/diff_lines.mjs +5 -0
  38. package/scripts/git/held.mjs +53 -0
  39. package/scripts/git/is_ancestor.mjs +28 -0
  40. package/scripts/git/lib.mjs +20 -0
  41. package/scripts/git/log_since.mjs +27 -0
  42. package/scripts/git/parent.mjs +51 -0
  43. package/scripts/git/show.mjs +4 -0
  44. package/scripts/git/status.mjs +25 -0
  45. package/scripts/git/submodules.mjs +5 -0
  46. package/scripts/init.mjs +21 -0
  47. package/scripts/install.mjs +32 -0
  48. package/scripts/lenses/A11Y.md +91 -0
  49. package/scripts/lenses/ARCH.md +90 -0
  50. package/scripts/lenses/BUG.md +52 -0
  51. package/scripts/lenses/BUILD.md +40 -0
  52. package/scripts/lenses/COMPAT.md +67 -0
  53. package/scripts/lenses/CONF.md +49 -0
  54. package/scripts/lenses/DEPS.md +43 -0
  55. package/scripts/lenses/DOC.md +73 -0
  56. package/scripts/lenses/FAIL.md +57 -0
  57. package/scripts/lenses/GOV.md +56 -0
  58. package/scripts/lenses/GUARD.md +47 -0
  59. package/scripts/lenses/INTENT.md +52 -0
  60. package/scripts/lenses/LEAN.md +49 -0
  61. package/scripts/lenses/LINES.md +48 -0
  62. package/scripts/lenses/PERF.md +61 -0
  63. package/scripts/lenses/PKG.md +58 -0
  64. package/scripts/lenses/SEC.md +49 -0
  65. package/scripts/lenses/STANDARDS.md +62 -0
  66. package/scripts/lenses/TYPE.md +56 -0
  67. package/scripts/lenses/VERIF.md +81 -0
  68. package/scripts/link.mjs +40 -0
  69. package/scripts/methods/cause.md +21 -0
  70. package/scripts/methods/comments.md +157 -0
  71. package/scripts/methods/description.md +67 -0
  72. package/scripts/methods/message.md +24 -0
  73. package/scripts/methods/red-green.md +28 -0
  74. package/scripts/methods/refusal.md +22 -0
  75. package/scripts/mr/open.mjs +219 -0
  76. package/scripts/node-floor.mjs +19 -0
  77. package/scripts/onboard/prep.mjs +93 -0
  78. package/scripts/overview/codelife-line.mjs +33 -0
  79. package/scripts/overview/next.mjs +76 -0
  80. package/scripts/overview/overview.mjs +308 -0
  81. package/scripts/package-manager.mjs +20 -0
  82. package/scripts/port/item.mjs +94 -0
  83. package/scripts/port/lib.mjs +194 -0
  84. package/scripts/port/prep.mjs +33 -0
  85. package/scripts/port/version.mjs +50 -0
  86. package/scripts/pre-commit.mjs +43 -0
  87. package/scripts/pre-push.mjs +53 -0
  88. package/scripts/prepare-lib.mjs +81 -0
  89. package/scripts/read-roadmap/lib.mjs +116 -0
  90. package/scripts/read-roadmap/moved.mjs +70 -0
  91. package/scripts/read-roadmap/range.mjs +15 -0
  92. package/scripts/release/cut.mjs +120 -0
  93. package/scripts/release/entry.mjs +52 -0
  94. package/scripts/release/lib.mjs +136 -0
  95. package/scripts/release/prep.mjs +58 -0
  96. package/scripts/review-mr/prepare.mjs +163 -0
  97. package/scripts/roadmap/assemble.mjs +269 -0
  98. package/scripts/roadmap/cut.mjs +88 -0
  99. package/scripts/roadmap/prepare.mjs +249 -0
  100. package/scripts/roadmap/roadmap.md +30 -0
  101. package/scripts/roadmap/write.mjs +53 -0
  102. package/scripts/search.mjs +29 -0
  103. package/scripts/setup/contract.mjs +25 -0
  104. package/scripts/setup/item.mjs +166 -0
  105. package/scripts/setup/lib.mjs +205 -0
  106. package/scripts/setup/prep.mjs +106 -0
  107. package/scripts/spec-form.mjs +444 -0
  108. package/scripts/spec.mjs +56 -0
  109. package/scripts/tags.mjs +27 -0
  110. package/scripts/target/target-app.md +134 -0
  111. package/scripts/target/target-base.md +127 -0
  112. package/scripts/target/target-lib.md +143 -0
  113. package/scripts/target/templates/audit/README.md +21 -0
  114. package/scripts/target/templates/characterisation/bundle.test.ts +43 -0
  115. package/scripts/target/templates/characterisation/declarations.test.ts +44 -0
  116. package/scripts/target/templates/characterisation/entries.ts +50 -0
  117. package/scripts/target/templates/characterisation/examples.test.ts +18 -0
  118. package/scripts/target/templates/characterisation/import.test.ts +22 -0
  119. package/scripts/target/templates/characterisation/surface.test.ts +68 -0
  120. package/scripts/target/templates/cliff.toml +61 -0
  121. package/scripts/target/templates/githooks/commit-msg +9 -0
  122. package/scripts/target/templates/githooks/pre-commit +9 -0
  123. package/scripts/target/templates/githooks/pre-push +9 -0
  124. package/scripts/target/templates/playground/index.html +11 -0
  125. package/scripts/target/templates/playground/main.ts +9 -0
  126. package/scripts/target/templates/spec/README.md +35 -0
  127. package/scripts/target/templates/spec/capability.md +36 -0
  128. package/scripts/target/templates/spec/glossary.md +5 -0
  129. package/scripts/target/templates/spec/journey.md +29 -0
  130. package/scripts/target/templates/spec/principles.md +15 -0
  131. package/scripts/target/templates/spec/users.md +15 -0
  132. package/scripts/target/templates/tsconfig.json +9 -0
  133. package/scripts/target/templates/vite.config.ts +4 -0
  134. package/scripts/text.mjs +6 -0
  135. package/scripts/tracker/account.mjs +5 -0
  136. package/scripts/tracker/auth.mjs +9 -0
  137. package/scripts/tracker/cli.version.mjs +5 -0
  138. package/scripts/tracker/close.mjs +20 -0
  139. package/scripts/tracker/create.mjs +47 -0
  140. package/scripts/tracker/issue.section.mjs +25 -0
  141. package/scripts/tracker/issue.update.mjs +13 -0
  142. package/scripts/tracker/issue.view.mjs +16 -0
  143. package/scripts/tracker/lib.mjs +130 -0
  144. package/scripts/tracker/list.mjs +14 -0
  145. package/scripts/tracker/list.whole.mjs +20 -0
  146. package/scripts/tracker/lot.row.mjs +42 -0
  147. package/scripts/tracker/mr.checkout_command.mjs +5 -0
  148. package/scripts/tracker/mr.comments.mjs +50 -0
  149. package/scripts/tracker/mr.create.mjs +12 -0
  150. package/scripts/tracker/mr.description.mjs +8 -0
  151. package/scripts/tracker/mr.fetch_head.mjs +5 -0
  152. package/scripts/tracker/mr.find_for_branch.mjs +9 -0
  153. package/scripts/tracker/mr.post.mjs +40 -0
  154. package/scripts/tracker/mr.update_description.mjs +8 -0
  155. package/scripts/tracker/mr.verdict.mjs +34 -0
  156. package/scripts/tracker/mr.view.mjs +20 -0
  157. package/scripts/tracker/none.mjs +79 -0
  158. package/scripts/tracker/note.mjs +12 -0
  159. package/scripts/tracker/reopen.mjs +8 -0
  160. package/scripts/tracker/search.mjs +8 -0
  161. package/scripts/tracker/search_id.mjs +18 -0
  162. package/scripts/tracker/templates/bug.md +35 -0
  163. package/scripts/tracker/templates/feature.md +40 -0
  164. package/scripts/tracker/templates/lot.md +46 -0
  165. package/scripts/tracker/title.join.mjs +6 -0
  166. package/scripts/tracker/title.leave.mjs +7 -0
  167. package/scripts/tracker/title.lot_of.mjs +8 -0
  168. package/scripts/tracker/title.search_id_filter.mjs +17 -0
  169. package/scripts/tracker/title.sentence_of.mjs +5 -0
  170. package/scripts/tracker/view.mjs +25 -0
  171. package/scripts/verbs.mjs +579 -0
  172. package/scripts/verify/BUILD.mjs +33 -0
  173. package/scripts/verify/DEPS.mjs +15 -0
  174. package/scripts/verify/GOV.mjs +34 -0
  175. package/scripts/verify/GUARD.mjs +34 -0
  176. package/scripts/verify/LINES.mjs +22 -0
  177. package/scripts/verify/PKG.mjs +56 -0
  178. package/scripts/verify/TYPE.mjs +34 -0
  179. package/scripts/verify/cut.mjs +73 -0
  180. package/scripts/verify/history.mjs +32 -0
  181. package/scripts/verify/lib.mjs +129 -0
  182. package/scripts/verify/report.mjs +104 -0
  183. package/scripts/verify/timing.mjs +19 -0
  184. package/scripts/verify.mjs +29 -0
  185. package/scripts/work/branch.mjs +81 -0
  186. package/scripts/work/close.mjs +74 -0
  187. package/scripts/work/member.mjs +73 -0
  188. package/scripts/work/prepare.mjs +116 -0
  189. package/scripts/work/reopen.mjs +40 -0
  190. package/scripts/work-feedback/prepare.mjs +96 -0
  191. package/skills/audit/SKILL.md +110 -0
  192. package/skills/audit/templates/index.md +36 -0
  193. package/skills/audit/templates/lens.md +44 -0
  194. package/skills/brainstorm/SKILL.md +144 -0
  195. package/skills/brainstorm/references/exit.md +57 -0
  196. package/skills/brainstorm/templates/note.md +79 -0
  197. package/skills/commit/SKILL.md +68 -0
  198. package/skills/mr/SKILL.md +82 -0
  199. package/skills/new-issue/SKILL.md +87 -0
  200. package/skills/onboard/SKILL.md +103 -0
  201. package/skills/onboard/templates/CLAUDE.md +31 -0
  202. package/skills/onboard/templates/CONTRIBUTING.md +34 -0
  203. package/skills/onboard/templates/README.md +30 -0
  204. package/skills/onboard/templates/SKILL.md +24 -0
  205. package/skills/onboard/templates/package-CLAUDE.md +15 -0
  206. package/skills/overview/SKILL.md +59 -0
  207. package/skills/port-toolchain/SKILL.md +127 -0
  208. package/skills/release/SKILL.md +78 -0
  209. package/skills/review-mr/SKILL.md +106 -0
  210. package/skills/review-mr/templates/pass.md +29 -0
  211. package/skills/roadmap/SKILL.md +137 -0
  212. package/skills/setup/SKILL.md +112 -0
  213. package/skills/work/SKILL.md +139 -0
  214. package/skills/work-feedback/SKILL.md +113 -0
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: roadmap
3
+ description: File the lots of what the specification changed since the roadmap's mark, turn the tracker's orphan issues into lots, and propose a closure only on evidence.
4
+ argument-hint: "[label-or-milestone]"
5
+ ---
6
+
7
+ # /roadmap
8
+
9
+ Reads two sources and proposes **one table**: the lots that what `docs/spec/` changed since the
10
+ roadmap's mark needs, and what to do with the open issues — the stale ones rewritten or closed, the
11
+ **orphans** (open, no lot in their title) grouped, joined to a lot, closed on evidence or left
12
+ alone. One answer for the whole table, then the writes, the roadmap rewritten last. The first write
13
+ that does not complete ends the run, the rest untouched; a re-run resumes from the tracker itself.
14
+
15
+ ## Preconditions
16
+
17
+ A contract, and the forge connected: `codelife roadmap prep` checks both. Under `tracker.kind:
18
+ none` the issues are files and the run is the same. No clean tree is required and no branch is
19
+ switched: the run writes to the tracker, and to the repository only the refusal lines of its
20
+ `wontfix` rows, each committed on the branch you stand on before its closure.
21
+
22
+ ## Brief
23
+
24
+ **Who gave the go-ahead**, and from what, opens it: you, typing the command or answering this
25
+ brief; your confirmed table in a driver, which answers what it named — ask only the rest; the word
26
+ `delegate`; or a session that relayed your words, quoted here — relayed is not delegated. Typed or
27
+ tabled, this brief is an announcement; otherwise the run **stops here** for your go-ahead, after
28
+ nothing but a preparation that only reads.
29
+
30
+ `codelife roadmap prep [<label-or-milestone>]`, its summary naming the run folder. A `- stop:` line
31
+ ends the run, its reason said — except the two that ask a commit to read from (a mark that is not
32
+ an ancestor of `HEAD`, a first roadmap over a tracker that already holds `spec:` lots): put the
33
+ question to the user with the commit it proposes, then run it again with `--from <sha>`.
34
+
35
+ Then write in your reply — a tool's output is not one —: the roadmap and its mark, or where a first
36
+ run reads from; `HEAD`; how many cases the range covers, how many are proposed built because they
37
+ were merged with their code (the merges named), how many are left to cut, and the `no case` rules;
38
+ the open lots with their *Done when*; the members that wait for a case; the issues citing what
39
+ changed; how many orphans, and the scope when an argument narrowed it; on a first run, the test
40
+ files each capability will be handed; and that **nothing is written before the table is answered**.
41
+
42
+ ## Parameters
43
+
44
+ `[label-or-milestone]`, optional, narrowing the orphans considered. Nothing else is asked: the table
45
+ is the one answer.
46
+
47
+ ## Steps
48
+
49
+ 1. **Prepare** — the brief, written in your reply before any agent is dispatched.
50
+ 2. **Cite, on a first run** whose summary says `citation pass:` with capabilities handed tests: one
51
+ `codelife:prerequisites` agent per `citation:` line, its prompt `citations`, the capability's
52
+ folder in the run folder and the repository's absolute root. A block reading `not passed` stops the run.
53
+ None proposed → step 3. Some → the table is the **citation lot alone**: one line per capability
54
+ with its count of renames, every rename in a file of the run folder. Confirmed, the umbrella —
55
+ `codelife issue create lot - citation <file>`, the sentence *The suite's tests do not cite the
56
+ cases they prove*, its *Done when* every rename landed — then per capability
57
+ `codelife issue create feature mid citation <file>` and `codelife lot join`. No roadmap is
58
+ written: the plan is cut once that lot is merged.
59
+ 3. **Cut** — one `codelife:prerequisites` agent per `capability:` line, its prompt `cases`, its
60
+ two paths under the run folder and the repository's absolute root; each block saved as
61
+ `<run folder>/blocks/<K-n>.md`. Agents go all in one message, as many as Claude Code runs at
62
+ once, the rest as the first return. A block reading `not passed` stops the run. Then
63
+ `codelife roadmap cut <run folder>`; a `- stop:` line is said and ends the run. No
64
+ `capability:` line, no cut.
65
+ 4. **Judge the issues**, from their files in the run folder:
66
+ - each `cites:` line — **rewrite** (the rule stands, changed: a new body to the rule at `HEAD`,
67
+ a new title when its sentence no longer holds; for a started one, what its lot branch's commits
68
+ naming it already do), **close** (the rule retired or replaced, on the commit that did it),
69
+ **keep**, or the **member** of a cut row;
70
+ - each orphan — **new lot** (a shared cause, subsystem or promise, named; origin
71
+ `triage:<slug>`, its sentence the symptom the members share), **join** an open lot whose
72
+ members share its class and whose *Done when* serves it, **wontfix**, or left alone;
73
+ - each `waits:` line whose case an issue in a lot builds — **move** the member to an open lot
74
+ waiting for that one whose *Done when* serves it, or to a new lot of its own,
75
+ `triage:waits-for-c-<n>`;
76
+ - **places** — the cut's lots after the confirmed order, in its order; a lot of orphans, or an
77
+ open lot the roadmap lacks, by its highest severity. A lot you raise for its risk goes no
78
+ higher than the last lot it waits for.
79
+
80
+ A `wontfix` needs evidence anyone can check: the file, command or symbol is gone; a decision of
81
+ the specification refused it; issue #n supersedes it; it no longer reproduces, the check named.
82
+ Age, inactivity or a hard read is none.
83
+ 5. **Propose one table**, in your reply: one line per lot — rank, title, members, total effort,
84
+ what it waits for —, every rewrite and every closure **in full**, the cases proposed built, the
85
+ `no case` rules to place, the orphans left alone; the members, in `table.md`, its path named. A
86
+ row is corrected or struck by naming it; one answer for the whole. Nothing is written yet.
87
+ 6. **Write**, in this order, each write reported:
88
+ - each lot — its umbrella `codelife issue create lot - <origin> <file>`, the body of
89
+ `codelife help template lot` with *The order* empty, unless the summary's `lot:` lines already
90
+ hold that origin (a cut run: create only what it lacks); then each member at once, a new one
91
+ `codelife issue create feature mid spec:R-<n> <file>` — `bug` for a rule that repairs a
92
+ behaviour — from its nature's template, its *Where it comes from* citing the rule and its
93
+ cases, then `codelife lot join <umbrella> <n>…`;
94
+ - each **join** — `codelife lot join`; each **move** —
95
+ `codelife lot leave <lot> <n> <reason file>`, the case as the reason, then `codelife lot join`;
96
+ - each **rewrite** — `codelife issue update <n> <body file> [<title file>]`, then
97
+ `codelife issue note <n> <file>` with the `rewritten` comment of
98
+ `codelife help method comments`.
99
+ 7. **Close the `wontfix` rows**, one at a time. A member leaves its lot first, `codelife lot leave`,
100
+ the evidence its reason. A rule a commit of the range retired: the comment quotes the refusal
101
+ line that commit wrote, with its file — `codelife issue close <n> <file> <commit> --wontfix`.
102
+ Any other: one line of `## Rejected` as `codelife help method refusal` says, committed with
103
+ `codelife commit` — `docs(spec): refuse …`, a `Closes: #<n>` footer — then
104
+ `codelife issue close <n> <file> <hash> --wontfix`, the evidence verbatim and the line quoted.
105
+ 8. **Rewrite the roadmap, last** — `codelife roadmap write <run folder> <order> <left alone>`, the
106
+ order one `#<n> <sentence>[ — after #<a>, #<b>]` per open lot as confirmed, the other one
107
+ `#<n> <sentence>` per orphan left alone. Not when the table was refused outright, nor after the citation lot alone; a range with
108
+ no row is written all the same, so the mark passes it.
109
+
110
+ ## Never
111
+
112
+ - Propose a closure on age, inactivity, or how hard the issue is to read.
113
+ - Group by severity or by milestone, or widen a lot's *Done when* to admit a member.
114
+ - Read code but to write a new member's body or judge a `cites:` line, or re-estimate an effort an
115
+ issue carries.
116
+ - Open an issue other than the umbrellas and members the table confirmed: a lead noticed while
117
+ planning is `/new-issue`'s.
118
+ - Assign anyone, create a label or create a milestone.
119
+ - Report an orphan that grouped with nothing as a failure.
120
+ - Check out, switch, stash or add a worktree.
121
+ - Answer in a language the user did not write in, or write anything but English into the
122
+ repository or the tracker.
123
+
124
+ ## Output
125
+
126
+ The run ends on this block, under this exact heading:
127
+
128
+ ```markdown
129
+ ### roadmap result
130
+ - Produced: the lots filed, each with its members; the issues joined, moved, rewritten and closed,
131
+ each closure with its evidence and its refusal line; the roadmap rewritten — or the citation lot
132
+ alone.
133
+ - Decided: the table, and every row you changed.
134
+ - Left open: the orphans left alone; any lot whose *Done when* refused a member.
135
+ - Next: `/work <umbrella>` on the first open lot of the order — or, after the citation lot, on it,
136
+ the plan cut once it is merged.
137
+ ```
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: setup
3
+ description: Set a repository up for codelife — write its contract, then bring the base every skill rests on, one commit per item.
4
+ argument-hint: "[item]"
5
+ ---
6
+
7
+ # /setup
8
+
9
+ Brings a repository to the state every other skill rests on: a valid contract, then the base every
10
+ codelife repository shares, under every `kind` and whatever its toolchain. The first skill any
11
+ repository runs, re-run on a new machine or after a plugin upgrade. It keeps **no state file** — the
12
+ verbs read what is done from the repository — and never chains into another skill; the target
13
+ toolchain is `/port-toolchain`'s, and nothing here writes it. Three verbs read and do the work; this
14
+ brief carries what is yours to decide.
15
+
16
+ ## Preconditions
17
+
18
+ None to check here: `codelife setup prep` prints a `- stop:` line for each — not a git repository,
19
+ an invalid contract, a machine not connected to its host, a default branch other than `main`. A stop
20
+ ends the run: say it in your reply with what to do, and run nothing else. Work on the branch checked
21
+ out; a dirty tree is fine, and named.
22
+
23
+ ## Brief
24
+
25
+ **Who gave the go-ahead**, and from what, opens it: you, typing the command or answering this
26
+ brief; your confirmed table in a driver, which answers what it named — ask only the rest; the word
27
+ `delegate`; or a session that relayed your words, quoted here — relayed is not delegated. Typed or
28
+ tabled, this brief is an announcement; otherwise the run **stops here** for your go-ahead, after
29
+ nothing but a preparation that only reads.
30
+
31
+ Then `codelife setup prep`, and its block written **in your reply**, in the user's language — a
32
+ tool's output is not one: every line, commands, paths and quoted errors kept as printed. Its
33
+ `- guide:` lines are the connection: the token goes from the browser to the clipboard to the user's
34
+ own terminal, never into the conversation. A missing CLI is installed on the user's yes; then the run
35
+ waits for *done* and runs `codelife setup prep` again — nothing is written before it passes.
36
+
37
+ ## Parameters
38
+
39
+ `[item]` — one base item to play or replay; without it, every item *to do*, in prep's order.
40
+
41
+ ## Steps
42
+
43
+ 1. **Draft** — on a first run, the whole contract in block form, each value tagged *inferred from
44
+ `<file>`*, *to confirm* or *missing*, from prep's lines and the `- prose:` files **read whole**:
45
+ `guards[]` are the conditional checks the prose states — *when X changes, run Y* — each quoted;
46
+ `generated[]` the committed outputs a script builds, and `CHANGELOG.md` by
47
+ `node node_modules/@ersbeth/codelife/scripts/changelog.mjs` with `when: []`; the `app` block under
48
+ `kind: app` only, both fields asked. Prose goes to `## Setup` (a one-off install, never a token),
49
+ `## Never` (a command warned against, with its reason), `## Raise before doing` (a defended
50
+ property), `## Tracker notes` (the forge's traps). On an update, the divergences only — a prose
51
+ section is never substituted, an addition is proposed. **Shown in your reply, not asked.**
52
+ 2. **Ask** — every *to confirm* and *missing* value in one `AskUserQuestion` batch, each with its
53
+ inferred default first and the file it came from. Never a sure inference, a language, a model, a
54
+ label name or a branch prefix.
55
+ 3. **Write** — the answered draft to a file, then `codelife setup contract <file>`; an `- invalid:`
56
+ line is fixed and the verb run again. Then `CLAUDE.md`: absent, created short and prose — the
57
+ purpose, the architecture if it is clear, the pointer. Present, the pointer paragraph appended —
58
+ *the verifiable facts live in [`.claude/codelife.md`](.claude/codelife.md), the codelife contract;
59
+ this document stays prose* — and on a **first run only** a trim, one passage per question: a
60
+ passage restating the contract or a plugin convention (pre-commit commands, labels and titles,
61
+ branch names, commit format, tags, committed outputs, *when X run Y*) is proposed for removal;
62
+ *never run* and one-off setup passages **move** to `## Never` and `## Setup` first; architecture,
63
+ code rules and reasons stay. A refusal goes to *Left open*, never argued again. Then
64
+ `codelife commit` on the verb's `- paths:` and `CLAUDE.md`, as `chore(setup): write the project contract`.
65
+ 4. **Items** — `connect`, `labels`, `templates`, `scripts`, `hooks`, `folders`, `changelog`,
66
+ `develop`, each *to do* in that order: `codelife setup item <name>`, its block in your reply, an
67
+ existing file's difference included; then **now, or later**.
68
+ - **Now** — `codelife setup item <name> --write`; a `- stop:` or `- failed:` line ends the run,
69
+ quoted — the run does not fix the repository's tests. Then `codelife commit` on its `- paths:`,
70
+ `chore(setup): <what the item did>`; `labels` and `develop` write no file, and say so.
71
+ - **Later** — a deferral, never a refusal: `codelife issue create --once feature low setup:<item>
72
+ <file>`, the reason just given as its body. The item stays *to do*; a repository that will
73
+ never take it closes that issue `wontfix`.
74
+ - **scripts** — first the mapping of the five from what `package.json` runs, confirmed: a script
75
+ doing the job under another name is renamed (`verify:pre-commit` → `verify:commit`), its
76
+ callers in CI, `README.md` and `CONTRIBUTING.md` updated; a tier with nothing gets
77
+ `echo 'nothing to run'`, said aloud, after looking once for a real check. You edit
78
+ `package.json` — a private one when there is none — then `--write --test <a test file>`.
79
+ - **hooks** — no package: propose prep's install command as a decision. A hook of the
80
+ repository's own: its extra lines kept as an issue, or dropped on the user's word.
81
+ - **changelog** — a hand-written `[Unreleased]` stops it: fold its entries, show, confirm,
82
+ remove, then again. **develop** — its push is the user's, with `! `.
83
+
84
+ What an item finds outside its scope is an issue — `codelife issue create` — never a wider item.
85
+ Ask whether to continue after each.
86
+ 5. **Close** — the result block below.
87
+
88
+ ## Never
89
+
90
+ - Read, print, store or pass a token, widen one, or create a label outside the plugin's own.
91
+ - Rewrite `CLAUDE.md` silently or in one pass, or propose a trim on an update.
92
+ - Mix two items in one commit, or widen an item to fix what it finds.
93
+ - Rename the default branch, push, bypass a hook, check out, stash, create a branch other than
94
+ `develop`, or chain into `/onboard`, `/audit` or any other skill.
95
+ - Write a toolchain's command into a script: that is `/port-toolchain`'s.
96
+ - Answer in a language the user did not write in, or write anything but English into the
97
+ repository or the tracker.
98
+
99
+ ## Output
100
+
101
+ The run ends on this block, under this exact heading, its fields in the user's language:
102
+
103
+ ```markdown
104
+ ### setup result
105
+ - Produced: the contract, the `CLAUDE.md` pointer, the passages trimmed, one commit per item played,
106
+ the labels created, `develop`.
107
+ - Decided: each answer of the batch, each trim, each item played or deferred.
108
+ - Left open: the items still *to do*, each deferred one with its issue; a tier with nothing to run;
109
+ a passage refused; a push not yet made.
110
+ - Next: `/setup` again for what is left; `/onboard`, `/overview` or `/audit` after that. Name them;
111
+ start none.
112
+ ```
@@ -0,0 +1,139 @@
1
+ ---
2
+ name: work
3
+ description: Walk a lot's members in the umbrella's order, or one lone issue, each planned, implemented and reviewed by fresh agents, to the merge request.
4
+ argument-hint: "[issue-number] [delegate]"
5
+ ---
6
+
7
+ # /work
8
+
9
+ Walks a lot — its umbrella's open members, in order — or one lone issue, to one merge request. Each
10
+ member is planned, implemented and reviewed by fresh agents whose reports alone enter this session;
11
+ every write that leaves the machine is this session's.
12
+
13
+ ## Preconditions
14
+
15
+ `codelife work prep` checks them and stops on the first that fails, naming it: a contract; the
16
+ forge connected; a clean tree; a `test:one` script, else `/setup`; a task list on an umbrella;
17
+ before a cut, a `develop` that `origin/develop` holds whole; no rule a member cites moved since the
18
+ roadmap's mark, else `/roadmap`.
19
+
20
+ ## Brief
21
+
22
+ **Who gave the go-ahead**, and from what, opens it: you, typing the command or answering this
23
+ brief; your confirmed table in a driver, which answers what it named — ask only the rest; the word
24
+ `delegate`; or a session that relayed your words, quoted here — relayed is not delegated. Typed or
25
+ tabled, this brief is an announcement; otherwise the run **stops here** for your go-ahead, after
26
+ nothing but a preparation that only reads.
27
+
28
+ Made from `work prep`'s summary alone: the umbrella, its open members in order with their efforts
29
+ and plan state, the joins it proposes — or the lone issue; the branch the work belongs on, and the
30
+ one you stand on.
31
+
32
+ ## Parameters
33
+
34
+ `[issue-number]`, an umbrella or a lone issue, inferred from the conversation or the current
35
+ branch when absent, and stated. `[delegate]`, typed after it, never asked nor inferred.
36
+
37
+ ## Steps
38
+
39
+ 1. **Prepare** — `codelife work prep <n>`. A `- stop:` line ends the run, its reason said. A closed
40
+ member is skipped, whatever its tick. A `closed:` line — a delegated run's return — goes to
41
+ step 3, then step 5.
42
+ 2. **One table** — the open members in order with their efforts, a *join #n, last* row per `join:`
43
+ line, and the branch. Delegated, it also states: a choice inside the change is taken alone and
44
+ named in its commit; any other — a public API, a file format, a new dependency, a test weakened,
45
+ the specification contradicted, what the contract's `## Raise before doing` names — is committed
46
+ apart, ending on a `Held:` trailer; plans are posted and issues closed unseen; nothing is pushed;
47
+ and *a session that asks permission at each action stops at the first one while you are away;
48
+ Claude Code's `auto` mode lets it go on.* One answer; nothing is written before it.
49
+ 3. **Reach the branch** the summary names: `git switch <branch>`; to cut one,
50
+ `git switch develop`, `git merge --ff-only origin/develop`, `git switch -c <branch> <from>`;
51
+ nothing when `in place`. Then one `codelife lot join` for the confirmed joins.
52
+ 4. **Each member, in order**, in agents no other member shares:
53
+ - **Plan** — skipped when the member carries a `plan` comment. One `codelife:planner` agent,
54
+ given the issue, its table line, present or delegated, the lens folder
55
+ `<this skill's directory>/../../scripts/lenses/`, and the `refused` comments when the
56
+ summary says refused. Present, you approve or correct it. A plan that warns it publishes a
57
+ withheld reproduction is asked on its own first; delegated, it stops the member unposted.
58
+ Post it: a file opening on `codelife: plan — /work — <date>`, the plan, and `## Go-ahead`
59
+ quoting the table's line with your corrections or, delegated, its constraints, then
60
+ `codelife issue note <n> <file>`.
61
+ - **Implement** — note the start, `HEAD`, or on a resume the parent of the oldest commit
62
+ `codelife log since <base> <n>` prints. One `codelife:implementer` agent, on Sonnet, on Opus
63
+ when the plan says L, given the issue, the base, the table's line, the plan or *resume*, and
64
+ present or delegated. Put its question to you, and your answer to that same agent with
65
+ `SendMessage`.
66
+ - **Review** — `codelife checks <start>`, each `failed:` line a finding. Then, in one message and
67
+ blind to each other: one `codelife:reader` agent, its case the range `<start>..HEAD`, the
68
+ member and its umbrella, *Command line* `codelife`; and the Skill tool on `code-review`, args
69
+ `medium <start>..HEAD — post nothing and fix nothing`. Present, you keep or drop each finding;
70
+ delegated, each is kept.
71
+ - **Fix** — the kept findings to the implementer with `SendMessage`, one commit each, delegated
72
+ citing its finding. Then `/code-review` once on those fix commits, its findings kept or dropped
73
+ as above — one repeating a dropped finding stays dropped, unasked; what is kept is fixed once and
74
+ kept for the description.
75
+ - **Close** — the `closing` comment in a file, as `codelife help method comments` writes it, then
76
+ `codelife issue close <n> <file> <hash>…` with every hash `codelife log since <base> <n>`
77
+ prints; it ticks the umbrella and closes it with its last member. *This will not be done* —
78
+ you decided the issue is not worth its cost: a line of `## Rejected` through
79
+ `codelife help method refusal`, committed `docs(spec)` with `Closes: #<n>`, then the
80
+ close with `--wontfix`.
81
+ 5. **Open the merge request**, once every member closed or left — a description as
82
+ `codelife help method description` prints it, from the reports — on a return, the `closing`
83
+ comments — and the dry run of `codelife mr open`; then `codelife mr open <file>`, what it prints put to you with each question
84
+ a line names — on a yes to merging the target in, `git merge origin/<target>` and the dry run
85
+ again. Its `held:` lines are one table: each row the hash, the issue, the `Held:` line and, from
86
+ the commit's body, why and what it costs if wrong, **validated** or **refused** with your reason.
87
+ All validated → `--send`, which is their validation. One refused → nothing sent; per refusal, a
88
+ file opening on `codelife: refused — /work — <date>`, the `Held:` line, your reason quoted and
89
+ the later commits its line names, then `codelife issue reopen <n> <file>`; its member goes
90
+ through step 4 again from a new plan, its planner given that comment, then step 5.
91
+ No merge request when the run is delegated — the push is yours, `/work <n>` again —, under
92
+ `tracker.kind: none`, when every member left, or for a lone issue worked `in place` on a branch
93
+ not its own, *Next* naming `/mr`.
94
+
95
+ ## When a member does not complete
96
+
97
+ A red or a verification still failing at the cap of `codelife help method red-green`, or a plan you
98
+ refuse, stops the run: name the member, quote the reason, list what remains, start no further
99
+ member. Present at the cap, you are offered a revised plan or the stop. Re-running `/work <n>`
100
+ resumes there: the issues and the branch are the whole record.
101
+
102
+ - **Waits for a case** — a plan saying `Waits for: C-<n>` is posted and stops the run, the case
103
+ named: another lot builds it, and `/roadmap` moves the member after that lot.
104
+ - **Not located** — the planner, the implementer or a STATUS the summary shows found no cause:
105
+ propose that the member leave the lot, the refuted hypotheses its reason. Yes → `codelife lot leave <umbrella> <n> <reason
106
+ file>`, and the run goes on; no, or a lone issue → the run stops.
107
+ - **Delegated** — restore the step's files, keep what is committed, post the STATUS
108
+ (`codelife help method comments`) through `codelife issue note`, and leave the issue open; a
109
+ member not located stays open the same way. No commit of the member on the branch
110
+ (`codelife log since <base> <n>`) → the next member; one, or a verification that could not
111
+ run → the lot stops.
112
+
113
+ ## Never
114
+
115
+ - Work a member of another lot on this branch, join an issue the table did not carry, reorder the
116
+ umbrella, or skip a member because it looks hard.
117
+ - Let an agent post, close, reopen, tick, join, leave or push; or tick a line by hand.
118
+ - Revert a refused held choice: the work that used it would no longer build.
119
+ - Review a member's fixes more than once, or give its merge request to `/review-mr` or
120
+ `/work-feedback`.
121
+ - Stash, detach, add a worktree, or switch branch after step 3.
122
+ - Answer in a language the user did not write in, or write anything but English into the
123
+ repository or the tracker.
124
+
125
+ ## Output
126
+
127
+ The run ends on this block, under this exact heading:
128
+
129
+ ```markdown
130
+ ### work result
131
+ - Produced: per member, its commits, what its review found and fixed, its close; the joins; the
132
+ branch; the umbrella's state; the merge request. Delegated, each held choice with the commits
133
+ resting on it.
134
+ - Decided: the table, each plan, each finding kept or dropped, each question an agent put to you.
135
+ - Left open: the members not reached, the one that stopped the run with its reason, the members
136
+ that left. Delegated: closed, stopped with their STATUS, not reached.
137
+ - Next: the merge; or `/work <n>` again, without `delegate` — after a delegated run, to validate
138
+ its held choices and open the merge request.
139
+ ```
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: work-feedback
3
+ description: Answer the review of your own merge request once — the latest pass's open numbers and the comments people wrote, one confirmed table, one commit per cause by a fresh agent, one push, and one answer citing the pushed hashes.
4
+ argument-hint: "[mr-number]"
5
+ ---
6
+
7
+ # /work-feedback
8
+
9
+ Answers what another person's review left on **your own** merge request: the latest `/review-mr`
10
+ pass's open numbers, and the comments and open threads people wrote after it. One table and one
11
+ answer from you; one implementer agent makes one commit per cause; this session pushes once and
12
+ posts one answer, which the reviewer's next pass reads.
13
+
14
+ ## Preconditions
15
+
16
+ `codelife feedback prep` checks them and stops on the first that fails, naming it: a contract whose
17
+ `tracker.kind` names a forge, connected — else `/setup`; an open merge request this account
18
+ authored; `HEAD` on its branch, at its head or ahead of it — a previous run's commits waiting to be
19
+ pushed —, and a clean tree, asserted, never arranged: the stop names the forge's checkout command.
20
+
21
+ ## Brief
22
+
23
+ **Who gave the go-ahead**, and from what, opens it: you, typing the command or answering this
24
+ brief; your confirmed table in a driver, which answers what it named — ask only the rest; the word
25
+ `delegate`; or a session that relayed your words, quoted here — relayed is not delegated. Typed or
26
+ tabled, this brief is an announcement; otherwise the run **stops here** for your go-ahead, after
27
+ nothing but a preparation that only reads.
28
+
29
+ Made from `feedback prep`'s summary alone: the merge request and where its number came from; the
30
+ pass it answers, or none — the comments alone; the rows, and those a commit already answers; the
31
+ commits waiting to be pushed.
32
+
33
+ ## Parameters
34
+
35
+ `[mr-number]`; absent, the open merge request of the current branch, which the preparation names.
36
+ Nothing else is asked: the table is the one answer. No `delegate`: a run left alone waits at its
37
+ first question or at the push, which is where a delegated one would have stopped.
38
+
39
+ ## Steps
40
+
41
+ 1. **Prepare** — `TMPDIR=<the session's scratchpad> codelife feedback prep [<n>]`. A `- stop:` line
42
+ ends the run, its reason said. `rows.md` in its run folder holds each row whole; a row a commit
43
+ already answers names that commit.
44
+ 2. **One table** — each row, its subject in a few words, its disposition, its cause, and why in the
45
+ same cell:
46
+
47
+ | Disposition | What it does |
48
+ |---|---|
49
+ | `change` | the row asks for what the branch does not yet do: its cause's commit |
50
+ | `answer` | no file touched — the row asks a question; a commit already does it, named; or another open merge request carries the fix, named with the merge order, that one first |
51
+ | `refuse` | not done, the reason in the answer; a row that would undo what the specification decided also leaves one line of that capability's `## Rejected`, as `codelife help method refusal` writes it |
52
+ | `file` | outside this merge request: an issue |
53
+
54
+ Rows whose fix is one change — one sentence two findings fault, one fact written in two places —
55
+ share a cause, adjacent, and one commit answers them all. A row a commit already answers is an
56
+ `answer` citing it. A `refuse` is yours: proposed, never decided. One answer; nothing is written
57
+ before it.
58
+ 3. **The causes** — when the table holds a `change` or a refusal line: one `codelife:implementer`
59
+ agent, given the merge request, its merge base, *review*, and the confirmed causes in order —
60
+ each with its rows' text from `rows.md`, its disposition, and the trailer its commit ends on:
61
+ `Answers: pass <k>: <n>, <m>`, or `Answers: <the comment's link>` for a person's row. Put its
62
+ question to you, and your answer to that same agent with `SendMessage`.
63
+ 4. **File** each `file` row: written as `codelife help template bug` or `feature` prints an issue,
64
+ its first line `# <sentence>`, and filed by `codelife issue create <nature> <severity|->
65
+ mr:!<n> <file>`.
66
+ 5. **Push once**, when the branch is ahead of its upstream: `codelife mr open`, which keeps the
67
+ description; what it prints put to you with each question a line names — on a yes to merging
68
+ the target in, `git merge origin/<target>` and the dry run again; a `held:` line, a stop naming
69
+ `/work <n>`, whose choice it is; on your yes, `codelife mr open --send`. Always before the answer: an unpushed
70
+ hash is one the reviewer cannot open.
71
+ 6. **Answer once** — a file in the scratchpad: its first line `codelife: answer — pass <k> — <the
72
+ pushed head sha>`, or `codelife: answer — comments — <sha>` with no pass; then a table
73
+ `| Row | Answer |`, each row's number or its comment's link — a cause's rows in one cell — →
74
+ `fixed in <sha>`, the refusal and its reason with its line and hash when it left one,
75
+ `filed as #<n>`, or the answer; after a stop, a last line `Not reached: <rows> — <why>`. Then
76
+ `codelife mr post <n> <file>`.
77
+
78
+ ## When a cause does not complete
79
+
80
+ The implementer stops at a red or a verification still failing at the cap of
81
+ `codelife help method red-green`, or at a behaviour whose cause is `not located`: its step is
82
+ restored, what is committed stays, and no further cause starts. Steps 4 to 6 still run for what
83
+ completed, the answer naming the rows not reached and why. A re-run resumes from the forge — the
84
+ answer and the trailers are the whole record; a row not located is proposed there as a `file` or a
85
+ `refuse`, its refuted hypotheses the reason.
86
+
87
+ ## Never
88
+
89
+ - Commit, file, push or post what the table did not confirm.
90
+ - Widen a row: what it did not raise is a `file` row, or nothing.
91
+ - Edit or delete a comment, or resolve a thread: the pass is never edited, a person's thread is
92
+ theirs to close.
93
+ - Re-review, or post a finding: this skill evaluates nothing.
94
+ - Push outside `codelife mr open --send`, or answer with a hash not pushed.
95
+ - Check out, switch or stash anything.
96
+ - Answer in a language the user did not write in, or write anything but English into the
97
+ repository or the tracker.
98
+
99
+ ## Output
100
+
101
+ The run ends on this block, under this exact heading:
102
+
103
+ ```markdown
104
+ ### work-feedback result
105
+ - Produced: each cause's commit; each refusal, with its line when it left one; the issues filed;
106
+ the push; the answer's link.
107
+ - Decided: the table, each disposition and cause you changed, each question the implementer put to
108
+ you.
109
+ - Left open: the refusals, for the reviewer to accept or keep; the rows a stop left unanswered,
110
+ with its reason.
111
+ - Next: `/review-mr` for the reviewer's next pass; the merge when nothing stands; `/work <n>` on an
112
+ issue filed.
113
+ ```