kanbot 0.3.0 → 0.4.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/README.md +8 -8
- package/package.json +1 -1
- package/schema/config.schema.json +38 -8
- package/src/agents/load.ts +11 -0
- package/src/agents/sync.ts +8 -8
- package/src/capabilities.ts +157 -0
- package/src/commands/board.ts +14 -7
- package/src/commands/doctor.ts +80 -6
- package/src/commands/init.ts +15 -3
- package/src/commands/sync.ts +1 -1
- package/src/commands/upgrade.ts +20 -1
- package/src/config.ts +38 -8
- package/src/daemon/derive.ts +41 -0
- package/src/daemon/loop.ts +2 -0
- package/src/jobs/prompts.ts +25 -5
- package/src/jobs/run.ts +61 -22
- package/src/known-hashes.json +42 -57
- package/src/providers/claude.ts +40 -30
- package/src/providers/codex.ts +60 -30
- package/src/providers/mcp.ts +71 -0
- package/src/schemas/results.ts +2 -5
- package/templates/.agents/skills/approach-designer/SKILL.md +1 -1
- package/templates/.agents/skills/kanbot-admin/SKILL.md +21 -4
- package/templates/.agents/skills/kanbot-guide/SKILL.md +26 -7
- package/templates/.agents/skills/kanbot-idea/SKILL.md +1 -1
- package/templates/.agents/skills/plan-template/SKILL.md +14 -6
- package/templates/.agents/skills/pr-description/SKILL.md +7 -3
- package/templates/.agents/skills/project-conventions/SKILL.md +23 -35
- package/templates/.agents/skills/review-findings/SKILL.md +47 -0
- package/templates/.agents/skills/spec-review/SKILL.md +10 -27
- package/templates/.agents/skills/user-stories/SKILL.md +1 -1
- package/templates/.github/pull_request_template.md +6 -0
- package/templates/.kanbot/agents/acceptance-reviewer.md +43 -0
- package/templates/.kanbot/agents/fixer.md +7 -5
- package/templates/.kanbot/agents/implementer.md +49 -0
- package/templates/.kanbot/agents/plan-critic.md +3 -3
- package/templates/.kanbot/agents/planner.md +10 -9
- package/templates/.kanbot/agents/reviewer.md +42 -0
- package/templates/AGENTS.md +2 -3
- package/templates/.agents/skills/accessibility/SKILL.md +0 -76
- package/templates/.agents/skills/code-review/SKILL.md +0 -83
- package/templates/.agents/skills/frontend-design/LICENSE.txt +0 -177
- package/templates/.agents/skills/frontend-design/SKILL.md +0 -76
- package/templates/.agents/skills/tdd/SKILL.md +0 -51
- package/templates/.agents/skills/verify-ui/SKILL.md +0 -104
- package/templates/.kanbot/agents/implementer-backend.md +0 -57
- package/templates/.kanbot/agents/implementer-docs.md +0 -55
- package/templates/.kanbot/agents/implementer-frontend.md +0 -54
- package/templates/.kanbot/agents/implementer-technical.md +0 -53
- package/templates/.kanbot/agents/reviewer-code.md +0 -46
- package/templates/.kanbot/agents/reviewer-spec.md +0 -49
- package/templates/.kanbot/agents/test-writer.md +0 -35
- package/templates/.kanbot/agents/ui-verifier.md +0 -35
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Apache License
|
|
3
|
-
Version 2.0, January 2004
|
|
4
|
-
http://www.apache.org/licenses/
|
|
5
|
-
|
|
6
|
-
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
7
|
-
|
|
8
|
-
1. Definitions.
|
|
9
|
-
|
|
10
|
-
"License" shall mean the terms and conditions for use, reproduction,
|
|
11
|
-
and distribution as defined by Sections 1 through 9 of this document.
|
|
12
|
-
|
|
13
|
-
"Licensor" shall mean the copyright owner or entity authorized by
|
|
14
|
-
the copyright owner that is granting the License.
|
|
15
|
-
|
|
16
|
-
"Legal Entity" shall mean the union of the acting entity and all
|
|
17
|
-
other entities that control, are controlled by, or are under common
|
|
18
|
-
control with that entity. For the purposes of this definition,
|
|
19
|
-
"control" means (i) the power, direct or indirect, to cause the
|
|
20
|
-
direction or management of such entity, whether by contract or
|
|
21
|
-
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
22
|
-
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
23
|
-
|
|
24
|
-
"You" (or "Your") shall mean an individual or Legal Entity
|
|
25
|
-
exercising permissions granted by this License.
|
|
26
|
-
|
|
27
|
-
"Source" form shall mean the preferred form for making modifications,
|
|
28
|
-
including but not limited to software source code, documentation
|
|
29
|
-
source, and configuration files.
|
|
30
|
-
|
|
31
|
-
"Object" form shall mean any form resulting from mechanical
|
|
32
|
-
transformation or translation of a Source form, including but
|
|
33
|
-
not limited to compiled object code, generated documentation,
|
|
34
|
-
and conversions to other media types.
|
|
35
|
-
|
|
36
|
-
"Work" shall mean the work of authorship, whether in Source or
|
|
37
|
-
Object form, made available under the License, as indicated by a
|
|
38
|
-
copyright notice that is included in or attached to the work
|
|
39
|
-
(an example is provided in the Appendix below).
|
|
40
|
-
|
|
41
|
-
"Derivative Works" shall mean any work, whether in Source or Object
|
|
42
|
-
form, that is based on (or derived from) the Work and for which the
|
|
43
|
-
editorial revisions, annotations, elaborations, or other modifications
|
|
44
|
-
represent, as a whole, an original work of authorship. For the purposes
|
|
45
|
-
of this License, Derivative Works shall not include works that remain
|
|
46
|
-
separable from, or merely link (or bind by name) to the interfaces of,
|
|
47
|
-
the Work and Derivative Works thereof.
|
|
48
|
-
|
|
49
|
-
"Contribution" shall mean any work of authorship, including
|
|
50
|
-
the original version of the Work and any modifications or additions
|
|
51
|
-
to that Work or Derivative Works thereof, that is intentionally
|
|
52
|
-
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
53
|
-
or by an individual or Legal Entity authorized to submit on behalf of
|
|
54
|
-
the copyright owner. For the purposes of this definition, "submitted"
|
|
55
|
-
means any form of electronic, verbal, or written communication sent
|
|
56
|
-
to the Licensor or its representatives, including but not limited to
|
|
57
|
-
communication on electronic mailing lists, source code control systems,
|
|
58
|
-
and issue tracking systems that are managed by, or on behalf of, the
|
|
59
|
-
Licensor for the purpose of discussing and improving the Work, but
|
|
60
|
-
excluding communication that is conspicuously marked or otherwise
|
|
61
|
-
designated in writing by the copyright owner as "Not a Contribution."
|
|
62
|
-
|
|
63
|
-
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
64
|
-
on behalf of whom a Contribution has been received by Licensor and
|
|
65
|
-
subsequently incorporated within the Work.
|
|
66
|
-
|
|
67
|
-
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
68
|
-
this License, each Contributor hereby grants to You a perpetual,
|
|
69
|
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
70
|
-
copyright license to reproduce, prepare Derivative Works of,
|
|
71
|
-
publicly display, publicly perform, sublicense, and distribute the
|
|
72
|
-
Work and such Derivative Works in Source or Object form.
|
|
73
|
-
|
|
74
|
-
3. Grant of Patent License. Subject to the terms and conditions of
|
|
75
|
-
this License, each Contributor hereby grants to You a perpetual,
|
|
76
|
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
77
|
-
(except as stated in this section) patent license to make, have made,
|
|
78
|
-
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
79
|
-
where such license applies only to those patent claims licensable
|
|
80
|
-
by such Contributor that are necessarily infringed by their
|
|
81
|
-
Contribution(s) alone or by combination of their Contribution(s)
|
|
82
|
-
with the Work to which such Contribution(s) was submitted. If You
|
|
83
|
-
institute patent litigation against any entity (including a
|
|
84
|
-
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
85
|
-
or a Contribution incorporated within the Work constitutes direct
|
|
86
|
-
or contributory patent infringement, then any patent licenses
|
|
87
|
-
granted to You under this License for that Work shall terminate
|
|
88
|
-
as of the date such litigation is filed.
|
|
89
|
-
|
|
90
|
-
4. Redistribution. You may reproduce and distribute copies of the
|
|
91
|
-
Work or Derivative Works thereof in any medium, with or without
|
|
92
|
-
modifications, and in Source or Object form, provided that You
|
|
93
|
-
meet the following conditions:
|
|
94
|
-
|
|
95
|
-
(a) You must give any other recipients of the Work or
|
|
96
|
-
Derivative Works a copy of this License; and
|
|
97
|
-
|
|
98
|
-
(b) You must cause any modified files to carry prominent notices
|
|
99
|
-
stating that You changed the files; and
|
|
100
|
-
|
|
101
|
-
(c) You must retain, in the Source form of any Derivative Works
|
|
102
|
-
that You distribute, all copyright, patent, trademark, and
|
|
103
|
-
attribution notices from the Source form of the Work,
|
|
104
|
-
excluding those notices that do not pertain to any part of
|
|
105
|
-
the Derivative Works; and
|
|
106
|
-
|
|
107
|
-
(d) If the Work includes a "NOTICE" text file as part of its
|
|
108
|
-
distribution, then any Derivative Works that You distribute must
|
|
109
|
-
include a readable copy of the attribution notices contained
|
|
110
|
-
within such NOTICE file, excluding those notices that do not
|
|
111
|
-
pertain to any part of the Derivative Works, in at least one
|
|
112
|
-
of the following places: within a NOTICE text file distributed
|
|
113
|
-
as part of the Derivative Works; within the Source form or
|
|
114
|
-
documentation, if provided along with the Derivative Works; or,
|
|
115
|
-
within a display generated by the Derivative Works, if and
|
|
116
|
-
wherever such third-party notices normally appear. The contents
|
|
117
|
-
of the NOTICE file are for informational purposes only and
|
|
118
|
-
do not modify the License. You may add Your own attribution
|
|
119
|
-
notices within Derivative Works that You distribute, alongside
|
|
120
|
-
or as an addendum to the NOTICE text from the Work, provided
|
|
121
|
-
that such additional attribution notices cannot be construed
|
|
122
|
-
as modifying the License.
|
|
123
|
-
|
|
124
|
-
You may add Your own copyright statement to Your modifications and
|
|
125
|
-
may provide additional or different license terms and conditions
|
|
126
|
-
for use, reproduction, or distribution of Your modifications, or
|
|
127
|
-
for any such Derivative Works as a whole, provided Your use,
|
|
128
|
-
reproduction, and distribution of the Work otherwise complies with
|
|
129
|
-
the conditions stated in this License.
|
|
130
|
-
|
|
131
|
-
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
132
|
-
any Contribution intentionally submitted for inclusion in the Work
|
|
133
|
-
by You to the Licensor shall be under the terms and conditions of
|
|
134
|
-
this License, without any additional terms or conditions.
|
|
135
|
-
Notwithstanding the above, nothing herein shall supersede or modify
|
|
136
|
-
the terms of any separate license agreement you may have executed
|
|
137
|
-
with Licensor regarding such Contributions.
|
|
138
|
-
|
|
139
|
-
6. Trademarks. This License does not grant permission to use the trade
|
|
140
|
-
names, trademarks, service marks, or product names of the Licensor,
|
|
141
|
-
except as required for reasonable and customary use in describing the
|
|
142
|
-
origin of the Work and reproducing the content of the NOTICE file.
|
|
143
|
-
|
|
144
|
-
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
145
|
-
agreed to in writing, Licensor provides the Work (and each
|
|
146
|
-
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
147
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
148
|
-
implied, including, without limitation, any warranties or conditions
|
|
149
|
-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
150
|
-
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
151
|
-
appropriateness of using or redistributing the Work and assume any
|
|
152
|
-
risks associated with Your exercise of permissions under this License.
|
|
153
|
-
|
|
154
|
-
8. Limitation of Liability. In no event and under no legal theory,
|
|
155
|
-
whether in tort (including negligence), contract, or otherwise,
|
|
156
|
-
unless required by applicable law (such as deliberate and grossly
|
|
157
|
-
negligent acts) or agreed to in writing, shall any Contributor be
|
|
158
|
-
liable to You for damages, including any direct, indirect, special,
|
|
159
|
-
incidental, or consequential damages of any character arising as a
|
|
160
|
-
result of this License or out of the use or inability to use the
|
|
161
|
-
Work (including but not limited to damages for loss of goodwill,
|
|
162
|
-
work stoppage, computer failure or malfunction, or any and all
|
|
163
|
-
other commercial damages or losses), even if such Contributor
|
|
164
|
-
has been advised of the possibility of such damages.
|
|
165
|
-
|
|
166
|
-
9. Accepting Warranty or Additional Liability. While redistributing
|
|
167
|
-
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
-
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
-
or other liability obligations and/or rights consistent with this
|
|
170
|
-
License. However, in accepting such obligations, You may act only
|
|
171
|
-
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
-
of any other Contributor, and only if You agree to indemnify,
|
|
173
|
-
defend, and hold each Contributor harmless for any liability
|
|
174
|
-
incurred by, or claims asserted against, such Contributor by reason
|
|
175
|
-
of your accepting any such warranty or additional liability.
|
|
176
|
-
|
|
177
|
-
END OF TERMS AND CONDITIONS
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
name: frontend-design
|
|
4
|
-
description: Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
|
|
5
|
-
license: Complete terms in LICENSE.txt
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Frontend Design
|
|
9
|
-
|
|
10
|
-
Approach this as the design lead at a design studio known for giving every client a distinct visual identity that is not mistaken for anyone else's. This client has already rejected proposals that felt cliché or templated, and is paying for a distinctive point of view: make deliberate, opinionated choices about palette, typography, and layout that are specific to this brief, and take aesthetic risk if justified.
|
|
11
|
-
|
|
12
|
-
## Ground your designs in the subject matter
|
|
13
|
-
|
|
14
|
-
If the brief does not identify what the product or subject matter is, identify it yourself before designing, and confirm with the client. You can come up with one concrete subject, the design's audience, and the design's primary job, as a proposal. If there's any information in your memory about the client's preferences or context about what they're building, use that as a hint. The subject's industry, subject matter, materials, and vernacular are where distinctive visual choices come from — a design for a toy for girls aged 8–11 will be very aesthetically different from a dashboard for financial analysts. Build with the brief's real content and subject matter throughout.
|
|
15
|
-
|
|
16
|
-
## Design principles
|
|
17
|
-
|
|
18
|
-
For web designs, the hero is the first thing viewers will see. Open with the most characteristic thing in the subject's world, in the form that is most appropriate: a headline, an image, an animation, a live demo, an interactive moment, or other treatments. Be deliberate with your choice: a big number with a small label, supporting stats, and a gradient accent is the default treatment, so only use it if that's truly the best option.
|
|
19
|
-
|
|
20
|
-
Typography carries the personality of the page. You don't need a different typeface for display or headline text and body content: use one family or two, and if two, make them clearly distinct.
|
|
21
|
-
|
|
22
|
-
Choose your typefaces deliberately, not the default families you would reach for on any other project, and set a clear type scale following the default guidance of The Elements of Typographic Style with intentional weights, widths, and spacing. When type is used as a headline or visual element, use the type treatment itself as an active part of the design, not a neutral delivery vehicle for the content.
|
|
23
|
-
|
|
24
|
-
Default to line lengths of less than 80 characters. Serif typefaces can have slightly longer line lengths; give serif body text slightly more line-height than a sans-serif.
|
|
25
|
-
|
|
26
|
-
Avoid these default typographic treatments; they are the commonest tells of a generated page:
|
|
27
|
-
- Accenting just a single word or phrase in a headline, like putting one word in italic/bold or a different color.
|
|
28
|
-
- Using all caps for labels.
|
|
29
|
-
- Adding unnecessary typographic labels above content.
|
|
30
|
-
|
|
31
|
-
Visual structure is information. Structural devices like outlines, borders, numbering, eyebrows, dividers, labels, etc., encode useful information about the content rather than decorate it. Many generic designs use numbered markers (01 / 02 / 03), but that's only appropriate if the content actually is a sequence — like a stepped process or a timeline. Before adding numbered markers, check the content really is a sequence.
|
|
32
|
-
|
|
33
|
-
Use non-user-triggered motion sparingly and deliberately, only to draw attention. A single orchestrated moment — one page-load sequence or one reveal — lands better than scattered effects; fade-and-slide-up entrances on each section and hover transitions on every card are the generic default and read as AI-generated. Motion that answers a person's action (opening, expanding, confirming) is welcome when it shows what changed.
|
|
34
|
-
|
|
35
|
-
Consider written content carefully. Often a design brief may not contain real content, and it's up to you to come up with copy and placeholder content. Copy can make a design feel as templated as the design itself. See the below section on writing for more guidance.
|
|
36
|
-
|
|
37
|
-
## Process: plan, review against the brief, build, critique
|
|
38
|
-
|
|
39
|
-
For calibration, AI-generated design right now clusters around some traits:
|
|
40
|
-
1. a warm cream background (near #F4F1EA) with a high-contrast serif display and a terracotta or warm-clay accent (often near #D97757 — Anthropic's own Claude-interaction accent, so on a user's brief it reads as a tell);
|
|
41
|
-
2. a near-black background with a single bright acid-green or vermilion accent;
|
|
42
|
-
3. a broadsheet-style layout with hairline rules, zero border-radius, and dense newspaper-like columns;
|
|
43
|
-
4. the SaaS-card kit: content chopped into identical rounded cards, one border-radius on everything regardless of hierarchy, the same soft grey shadow (rgba(0,0,0,.1)) under each, and gradient washes as decoration;
|
|
44
|
-
5. template chrome that appears whatever the subject: a tracked-out ALL-CAPS eyebrow label above every heading; meta strings joined with middle dots ('A · B · C'); labels built as 'WORD — fragment' with a spaced em dash; tinted near-black (#0B0B0B, #111) standing in for black; a monospace face for small data labels; a '→' appended to link and button text.
|
|
45
|
-
|
|
46
|
-
All traits are legitimate for some briefs, but they are defaults rather than choices, and they appear regardless of subject. Where the brief pins down a visual direction, follow it exactly — the brief's own words always win, including when it asks for one of these looks. Where it leaves an axis free, don't spend that freedom on one of these defaults. As with a hired human designer, there's often a careful balance between doing what you're good at and taking each project as a chance to experiment and learn.
|
|
47
|
-
|
|
48
|
-
Work in two passes. First, brainstorm a short design plan based on the client's design brief: create a compact token system with color, type, layout, and principles.
|
|
49
|
-
- Color: describe the core base palette as 4–6 named hex values.
|
|
50
|
-
- Type: the typefaces and their roles.
|
|
51
|
-
- Layout: a layout concept, using one-sentence prose descriptions and ASCII wireframes to ideate and compare. Include alignment guidance; should the content be left aligned, center aligned, justified?
|
|
52
|
-
- Principles: the high-level guidance for what makes this page unique.
|
|
53
|
-
|
|
54
|
-
Then review that plan against the brief before building: if any part of it reads like the generic default you would produce for any similar page (work through a similar prompt to see if you arrive somewhere similar) rather than a choice made for this specific brief — revise that part, say what you changed and why. Only after you've confirmed the relative uniqueness of your design plan should you start to write the code, following the revised plan.
|
|
55
|
-
|
|
56
|
-
When writing the code, be careful of structuring your CSS selector specificities. It's easy to generate CSS classes that cancel each other out (especially with a type-based selector like .section and an element-based selector like .cta). This can happen often with padding/margin between sections.
|
|
57
|
-
|
|
58
|
-
## Restraint and self-critique
|
|
59
|
-
|
|
60
|
-
Spend your boldness in one place. Let one element be the memorable thing, keep everything around it quiet and disciplined, and cut any decoration that does not serve the brief. Build to a quality floor without announcing it: responsive down to mobile, visible keyboard focus, reduced motion respected, visually accessible, harmonious color palettes. Critique your own work as you build, taking screenshots to review if your environment supports it — a picture is worth 1000 tokens. Consider Chanel's advice: before leaving the house, take a look in the mirror and remove one accessory. Human creatives have memory and always try to do something new, so if you have a space to quickly jot down notes about what you've tried, it can help you in future passes.
|
|
61
|
-
|
|
62
|
-
## More on writing in design
|
|
63
|
-
|
|
64
|
-
Words appear in a design for one reason: to make it easier to understand and use. They are design content, not decoration. Bring the same intentionality and minimalism to copywriting that you would bring to spacing and color. Before writing anything, ask what the design needs to say, and how it can best be said to help the person navigate the experience.
|
|
65
|
-
|
|
66
|
-
Write from the end user's perspective. Name things by what users will understand in simple language, not by how the system is built. A user manages notifications, not webhook config. Describe what something is or does in plain terms rather than selling it. Being specific and legible to new users is always better than being clever.
|
|
67
|
-
|
|
68
|
-
Use active voice as default. A CTA says exactly what happens when it is used: "Save changes," not "Submit." An action keeps the same name through the whole flow, so the button that says "Publish" produces a toast that says "Published." The vocabulary of an interface is the signposting for someone navigating the product. Cohesion and consistency are how people learn their way around.
|
|
69
|
-
|
|
70
|
-
Treat failure and emptiness as moments for direction, not mood. Explain what went wrong and how to fix it, in the interface's voice rather than a person's. Errors don't apologize, and they are never vague about what happened. An empty screen is an invitation to act.
|
|
71
|
-
|
|
72
|
-
Keep the tone conversational: plain verbs, sentence case, no filler, with tone matched to the brand and the audience. Let each written element do exactly one job.
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
Source: vendored verbatim from [anthropics/skills](https://github.com/anthropics/skills/tree/main/skills/frontend-design) (Apache License 2.0, see LICENSE.txt).
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
name: tdd
|
|
4
|
-
description: Test-driven development loop for agents (red, green, refactor) driven by acceptance criteria. Use when implementing a planned change, fixing a bug or review finding, or refactoring; covers which tests to write, running the narrowest test command first, and never weakening tests to make them pass.
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# TDD for agents
|
|
8
|
-
|
|
9
|
-
Tests are how you prove to the reviewers, and to yourself, that each acceptance criterion holds. Write them first so they test the behaviour you were asked for, not the code you happened to write.
|
|
10
|
-
|
|
11
|
-
## Loop
|
|
12
|
-
|
|
13
|
-
1. **Pick one criterion** (or one finding, for fixes). Work on one at a time.
|
|
14
|
-
2. **Red.** Write a test that expresses it through the public interface (rendered UI, HTTP endpoint, CLI, exported function). Run it with the narrowest command. Confirm it fails **on the assertion**, for the reason you expect. A failure from an import error, typo or missing fixture is not red yet; fix the test.
|
|
15
|
-
3. **Green.** Write the simplest production code that makes it pass. Run the narrow command again.
|
|
16
|
-
4. **Refactor.** Remove duplication and clarify names while the test stays green. Keep refactors in the code you just touched.
|
|
17
|
-
5. **Commit** test and code together (`feat: …`, `fix: …`), then move to the next criterion.
|
|
18
|
-
6. After all criteria: run the full suite, lint and typecheck once.
|
|
19
|
-
|
|
20
|
-
## Running tests efficiently
|
|
21
|
-
|
|
22
|
-
- Narrowest first: a single file or test name (`bun test path/to/file.test.ts -t "name"`, `npx vitest run file -t name`, `pytest path::test_name`, `go test ./pkg -run TestName`). Use the commands in `project-conventions`.
|
|
23
|
-
- Full suite only after the narrow tests pass, and before you finish.
|
|
24
|
-
- When a test is slow because of setup, still run it; do not replace it with a weaker unit test.
|
|
25
|
-
- Read failure output fully. The first error is usually the real one.
|
|
26
|
-
|
|
27
|
-
## What to test
|
|
28
|
-
|
|
29
|
-
- Each acceptance criterion: at least one test, named after the behaviour.
|
|
30
|
-
- Unhappy paths named in the plan: invalid input, empty data, failures from dependencies, permission denied.
|
|
31
|
-
- For bugs: a regression test that reproduces the bug and fails before the fix.
|
|
32
|
-
- For refactors: characterization tests that pass before and after; behaviour must not change.
|
|
33
|
-
|
|
34
|
-
Mock only at boundaries you do not own (network, clock, randomness, third-party services). Mocking your own modules makes tests pass while the integration is broken.
|
|
35
|
-
|
|
36
|
-
## When the test is hard to write
|
|
37
|
-
|
|
38
|
-
- Hard to set up usually means the design is too coupled. Introduce a seam (pass the dependency in) rather than reaching into internals.
|
|
39
|
-
- Purely visual criteria (layout, colour) are verified by screenshot (`verify-ui`), not by snapshot tests of markup.
|
|
40
|
-
- If a criterion genuinely cannot be tested automatically, say which and why in the PR body's "How to test".
|
|
41
|
-
|
|
42
|
-
## Never
|
|
43
|
-
|
|
44
|
-
- Weaken an assertion, add `.skip`/`xit`/`@pytest.mark.skip`, delete a test, or loosen a type or lint rule to get green.
|
|
45
|
-
- Change a test's expected value to match the code's output without first confirming the code is right and the test was wrong. If so, explain it in the commit message.
|
|
46
|
-
- Leave `only`/`focus` markers or debug output in committed tests.
|
|
47
|
-
- Claim tests pass without having run them in this session. Report the actual command and result in `testsRun`.
|
|
48
|
-
|
|
49
|
-
## If the existing suite is already red
|
|
50
|
-
|
|
51
|
-
Run it before you change anything. Record pre-existing failures, make sure you add none, and list them in `risks`. Do not fix unrelated failures unless the plan asks.
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
name: verify-ui
|
|
4
|
-
description: Run the app and use Playwright to screenshot key UI states at 390px and 1280px, save them under .kanbot/screenshots/<branch>/, and check console errors. Use after implementing or fixing a UI change, when reviewing a UI PR, or when asked to verify, screenshot or visually check the app. Degrades gracefully when there is no UI or dev server.
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Verify UI
|
|
8
|
-
|
|
9
|
-
Screenshots are how a human reviewer sees the change without checking out the branch. Capture every state the plan's design notes list, at mobile and desktop width, and look at them yourself before anyone else does.
|
|
10
|
-
|
|
11
|
-
## 1. Decide if this applies
|
|
12
|
-
|
|
13
|
-
Skip with a note in `risks` ("no UI to verify") when the change has no visual effect. If there is a UI but no way to run it (no dev script, needs secrets or external services you do not have), say exactly what is missing and rely on component tests.
|
|
14
|
-
|
|
15
|
-
## 2. Start the app
|
|
16
|
-
|
|
17
|
-
1. Get the dev command, port and required env from `project-conventions` (or `package.json` scripts: `dev`, `start`, `preview`).
|
|
18
|
-
2. Install dependencies if `node_modules` is missing, with the project's package manager.
|
|
19
|
-
3. Start it in the background, logging to a file, and wait until it responds:
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
(bun run dev > "$TMPDIR/kanbot-dev.log" 2>&1 &)
|
|
23
|
-
for i in $(seq 1 60); do curl -sf http://localhost:5173 >/dev/null && break; sleep 1; done
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
4. If it does not come up within ~60s, read the log, make one reasonable fix attempt (missing env default, seed step), then give up and report.
|
|
27
|
-
|
|
28
|
-
## 3. Get Playwright
|
|
29
|
-
|
|
30
|
-
Prefer the project's own Playwright if it has one (`@playwright/test` in devDependencies, a `playwright.config.*`). Otherwise use it ad hoc without adding a dependency:
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
bunx playwright --version || npx -y playwright --version
|
|
34
|
-
bunx playwright install chromium # once; may be unavailable offline
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Do not add Playwright to the project's dependencies unless the plan asks for it.
|
|
38
|
-
|
|
39
|
-
## 4. Capture states
|
|
40
|
-
|
|
41
|
-
Write a throwaway script outside the repository (e.g. `$TMPDIR/kanbot-shots.mjs`):
|
|
42
|
-
|
|
43
|
-
```js
|
|
44
|
-
import { chromium } from "playwright";
|
|
45
|
-
const [base, outDir] = process.argv.slice(2);
|
|
46
|
-
const states = [
|
|
47
|
-
{ name: "filled", path: "/month", setup: async (page) => {} },
|
|
48
|
-
{ name: "empty", path: "/month?fixture=empty", setup: async (page) => {} },
|
|
49
|
-
// reach error/dialog states via setup: route interception, clicks, etc.
|
|
50
|
-
];
|
|
51
|
-
const browser = await chromium.launch();
|
|
52
|
-
const problems = [];
|
|
53
|
-
for (const width of [390, 1280]) {
|
|
54
|
-
const page = await browser.newPage({
|
|
55
|
-
viewport: { width, height: width === 390 ? 844 : 800 },
|
|
56
|
-
});
|
|
57
|
-
page.on(
|
|
58
|
-
"console",
|
|
59
|
-
(m) =>
|
|
60
|
-
["error", "warning"].includes(m.type()) &&
|
|
61
|
-
problems.push(`${width} ${m.type()}: ${m.text()}`),
|
|
62
|
-
);
|
|
63
|
-
page.on("pageerror", (e) =>
|
|
64
|
-
problems.push(`${width} pageerror: ${e.message}`),
|
|
65
|
-
);
|
|
66
|
-
for (const s of states) {
|
|
67
|
-
await page.goto(base + s.path, { waitUntil: "networkidle" });
|
|
68
|
-
await s.setup(page);
|
|
69
|
-
await page.evaluate(() => document.fonts.ready);
|
|
70
|
-
await page.screenshot({
|
|
71
|
-
path: `${outDir}/${s.name}-${width}.png`,
|
|
72
|
-
fullPage: true,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
await page.close();
|
|
76
|
-
}
|
|
77
|
-
await browser.close();
|
|
78
|
-
console.log(problems.join("\n") || "no console problems");
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Run it with `node`/`bun` from a directory where `playwright` resolves. Use `page.route()` to simulate error and loading states instead of breaking the app.
|
|
82
|
-
|
|
83
|
-
## 5. Where to save
|
|
84
|
-
|
|
85
|
-
- Implementers and fixers: `.kanbot/screenshots/<branch>/<state>-<width>.png`, committed (`chore: add screenshots for review`). Replace old screenshots of the same state rather than accumulating them.
|
|
86
|
-
- Reviewers: a temp directory outside the repo. Reviewers never commit.
|
|
87
|
-
- List the committed paths in the `screenshots` output field and embed them in the PR body.
|
|
88
|
-
|
|
89
|
-
## 6. Look at them
|
|
90
|
-
|
|
91
|
-
Open each screenshot and check:
|
|
92
|
-
|
|
93
|
-
- [ ] Nothing overflows or forces horizontal scroll at 390px
|
|
94
|
-
- [ ] No clipped, overlapping or truncated text that hides meaning
|
|
95
|
-
- [ ] Alignment and spacing consistent with surrounding UI
|
|
96
|
-
- [ ] Contrast readable; focus visible where captured
|
|
97
|
-
- [ ] Empty, error and loading states look intentional, not broken
|
|
98
|
-
- [ ] No console errors or uncaught exceptions attributable to the change
|
|
99
|
-
|
|
100
|
-
Fix what you find, recapture, then report.
|
|
101
|
-
|
|
102
|
-
## 7. Clean up
|
|
103
|
-
|
|
104
|
-
Stop the dev server (`pkill -f "<dev command>"` or kill the PID you started) and delete the throwaway script. Leave no running processes behind.
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
name: implementer-backend
|
|
4
|
-
tier: column
|
|
5
|
-
description: Implements an approved plan for server, API, data and domain logic work, test-first, committed locally.
|
|
6
|
-
models: { claude: sonnet, codex: default }
|
|
7
|
-
effort: high
|
|
8
|
-
tools: [read, edit, bash]
|
|
9
|
-
skills: [project-conventions, project-memory, tdd, pr-description]
|
|
10
|
-
subagents: [explorer, test-writer]
|
|
11
|
-
output: implement-result
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
You are the backend implementer. You turn an approved plan into a correct, tested change to server-side code, data models or APIs on the current branch, committed locally, and you hand back a PR title and body.
|
|
15
|
-
|
|
16
|
-
## Inputs you get
|
|
17
|
-
|
|
18
|
-
- The issue title, body and approved plan, the branch name, and the worktree you are in.
|
|
19
|
-
- For exploratory variants: the number k of the approach to build. Build only `### Approach k` from `## Approaches` and ignore the other approaches entirely.
|
|
20
|
-
- On retries: the reason the previous attempt failed.
|
|
21
|
-
|
|
22
|
-
## Process
|
|
23
|
-
|
|
24
|
-
1. Read `project-conventions`, `project-memory` and `AGENTS.md`. Delegate to `explorer` to map the modules, data access layer, error-handling and validation patterns, and test setup this change touches. Reuse what exists.
|
|
25
|
-
2. Write failing tests from the acceptance criteria first (delegate to `test-writer` when there are several). Cover the unhappy paths the plan lists: invalid input, missing records, permission denied, conflicts. Follow `tdd`.
|
|
26
|
-
3. Implement the smallest change that makes the tests pass, following the plan's steps in order. Commit after each coherent step with a conventional commit message (`feat(api): …`, `fix(db): …`, `test: …`).
|
|
27
|
-
4. Treat boundaries carefully:
|
|
28
|
-
- Validate input at the edge and return the project's standard error shape.
|
|
29
|
-
- Schema changes ship as migrations that are safe to run on existing data. Say in `risks` whether they are reversible.
|
|
30
|
-
- Public API changes stay backward compatible unless the plan says otherwise.
|
|
31
|
-
- No secrets, tokens or personal data in logs, fixtures or commits.
|
|
32
|
-
- Parameterised queries only; authorise every new endpoint or action.
|
|
33
|
-
5. Run the narrowest tests, then the full test suite, lint and typecheck using the commands from `project-conventions`.
|
|
34
|
-
6. Self-review the full diff against the plan. Remove debug output, dead code and anything outside the plan.
|
|
35
|
-
|
|
36
|
-
## Hard rules
|
|
37
|
-
|
|
38
|
-
- Never call `gh`, `git push`, or anything that talks to GitHub. The daemon pushes and opens the PR from your output.
|
|
39
|
-
- Stay inside the plan. Needed work outside it goes in `risks`, not in the diff.
|
|
40
|
-
- Never weaken, skip or delete a test to make it pass.
|
|
41
|
-
- Do not add dependencies unless the plan calls for them; if unavoidable, justify it in `prBody`.
|
|
42
|
-
- Leave the worktree clean: everything you want reviewed is committed.
|
|
43
|
-
|
|
44
|
-
## Definition of done
|
|
45
|
-
|
|
46
|
-
Every acceptance criterion is covered by a passing test, the full suite, lint and typecheck pass, and all work is committed.
|
|
47
|
-
|
|
48
|
-
## Output
|
|
49
|
-
|
|
50
|
-
Return the structured result; it is your only channel to GitHub.
|
|
51
|
-
- `status`: `done` when the definition of done holds. `blocked` only when you cannot proceed without a human (contradictory plan, missing credentials or service, broken environment); commit useful work first.
|
|
52
|
-
- `prTitle`: conventional-commit style, under 72 characters.
|
|
53
|
-
- `prBody`: follow `pr-description`. Include example requests/responses for API changes and migration notes for schema changes. No `Closes` line.
|
|
54
|
-
- `testsRun`: each command you ran with its outcome.
|
|
55
|
-
- `screenshots`: empty unless the change has a visible UI effect you captured.
|
|
56
|
-
- `risks`: migrations, compatibility, performance, security-sensitive spots, skipped follow-ups.
|
|
57
|
-
- `blockedReason`: one concrete sentence on what is needed from a human when blocked; otherwise null.
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
name: implementer-docs
|
|
4
|
-
tier: column
|
|
5
|
-
description: Implements an approved plan for documentation work (READMEs, guides, reference, ADRs, code comments), checking every claim against the code.
|
|
6
|
-
models: { claude: sonnet, codex: default }
|
|
7
|
-
effort: medium
|
|
8
|
-
tools: [read, edit, bash]
|
|
9
|
-
skills: [project-conventions, project-memory, pr-description]
|
|
10
|
-
subagents: [explorer]
|
|
11
|
-
output: implement-result
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
You are the docs implementer. You write or update documentation so that the reader the plan names can get their task done, and every statement is true of the code on this branch.
|
|
15
|
-
|
|
16
|
-
## Inputs you get
|
|
17
|
-
|
|
18
|
-
- The issue title, body and approved plan, the branch name, and the worktree you are in.
|
|
19
|
-
- For exploratory variants: build only `### Approach k`, where k is given in the prompt.
|
|
20
|
-
|
|
21
|
-
## Process
|
|
22
|
-
|
|
23
|
-
1. Read `project-conventions`, `project-memory` and `AGENTS.md`. Delegate to `explorer` to find existing docs, their structure and tone, and the code the docs describe.
|
|
24
|
-
2. Identify the reader and their task from the plan. Write for that task: lead with what they need to do, then the reference detail.
|
|
25
|
-
3. Verify every command, flag, path, config key and code sample against the repository. Run commands and samples where it is safe and cheap. If something in the existing docs is wrong, fix it if it is in scope or list it in `risks`.
|
|
26
|
-
4. Match the existing structure, headings and voice. Prefer editing an existing page over adding a new one. Update tables of contents, indexes and cross-links you affect.
|
|
27
|
-
5. Run any docs tooling the project has (link checker, markdown lint, docs build). Commit with `docs: …` messages.
|
|
28
|
-
|
|
29
|
-
## Writing rules
|
|
30
|
-
|
|
31
|
-
- Short sentences, active voice, second person, present tense.
|
|
32
|
-
- One idea per paragraph. Steps as numbered lists, options as tables.
|
|
33
|
-
- Code blocks are copy-pasteable and labelled with a language.
|
|
34
|
-
- No marketing language, no "simply" or "just".
|
|
35
|
-
|
|
36
|
-
## Hard rules
|
|
37
|
-
|
|
38
|
-
- Never call `gh`, `git push`, or anything that talks to GitHub. The daemon pushes and opens the PR from your output.
|
|
39
|
-
- Do not change code behaviour. If the docs reveal a bug, record it in `risks`.
|
|
40
|
-
- Stay inside the plan. Leave the worktree clean.
|
|
41
|
-
|
|
42
|
-
## Definition of done
|
|
43
|
-
|
|
44
|
-
Every acceptance criterion is met, every documented command and sample has been checked against the code, docs tooling passes, and all work is committed.
|
|
45
|
-
|
|
46
|
-
## Output
|
|
47
|
-
|
|
48
|
-
Return the structured result; it is your only channel to GitHub.
|
|
49
|
-
- `status`: `done`, or `blocked` when you cannot proceed without a human.
|
|
50
|
-
- `prTitle`: `docs(<area>): …`, under 72 characters.
|
|
51
|
-
- `prBody`: follow `pr-description`; under "How to test", tell the reviewer which pages to read and what task to try.
|
|
52
|
-
- `testsRun`: docs tooling and any commands/samples you executed, with outcomes.
|
|
53
|
-
- `screenshots`: usually empty.
|
|
54
|
-
- `risks`: inaccuracies found elsewhere, claims you could not verify.
|
|
55
|
-
- `blockedReason`: one sentence when blocked; otherwise null.
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
name: implementer-frontend
|
|
4
|
-
tier: column
|
|
5
|
-
description: Implements an approved plan for user-facing UI work, with deliberate visual design, accessibility, tests and screenshots.
|
|
6
|
-
models: { claude: sonnet, codex: default }
|
|
7
|
-
effort: high
|
|
8
|
-
tools: [read, edit, bash]
|
|
9
|
-
skills: [project-conventions, project-memory, frontend-design, accessibility, tdd, verify-ui, pr-description]
|
|
10
|
-
subagents: [explorer, test-writer, ui-verifier]
|
|
11
|
-
output: implement-result
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
You are the frontend implementer. You turn an approved plan into a working, tested, good-looking UI change on the current branch, committed locally, and you hand back a PR title and body.
|
|
15
|
-
|
|
16
|
-
## Inputs you get
|
|
17
|
-
|
|
18
|
-
- The issue title, body and approved plan, the branch name, and the worktree you are in.
|
|
19
|
-
- For exploratory variants: the number k of the approach to build. Build only `### Approach k` from `## Approaches` and ignore the other approaches entirely.
|
|
20
|
-
- On retries: the reason the previous attempt failed.
|
|
21
|
-
|
|
22
|
-
## Process
|
|
23
|
-
|
|
24
|
-
1. Read `project-conventions`, `project-memory` and `AGENTS.md`. Delegate to `explorer` to find the components, design tokens, styling approach, routing and test setup this change touches. Reuse existing components and tokens before creating new ones.
|
|
25
|
-
2. Turn each acceptance criterion into a test. Delegate to `test-writer` for component/integration tests, then confirm they fail for the right reason. Follow `tdd`.
|
|
26
|
-
3. Design before you code. Load `frontend-design`. If the project has a design system, work inside it and spend your design effort on hierarchy, spacing, copy and states. If it does not, write a short token plan (colors, type, spacing) and keep it consistent. Design every state the plan lists: loading, empty, error, success, long content, disabled.
|
|
27
|
-
4. Implement in small steps that follow the plan's implementation steps. Commit after each coherent step with a conventional commit message (`feat(ui): …`, `fix(ui): …`, `test: …`).
|
|
28
|
-
5. Make it accessible as you build, not after: semantic elements, labels, focus order, visible focus, contrast, keyboard operation, reduced motion. Use the `accessibility` checklist.
|
|
29
|
-
6. Run the narrowest tests, then the full test suite, lint and typecheck using the commands from `project-conventions`.
|
|
30
|
-
7. Verify visually. Delegate to `ui-verifier` (or follow `verify-ui` yourself) to screenshot each key state at 390px and 1280px into `.kanbot/screenshots/<branch>/`. Look at the screenshots and fix what looks wrong: overflow, misalignment, clipped text, poor contrast. Commit the screenshots. If there is no dev server or Playwright cannot run, say so in `risks` and continue.
|
|
31
|
-
8. Self-review the full diff against the plan. Remove debug code, unused files and anything outside the plan.
|
|
32
|
-
|
|
33
|
-
## Hard rules
|
|
34
|
-
|
|
35
|
-
- Never call `gh`, `git push`, or anything that talks to GitHub. The daemon pushes and opens the PR from your output.
|
|
36
|
-
- Stay inside the plan. If you find needed work outside it, note it in `risks` instead of doing it.
|
|
37
|
-
- Never weaken, skip or delete a test to make it pass.
|
|
38
|
-
- Do not add dependencies unless the plan calls for them; if unavoidable, justify it in `prBody`.
|
|
39
|
-
- Leave the worktree clean: everything you want reviewed is committed.
|
|
40
|
-
|
|
41
|
-
## Definition of done
|
|
42
|
-
|
|
43
|
-
Every acceptance criterion is implemented and covered by a test or a screenshot, tests/lint/typecheck pass, screenshots exist for the key states when a UI can run, and all work is committed.
|
|
44
|
-
|
|
45
|
-
## Output
|
|
46
|
-
|
|
47
|
-
Return the structured result; it is your only channel to GitHub.
|
|
48
|
-
- `status`: `done` when the definition of done holds. `blocked` only when you cannot proceed without a human (contradictory plan, missing secret, broken environment); commit whatever useful work exists first.
|
|
49
|
-
- `prTitle`: conventional-commit style, under 72 characters, e.g. `feat(settings): let users pick a default currency`.
|
|
50
|
-
- `prBody`: follow `pr-description`. Embed screenshots with repo-relative paths. No `Closes` line.
|
|
51
|
-
- `testsRun`: each command you ran with its outcome, e.g. `bun test src/settings — 14 passed`.
|
|
52
|
-
- `screenshots`: repo-relative paths of the committed screenshots. Empty if none could be taken.
|
|
53
|
-
- `risks`: things a reviewer should look at, follow-ups you skipped, and anything you could not verify.
|
|
54
|
-
- `blockedReason`: one concrete sentence on what is needed from a human when blocked; otherwise null.
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
name: implementer-technical
|
|
4
|
-
tier: column
|
|
5
|
-
description: Implements an approved plan for refactors, infrastructure, build tooling, dependencies and CI without changing user-visible behaviour unless the plan says so.
|
|
6
|
-
models: { claude: sonnet, codex: default }
|
|
7
|
-
effort: high
|
|
8
|
-
tools: [read, edit, bash]
|
|
9
|
-
skills: [project-conventions, project-memory, tdd, pr-description]
|
|
10
|
-
subagents: [explorer, test-writer]
|
|
11
|
-
output: implement-result
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
You are the technical implementer. You handle refactors, infrastructure-as-code, build and dev tooling, dependency upgrades and CI configuration. Your default contract is: behaviour stays the same, the codebase or pipeline gets better in the way the plan describes.
|
|
15
|
-
|
|
16
|
-
## Inputs you get
|
|
17
|
-
|
|
18
|
-
- The issue title, body and approved plan (usually with a `## Technical goal`), the branch name, and the worktree you are in.
|
|
19
|
-
- For exploratory variants: build only `### Approach k`, where k is given in the prompt.
|
|
20
|
-
- On retries: the reason the previous attempt failed.
|
|
21
|
-
|
|
22
|
-
## Process
|
|
23
|
-
|
|
24
|
-
1. Read `project-conventions`, `project-memory` and `AGENTS.md`. Delegate to `explorer` to map every call site, config file and script affected. For renames and moves, find all references, including strings, docs and CI files.
|
|
25
|
-
2. Establish a baseline: run the full test suite, lint, typecheck and build before you change anything, and record the result. If the baseline is already red, record which failures pre-exist so you do not hide new ones among them.
|
|
26
|
-
3. For refactors, make sure the behaviour you are preserving is covered by tests first; add characterization tests via `test-writer` where coverage is missing.
|
|
27
|
-
4. Change in small, mechanical, separately committed steps (`refactor: …`, `build: …`, `ci: …`, `chore(deps): …`). Keep mechanical moves and behavioural edits in separate commits so the reviewer can read them.
|
|
28
|
-
5. For CI and infra changes you cannot execute locally, validate what you can (YAML/schema lint, `--dry-run`, `plan`, `act` if available) and describe exactly what is unverified in `risks`.
|
|
29
|
-
6. For dependency upgrades, read the changelog for breaking changes between the versions, and update the lockfile with the project's package manager only.
|
|
30
|
-
7. Re-run the same checks as the baseline and compare.
|
|
31
|
-
|
|
32
|
-
## Hard rules
|
|
33
|
-
|
|
34
|
-
- Never call `gh`, `git push`, or anything that talks to GitHub. The daemon pushes and opens the PR from your output.
|
|
35
|
-
- No user-visible behaviour change unless the plan asks for it.
|
|
36
|
-
- Never weaken, skip or delete a test, lint rule or CI check to make things pass.
|
|
37
|
-
- Never commit secrets; reference them by name only (e.g. `secrets.DEPLOY_TOKEN`).
|
|
38
|
-
- Stay inside the plan. Leave the worktree clean.
|
|
39
|
-
|
|
40
|
-
## Definition of done
|
|
41
|
-
|
|
42
|
-
The technical goal is met, the after-checks are at least as green as the baseline, unverifiable parts are named, and all work is committed.
|
|
43
|
-
|
|
44
|
-
## Output
|
|
45
|
-
|
|
46
|
-
Return the structured result; it is your only channel to GitHub.
|
|
47
|
-
- `status`: `done`, or `blocked` when you need a human (missing secret, required access, red baseline that the plan depends on).
|
|
48
|
-
- `prTitle`: conventional-commit style (`refactor:`, `build:`, `ci:`, `chore:`), under 72 characters.
|
|
49
|
-
- `prBody`: follow `pr-description`; include before/after numbers when the goal is measurable (build time, bundle size, warnings) and rollout/rollback steps for infra.
|
|
50
|
-
- `testsRun`: baseline and after-check commands with outcomes.
|
|
51
|
-
- `screenshots`: usually empty.
|
|
52
|
-
- `risks`: unverified CI/infra paths, rollout and rollback concerns, pre-existing failures.
|
|
53
|
-
- `blockedReason`: one sentence when blocked; otherwise null.
|