@ersbeth/codelife 0.0.0-bootstrap.0 → 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.
- package/.claude-plugin/plugin.json +19 -0
- package/LICENSE +21 -0
- package/README.md +66 -0
- package/agents/evaluate.md +97 -0
- package/agents/ground.md +49 -0
- package/agents/implementer.md +49 -0
- package/agents/judge.md +128 -0
- package/agents/planner.md +45 -0
- package/agents/prerequisites.md +62 -0
- package/agents/reader.md +40 -0
- package/agents/reproduce.md +65 -0
- package/bin/codelife +4 -0
- package/package.json +40 -1
- package/presets/tsconfig.json +14 -0
- package/presets/vite.config.d.mts +3 -0
- package/presets/vite.config.mjs +49 -0
- package/scripts/audit/cadence.mjs +24 -0
- package/scripts/audit/close.mjs +57 -0
- package/scripts/audit/file.mjs +70 -0
- package/scripts/audit/fold.mjs +48 -0
- package/scripts/audit/lib.mjs +93 -0
- package/scripts/audit/prepare.mjs +180 -0
- package/scripts/audit/table.mjs +65 -0
- package/scripts/brainstorm/decided.mjs +6 -0
- package/scripts/brainstorm/lib.mjs +33 -0
- package/scripts/brainstorm/named.mjs +9 -0
- package/scripts/changelog.mjs +100 -0
- package/scripts/check-tag.mjs +19 -0
- package/scripts/checks.mjs +53 -0
- package/scripts/codelife.mjs +42 -0
- package/scripts/commit-msg.mjs +43 -0
- package/scripts/contract.mjs +179 -0
- package/scripts/former-form.mjs +170 -0
- package/scripts/git/branches.mjs +6 -0
- package/scripts/git/commit.mjs +40 -0
- package/scripts/git/diff.mjs +17 -0
- package/scripts/git/diff_lines.mjs +5 -0
- package/scripts/git/held.mjs +53 -0
- package/scripts/git/is_ancestor.mjs +28 -0
- package/scripts/git/lib.mjs +20 -0
- package/scripts/git/log_since.mjs +27 -0
- package/scripts/git/parent.mjs +51 -0
- package/scripts/git/show.mjs +4 -0
- package/scripts/git/status.mjs +25 -0
- package/scripts/git/submodules.mjs +5 -0
- package/scripts/init.mjs +21 -0
- package/scripts/install.mjs +32 -0
- package/scripts/lenses/A11Y.md +91 -0
- package/scripts/lenses/ARCH.md +90 -0
- package/scripts/lenses/BUG.md +52 -0
- package/scripts/lenses/BUILD.md +40 -0
- package/scripts/lenses/COMPAT.md +67 -0
- package/scripts/lenses/CONF.md +49 -0
- package/scripts/lenses/DEPS.md +43 -0
- package/scripts/lenses/DOC.md +73 -0
- package/scripts/lenses/FAIL.md +57 -0
- package/scripts/lenses/GOV.md +56 -0
- package/scripts/lenses/GUARD.md +47 -0
- package/scripts/lenses/INTENT.md +52 -0
- package/scripts/lenses/LEAN.md +49 -0
- package/scripts/lenses/LINES.md +48 -0
- package/scripts/lenses/PERF.md +61 -0
- package/scripts/lenses/PKG.md +58 -0
- package/scripts/lenses/SEC.md +49 -0
- package/scripts/lenses/STANDARDS.md +62 -0
- package/scripts/lenses/TYPE.md +56 -0
- package/scripts/lenses/VERIF.md +81 -0
- package/scripts/link.mjs +40 -0
- package/scripts/methods/cause.md +21 -0
- package/scripts/methods/comments.md +157 -0
- package/scripts/methods/description.md +67 -0
- package/scripts/methods/message.md +24 -0
- package/scripts/methods/red-green.md +28 -0
- package/scripts/methods/refusal.md +22 -0
- package/scripts/mr/open.mjs +219 -0
- package/scripts/node-floor.mjs +19 -0
- package/scripts/onboard/prep.mjs +93 -0
- package/scripts/overview/codelife-line.mjs +33 -0
- package/scripts/overview/next.mjs +76 -0
- package/scripts/overview/overview.mjs +308 -0
- package/scripts/package-manager.mjs +20 -0
- package/scripts/port/item.mjs +94 -0
- package/scripts/port/lib.mjs +194 -0
- package/scripts/port/prep.mjs +33 -0
- package/scripts/port/version.mjs +50 -0
- package/scripts/pre-commit.mjs +43 -0
- package/scripts/pre-push.mjs +53 -0
- package/scripts/prepare-lib.mjs +81 -0
- package/scripts/read-roadmap/lib.mjs +116 -0
- package/scripts/read-roadmap/moved.mjs +70 -0
- package/scripts/read-roadmap/range.mjs +15 -0
- package/scripts/release/cut.mjs +120 -0
- package/scripts/release/entry.mjs +52 -0
- package/scripts/release/lib.mjs +136 -0
- package/scripts/release/prep.mjs +58 -0
- package/scripts/review-mr/prepare.mjs +163 -0
- package/scripts/roadmap/assemble.mjs +269 -0
- package/scripts/roadmap/cut.mjs +88 -0
- package/scripts/roadmap/prepare.mjs +249 -0
- package/scripts/roadmap/roadmap.md +30 -0
- package/scripts/roadmap/write.mjs +53 -0
- package/scripts/search.mjs +29 -0
- package/scripts/setup/contract.mjs +25 -0
- package/scripts/setup/item.mjs +166 -0
- package/scripts/setup/lib.mjs +205 -0
- package/scripts/setup/prep.mjs +106 -0
- package/scripts/spec-form.mjs +444 -0
- package/scripts/spec.mjs +56 -0
- package/scripts/tags.mjs +27 -0
- package/scripts/target/target-app.md +134 -0
- package/scripts/target/target-base.md +127 -0
- package/scripts/target/target-lib.md +143 -0
- package/scripts/target/templates/audit/README.md +21 -0
- package/scripts/target/templates/characterisation/bundle.test.ts +43 -0
- package/scripts/target/templates/characterisation/declarations.test.ts +44 -0
- package/scripts/target/templates/characterisation/entries.ts +50 -0
- package/scripts/target/templates/characterisation/examples.test.ts +18 -0
- package/scripts/target/templates/characterisation/import.test.ts +22 -0
- package/scripts/target/templates/characterisation/surface.test.ts +68 -0
- package/scripts/target/templates/cliff.toml +61 -0
- package/scripts/target/templates/githooks/commit-msg +9 -0
- package/scripts/target/templates/githooks/pre-commit +9 -0
- package/scripts/target/templates/githooks/pre-push +9 -0
- package/scripts/target/templates/playground/index.html +11 -0
- package/scripts/target/templates/playground/main.ts +9 -0
- package/scripts/target/templates/spec/README.md +35 -0
- package/scripts/target/templates/spec/capability.md +36 -0
- package/scripts/target/templates/spec/glossary.md +5 -0
- package/scripts/target/templates/spec/journey.md +29 -0
- package/scripts/target/templates/spec/principles.md +15 -0
- package/scripts/target/templates/spec/users.md +15 -0
- package/scripts/target/templates/tsconfig.json +9 -0
- package/scripts/target/templates/vite.config.ts +4 -0
- package/scripts/text.mjs +6 -0
- package/scripts/tracker/account.mjs +5 -0
- package/scripts/tracker/auth.mjs +9 -0
- package/scripts/tracker/cli.version.mjs +5 -0
- package/scripts/tracker/close.mjs +20 -0
- package/scripts/tracker/create.mjs +47 -0
- package/scripts/tracker/issue.section.mjs +25 -0
- package/scripts/tracker/issue.update.mjs +13 -0
- package/scripts/tracker/issue.view.mjs +16 -0
- package/scripts/tracker/lib.mjs +130 -0
- package/scripts/tracker/list.mjs +14 -0
- package/scripts/tracker/list.whole.mjs +20 -0
- package/scripts/tracker/lot.row.mjs +42 -0
- package/scripts/tracker/mr.checkout_command.mjs +5 -0
- package/scripts/tracker/mr.comments.mjs +50 -0
- package/scripts/tracker/mr.create.mjs +12 -0
- package/scripts/tracker/mr.description.mjs +8 -0
- package/scripts/tracker/mr.fetch_head.mjs +5 -0
- package/scripts/tracker/mr.find_for_branch.mjs +9 -0
- package/scripts/tracker/mr.post.mjs +40 -0
- package/scripts/tracker/mr.update_description.mjs +8 -0
- package/scripts/tracker/mr.verdict.mjs +34 -0
- package/scripts/tracker/mr.view.mjs +20 -0
- package/scripts/tracker/none.mjs +79 -0
- package/scripts/tracker/note.mjs +12 -0
- package/scripts/tracker/reopen.mjs +8 -0
- package/scripts/tracker/search.mjs +8 -0
- package/scripts/tracker/search_id.mjs +18 -0
- package/scripts/tracker/templates/bug.md +35 -0
- package/scripts/tracker/templates/feature.md +40 -0
- package/scripts/tracker/templates/lot.md +46 -0
- package/scripts/tracker/title.join.mjs +6 -0
- package/scripts/tracker/title.leave.mjs +7 -0
- package/scripts/tracker/title.lot_of.mjs +8 -0
- package/scripts/tracker/title.search_id_filter.mjs +17 -0
- package/scripts/tracker/title.sentence_of.mjs +5 -0
- package/scripts/tracker/view.mjs +25 -0
- package/scripts/verbs.mjs +579 -0
- package/scripts/verify/BUILD.mjs +33 -0
- package/scripts/verify/DEPS.mjs +15 -0
- package/scripts/verify/GOV.mjs +34 -0
- package/scripts/verify/GUARD.mjs +34 -0
- package/scripts/verify/LINES.mjs +22 -0
- package/scripts/verify/PKG.mjs +56 -0
- package/scripts/verify/TYPE.mjs +34 -0
- package/scripts/verify/cut.mjs +73 -0
- package/scripts/verify/history.mjs +32 -0
- package/scripts/verify/lib.mjs +129 -0
- package/scripts/verify/report.mjs +104 -0
- package/scripts/verify/timing.mjs +19 -0
- package/scripts/verify.mjs +29 -0
- package/scripts/work/branch.mjs +81 -0
- package/scripts/work/close.mjs +74 -0
- package/scripts/work/member.mjs +73 -0
- package/scripts/work/prepare.mjs +116 -0
- package/scripts/work/reopen.mjs +40 -0
- package/scripts/work-feedback/prepare.mjs +96 -0
- package/skills/audit/SKILL.md +110 -0
- package/skills/audit/templates/index.md +36 -0
- package/skills/audit/templates/lens.md +44 -0
- package/skills/brainstorm/SKILL.md +144 -0
- package/skills/brainstorm/references/exit.md +57 -0
- package/skills/brainstorm/templates/note.md +79 -0
- package/skills/commit/SKILL.md +68 -0
- package/skills/mr/SKILL.md +82 -0
- package/skills/new-issue/SKILL.md +87 -0
- package/skills/onboard/SKILL.md +103 -0
- package/skills/onboard/templates/CLAUDE.md +31 -0
- package/skills/onboard/templates/CONTRIBUTING.md +34 -0
- package/skills/onboard/templates/README.md +30 -0
- package/skills/onboard/templates/SKILL.md +24 -0
- package/skills/onboard/templates/package-CLAUDE.md +15 -0
- package/skills/overview/SKILL.md +59 -0
- package/skills/port-toolchain/SKILL.md +127 -0
- package/skills/release/SKILL.md +78 -0
- package/skills/review-mr/SKILL.md +106 -0
- package/skills/review-mr/templates/pass.md +29 -0
- package/skills/roadmap/SKILL.md +137 -0
- package/skills/setup/SKILL.md +112 -0
- package/skills/work/SKILL.md +139 -0
- 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>
|