@rallycry/conveyor-skills 1.0.16 → 1.0.17
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/package.json
CHANGED
|
@@ -201,6 +201,11 @@ and never silence a failure with a filter, a `.skip`, or a "known flake" note:
|
|
|
201
201
|
either your diff broke it, or the test is broken or environment-dependent and
|
|
202
202
|
you fix the test.
|
|
203
203
|
|
|
204
|
+
**A schema change regenerates its pages.** Run the project's own generate step
|
|
205
|
+
after changing the schema (in Conveyor, `bun run db:generate` rewrites
|
|
206
|
+
`docs/schema`) and commit the regenerated pages with the change. Never edit a
|
|
207
|
+
schema page by hand: CI fails a pull request whose pages are stale.
|
|
208
|
+
|
|
204
209
|
**Long gates in a pod: background them the sanctioned way.** Launch a long
|
|
205
210
|
gate with the harness's `run_in_background` Bash option and end the turn — the
|
|
206
211
|
runner tracks the launch, holds pod liveness while a gate process is alive,
|
|
@@ -291,6 +296,22 @@ in chat and mark it Complete.
|
|
|
291
296
|
|
|
292
297
|
## Open the PR
|
|
293
298
|
|
|
299
|
+
### The PR body
|
|
300
|
+
|
|
301
|
+
Write the parts a person reads; Conveyor appends the rest.
|
|
302
|
+
|
|
303
|
+
- `## Summary`: 2-4 sentences on what changed and why.
|
|
304
|
+
- `## User flow`: for a user-facing change, the steps a person takes and what
|
|
305
|
+
they see.
|
|
306
|
+
- `## Screenshots`: the captures from Verify (the existing rule above).
|
|
307
|
+
- `## Happy path & edge cases`: 3-6 bullets: the paths you verified, and the
|
|
308
|
+
edge cases you deliberately did NOT handle, so a reviewer can veto
|
|
309
|
+
over-engineering or ask for one.
|
|
310
|
+
|
|
311
|
+
Never write `## Schema & wire changes` or `## Showcase` yourself: Conveyor
|
|
312
|
+
appends each one when it applies (a project with schema pages whose PR changed
|
|
313
|
+
them; a card with showcase attachments) when it opens the PR. Say why the schema changed in the Summary instead.
|
|
314
|
+
|
|
294
315
|
### Readiness policy
|
|
295
316
|
|
|
296
317
|
A newer base alone is not a reason to refresh an already-green branch. Keep that
|
|
@@ -151,6 +151,13 @@ Actionability bar — every step must survive a context-free reader:
|
|
|
151
151
|
- No "as discussed", no links to this chat, no TODOs the executor must
|
|
152
152
|
research from scratch.
|
|
153
153
|
|
|
154
|
+
**A plan that changes stored data or the wire contract adds a `## Schema
|
|
155
|
+
impact` block** ([references/plan-format.md](references/plan-format.md)): the
|
|
156
|
+
models it touches in a `schema` fence, the proposed delta as a `mermaid`
|
|
157
|
+
`erDiagram`, and one line on which existing field or relation already stores
|
|
158
|
+
the fact. That line is where a denormalization gets caught, such as a coach's
|
|
159
|
+
authority copied into a permission field when a role relation already records it.
|
|
160
|
+
|
|
154
161
|
**Close with the Builder briefing, and write it for the NEXT session.** Every
|
|
155
162
|
other section addresses a reader; this one addresses the agent that will inherit
|
|
156
163
|
this card having read the card and nothing else — no research, no dead ends, no
|
|
@@ -2,13 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## Plan Format
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
````markdown
|
|
6
6
|
## Objective
|
|
7
7
|
One sentence: what this task accomplishes and why.
|
|
8
8
|
|
|
9
9
|
## Approach
|
|
10
10
|
High-level strategy with relevant files/patterns/APIs.
|
|
11
11
|
|
|
12
|
+
## Schema impact
|
|
13
|
+
Only when the plan changes stored data or the wire contract; omit it otherwise.
|
|
14
|
+
```schema
|
|
15
|
+
Task
|
|
16
|
+
```
|
|
17
|
+
```mermaid
|
|
18
|
+
erDiagram
|
|
19
|
+
Task {
|
|
20
|
+
String reviewNote "added, optional"
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
Already stored? The existing field or relation that holds this fact today, or "none".
|
|
24
|
+
|
|
12
25
|
## Implementation Steps
|
|
13
26
|
1. Concrete step.
|
|
14
27
|
2. Concrete step.
|
|
@@ -26,7 +39,24 @@ High-level strategy with relevant files/patterns/APIs.
|
|
|
26
39
|
- **Already decided:** choices the builder should not reopen, one line of why each.
|
|
27
40
|
- **Traps:** what looks right and is not.
|
|
28
41
|
- **Verify in this order:** cheapest disqualifying check first.
|
|
29
|
-
|
|
42
|
+
````
|
|
43
|
+
|
|
44
|
+
## Schema impact — propose the delta, never a page
|
|
45
|
+
|
|
46
|
+
Only a plan that changes stored data or the wire contract carries this block.
|
|
47
|
+
|
|
48
|
+
- A `schema` fence names the models the plan touches. Each renders as its
|
|
49
|
+
current diagram from the project's generated schema pages, so a reviewer
|
|
50
|
+
sees what exists before the change.
|
|
51
|
+
- A `mermaid` `erDiagram` shows the proposed delta: only the models and fields
|
|
52
|
+
that change, each change named in its quoted comment (`"added"`,
|
|
53
|
+
`"removed"`, `"renamed from x"`).
|
|
54
|
+
- One line answers **which existing field or relation already stores this
|
|
55
|
+
fact?** "None" is a fine answer. A second copy of a fact (a permission column
|
|
56
|
+
beside the role that grants it) needs a stated reason, or it is a
|
|
57
|
+
denormalization to design out now.
|
|
58
|
+
- Never write or edit a schema page in a plan. The builder changes the schema
|
|
59
|
+
and regenerates the pages, which then record what actually shipped.
|
|
30
60
|
|
|
31
61
|
## Citations — ground every code step in the code
|
|
32
62
|
|
|
@@ -55,10 +55,16 @@ the loop.
|
|
|
55
55
|
1. `mcp__conveyor__get_task` for the plan — you cannot judge "does this do what
|
|
56
56
|
it says" without the "what it says".
|
|
57
57
|
2. **Ask the PR what you are reviewing, BEFORE any diff:**
|
|
58
|
-
`gh pr view <pr> --json state,baseRefName,headRefOid,files`. The PR's base is
|
|
58
|
+
`gh pr view <pr> --json state,baseRefName,headRefOid,files,body`. The PR's base is
|
|
59
59
|
often not the project default branch, and asking costs one call instead of
|
|
60
60
|
six spent guessing.
|
|
61
|
-
3.
|
|
61
|
+
3. **Read the PR body's `## Schema & wire changes` section first** when it has
|
|
62
|
+
one (Conveyor generates it from the changed files). Check each model and
|
|
63
|
+
contract it lists against the plan's `## Schema impact` block: a model the
|
|
64
|
+
plan never named, or a proposed delta that did not land, is a finding. The
|
|
65
|
+
section lists the files as they were at the last `create_pull_request`
|
|
66
|
+
call; when it disagrees with the diff, the diff wins.
|
|
67
|
+
4. Get the diff with the **merge-base** form, never two-dot, and **fetch the
|
|
62
68
|
base first** — a pod clones single-branch, so `origin/<base>` does not exist
|
|
63
69
|
until you ask for it and the diff fails or silently compares against nothing:
|
|
64
70
|
|
|
@@ -69,18 +75,18 @@ the loop.
|
|
|
69
75
|
Two-dot (`git diff <base>..HEAD`) compares against the base TIP, so it
|
|
70
76
|
reports already-merged commits as part of this change and sends you reviewing
|
|
71
77
|
code nobody here wrote.
|
|
72
|
-
|
|
78
|
+
5. **When the diff and the PR disagree, the PR wins.** Diff the head SHA
|
|
73
79
|
directly instead (`git diff <headSha>^ <headSha>`). Your checkout can be
|
|
74
80
|
stale and so can the remote branch tip — a merged PR's commit may be
|
|
75
81
|
reachable only by SHA. If the PR reports `MERGED` or `CLOSED`, say so and
|
|
76
82
|
review the recorded head SHA rather than assuming your tree matches it.
|
|
77
|
-
|
|
83
|
+
6. **Read the code under review out of the PR's commit, not the working tree:**
|
|
78
84
|
`git show <sha>:<path>` and `git grep <pattern> <sha>`. Grepping the working
|
|
79
85
|
tree when the PR is based elsewhere returns confident, wrong answers — it has
|
|
80
86
|
produced false review findings.
|
|
81
|
-
|
|
87
|
+
7. Read the surrounding code before judging consistency. A pattern is only a
|
|
82
88
|
pattern if the neighbours share it.
|
|
83
|
-
|
|
89
|
+
8. `mcp__conveyor__get_tag` on the card's tags — a tag's overview and linked
|
|
84
90
|
rules are what "follows existing patterns" actually means in this project.
|
|
85
91
|
|
|
86
92
|
## Criteria
|
|
@@ -96,6 +102,11 @@ the loop.
|
|
|
96
102
|
- **Test coverage** — are new paths tested? Edge cases covered? A test that
|
|
97
103
|
asserts nothing is worse than no test, because it reads as coverage.
|
|
98
104
|
- **Typing** — proper types, no unnecessary `any`, correct async/await.
|
|
105
|
+
- **Data model** — a fact stored twice (denormalization), a nullable column
|
|
106
|
+
with no stated reason, a relation that duplicates an existing path, a
|
|
107
|
+
contract member without `describe`, and a hand-edited or stale schema page
|
|
108
|
+
(its generated header line is missing, or the project's generate step leaves
|
|
109
|
+
a diff).
|
|
99
110
|
- **Naming and readability** — clear names, and no comment that says something
|
|
100
111
|
the code does not do.
|
|
101
112
|
|
|
@@ -112,6 +112,14 @@ labels. Each tag carries a `description` (≤255 — the summary), an `overview`
|
|
|
112
112
|
overview/description only when your change altered what the term means, add
|
|
113
113
|
the tag to the card only when the work is genuinely about that area, and
|
|
114
114
|
skip freely otherwise. Never bulk-assign tags from path matches alone.
|
|
115
|
+
- **The schema note**: on a project with schema pages, the in-pod
|
|
116
|
+
`create_pull_request` also returns a "Schema & wire changes detected" line
|
|
117
|
+
(`schemaNote`) naming the changed models, contracts and schema sources, and
|
|
118
|
+
the PR body carries the generated section (on both surfaces). When it says
|
|
119
|
+
the schema sources changed but no page did, regenerate the pages, commit
|
|
120
|
+
them, and call `create_pull_request` again: it reuses the open PR and
|
|
121
|
+
rewrites the section. A project without schema pages
|
|
122
|
+
can set them up with the public guide `guides/schema-pages`.
|
|
115
123
|
|
|
116
124
|
## Execute
|
|
117
125
|
|