@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,103 @@
1
+ ---
2
+ name: onboard
3
+ description: Create or update the documents a newcomer — human or agent — needs to arrive: README, CONTRIBUTING, CLAUDE.md, the per-package briefs, and a library's consumer SKILL.md — the code read first, every change proposed as its own passage.
4
+ argument-hint: "[document…]"
5
+ ---
6
+
7
+ # /onboard
8
+
9
+ Creates or updates the **documentation set** a newcomer needs to arrive — `README.md` the map,
10
+ `CONTRIBUTING.md` the human register, `CLAUDE.md` the agent brief, a package's own `CLAUDE.md`, and
11
+ a library's consumer `SKILL.md` that ships in its tarball. It reads the code first and the documents
12
+ second, lists every gap, and proposes each change as a **passage** you accept or refuse on its own.
13
+ A whole document is written only when it is absent, or on request. One verb reads; this brief
14
+ carries what is yours to decide and the writing.
15
+
16
+ ## Preconditions
17
+
18
+ None to check here: `codelife onboard prep` prints a `- stop:` line for each — no contract or an
19
+ invalid one, a document of the set with changes not committed. A stop ends the run: say it in your
20
+ reply with what to do, and run nothing else. A `- known: not read` line does not stop: say it, and
21
+ go on. Work on the branch checked out.
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 onboard prep`, and its block written **in your reply**, in the user's language — a
32
+ tool's output is not one: the kind and the set it makes, each document, the facts, the open bugs
33
+ and the pending notes; and that passages will be proposed, not rewrites.
34
+
35
+ ## Parameters
36
+
37
+ `[document…]` — `readme`, `contributing`, `claude`, `skill`, or a package name, case-insensitive,
38
+ file names accepted; **all** by default. A full rewrite of one document, on request only. Inferred
39
+ from the conversation when a gap was noticed there — a passage `/setup` named in its *Next*, a false
40
+ sentence a review read — and **stated**.
41
+
42
+ ## Steps
43
+
44
+ 1. **Read the code** — from prep's facts, the code the documents describe: the entry points, the
45
+ central mechanism, the layering, the build. Before any document: a document read first frames
46
+ what the code is looked at for.
47
+ 2. **Read the set; list the gaps** — each document against its template, `templates/<document>.md`
48
+ in this skill's directory, which gives its sections, its audience and what it never holds;
49
+ against the code and prep's facts; and against `- known:` and `- notes:`. A status paragraph is
50
+ read first, claim by claim. A gap is:
51
+ - a verifiable statement now false — a path, a script name, a version, a name that moved;
52
+ - a count — answered by removing it and naming the command that gives it;
53
+ - a section of the template missing;
54
+ - a verifiable fact copied — from the contract, a tool file, or another document of the set;
55
+ - a rule the contract now declares — `## Never`, `## Raise before doing`, a `guards[]` entry —
56
+ still written as prose or as a habit;
57
+ - a behaviour an open bug contradicts, or a pending note's subject, written as the design;
58
+ - a document absent, or a `SKILL.md` prep flags.
59
+ 3. **Propose** — every passage in one reply, numbered: the document, the gap in one line, the
60
+ current text and the proposed text. An absent document is its template filled from the code,
61
+ shown whole. You answer in one message: each **accepted**, **refused** — recorded, not argued —
62
+ or **later**, with what it waits for. Write the accepted ones and nothing around them.
63
+ 4. **Commit** — `codelife commit <message file> <path>…` on the files an accepted passage changed,
64
+ `docs: <what changed>`. Nothing accepted → no commit, said in one line.
65
+
66
+ ### What the documents hold
67
+
68
+ - A **verifiable fact** — a command, a script's body, a version, a path, a tier — is **cited**
69
+ where it lives, never copied: *the verification tiers are in `.claude/codelife.md`*; *Node ≥ 22,
70
+ see `engines` in `package.json`*. The plugin's conventions — the skills, the scripts, the
71
+ branches, the labels, the changelog, the release — are cited as the plugin's. A **rule** may be
72
+ written in both `CONTRIBUTING.md` and `CLAUDE.md`: didactic in one, dense in the other.
73
+ - Diagrams are mermaid.
74
+ - A package's own `CLAUDE.md` is proposed only when a package has rules of its own — its own test
75
+ configuration or toolchain, a root rule naming it.
76
+ - `SKILL.md` exists for `kind: lib` only, beside the version file: its frontmatter `name` is the
77
+ package name without its scope, and listing it in the package's `files` is the one configuration
78
+ line this skill proposes.
79
+
80
+ ## Never
81
+
82
+ - Copy a verifiable fact the contract or a tool file states, or write a count.
83
+ - Write a passage not accepted; reformat, reflow or reorder the text around one; or rewrite a
84
+ refused passage into another proposal in the same run.
85
+ - Touch code, tests, configuration — `files` for `SKILL.md` aside — or a document outside the set.
86
+ - Put tagged regions or generated markers into a document: a public `README.md` carries none.
87
+ - Check out, switch, stash, add a worktree, or chain into another skill.
88
+ - Answer in a language the user did not write in, or write anything but English into the
89
+ repository or the tracker.
90
+
91
+ ## Output
92
+
93
+ The run ends on this block, under this exact heading, its fields in the user's language:
94
+
95
+ ```markdown
96
+ ### onboard result
97
+ - Produced: the documents written or changed, and the commit.
98
+ - Decided: each passage accepted, refused or later, in the user's terms.
99
+ - Left open: each passage refused or later, with its document and its reason — what the next
100
+ audit's DOC lens reads.
101
+ - Next: `/audit targeted DOC` when a document was written whole; otherwise nothing. Name it; start
102
+ none.
103
+ ```
@@ -0,0 +1,31 @@
1
+ # CLAUDE.md
2
+
3
+ {{What the project is, in two dense sentences, for an agent that will edit it. Then: the
4
+ verifiable facts about this repository — its kind, its tracker, the file that carries the
5
+ version, the guards, the generated outputs — live in `.claude/codelife.md`, the codelife contract.
6
+ This document stays prose, for an agent working on the repository: architecture, the rules the
7
+ code cannot teach, and the reasons — never the commands and tiers, which are the contract's, nor
8
+ the audit findings, which are the tracker's.}}
9
+
10
+ ## Architecture
11
+
12
+ {{The layering, as a mermaid diagram when the layers are more than two, and the one sentence on
13
+ which direction imports go. The central mechanism, named. Where the entry points are.}}
14
+
15
+ ## Rules not guessable from the code
16
+
17
+ {{One rule per line, each with its reason: a peer version pinned for a reason the manifest does
18
+ not state, an ordering the tests do not enforce, a file that is generated and must not be edited.
19
+ A rule the contract's `## Never` or `## Raise before doing` already states is cited, not repeated.}}
20
+
21
+ ## Conventions
22
+
23
+ {{What the plugin does not fix and this repository chose: naming, the test file next to its
24
+ module, the scope vocabulary of commits read from the history. Everything the plugin fixes —
25
+ branches, labels, tiers, the release — is the plugin's and is not written here.}}
26
+
27
+ ## Further reading
28
+
29
+ {{`docs/spec/README.md`, the specification's entry point, where each decision is recorded;
30
+ `docs/brainstorm/`, the topics not settled yet, each an unfinished note; the contributor guide — as
31
+ links, with one line each on when to open them.}}
@@ -0,0 +1,34 @@
1
+ # Contributing to {{name}}
2
+
3
+ {{Two sentences on what a contributor is joining: what the project is, and how it is worked on —
4
+ with the codelife skills, one deliberate step at a time. This file is didactic, in full
5
+ sentences, for a human contributor; `CLAUDE.md` says the same rules densely, and neither defers to
6
+ the other. No verifiable fact the contract or `package.json` states is copied here.}}
7
+
8
+ ## Setup
9
+
10
+ {{What a fresh clone needs, cited rather than copied: the runtime version is in `engines` of
11
+ `package.json`; the package manager is the one `packageManager` names; the guards are wired as
12
+ `.claude/codelife.md`'s `## Setup` says. Then the one thing a newcomer would not guess.}}
13
+
14
+ ## Layout
15
+
16
+ {{The packages or directories, each with its role and the layer it belongs to, in the order a
17
+ reader meets them. Where the tests live, and where the build writes.}}
18
+
19
+ ## The daily loop
20
+
21
+ {{The skills in the order of a working day, each in one sentence of what it does for you: the
22
+ overview, an issue worked, a commit, a merge request, its review, its feedback. The commands are the
23
+ plugin's; this section says when you reach for each.}}
24
+
25
+ ## Verification and hooks
26
+
27
+ {{Cite the contract: the verification tiers, the guards a diff triggers and the generated outputs
28
+ are in `.claude/codelife.md`. Then the rule worth explaining — why a tier exists, what a guard
29
+ protects — in a sentence or two. No script body here.}}
30
+
31
+ ## Releasing
32
+
33
+ {{Who releases, from which branch, and that `/release` does it from the contract. The release
34
+ lines the project maintains, and what a hotfix is for.}}
@@ -0,0 +1,30 @@
1
+ # {{name}}
2
+
3
+ {{What it is, in two sentences: the need it answers and the shape it takes — a library, an
4
+ application, a tool. This file is the map, for anyone arriving: no command, no rule, no
5
+ architecture.}}
6
+
7
+ ## Layout
8
+
9
+ {{One line per package or top-level directory that a newcomer needs to place: what it holds and
10
+ who it is for. A single-package repository says so in one line.}}
11
+
12
+ ## Where to go
13
+
14
+ | You are | Read |
15
+ |---|---|
16
+ | using {{the library or the application}} | {{the consumer document — `SKILL.md` for a library, the user guide for an application}} |
17
+ | contributing | [`CONTRIBUTING.md`](CONTRIBUTING.md) |
18
+ | an agent working on this repository | [`CLAUDE.md`](CLAUDE.md) |
19
+ | an agent writing code that uses it | {{`packages/<name>/SKILL.md`, or "nothing: an application has no consumer"}} |
20
+ | reporting a vulnerability | {{the channel — a private issue, an address}} |
21
+
22
+ ## Project state
23
+
24
+ {{The tracker, as a link. The audit campaigns, as a link to the table of `docs/audit/README.md`.
25
+ The changelog, as a link. One paragraph of status if the project wants one — every claim in it
26
+ verifiable, and read claim by claim at the next `/onboard`.}}
27
+
28
+ ## Licence
29
+
30
+ {{The licence, and a link to the file.}}
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: {{the package name without its scope — lowercase letters, digits and hyphens}}
3
+ description: {{"Use when writing, reviewing or debugging code that uses <package>": what it is, and the one rule that decides whether that code works.}}
4
+ ---
5
+
6
+ # Using {{package}}
7
+
8
+ {{The core usage rule, first and in bold: the one call, order or ownership rule that every
9
+ correct use follows and every silent failure breaks. One paragraph, with a two-line example. This
10
+ file is for an agent *using* the library: no internals, nothing a contributor needs.}}
11
+
12
+ ## The API's shape
13
+
14
+ {{The handful of entry points, each in one line: what it takes, what it returns, when it is
15
+ called. No internals. Link to the reference documentation rather than restating it.}}
16
+
17
+ ## The mistakes that silently break it
18
+
19
+ {{One per line, each as *doing X looks fine and breaks Y because Z*: the reactivity lost, the
20
+ listener leaked, the value read at the wrong time. This section is the reason the file exists.}}
21
+
22
+ ## Disposal and lifecycle
23
+
24
+ {{What must be disposed, in which order, and what happens when it is not. What outlives what.}}
@@ -0,0 +1,15 @@
1
+ # {{package}} — CLAUDE.md
2
+
3
+ {{The package's role in one sentence, and the layer it sits in, for an agent working inside it.
4
+ This brief exists because the package has rules of its own; what the root `CLAUDE.md` already says
5
+ is not repeated here.}}
6
+
7
+ ## Its own rules
8
+
9
+ {{One per line, with its reason: the toolchain it differs on, the test configuration it carries,
10
+ the dependency it may not take.}}
11
+
12
+ ## What it must not touch
13
+
14
+ {{The packages or directories an edit here must leave alone, and why — the direction imports go,
15
+ the output another package owns.}}
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: overview
3
+ description: Read-only — where the repository stands, what is stale, and the single most useful skill to run next.
4
+ ---
5
+
6
+ # /overview
7
+
8
+ One screen, **read-only**, saying where the repository stands, then the one skill to run next. It
9
+ asks nothing and writes nothing, which is its whole value: it can be run at any moment without
10
+ consequence. Everything on the screen, *Next* included, is read and decided by `codelife overview`:
11
+ *Next* is the first rule of a fixed table that holds, never a judgement.
12
+
13
+ ## Preconditions
14
+
15
+ None to check: a repository without a contract, a machine not connected, a tracker that does not
16
+ answer — each is a line of the screen, and *Next* says what to run.
17
+
18
+ ## Brief
19
+
20
+ **Who gave the go-ahead**, and from what, opens it: you, typing the command or answering this
21
+ brief; your confirmed table in a driver, which answers what it named — ask only the rest; the word
22
+ `delegate`; or a session that relayed your words, quoted here — relayed is not delegated. Typed or
23
+ tabled, this brief is an announcement; otherwise the run **stops here** for your go-ahead, after
24
+ nothing but a preparation that only reads.
25
+
26
+ Nothing else: the screen follows.
27
+
28
+ ## Parameters
29
+
30
+ None, of any kind.
31
+
32
+ ## Steps
33
+
34
+ 1. **Read** — `codelife overview`, from the repository's root. It takes a few seconds per dozen
35
+ open issues; let it finish.
36
+ 2. **Show** — write its screen in your reply, in the user's language — a tool's output is not one:
37
+ every section, in its order, every line kept, *unreadable* and *none* lines included, and the
38
+ **Next** line with its reason. Translate the words, never the commands, numbers, branches or
39
+ quoted errors.
40
+ 3. **Close** — the result block below, in the same language.
41
+
42
+ ## Never
43
+
44
+ - Write anything — no file, comment, label or issue — even to fix what the screen shows stale: it
45
+ says so, and the skill *Next* names fixes it.
46
+ - Ask anything, or chain into the skill *Next* names.
47
+ - Change *Next*, reorder the screen, drop an empty section, or read a source the verb did not.
48
+ - Answer in a language the user did not write in, or write anything but English into the
49
+ repository or the tracker.
50
+
51
+ ## Output
52
+
53
+ The run ends on this block, under this exact heading, its fields in the user's language:
54
+
55
+ ```markdown
56
+ ### overview result
57
+ - Left open: the verb's **Left open** lines, one each, as it lists them — or nothing.
58
+ - Next: the verb's **Next** line, its command and its reason.
59
+ ```
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: port-toolchain
3
+ description: Bring a library's or an application's toolchain to the target, one commit per item — an item you defer is filed, and the close names each item left with the issue carrying its reason.
4
+ argument-hint: "[item]"
5
+ ---
6
+
7
+ # /port-toolchain
8
+
9
+ Brings the toolchain of a library or an application to the plugin's target — pnpm and its
10
+ workspace, Vitest, characterisation tests, Vite+, TypeScript, Oxlint and Oxfmt — one item at a
11
+ time, on a repository `/setup` has set up. It keeps **no state file** — the verbs read what is done
12
+ from the repository — and never chains into another skill. Three verbs read, and write what the
13
+ plugin fixes; this brief carries what is yours to decide and the work done by hand.
14
+
15
+ ## Preconditions
16
+
17
+ None to check here: `codelife port prep` prints a `- stop:` line for each — no contract or an
18
+ invalid one, `kind: none`, the base's scripts or hooks to do, a machine not connected, a tree not
19
+ clean. A stop ends the run: say it in your reply with what to do, and run nothing else. Work on the
20
+ branch checked out.
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
+ Then `codelife port prep`, and its block written **in your reply**, in the user's language — a
31
+ tool's output is not one: every line kept as printed, the kind, each item with its state and its
32
+ reasons, the `- toolchain:` line and the item it proposes.
33
+
34
+ ## Parameters
35
+
36
+ `[item]` — one item to play or replay; without it, every item *to do*, from prep's `- next:`.
37
+
38
+ ## Steps
39
+
40
+ 1. **Propose** prep's `- next:` item, or `[item]`: `codelife port item <name>`, its block in your
41
+ reply — what it writes, an existing file's difference included, and its checks — with the work
42
+ below; then **now, or later**. An item *deferred* names its issue: show it, never ask blind.
43
+ - **Later** — a deferral, never a refusal: `codelife issue create --once feature low
44
+ port:<item> <file>`, the reason just given as its body; the run goes on with the next item prep
45
+ proposes, never this one again in this run. A repository that will never take it closes that
46
+ issue `wontfix`.
47
+ 2. **Play** — the item's work below; `codelife port item <name> --write` where it writes from the
48
+ plugin, `--check` once the work by hand is done. A `- stop:` or `- failed:` line ends the run,
49
+ quoted: report it, never route around it. **Nothing to change** is an outcome only when every
50
+ point below was checked and the check is green: no commit, reported *already satisfied*.
51
+ 3. **Commit** — `codelife commit` on the verb's `- paths:` and the files the work changed,
52
+ `chore(toolchain): <what the item did>`, one item to one commit — two for `e` and `e'`. Then
53
+ `codelife port prep` again and back to 1: proposing the next item asks whether to continue.
54
+ 4. **Close** — `codelife port prep` once more, nothing written: its `- toolchain:` line, each item
55
+ not done with its reason and its issue; then the result block.
56
+
57
+ ### The items
58
+
59
+ A tool's version is `codelife port version <tool>`'s `- version:` line. An `- ask:` line — a major
60
+ crossed — is put to the user with its date and the newest release inside the current major; a
61
+ `- held:` one only when the work needs that release. A refused install takes an older version,
62
+ never a `minimumReleaseAgeExclude` entry.
63
+
64
+ - **a1 · workspace** — every in-house dependency, transitively (a path, a git URL, a link to another
65
+ repository of the owner), a **root** submodule under `submodules/<name>`, initialised
66
+ non-recursively; `pnpm-workspace.yaml` covering `submodules/*` and the repository's own packages,
67
+ `minimumReleaseAge: 1440` unless one is set; `pnpm.overrides` sending each in-house package to
68
+ `workspace:*`, the repository's `file:` specifications converted; `packageManager` pinned, the
69
+ other lockfile deleted, `prepare` kept. Run the build the repository had: it must still pass. A
70
+ phantom dependency is filed with the import that revealed it, never hoisted silently.
71
+ - **a2 · Vitest** — `vitest`, the `test/` folder, one trivial test: break it once, see it red,
72
+ restore it.
73
+ - **b · non-regression** — `--write` instantiates the characterisation tests, and its check's first
74
+ run records the snapshots and the bundle baseline against the build **as it stands**. A build with
75
+ no declaration file leaves that half out: file its issue. File one issue naming what the tests do
76
+ not cover — they hold the package's shape, not what it computes. An application's are written by
77
+ hand: the build, a start-up smoke in Vitest browser mode, the pure modules snapshotted.
78
+ - **c · Vitest up to date** — moved to its version, the configuration migrated from Vitest's own
79
+ migration notes; a test that passes only on the old version is filed with both outputs.
80
+ - **d · the build** — `vite-plus` at its version; `--write` for `vite.config.ts`, every Vitest
81
+ configuration moved into its `test` block, one project per file, and deleted; the former
82
+ bundler's commands replaced in the manifest and every caller, its configuration deleted; the
83
+ `generated[]` entry the verb prints written through `codelife setup contract
84
+ .claude/codelife.md`. Show the regenerated output against the previous one — export names,
85
+ format, size — and explain each difference before going on; a size that dropped for stripped
86
+ comments re-records the baseline, with that reason. For a library, ask once whether it wants a
87
+ playground: yes → `--write --playground`, `tsconfig.json`'s `paths` mapping its name to `src/`.
88
+ A plugin of the old bundler with no equivalent is filed, naming what it did.
89
+ - **e · TypeScript** — moved first, alone: `chore(toolchain): move TypeScript to <version>`. Then
90
+ `--write` for `tsconfig.json`, `target` and `lib` at the library's runtime floor; `.js` renamed to
91
+ `.ts` one folder at a time, its errors fixed before the next; `chore(toolchain): type the source`.
92
+ An escape that stays carries its reason beside the line, and is filed, one issue each.
93
+ - **e' · lint and format** — the old linter's enabled rules compared with Oxlint's one by one: a
94
+ rule with no equivalent is covered by a named mechanism, or filed as lost. Two commits, never
95
+ merged: `chore(toolchain): fix the lint errors`, the source alone, the target's linter run by
96
+ hand; then `chore(toolchain): move lint and format to the target's tools` — the old tools taken
97
+ off the ported package (excluded where a sibling package keeps them, their own check still green)
98
+ and the formatter run, its check first: when it changes nothing, the body says so. A rule
99
+ disabled to get here is filed, one issue each.
100
+ - **f · scripts** — `--write` puts the target's five verbatim, the difference shown first: a script
101
+ doing more is kept inside the new command or filed with its command quoted. Every caller updated —
102
+ CI, `README.md`, `CONTRIBUTING.md` — then `--write --test <a test file>`.
103
+
104
+ ## Never
105
+
106
+ - Propose an item whose precondition is not met, stop the run at a deferred item, mix two items in
107
+ one commit, or widen one to fix what it finds — that is an issue, `codelife issue create`.
108
+ - Apply an escape hatch silently, silence a type error with a blanket `any`, weaken a
109
+ characterisation test, or edit a snapshot by hand.
110
+ - Overwrite a script, a hook or a configuration without showing the difference first.
111
+ - Create a branch, check out, stash, bypass a hook, keep a state file, or chain into `/setup`,
112
+ `/audit` or any other skill.
113
+ - Answer in a language the user did not write in, or write anything but English into the
114
+ repository or the tracker.
115
+
116
+ ## Output
117
+
118
+ The run ends on this block, under this exact heading, its fields in the user's language:
119
+
120
+ ```markdown
121
+ ### port-toolchain result
122
+ - Produced: one commit per item played.
123
+ - Decided: each item played, already satisfied or deferred, and each decision an item raised,
124
+ attributed to the user.
125
+ - Left open: prep's `- toolchain:` line, each item not done with its issue; the debt an item filed.
126
+ - Next: `/port-toolchain` again for the items left; `/audit`. Name them; start none.
127
+ ```
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: release
3
+ description: Cut a version — the bump confirmed, the changelog section, the release commit, the merge into main and the tag, the release entry and the hand-off to the pipeline.
4
+ ---
5
+
6
+ # /release
7
+
8
+ Closes the cycle: `develop` → `main`, a patch on `main` after a hotfix, or a patch on a `support/`
9
+ line. Three verbs do the work; this brief asks what is yours to decide — the version, an audit
10
+ first, each push — and **hands off**: it never publishes to a registry and never watches a pipeline.
11
+ `--prepare` stops at the release commit, on any branch; a later plain `/release` on `develop`
12
+ resumes it at the merge.
13
+
14
+ ## Preconditions
15
+
16
+ None to check here: `codelife release prep` checks the branch, a clean tree, `origin`, the version
17
+ file and the changelog generator, and prints a `- stop:` line for each that fails. A stop ends the
18
+ run — say it in your reply with what to do, and run nothing else.
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
+ Then `codelife release prep` (with `--prepare` when given), and its block written **in your reply**,
29
+ in the user's language — a tool's output is not one: every line, the `breaking:` ones included,
30
+ commands, versions and quoted errors kept as printed. Then the questions, together, each with its
31
+ recommendation: the version — `bump:`'s, or the first one when there is no tag; the `support:` line
32
+ with it, one answer; the audit `audit:` proposes, recommended. A `resume:` line asks nothing: the run
33
+ goes to step 2 with no version.
34
+
35
+ ## Parameters
36
+
37
+ `[--prepare]`. Nothing else: the branch, the scheme, the bump, the tag and its target are derived,
38
+ and the version is asked in the brief.
39
+
40
+ ## Steps
41
+
42
+ 1. **Audit** — when you accept the one proposed, the run stops here: Next is `/audit`, then
43
+ `/release` again. Declined, it is said in the result block.
44
+ 2. **Cut** — `codelife release cut <version>` (`--prepare` when given; no version on a `resume:`).
45
+ It writes the version, the changelog section and the generated outputs, runs the release tier,
46
+ commits `chore(release): <version>`, then merges and tags locally. Write its block in your reply,
47
+ then the section `section:` counts: whole, read from `CHANGELOG.md`, when it has 40 lines or
48
+ fewer; longer, its `— **breaking**` entries and the file's path — the counts are the verb's,
49
+ never yours. A `- stop:` line ends the run, said with what to do. Under `--prepare` the run ends
50
+ here.
51
+ 3. **Push** — each `- push:` line is a command for **you** to run, one at a time, with `! ` before
52
+ it: list them in your reply, in order, and wait until you say they are done. Nothing is pushed by
53
+ the run.
54
+ 4. **Entry** — `codelife release entry`, its block written in your reply: the release entry, the
55
+ pipeline's URL, the registry page and what to watch for.
56
+
57
+ ## Never
58
+
59
+ - Push, publish, watch a pipeline, or move a branch or a tag yourself — the verbs and you do that.
60
+ - Edit the generated list of the changelog section; the prose around it may be retouched, then
61
+ committed as its own `docs` commit.
62
+ - Go on past a `- stop:` line, or cut a version you did not confirm.
63
+ - Answer in a language the user did not write in, or write anything but English into the
64
+ repository or the tracker.
65
+
66
+ ## Output
67
+
68
+ The run ends on this block, under this exact heading, its fields in the user's language:
69
+
70
+ ```markdown
71
+ ### release result
72
+ - Produced: the release commit, the merge, the tag, the changelog section, the release entry, the
73
+ hand-off URLs — or, under `--prepare`, the commit alone.
74
+ - Decided: the version, the support line when one was opened, the audit run or declined.
75
+ - Left open: a push not yet made; an entry `degraded`; an audit declined.
76
+ - Next: nothing — the pipeline is watched by a person at the URL above; `/audit` when you accepted
77
+ one; `/release` on `develop` once a `--prepare` branch is merged.
78
+ ```
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: review-mr
3
+ description: Review another person's merge request — the checks, How to test, Claude Code's /code-review and a reader against the specification and the plan — in one numbered comment a pass, issues for the debt it did not create, and the forge's own verdict.
4
+ argument-hint: "[mr-number]"
5
+ ---
6
+
7
+ # /review-mr
8
+
9
+ Reviews the diff between a merge request's head and its merge base, in place at the head: the
10
+ checks and *How to test* first, then `/code-review` and a reader, blind to each other. Each pass
11
+ posts one new comment; the debt it did not create becomes issues; the verdict is the forge's own.
12
+
13
+ ## Preconditions
14
+
15
+ `codelife review prep` checks them and stops on the first that fails, naming it: a contract whose
16
+ `tracker.kind` names a forge, connected — else `/setup`; a merge request another account authored,
17
+ since one's own was reviewed inside its unit; `HEAD` at its head and a clean tree — asserted, never
18
+ arranged: the stop names the forge's checkout command.
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 `review prep`'s summary alone: the merge request and where its number came from, its
29
+ target and merge base, which pass, *How to test*'s commands and manual steps, the issues it closes
30
+ and each citation that resolves to nothing; with a manual step, that in Claude Code's default
31
+ permission mode its `reproduce` agent asks you to approve commands, the review waiting on each;
32
+ and what will be posted — one comment, issues, a verdict.
33
+
34
+ ## Parameters
35
+
36
+ `[mr-number]`; absent, the open merge request of the current branch, which the preparation names.
37
+ Nothing else: a review has one shape, whatever the size of the diff.
38
+
39
+ ## Steps
40
+
41
+ 1. **Prepare** — `TMPDIR=<the session's scratchpad> codelife review prep [<n>]`. A `- stop:` line
42
+ ends the run, its reason said. Its run folder holds what the next steps read.
43
+ 2. **The checks, before any agent** — `codelife checks <merge base> <run folder>/commands.txt`.
44
+ Each `failed:` line is an introduced `high`, quoted from its lines — *How to test*'s at its line
45
+ in the description: the merge request does not do what it says. A failure the merge request did
46
+ not cause — a missing binary, no network — and a `could not tell` are no finding, but a line of
47
+ the pass. Each bullet the summary names *not runnable as written* is a `low` on the description.
48
+ 3. **Each manual step** of `manual.md`, one at a time, to one `codelife:reproduce` agent, the step
49
+ and the summary's `app:` line its prompt: `yes` passes; `no` is an introduced `high`, quoting what happened; `inconclusive` is
50
+ *not played*, with what was tried. Its question goes to you, your answer back to it with
51
+ `SendMessage`. A step that needs this merge request's own plugin — it runs `/review-mr`, or a
52
+ session loading the branch — goes to none: *not played*, naming
53
+ `claude --plugin-dir <a checkout of the head>` and its actions as what to run by hand.
54
+ 4. **Hunt, blind, in one message**: one `codelife:reader` agent, its prompt *read
55
+ `<run folder>/case.md`, the diff it names and the rules it touches; your report is your last
56
+ message*, and nothing of this conversation; and the Skill tool on `code-review`, args
57
+ `medium <merge base>...<head> — review the diff between these two commits of this checkout; post
58
+ nothing and fix nothing`, wrapped in no agent. Neither sees the other's findings; wait for both.
59
+ 5. **Merge, refute nothing** — one list, each finding with its severity, `file:line`, why, fix and
60
+ source; two that name one defect are one. On a line `lines.tsv` lists it is introduced;
61
+ elsewhere it is debt, filed unless `known.txt` carries it — *named, not filed* under a submodule
62
+ the summary names. A finding that holds a rule's *reason* false, not the diff against the rule,
63
+ is a **contest**: an issue, no number. On a later pass, `comments.md` holds the earlier pass and
64
+ what people wrote since: each earlier number keeps it and takes its state — *fixed by* a commit,
65
+ *open*, *refused* with the author's reason, or *now pre-existing, filed as #n* once `lines.tsv`
66
+ no longer lists its line —, new ones after the highest.
67
+ 6. **One table** — each number with its severity, place, state and source; each refusal, accepted
68
+ or kept open; each debt and contest to file; and the verdict: **approve** when no introduced
69
+ finding is left open, **request changes** otherwise — which GitLab shows and does not enforce. A
70
+ draft gets a status instead, *not ready* with the count left open or *ready for review*, and no
71
+ verdict. Debt never weighs. One answer; nothing is posted before it.
72
+ 7. **Post**, from the confirmed table: each debt to file and contest written as
73
+ `codelife help template bug` or `feature` prints an issue, its first line `# <sentence>` — a
74
+ contest's body quoting the rule's reason and the fact against it, and asking whether the rule
75
+ still holds — and filed by `codelife issue create <nature> <severity|-> mr:!<n> <file>`; then the
76
+ pass, written from `templates/pass.md` into the run folder, its comments removed, and posted by
77
+ `codelife mr post <n> <file>`, which posts nothing when the head moved; then, unless a draft,
78
+ `codelife mr verdict <n> approve|request <the pass's link>`.
79
+ 8. **Close** — remove the run folder, then read `git status --porcelain` and remove nothing: a file
80
+ a guard rebuilt is named under *Left open*; any other stops the run, named as one the review left.
81
+
82
+ ## Never
83
+
84
+ - Check out, stash, detach or switch anything.
85
+ - File, post or send a verdict the table did not confirm.
86
+ - Weigh debt in the verdict, or carry it in the comment.
87
+ - Hand either hunter the other's findings, start an agent to refute one, or wrap `/code-review`.
88
+ - Edit or delete a comment; open, answer or resolve a thread; renumber an earlier finding.
89
+ - Fix, commit or push on the merge request's branch, or widen the diff into an audit.
90
+ - Answer in a language the user did not write in, or write anything but English into the
91
+ repository or the tracker.
92
+
93
+ ## Output
94
+
95
+ The run ends on this block, under this exact heading:
96
+
97
+ ```markdown
98
+ ### review-mr result
99
+ - Produced: the pass's link; the issues filed, debt and contests; the verdict or the draft's status.
100
+ - Decided: the table, any severity you changed, the verdict.
101
+ - Left open: the citations that resolved to nothing; the steps not played or not runnable; each
102
+ debt named, `<file:line> — <why>: /new-issue from <submodule>`; each file a guard rebuilt, or the
103
+ file that stopped the close.
104
+ - Next: `/work <n>` on the debt filed; `/brainstorm #<n>` on a contest; `/work-feedback` for the
105
+ author.
106
+ ```
@@ -0,0 +1,29 @@
1
+ codelife: review — pass <k> — <the head sha this pass read>
2
+
3
+ **<Changes requested | Approved | Not ready: a draft | Ready for review: a draft>** — <one sentence: the
4
+ findings left open that hold it, or that nothing does>. The verdict is the forge's own.
5
+
6
+ ### Findings
7
+
8
+ <!-- The earlier passes' numbers first, in their order, then the new ones. The link is the line at
9
+ the head: https://<host>/<project>/-/blob/<sha>/<path>#L<line> on GitLab,
10
+ https://github.com/<owner>/<repo>/blob/<sha>/<path>#L<line> on GitHub; a How to test step's
11
+ place is its line in the description. None: the one line "Nothing." -->
12
+
13
+ 1. **<critical | high | mid | low>** · [`<path>:<line>`](<link>) — <the problem, in plain words>.
14
+ <Why it matters, one or two sentences.> **Fix:** <the fix it suggests>.
15
+ *<new | open | fixed by <short sha> | refused — <the author's reason>, accepted | refused — <the
16
+ author's reason>, kept | now pre-existing, filed as #<n>>*
17
+
18
+ ### Filed
19
+
20
+ <!-- Left out when nothing was filed. -->
21
+
22
+ - #<n> — <title>
23
+
24
+ ### What this pass read
25
+
26
+ - `codelife checks`: <each failed or could-not-tell line, or "every check passed">
27
+ - *How to test*: <each step — passed, failed, not played and what to run by hand, not runnable> |
28
+ none in the description
29
+ - `/code-review` at `medium`, and the reader against <the issues closed, or the description>