geneseed 4.10.0 → 4.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -0
- package/README.md +4 -3
- package/SHIPPED.md +1 -1
- package/docs/concepts/kits.md +14 -2
- package/docs/concepts/skills.md +1 -1
- package/docs/extending.md +3 -4
- package/docs/guides/run-anywhere.md +2 -2
- package/docs/guides/upgrade.md +2 -2
- package/docs/reference/troubleshoot-install.md +1 -1
- package/docs/web-ui.md +6 -1
- package/harness.config.json +1 -1
- package/js/hosts/link.mjs +88 -1
- package/js/inspect/checks-build.mjs +8 -2
- package/js/inspect/cost.mjs +1 -1
- package/js/inspect/diff.mjs +53 -7
- package/js/inspect/inventory.mjs +1 -0
- package/js/lib/prompt.mjs +19 -2
- package/js/maintain/setup.mjs +92 -28
- package/js/maintain/update.mjs +2 -2
- package/js/web/actions.mjs +8 -0
- package/js/web/api.mjs +39 -17
- package/js/web/catalog.mjs +17 -2
- package/js/web/handler.mjs +1 -0
- package/js/web/server.mjs +11 -5
- package/js/web/state.mjs +38 -3
- package/package.json +1 -1
- package/registry.json +28 -0
- package/src/AGENT.md.tmpl +5 -5
- package/src/agents/_self-improvement.md +11 -0
- package/src/agents/_template.md +1 -8
- package/src/agents/advocate.md +1 -8
- package/src/agents/architect.md +1 -8
- package/src/agents/developer.md +1 -8
- package/src/agents/devops-engineer.md +1 -9
- package/src/agents/docker-expert.md +1 -9
- package/src/agents/docs.md +1 -8
- package/src/agents/empiricist.md +1 -8
- package/src/agents/explorer.md +1 -8
- package/src/agents/framer.md +1 -8
- package/src/agents/historian.md +1 -8
- package/src/agents/kubernetes-specialist.md +1 -9
- package/src/agents/memory-curator.md +1 -8
- package/src/agents/operator.md +1 -8
- package/src/agents/performance.md +1 -8
- package/src/agents/pragmatist.md +1 -8
- package/src/agents/react-engineer.md +38 -0
- package/src/agents/react-reviewer.md +42 -0
- package/src/agents/researcher.md +5 -10
- package/src/agents/reviewer.md +1 -8
- package/src/agents/security.md +1 -8
- package/src/agents/skeptic.md +1 -8
- package/src/agents/spring-boot-engineer.md +1 -9
- package/src/agents/spring-reviewer.md +1 -9
- package/src/agents/spring-security.md +1 -9
- package/src/agents/steward.md +1 -8
- package/src/agents/tester.md +1 -8
- package/src/agents/user-advocate.md +1 -8
- package/src/agents/visionary.md +1 -8
- package/src/kits/react/rules.md +13 -0
- package/src/kits/react.json +18 -0
- package/src/licenses/everything-claude-code.txt +21 -0
- package/src/skills/_self-improvement.md +22 -5
- package/src/skills/brainstorm.md +7 -2
- package/src/skills/codebase-design.md +6 -2
- package/src/skills/debug.md +1 -1
- package/src/skills/develop.md +4 -2
- package/src/skills/handoff.md +1 -1
- package/src/skills/parallel-agents.md +3 -1
- package/src/skills/plan.md +5 -2
- package/src/skills/prototype.md +4 -2
- package/src/skills/react/a11y.md +33 -0
- package/src/skills/react/vite.md +35 -0
- package/src/skills/react/webpack.md +40 -0
- package/src/skills/react-testing.md +68 -0
- package/src/skills/react.md +63 -0
- package/src/skills/research.md +4 -2
- package/src/skills/rule.md +4 -2
- package/src/skills/ship.md +6 -4
- package/src/skills/skill-forge.md +10 -5
- package/src/skills/wayfinder.md +6 -2
- package/src/skills/wiki.md +18 -5
- package/src/upstreams.json +7 -0
- package/themes/_TEMPLATE.json +4 -0
- package/themes/biker.json +4 -0
- package/themes/commentator.json +4 -0
- package/themes/cyberpunk.json +4 -0
- package/themes/gamer.json +4 -0
- package/themes/imperial.json +4 -0
- package/themes/joker.json +4 -0
- package/themes/marvin.json +4 -0
- package/themes/mean.json +4 -0
- package/themes/military.json +4 -0
- package/themes/neutral.json +4 -0
- package/themes/pirate.json +4 -0
- package/themes/sports.json +4 -0
- package/themes/verstappen.json +4 -0
- package/themes/wizard.json +4 -0
- package/web/dist/assets/Activity-44rbWUQI.js +1 -0
- package/web/dist/assets/ActivityDetail-Dk9k893a.js +1 -0
- package/web/dist/assets/Dashboard-DCoUN60W.js +2 -0
- package/web/dist/assets/{Docs-DLVckkew.js → Docs-C_je2lRG.js} +3 -3
- package/web/dist/assets/FilterInput-CZREvrjX.js +1 -0
- package/web/dist/assets/GreenhouseView-BXAOIznW.js +2 -0
- package/web/dist/assets/Installs-DAXF403D.js +3 -0
- package/web/dist/assets/JournalView-DZ184wKB.js +1 -0
- package/web/dist/assets/KitApply-pjhvGha0.js +1 -0
- package/web/dist/assets/Kits-BCCKjSIY.js +1 -0
- package/web/dist/assets/{Laws-BkKnZOBI.js → Laws-BgBUpRkE.js} +1 -1
- package/web/dist/assets/Library-CW0Zl6RF.js +1 -0
- package/web/dist/assets/Loops-BvFOzjEw.js +2 -0
- package/web/dist/assets/{Markdown-iHvBrpRN.js → Markdown-zaXXXHz9.js} +13 -13
- package/web/dist/assets/OperatorHudView-Bs4unPNi.js +2 -0
- package/web/dist/assets/Personal-C23XaT-a.js +1 -0
- package/web/dist/assets/Tabs-b2XFu4OS.js +1 -0
- package/web/dist/assets/activity-Jw8XcPiP.js +1 -0
- package/web/dist/assets/{drawable-CgYi0Dtg.js → drawable-BERkKhx_.js} +1 -1
- package/web/dist/assets/index-C9R_bRw_.js +2 -0
- package/web/dist/assets/{index-BCJz4_8C.css → index-jYlWihN-.css} +1 -1
- package/web/dist/assets/{react-BOF6yL40.js → react-DlYQp10C.js} +1 -1
- package/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/web/dist/assets/sections-ChwaobfW.js +1 -0
- package/web/dist/assets/usePoll-bDFN-Hr6.js +1 -0
- package/web/dist/index.html +5 -4
- package/web/dist/assets/Activity-BjyJaf8e.js +0 -1
- package/web/dist/assets/ActivityDetail-Bo9nRDNV.js +0 -1
- package/web/dist/assets/Dashboard-BQJGU7vE.js +0 -2
- package/web/dist/assets/FilterInput-zLFXoSt6.js +0 -1
- package/web/dist/assets/GreenhouseView--DML7CW3.js +0 -2
- package/web/dist/assets/Installs-CxCiln1F.js +0 -3
- package/web/dist/assets/JournalView-ymgZleHi.js +0 -1
- package/web/dist/assets/Library-C8ercIZv.js +0 -1
- package/web/dist/assets/Loops-C95zhbFl.js +0 -2
- package/web/dist/assets/OperatorHudView-B9qwc3w3.js +0 -2
- package/web/dist/assets/Personal-DyR72AF-.js +0 -1
- package/web/dist/assets/Tabs-ChCr_HqV.js +0 -1
- package/web/dist/assets/activity-DvPxoS4Y.js +0 -1
- package/web/dist/assets/index-B32EvfDT.js +0 -2
- package/web/dist/assets/sections-BET3c1WT.js +0 -1
- package/web/dist/assets/usePoll-NSTzLOF4.js +0 -1
|
@@ -34,12 +34,4 @@ Builds CI/CD pipelines and delivery automation for Spring Boot applications.
|
|
|
34
34
|
## Output contract
|
|
35
35
|
- Files changed, the stage list and what was validated.
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
40
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
41
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
42
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
43
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
44
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
45
|
-
|
|
37
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -34,12 +34,4 @@ Builds small, safe container images for Spring Boot 4 applications.
|
|
|
34
34
|
## Output contract
|
|
35
35
|
- Files changed, the build command and whether the image built and started.
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
40
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
41
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
42
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
43
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
44
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
45
|
-
|
|
37
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/docs.md
CHANGED
|
@@ -49,11 +49,4 @@ independently.)*
|
|
|
49
49
|
- **Receives:** the analyst's brief describing what changed and what needs documenting.
|
|
50
50
|
- **Delivers:** the doc files written/updated, ready for the parent's merge decision.
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
55
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
56
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
57
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
58
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
59
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
52
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/empiricist.md
CHANGED
|
@@ -29,11 +29,4 @@
|
|
|
29
29
|
- A claims ledger: each load-bearing claim → evidenced? → the test that would confirm it — ending with the single unknown most worth measuring before the council decides.
|
|
30
30
|
- If no evidence exists on either side, say exactly that — an empty ledger is a finding; padding it with plausible-sounding data is the one failure this seat cannot commit.
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
35
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
36
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
37
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
38
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
39
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
32
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/explorer.md
CHANGED
|
@@ -47,11 +47,4 @@ independently.)*
|
|
|
47
47
|
- **Delivers:** a distilled brief the next seat (developer/docs) can act on
|
|
48
48
|
directly — the scope, the relevant files, and any constraint already found.
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
53
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
54
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
55
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
56
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
57
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
50
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/framer.md
CHANGED
|
@@ -26,11 +26,4 @@
|
|
|
26
26
|
- The framing read: the real problem in one line, whether the motion fits it, the reframe if the framing is wrong, and the question the council should be debating instead.
|
|
27
27
|
- If the framing holds up under attack, say so plainly and yield — a reframe invented to justify the seat derails a debate that was already sound.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
32
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
33
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
34
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
35
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
36
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
29
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/historian.md
CHANGED
|
@@ -41,11 +41,4 @@ independently.)*
|
|
|
41
41
|
- **Delivers:** the precedent and its lesson, same shape as its own output
|
|
42
42
|
contract above.
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
47
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
48
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
49
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
50
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
51
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
44
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -34,12 +34,4 @@ Deploys Spring Boot 4 applications on Kubernetes.
|
|
|
34
34
|
## Output contract
|
|
35
35
|
- Files changed and a one-line summary; say what was validated and what was not.
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
40
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
41
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
42
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
43
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
44
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
45
|
-
|
|
37
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -61,11 +61,4 @@
|
|
|
61
61
|
and report what was planned and what was applied — never a partial merge left
|
|
62
62
|
unreported ({{LAW:surface-failures}}).
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
67
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
68
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
69
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
70
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
71
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
64
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/operator.md
CHANGED
|
@@ -40,11 +40,4 @@ independently.)*
|
|
|
40
40
|
- **Delivers:** the operability read and the rollback check, same shape as its
|
|
41
41
|
own output contract above.
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
46
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
47
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
48
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
49
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
50
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
43
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -62,11 +62,4 @@ independently.)*
|
|
|
62
62
|
- **Delivers:** measured findings and a verdict, same shape as its own output
|
|
63
63
|
contract above.
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
68
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
69
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
70
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
71
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
72
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
65
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/pragmatist.md
CHANGED
|
@@ -39,11 +39,4 @@ independently.)*
|
|
|
39
39
|
- **Delivers:** the cheapest viable path and what to cut, before any code is
|
|
40
40
|
written — same shape as its own output contract above.
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
45
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
46
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
47
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
48
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
49
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
42
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# {{AGENT}}: react-engineer
|
|
2
|
+
|
|
3
|
+
> {{DESC_REACT_ENGINEER}}
|
|
4
|
+
|
|
5
|
+
{{CREDIT:everything-claude-code:skills/react-patterns/SKILL.md}}
|
|
6
|
+
|
|
7
|
+
Implements React features in a Vite or webpack app, TypeScript or JavaScript, following the react and react-testing skills.
|
|
8
|
+
|
|
9
|
+
## When to dispatch
|
|
10
|
+
- A React component, page, hook or form is scoped and code must be written, or a Vite or webpack build or Jest run is broken and must be made green.
|
|
11
|
+
|
|
12
|
+
## When NOT to dispatch
|
|
13
|
+
- The design is unclear — use [architect](architect.md) first. The visual direction is open — the frontend-design skill first.
|
|
14
|
+
- Tests only — use [tester](tester.md). Non-React code — use [developer](developer.md).
|
|
15
|
+
|
|
16
|
+
## Inputs
|
|
17
|
+
- The scoped task, the target folder or worktree, and the acceptance criteria.
|
|
18
|
+
|
|
19
|
+
## Allowed tools
|
|
20
|
+
- **Read + write to the assigned worktree.** May run the project's lint, typecheck, test and build scripts.
|
|
21
|
+
<!-- bash: allow -->
|
|
22
|
+
- Never commits or pushes ({{DOCTRINE:consent-before-push}}).
|
|
23
|
+
|
|
24
|
+
## Procedure
|
|
25
|
+
0. If `{{DIR_MEMORY}}/agents/<your-name>.md` exists, read it first — your durable lessons from prior dispatches ({{DOCTRINE:persist-insight}}).
|
|
26
|
+
1. Read `package.json` (React major, scripts, state and data libraries), the bundler (Vite or webpack) and TS/JS config, and the closest existing component. Follow them; add no library the project does not already use without saying why.
|
|
27
|
+
2. Keep the folder's language: `.tsx` with typed props and no `any`, or `.jsx`.
|
|
28
|
+
3. Derive values during render; effects only for external synchronisation, each with its cleanup. Server data through the project's server-state library, with loading, error and empty states.
|
|
29
|
+
4. Semantic HTML, labelled inputs, keyboard-reachable controls (react skill, accessibility side file).
|
|
30
|
+
5. Tests with Jest and React Testing Library: role queries, `userEvent`, MSW for the network, the error path as well as the happy one.
|
|
31
|
+
6. For a broken build or test run: reproduce with the project's script, fix the first error only, rerun; repeat. Never `@ts-ignore`, `any` or a disabled lint rule to get green. Stop and report after three failed attempts at one error.
|
|
32
|
+
7. Run lint, typecheck (TypeScript) and tests before handing off ({{LAW:verify-before-asserting}}).
|
|
33
|
+
|
|
34
|
+
## Output contract
|
|
35
|
+
- Files changed, a one-line summary, and each command run with its result.
|
|
36
|
+
- If the task cannot be done as given, report the blocker instead of guessing.
|
|
37
|
+
|
|
38
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# {{AGENT}}: react-reviewer
|
|
2
|
+
|
|
3
|
+
> {{DESC_REACT_REVIEWER}}
|
|
4
|
+
|
|
5
|
+
{{CREDIT:everything-claude-code:agents/react-reviewer.md}}
|
|
6
|
+
|
|
7
|
+
React-specific review only. Generic correctness, naming and structure belong to [reviewer](reviewer.md); defer to it and do not repeat its checks.
|
|
8
|
+
|
|
9
|
+
## When to dispatch
|
|
10
|
+
- A change touches `.tsx` / `.jsx` files, hooks or React tests and needs a framework-aware pass.
|
|
11
|
+
|
|
12
|
+
## When NOT to dispatch
|
|
13
|
+
- No React code in the diff, or a generic review — use [reviewer](reviewer.md).
|
|
14
|
+
- A wider security question (auth design, the API behind the UI) — use [security](security.md).
|
|
15
|
+
|
|
16
|
+
## Inputs
|
|
17
|
+
- The base..head range (or the diff) and the task it was meant to satisfy.
|
|
18
|
+
|
|
19
|
+
## Allowed tools
|
|
20
|
+
- **Read-only.** May read code, run the lint, typecheck and test scripts, inspect history.
|
|
21
|
+
- Does not edit code; it reports. Never moves HEAD, the index or the working tree.
|
|
22
|
+
<!-- bash: allow -->
|
|
23
|
+
|
|
24
|
+
## Procedure
|
|
25
|
+
0. If `{{DIR_MEMORY}}/agents/<your-name>.md` exists, read it first — your durable lessons from prior dispatches ({{DOCTRINE:persist-insight}}).
|
|
26
|
+
1. Read the changed files and `package.json` for the React major. Run lint and, for TypeScript, the typecheck; a missing `react-hooks/rules-of-hooks` or `react-hooks/exhaustive-deps` rule is itself a finding.
|
|
27
|
+
2. Check, in this order:
|
|
28
|
+
- Security: `dangerouslySetInnerHTML` without a sanitiser at the call site; a user-supplied URL in `href`/`src` without a scheme check; a secret in a bundler-inlined env value (`import.meta.env.VITE_*`, webpack `DefinePlugin`); a session token in `localStorage`.
|
|
29
|
+
- Hooks: a hook behind a condition, loop or early return; a missing effect dependency, or an `exhaustive-deps` disable without a reason; an effect without cleanup; a stale closure in a timer or async handler.
|
|
30
|
+
- State: mutation before `setState`; state duplicated or derived through an effect; an effect chain setting state that triggers another effect; `key={index}` on a list that changes.
|
|
31
|
+
- Data: `useEffect` + `fetch` where the project has a server-state library; a request with no loading, error or empty state; a fetch without abort.
|
|
32
|
+
- Accessibility: `<div onClick>`, an unlabelled input, `<img>` without `alt`, an error shown by colour alone, a modal that does not manage focus.
|
|
33
|
+
- Types (TypeScript): `any`, a non-null `!` or an `as` cast that hides a real case, untyped props.
|
|
34
|
+
- Tests: queries by test id or `querySelector` where a role query works, `fireEvent` where `userEvent` fits, sleeps, component snapshots, the error path untested.
|
|
35
|
+
- Performance, only with evidence: memoisation with no measured gain, an inline object defeating a `React.memo` child, a long list not virtualised.
|
|
36
|
+
3. Verify by running the tests rather than assuming ({{LAW:verify-before-asserting}}).
|
|
37
|
+
|
|
38
|
+
## Output contract
|
|
39
|
+
- Findings as Conventional Comments, `label (decoration): file:line — problem — suggested fix`, most serious first; then a **Set aside:** list (or `none`) and a one-line verdict: any blocking → block, any if-minor and nothing blocking → fix-then-ship, otherwise ship.
|
|
40
|
+
- Name any check that was impossible instead of issuing a verdict on partial evidence.
|
|
41
|
+
|
|
42
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/researcher.md
CHANGED
|
@@ -39,8 +39,10 @@
|
|
|
39
39
|
and one empty result is not absence ({{LAW:verify-before-asserting}}).
|
|
40
40
|
3. Open the most promising sources and extract only the relevant slice, never
|
|
41
41
|
the whole page. Prefer primary and recent sources.
|
|
42
|
-
4. Cross-check every material claim
|
|
43
|
-
|
|
42
|
+
4. Cross-check every material claim: one read in the source that owns it (spec, source
|
|
43
|
+
code, official docs, at the version in question) stands on that source; any other needs
|
|
44
|
+
two independent sources.
|
|
45
|
+
Any other single-source or unsourced claim stays marked unverified.
|
|
44
46
|
5. Note recency — flag anything that may be out of date.
|
|
45
47
|
|
|
46
48
|
## Output contract
|
|
@@ -63,11 +65,4 @@ independently.)*
|
|
|
63
65
|
- **Delivers:** the sourced findings list, same shape as its own output
|
|
64
66
|
contract above.
|
|
65
67
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
69
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
70
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
71
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
72
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
73
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
68
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/reviewer.md
CHANGED
|
@@ -55,11 +55,4 @@ independently.)*
|
|
|
55
55
|
- **Delivers:** the findings list and ship/fix-then-ship/block verdict, same
|
|
56
56
|
shape as its own output contract above.
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
61
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
62
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
63
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
64
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
65
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
58
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/security.md
CHANGED
|
@@ -53,11 +53,4 @@ independently.)*
|
|
|
53
53
|
- **Delivers:** severity-ranked findings and a ship/fix-required verdict, same
|
|
54
54
|
shape as its own output contract above.
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
59
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
60
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
61
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
62
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
63
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
56
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/skeptic.md
CHANGED
|
@@ -39,11 +39,4 @@ independently.)*
|
|
|
39
39
|
contract above. Never mechanical proof — this seat runs no commands, so the
|
|
40
40
|
suite and lint results come from the reviewer or tester, not from here.
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
45
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
46
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
47
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
48
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
49
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
42
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -37,12 +37,4 @@ Implements Spring Boot 4 / Java 21+ features, following the spring-boot, spring-
|
|
|
37
37
|
- Files changed, a one-line summary, and the test command with its result.
|
|
38
38
|
- If the task cannot be done as given, report the blocker instead of guessing.
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
43
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
44
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
45
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
46
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
47
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
48
|
-
|
|
40
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -38,12 +38,4 @@ Spring-specific review only. Generic correctness, naming and structure belong to
|
|
|
38
38
|
- Findings as Conventional Comments, `label (decoration): file:line — problem — suggested fix`, most serious first; then a **Set aside:** list (or `none`) and a one-line verdict: any blocking → block, any if-minor and nothing blocking → fix-then-ship, otherwise ship.
|
|
39
39
|
- Name any check that was impossible instead of issuing a verdict on partial evidence.
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
44
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
45
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
46
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
47
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
48
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
49
|
-
|
|
41
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -39,12 +39,4 @@ Spring Security 7 audit only. The generic audit (injection, secrets, dependencie
|
|
|
39
39
|
- Findings by severity (critical, high, medium, low), each with `file:line`, the risk and a fix; then a one-line verdict.
|
|
40
40
|
- Name any check that was impossible instead of issuing a verdict on partial evidence.
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
45
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
46
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
47
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
48
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
49
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
50
|
-
|
|
42
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/steward.md
CHANGED
|
@@ -26,11 +26,4 @@
|
|
|
26
26
|
- A long-term verdict: the structural benefits and risks, the debt this incurs or retires, how reversible it is, and a one-line keep-it-healthy recommendation with the trade-off it accepts.
|
|
27
27
|
- If the change is too small or too reversible to carry long-term stakes, say so and stand down — inflating stakes to justify the seat is its own kind of debt.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
32
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
33
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
34
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
35
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
36
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
29
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/tester.md
CHANGED
|
@@ -48,11 +48,4 @@ independently.)*
|
|
|
48
48
|
On failure, findings go back to the developer seat; when the fresh
|
|
49
49
|
developer fails too, the pipeline stops and reports instead of looping again.
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
54
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
55
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
56
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
57
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
58
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
51
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -39,11 +39,4 @@ independently.)*
|
|
|
39
39
|
- **Delivers:** the consumer's verdict, same shape as its own output contract
|
|
40
40
|
above.
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
45
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
46
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
47
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
48
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
49
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
42
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
package/src/agents/visionary.md
CHANGED
|
@@ -26,11 +26,4 @@
|
|
|
26
26
|
- The bold case: the transformative upside in a line, what the motion could become if pushed, the capability it would unlock, and the single bet it depends on. No timid hedging.
|
|
27
27
|
- If the motion genuinely has no bigger version — the ambitious form is just the same thing, larger — say so; a forced 10× pitch is timidity wearing a costume.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
If this spec misled you — an input you needed but were not given, a boundary
|
|
32
|
-
that proved wrong, a step you could not execute — end your report with one line:
|
|
33
|
-
`spec-feedback: <what failed — the one-line fix>`. Omit it when there is no
|
|
34
|
-
friction. The caller weighs the feedback, folds a real flaw back into this file
|
|
35
|
-
with the user's assent, and records it to {{MEMORY}} only if it clears
|
|
36
|
-
{{DOCTRINE:persist-insight}}'s bar — most reports carry no feedback at all.
|
|
29
|
+
<!-- INCLUDE: agents/_self-improvement.md -->
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
### React kit
|
|
2
|
+
|
|
3
|
+
Applies to React 18 or 19 apps built with Vite or webpack, in TypeScript or JavaScript, tested with Jest and React Testing Library. Read `package.json` first and use only the APIs its React major provides.
|
|
4
|
+
|
|
5
|
+
- Function components and hooks only. No new class components, except an error boundary where the project has no library for it.
|
|
6
|
+
- Hooks at the top level only. Never disable `react-hooks/rules-of-hooks` or `react-hooks/exhaustive-deps` to make a warning go away.
|
|
7
|
+
- Derive values during render; never copy props or state into state through an effect. Every effect that subscribes cleans up.
|
|
8
|
+
- Server data goes through the project's server-state library, with loading, error and empty states.
|
|
9
|
+
- Keep each folder's language: TypeScript stays typed, with no `any` or `@ts-ignore` to get green; JavaScript stays JavaScript.
|
|
10
|
+
- Env values the bundler inlines (`import.meta.env.VITE_*`, webpack `DefinePlugin`) are public. No secret there, and no session token in `localStorage`.
|
|
11
|
+
- Interactive elements are native (`<button>`, `<a href>`, `<input>` with a label) and keyboard-reachable.
|
|
12
|
+
- Tests query by role or label and act with `userEvent`; the network is mocked with MSW, not by mocking the fetch client.
|
|
13
|
+
- Match the project's existing styling, state library and CI before introducing another.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "React on Vite or webpack, in TypeScript or JavaScript, tested with Jest and Testing Library: components, hooks, state, data fetching, accessibility, build and test failures, review.",
|
|
3
|
+
"skills": ["react", "react-testing"],
|
|
4
|
+
"agents": ["react-engineer", "react-reviewer"],
|
|
5
|
+
"rules": "kits/react/rules.md",
|
|
6
|
+
"rulesWordBudget": 300,
|
|
7
|
+
"banned": ["ReactDOM.render(", "findDOMNode", "enzyme", "react-test-renderer", "@testing-library/react-hooks"],
|
|
8
|
+
"catalogue": {
|
|
9
|
+
"skills": [
|
|
10
|
+
"| [react]({{DIR_SKILLS}}/react.md) | building or changing React components, hooks, state or data fetching in a Vite or webpack app; bundler config, client-side routing, env variables and build failures; accessibility |",
|
|
11
|
+
"| [react-testing]({{DIR_SKILLS}}/react-testing.md) | writing or fixing React tests with Jest and Testing Library, MSW network mocks, jest-axe; making Jest run against a Vite or webpack project |"
|
|
12
|
+
],
|
|
13
|
+
"agents": [
|
|
14
|
+
"| [react-engineer]({{DIR_AGENTS}}/react-engineer.md) | a React component, page, hook or form must be implemented, or a broken Vite or webpack build or Jest run made green |",
|
|
15
|
+
"| [react-reviewer]({{DIR_AGENTS}}/react-reviewer.md) | a React change needs a framework-aware review: hooks, state, data fetching, accessibility, React security, tests |"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Affaan Mustafa
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
## Self-improvement
|
|
2
2
|
|
|
3
3
|
<!-- LEAN:begin -->
|
|
4
|
+
This {{SKILL}} keeps its own notes in `{{DIR_NOTEBOOK}}/skill-notes/<name>.md`,
|
|
5
|
+
`<name>` being this {{SKILL}}'s name. When that file exists, read it before the
|
|
6
|
+
first step — where it disagrees with this file, the notes win. They are yours to
|
|
7
|
+
write, and no rebuild touches them.
|
|
8
|
+
|
|
4
9
|
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
5
10
|
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
6
|
-
is a flaw in this file.
|
|
7
|
-
done-when)
|
|
11
|
+
is a flaw in this file. Write the exact correction (trigger, procedure, or
|
|
12
|
+
done-when) into the notes file, with the user's assent ({{LAW:one-intent-one-act}}), as one line:
|
|
13
|
+
`- [skill|general] <correction> — seen: <what happened, against what you expected> (<date>)`.
|
|
14
|
+
`seen:` is the evidence the correction is later judged by; `general` marks one
|
|
15
|
+
that would fix other {{SKILLS}} too. Never
|
|
16
|
+
edit this file: it is a rendered copy, a rebuild overwrites it, and the doctor
|
|
17
|
+
reports the edit as drift. `geneseed diff` carries the notes back to the source.
|
|
18
|
+
- Keep the notes sharp: amend or delete a line before adding one — a line with no
|
|
19
|
+
`seen:`, or whose `seen:` no longer happens, goes first — and prune past about
|
|
20
|
+
twenty lines.
|
|
8
21
|
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
9
22
|
clears {{DOCTRINE:persist-insight}}'s bar: it would change how a future session behaves, and a
|
|
10
23
|
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
@@ -13,7 +26,11 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
|
13
26
|
runs end here.
|
|
14
27
|
<!-- LEAN:else -->
|
|
15
28
|
One beat of reflection on this {{SKILL}}: a step that misled, a missing step, or a
|
|
16
|
-
wrong trigger is a flaw in this file —
|
|
17
|
-
|
|
18
|
-
|
|
29
|
+
wrong trigger is a flaw in this file — write the exact correction, with the user's
|
|
30
|
+
assent ({{LAW:one-intent-one-act}}), into `{{DIR_NOTEBOOK}}/skill-notes/<name>.md` (`<name>` is this {{SKILL}}'s
|
|
31
|
+
name) as `- [skill|general] <correction> — seen: <what happened vs expected> (<date>)`,
|
|
32
|
+
never into this rendered file, which a rebuild overwrites. Read that notes
|
|
33
|
+
file before the first step when it exists; it wins where it disagrees. Keep it short.
|
|
34
|
+
A lesson that is not about this file goes to {{MEMORY}} only if it clears
|
|
35
|
+
{{DOCTRINE:persist-insight}}'s bar. Nothing learned — move on.
|
|
19
36
|
<!-- LEAN:end -->
|
package/src/skills/brainstorm.md
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
{{CREDIT:mattpocock-skills:skills/productivity/grilling/SKILL.md}}
|
|
9
9
|
|
|
10
|
+
{{CREDIT:mattpocock-skills:skills/productivity/to-questionnaire/SKILL.md}}
|
|
11
|
+
|
|
10
12
|
**Trigger:** a new feature, behaviour change, or project arrives without a design, or the
|
|
11
13
|
user says "brainstorm", "interview me" or "grill me". Also when goal, scope or success
|
|
12
14
|
criteria are unstated ("let's design this", "clarify this first", "stress-test this plan"),
|
|
@@ -27,8 +29,11 @@ the design is skipped.
|
|
|
27
29
|
libraries) the user wants to own. Existing work decides by default
|
|
28
30
|
({{DOCTRINE:respect-conventions}}); a choice you take goes in the ledger as **your
|
|
29
31
|
call**, never as agreed. Stop when each is unambiguous. Facts are yours to find (read
|
|
30
|
-
the code, dispatch a subagent), never the user's
|
|
31
|
-
|
|
32
|
+
the code, dispatch a subagent), never the user's; a pending lookup holds back only the
|
|
33
|
+
questions that depend on it. A decision someone else owns gets a drafted
|
|
34
|
+
`questionnaire-<slug>.md` for them — ask the user only who and what they need back. Most
|
|
35
|
+
important first (async gets one pass), one idea per question with an empty answer stub
|
|
36
|
+
under it, and say "I don't know" is a useful answer.
|
|
32
37
|
3. **Ledger the decisions.** Name every KEY DECISION the answers imply or leave open —
|
|
33
38
|
direction chosen, trade-offs accepted, load-bearing constraints, assumptions,
|
|
34
39
|
non-goals. Surface each silent assumption as a decision to ratify, not a settled
|
|
@@ -16,7 +16,8 @@ a design talk that keeps stumbling over ambiguous terms, or another {{SKILL}} ne
|
|
|
16
16
|
`GLOSSARY-MAP.md` means several contexts — find the one in play) and the
|
|
17
17
|
area's ADRs in `docs/adr/`; use their terms verbatim in code, tests, prose.
|
|
18
18
|
When the user says how something works, check the code agrees; surface any
|
|
19
|
-
contradiction.
|
|
19
|
+
contradiction. An ADR is settled: a proposal that contradicts one says so,
|
|
20
|
+
and why the friction justifies reopening it — never silently.
|
|
20
21
|
2. Use this vocabulary exactly — **module** (anything with an interface and an
|
|
21
22
|
implementation, any scale), **interface** (all a caller must know: types,
|
|
22
23
|
invariants, ordering, error modes, performance), **depth** (behaviour per
|
|
@@ -25,7 +26,10 @@ a design talk that keeps stumbling over ambiguous terms, or another {{SKILL}} ne
|
|
|
25
26
|
"component", "service", "API", "boundary".
|
|
26
27
|
3. Aim for **deep modules** — much behaviour behind a small interface: callers
|
|
27
28
|
get leverage, maintainers get locality. To find what to deepen, start from
|
|
28
|
-
`git log` hot spots — what keeps changing.
|
|
29
|
+
`git log` hot spots — what keeps changing. Design a new or reshaped interface
|
|
30
|
+
twice before choosing: 2–3 radically different shapes (in parallel subagents
|
|
31
|
+
where the host runs them), compared on depth, locality and seam placement;
|
|
32
|
+
recommend one — a hybrid if parts combine — never a menu.
|
|
29
33
|
4. Seams sparingly: the interface is the test surface. Internal seams for the
|
|
30
34
|
module's own tests are fine but never exposed; a test that must reach past
|
|
31
35
|
the interface means the wrong shape. One adapter is a hypothesis; a second
|
package/src/skills/debug.md
CHANGED
|
@@ -28,6 +28,6 @@ faster than thrashing; do not trade it away under pressure.
|
|
|
28
28
|
**CI branch (a red run)** → read [debug/ci.md](debug/ci.md) and follow it.
|
|
29
29
|
|
|
30
30
|
## Done when
|
|
31
|
-
- The failure is reproduced by a command that went red on it, root-caused, fixed at the cause, and that command passes with no new breakage; every tagged probe is gone.
|
|
31
|
+
- The failure is reproduced by a command that went red on it, root-caused, fixed at the cause, and that command passes with no new breakage; every tagged probe is gone, and the step-1 repro is deleted or kept as the regression test.
|
|
32
32
|
|
|
33
33
|
<!-- INCLUDE: skills/_self-improvement.md -->
|
package/src/skills/develop.md
CHANGED
|
@@ -33,7 +33,7 @@ case where the seam is only known once the change is made.
|
|
|
33
33
|
change ({{DOCTRINE:cover-and-verify}}), then break the implementation on purpose once to
|
|
34
34
|
see the test go red before trusting it.
|
|
35
35
|
4. Write the minimum code that makes it pass; add nothing the test doesn't demand.
|
|
36
|
-
5. Run the *affected* tests and read the output ({{LAW:verify-before-asserting}}); on failure fix the
|
|
36
|
+
5. Run the *affected* tests, and the typecheck where the project has one, and read the output ({{LAW:verify-before-asserting}}); on failure fix the
|
|
37
37
|
cause, never mask it ({{LAW:cure-the-cause}}). Dispatch the
|
|
38
38
|
[tester {{AGENT}}](../{{DIR_AGENTS}}/tester.md) for heavier or unfamiliar coverage,
|
|
39
39
|
or when the blast radius is unclear.
|
|
@@ -50,7 +50,9 @@ case where the seam is only known once the change is made.
|
|
|
50
50
|
## Anti-patterns — name the one you catch
|
|
51
51
|
- **Implementation-coupled** — mocks an internal collaborator, tests a private method,
|
|
52
52
|
or checks through a side channel (querying the database instead of the interface).
|
|
53
|
-
The tell: it breaks on a refactor that changed no behaviour.
|
|
53
|
+
The tell: it breaks on a refactor that changed no behaviour. Mock only at system
|
|
54
|
+
boundaries — external APIs, time, randomness, sometimes the database or filesystem —
|
|
55
|
+
passed in rather than built inside; never a module you control.
|
|
54
56
|
- **Tautological** — the expected value is recomputed the way the code computes it, so
|
|
55
57
|
the test passes by construction and can never disagree with the code.
|
|
56
58
|
- **Horizontal slicing** — all the tests first, then all the code: the tests pin an
|
package/src/skills/handoff.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
2. Record open decisions, dead ends already ruled out, blockers, and any irreversible changes already made ({{DOCTRINE:plan-before-acting}}) — so the next agent neither re-derives nor repeats them.
|
|
12
12
|
3. Promote any durable fact or correction learned this session into {{MEMORY}} (§5), not just the worklog.
|
|
13
13
|
4. Point to the live artifacts: branch name, changed files, how to run the tests, and where any failure reproduces. Link specs, plans, ADRs, issues and commits by path or URL — never copy them in.
|
|
14
|
-
5. Put a one-line "resume here" pointer at the top so a fresh context picks up in a single read ({{DOCTRINE:context-economy}}), and list the {{SKILL}}s the next agent should load.
|
|
14
|
+
5. Put a one-line "resume here" pointer at the top so a fresh context picks up in a single read ({{DOCTRINE:context-economy}}), and list the {{SKILL}}s the next agent should load. When the user names what the next session is for, write toward that focus.
|
|
15
15
|
6. Redact keys, passwords and PII ({{LAW:sealed-secrets}}).
|
|
16
16
|
7. Verify it: re-read the worklog as a cold reader ({{LAW:verify-before-asserting}}) — goal, progress, next step, and blockers must be answerable from it alone. Fix what isn't.
|
|
17
17
|
|