@ericrisco/rsc 0.1.45 → 0.1.46
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/manifest.json +1 -1
- package/package.json +1 -1
- package/scripts/skill-migration-brief.md +96 -8
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -49,6 +49,13 @@ The goal is the smallest body that still routes correctly. 400 lines is a ceilin
|
|
|
49
49
|
|
|
50
50
|
- The **anti-patterns table**. The rubric requires one, and it is a different animal from a
|
|
51
51
|
rationalization table: it names concrete failure modes, not rules already stated above it.
|
|
52
|
+
|
|
53
|
+
**The hybrid case, which is common:** a table titled something like *"Anti-patterns /
|
|
54
|
+
rationalizations — STOP"*, with an *Excuse → Reality* framing. Do not delete it and do not leave
|
|
55
|
+
it as-is. **Keep every row, re-column it to `Anti-pattern | Do instead`, and drop the STOP /
|
|
56
|
+
excuse framing.** The rows are the value; the borrowed urgency wrapper is what dimension 7
|
|
57
|
+
forbids. Handling this the same way everywhere is what keeps the catalog consistent — deleting it
|
|
58
|
+
in one skill and keeping it in the next is worse than either choice applied uniformly.
|
|
52
59
|
- Decision tables where the flow genuinely branches.
|
|
53
60
|
- Tables specific to *this* skill's phase (e.g. what to show at each checkpoint) — that is not the
|
|
54
61
|
generic dial.
|
|
@@ -77,18 +84,21 @@ Your worktree has **no `node_modules`**, so:
|
|
|
77
84
|
## Ship
|
|
78
85
|
|
|
79
86
|
Commit only `skills/<id>/`. Subject `refactor(<id>): <what you actually did>`. The body says what you
|
|
80
|
-
removed **and why**, and — just as important — what you deliberately **kept** and why.
|
|
87
|
+
removed **and why**, and — just as important — what you deliberately **kept** and why.
|
|
88
|
+
|
|
89
|
+
**Authorship is Eric, never Claude.** No `Co-Authored-By` for any AI, no "Generated with Claude Code"
|
|
90
|
+
footer, nothing attributing the work to a tool — in the commit *or* the PR body. This is the hard
|
|
91
|
+
rule the `ship` skill enforces (`skills/ship/SKILL.md`), and it applies to this migration like
|
|
92
|
+
everything else in the repo. Verify before pushing:
|
|
81
93
|
|
|
82
|
-
```
|
|
83
|
-
|
|
94
|
+
```bash
|
|
95
|
+
git log -1 --format='%b' | grep -iE 'co-authored-by.*(claude|anthropic|ai)|generated with|claude code' \
|
|
96
|
+
&& echo "AUTHORSHIP VIOLATION — strip it" || echo "authorship clean"
|
|
84
97
|
```
|
|
85
98
|
|
|
86
99
|
Then `git push -u origin skill/<id>` and `gh pr create`. The PR body carries before/after description
|
|
87
|
-
chars, before/after body bytes, what went, what stayed, and the eval-lint result
|
|
88
|
-
|
|
89
|
-
```text
|
|
90
|
-
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
|
91
|
-
```
|
|
100
|
+
chars, before/after body bytes, what went, what stayed, and the eval-lint result — and no AI
|
|
101
|
+
attribution line.
|
|
92
102
|
|
|
93
103
|
## Judgment
|
|
94
104
|
|
|
@@ -96,6 +106,84 @@ If the skill already meets the rubric, **say so and change only the description.
|
|
|
96
106
|
diff beats a large invented one. Several skills in the pilot needed 5-line diffs; that is a good
|
|
97
107
|
outcome, not a failed pass. Never pad, and never cut substance to hit a number.
|
|
98
108
|
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
# For the orchestrator
|
|
112
|
+
|
|
113
|
+
Everything above is for the agent doing one skill. This half is for whoever is driving the fleet.
|
|
114
|
+
|
|
115
|
+
## Resuming, from nothing
|
|
116
|
+
|
|
117
|
+
There is no state file to keep in sync, on purpose. **The remote branches are the ledger:**
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# what is done
|
|
121
|
+
git ls-remote --heads origin 'refs/heads/skill/*'
|
|
122
|
+
# what is left = skills/ minus those, minus what is already merged to main
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
So a cold session resumes with: *read this brief, compute the skills with no `skill/*` branch, launch
|
|
126
|
+
one agent per skill in its own worktree.* Nothing from any previous conversation is required.
|
|
127
|
+
|
|
128
|
+
## Order: by profile, not alphabetically
|
|
129
|
+
|
|
130
|
+
A skill's `description` is in context for everyone who installs it, so migrate by blast radius:
|
|
131
|
+
|
|
132
|
+
1. `minimal` profile — in every rsc install.
|
|
133
|
+
2. `core` profile — the default install (the SDD chain plus the control plane).
|
|
134
|
+
3. High-install stack skills — `nextjs`, `react`, `fastapi`, `postgresdb`, `design`, `typescript`,
|
|
135
|
+
`python`, `go`, `flutter`, `secure-coding`, `deployment`.
|
|
136
|
+
4. Everything else.
|
|
137
|
+
|
|
138
|
+
If a run is cut short, this ordering means the part that was finished is the part that everyone pays for.
|
|
139
|
+
|
|
140
|
+
## Sharp edges (each one cost a real mistake)
|
|
141
|
+
|
|
142
|
+
- **`manifest.json` is derived.** Agents must never touch it — hundreds of parallel edits collide on
|
|
143
|
+
the same lines. Regenerate once, centrally, with `npm run manifest` after merging.
|
|
144
|
+
- **A fresh worktree has no `node_modules`** (it is gitignored, so it is not checked out). `npm test`
|
|
145
|
+
and `npm run validate` cannot run there. `scripts/eval-lint.sh` can — it uses python3.
|
|
146
|
+
- **Result-envelope blocks are asymmetric.** `specify`, `tasks`, `implement`, `verify`, `ship`,
|
|
147
|
+
`parallel` and `sdd` have one; `plan`, `analyze`, `clarify`, `constitution`, `review` and `debug`
|
|
148
|
+
do not. Tell each agent which case it is in, or it will helpfully invent one.
|
|
149
|
+
- **`author-skill` is special.** It teaches how to write skills, so it documented the *old*
|
|
150
|
+
conventions. There, rewriting the guidance IS the migration — and the change has to reach its
|
|
151
|
+
`references/` and `evals/`, which graded produced skills against the old rubric.
|
|
152
|
+
- **Short ids break greps.** `go`, `rag`, `php` match half of `eval-lint`'s output. Give those agents
|
|
153
|
+
an anchored pattern (`grep -E '^go +'`).
|
|
154
|
+
- **Compound bash commands are denied whole.** The `ship-guard` hook rejects the entire call if any
|
|
155
|
+
part matches `git checkout main`, so a chained `commit && push && checkout main` runs *nothing*.
|
|
156
|
+
Split them.
|
|
157
|
+
- **The id `parallel` is unusable in a git command.** A sandbox guard aimed at GNU `parallel` matches
|
|
158
|
+
the substring, so `git checkout -b skill/parallel` is refused. That skill's branch has to be
|
|
159
|
+
created from the pushed commit with `gh api` instead. Any future id containing a blocked tool name
|
|
160
|
+
will behave the same way.
|
|
161
|
+
|
|
162
|
+
## Content problems found while migrating — do NOT fix them in a format pass
|
|
163
|
+
|
|
164
|
+
Agents surfaced these and correctly left them alone. They need their own change:
|
|
165
|
+
|
|
166
|
+
- `sdd` claims every phase ends with a parseable envelope; six phases have none (see above).
|
|
167
|
+
- **`evals/cases.yaml` files carry stale claims about what the catalog contains, in both
|
|
168
|
+
directions.** Three agents hit this independently: `course-storytelling` routes a negative to
|
|
169
|
+
`deep-research`, which does not exist; `flutter` routes its Compose/SwiftUI negatives to `"none"`
|
|
170
|
+
on the grounds those skills are "not in this catalog", though `compose-multiplatform` and
|
|
171
|
+
`swift-ios` now are; `postgresdb` said the same of ORM traps, stale since `prisma-orm` and
|
|
172
|
+
`drizzle-orm` shipped. This drifts every time the catalog grows.
|
|
173
|
+
|
|
174
|
+
The root cause is that `eval-lint` does not actually verify a `route_to` names a real skill,
|
|
175
|
+
even though the rubric lists exactly that as a deterministic gate — so the gate is decorative.
|
|
176
|
+
(The 1024-char description limit had the same problem; that one is now enforced in
|
|
177
|
+
`schema/frontmatter.schema.json`.) Fixing the linter is worth more than fixing the instances:
|
|
178
|
+
it converts a recurring drift into a build error.
|
|
179
|
+
- `clarify`'s body calls itself "the fourth phase" while the chain it prints puts it third.
|
|
180
|
+
- `cold-outreach` never names `linkedin-outreach` in its route table, though the reverse link exists.
|
|
181
|
+
- `data-policy` says "walk five columns" and then lists six.
|
|
182
|
+
- `marketing/references/seo-geo.md` (20 KB) and marketing's landing-section material substantially
|
|
183
|
+
duplicate the standalone `seo-geo` and `landing-copy` skills. Three skills, one body of content,
|
|
184
|
+
paid for three times by anyone who installs all three. Needs a content-level de-duplication pass,
|
|
185
|
+
not a format one.
|
|
186
|
+
|
|
99
187
|
## Return value
|
|
100
188
|
|
|
101
189
|
```json
|