@ericrisco/rsc 2.0.20 → 2.1.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 +40 -17
- package/manifest.json +18 -85
- package/package.json +5 -1
- package/scripts/consult.js +8 -8
- package/scripts/install-apply.js +40 -11
- package/scripts/lib/default-skill-floor.js +5 -4
- package/scripts/lib/divergence.js +7 -3
- package/scripts/lib/domains.js +2 -2
- package/scripts/lib/onboarding-apply.js +43 -26
- package/scripts/lib/onboarding.js +5 -5
- package/scripts/lib/recommend.js +1 -1
- package/scripts/lib/repair.js +4 -2
- package/scripts/lib/retired-skills.js +20 -0
- package/scripts/rsc.js +25 -19
- package/scripts/skill-behavior-rubric.md +1 -1
- package/scripts/skill-migration-brief.md +3 -3
- package/skills/analyze/SKILL.md +3 -8
- package/skills/analyze/evals/cases.yaml +1 -1
- package/skills/author-skill/SKILL.md +3 -3
- package/skills/author-skill/evals/cases.yaml +1 -1
- package/skills/author-skill/references/rsc-conventions.md +1 -1
- package/skills/clarify/SKILL.md +7 -14
- package/skills/clarify/evals/cases.yaml +2 -2
- package/skills/code-review/SKILL.md +1 -1
- package/skills/constitution/SKILL.md +10 -13
- package/skills/constitution/evals/cases.yaml +3 -3
- package/skills/continuous-learning/SKILL.md +1 -1
- package/skills/continuous-learning/evals/cases.yaml +1 -1
- package/skills/debug/SKILL.md +8 -12
- package/skills/debug/evals/cases.yaml +1 -1
- package/skills/decision-challenge/SKILL.md +1 -1
- package/skills/deprecation/SKILL.md +1 -1
- package/skills/ftd/SKILL.md +1 -3
- package/skills/ftd/evals/cases.yaml +1 -1
- package/skills/harness/SKILL.md +10 -9
- package/skills/harness/references/claude-md-template.md +1 -1
- package/skills/harness/references/wiki-protocol.md +5 -6
- package/skills/idea-refinement/SKILL.md +1 -1
- package/skills/implement/SKILL.md +14 -18
- package/skills/implement/evals/cases.yaml +1 -1
- package/skills/init/SKILL.md +26 -44
- package/skills/init/evals/README.md +3 -3
- package/skills/init/evals/cases.yaml +7 -7
- package/skills/init/references/accompaniment-and-profile.md +22 -40
- package/skills/init/references/discovery.md +2 -2
- package/skills/init/references/recommend-skills.md +5 -5
- package/skills/init/scripts/verify.sh +3 -7
- package/skills/knowledge-ops/SKILL.md +1 -1
- package/skills/orient/SKILL.md +52 -41
- package/skills/orient/evals/README.md +11 -9
- package/skills/orient/evals/cases.yaml +39 -29
- package/skills/orient/references/explain-ladder.md +93 -0
- package/skills/orient/references/orientation-contract.md +70 -18
- package/skills/parallel/SKILL.md +1 -1
- package/skills/parallel/evals/cases.yaml +2 -2
- package/skills/plan/SKILL.md +9 -13
- package/skills/review/SKILL.md +5 -8
- package/skills/roast-me/SKILL.md +1 -1
- package/skills/sdd/SKILL.md +10 -14
- package/skills/sdd/evals/README.md +2 -2
- package/skills/sdd/evals/cases.yaml +4 -4
- package/skills/sdd/references/model-routing.md +5 -12
- package/skills/sdd-init/SKILL.md +3 -3
- package/skills/ship/SKILL.md +6 -11
- package/skills/simplify-code/SKILL.md +1 -1
- package/skills/skill-scout/SKILL.md +1 -1
- package/skills/source-grounded-development/SKILL.md +1 -1
- package/skills/specify/SKILL.md +13 -14
- package/skills/specify/evals/cases.yaml +1 -1
- package/skills/specify/references/eliciting-requirements.md +5 -5
- package/skills/suggest/SKILL.md +3 -9
- package/skills/suggest/evals/cases.yaml +1 -1
- package/skills/tasks/SKILL.md +6 -7
- package/skills/tasks/evals/cases.yaml +1 -1
- package/skills/unslop/SKILL.md +39 -10
- package/skills/unslop/evals/README.md +7 -7
- package/skills/unslop/evals/cases.yaml +10 -9
- package/skills/verify/SKILL.md +5 -8
- package/skills/verify/evals/cases.yaml +1 -1
- package/skills/worktrees/SKILL.md +14 -18
- package/skills/worktrees/evals/cases.yaml +1 -1
- package/targets/clone-bootstrap.mjs +4 -1
- package/targets/session-start.mjs +1 -1
- package/skills/bro/SKILL.md +0 -76
- package/skills/bro/evals/README.md +0 -22
- package/skills/bro/evals/cases.yaml +0 -62
- package/skills/eli5/SKILL.md +0 -63
- package/skills/eli5/evals/README.md +0 -22
- package/skills/eli5/evals/cases.yaml +0 -54
- package/skills/show-me/SKILL.md +0 -140
- package/skills/show-me/evals/README.md +0 -23
- package/skills/show-me/evals/cases.yaml +0 -61
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# The explain ladder
|
|
2
|
+
|
|
3
|
+
Text → diagram → HTML page → video. Climb one step per clear sign that the person does not follow,
|
|
4
|
+
or go straight to the step they ask for. Each step replaces the last one; it does not add to it.
|
|
5
|
+
|
|
6
|
+
## Step 1 — text
|
|
7
|
+
|
|
8
|
+
The three rules of `../SKILL.md`: STE, stands alone, short. Most answers stop here.
|
|
9
|
+
|
|
10
|
+
## Step 2 — one diagram in the chat
|
|
11
|
+
|
|
12
|
+
Pick the **smallest** form that carries the point. One form per answer. Two lines of prose beside it,
|
|
13
|
+
then stop.
|
|
14
|
+
|
|
15
|
+
| The question is about | Draw |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Logic, an algorithm, a decision | pseudocode |
|
|
18
|
+
| What calls what at runtime | call tree |
|
|
19
|
+
| UI structure | component tree, with state and module boundaries |
|
|
20
|
+
| Which file does what | shallow file tree, one comment per entry |
|
|
21
|
+
| Flow between pieces over time | Mermaid sequence or flow diagram |
|
|
22
|
+
| Steps that branch | ASCII flow with boxes and arrows |
|
|
23
|
+
| What changes in a shape that exists | `diff`, in the shape of the topic |
|
|
24
|
+
| Nothing with a shape | prose — say so, no decorative diagram |
|
|
25
|
+
|
|
26
|
+
Rules:
|
|
27
|
+
|
|
28
|
+
- **Only the parts that answer the question.** Drop the rest of the system.
|
|
29
|
+
- **Real names.** Real paths, functions, state values. `ServiceA → ServiceB` explains nothing.
|
|
30
|
+
- **A diff in the shape of the topic.** A layout change is a file-tree diff; a control-flow change is
|
|
31
|
+
a pseudocode diff. Show the whole block instead when most of it is new.
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
on(save)
|
|
35
|
+
if content is unchanged
|
|
36
|
+
return cached result
|
|
37
|
+
write new content
|
|
38
|
+
return fresh result
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```diff
|
|
42
|
+
src/
|
|
43
|
+
├── commands/
|
|
44
|
+
├── sessions/
|
|
45
|
+
-└── transport.ts
|
|
46
|
+
+└── transport/
|
|
47
|
+
+ ├── client.ts
|
|
48
|
+
+ └── stream.ts
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Step 3 — one HTML page
|
|
52
|
+
|
|
53
|
+
For layout, visual state, a dense comparison, or someone who knows **nothing** about the topic.
|
|
54
|
+
|
|
55
|
+
- One self-contained file. Big pictures first, words second. Inline SVG or plain HTML boxes; no chart
|
|
56
|
+
library. Readable on a phone.
|
|
57
|
+
- The picture carries the idea; the words label it. If the page still makes sense with the text
|
|
58
|
+
removed, it works. A caption per picture, not a paragraph.
|
|
59
|
+
- From zero: everyday objects only, no term before it is shown, and one line at the end on what the
|
|
60
|
+
simplification left out.
|
|
61
|
+
- Inside a product, borrow its colours, type and spacing. Never invent an identity.
|
|
62
|
+
|
|
63
|
+
Shape of a from-zero page:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
one sentence : what this thing is, in words a stranger would use
|
|
67
|
+
big picture 1 : the thing, drawn
|
|
68
|
+
big picture 2 : the thing doing its job, step by step
|
|
69
|
+
one line : the part people get wrong
|
|
70
|
+
one line : what this left out (only if it left something out)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Write it, then open it (`open path/to/explain-<topic>.html`).
|
|
74
|
+
|
|
75
|
+
## Step 4 — video, only on request
|
|
76
|
+
|
|
77
|
+
An animated explainer (3Blue1Brown style) for something that moves: a process over time, a
|
|
78
|
+
transformation, an algorithm running. It costs time and often an API key (narration, e.g.
|
|
79
|
+
ElevenLabs) or local compute. So:
|
|
80
|
+
|
|
81
|
+
- Offer it in one line. Never build it unasked.
|
|
82
|
+
- On yes, use the catalog's video skill (`remotion-video`). If it is not installed, `suggest` offers it.
|
|
83
|
+
|
|
84
|
+
## Anti-patterns
|
|
85
|
+
|
|
86
|
+
| Anti-pattern | Do this instead |
|
|
87
|
+
|---|---|
|
|
88
|
+
| Four forms because each adds a little | One form, the smallest that answers |
|
|
89
|
+
| The whole system when asked about one path | Draw the path, drop the rest |
|
|
90
|
+
| A diagram to look thorough | Answer in prose, say there is nothing to draw |
|
|
91
|
+
| Defining a term with two more terms | Show the thing, then name it |
|
|
92
|
+
| Simplifying until it is wrong | Keep it true; name what you dropped |
|
|
93
|
+
| Jumping to the HTML page on the first question | Climb one step per sign |
|
|
@@ -1,34 +1,86 @@
|
|
|
1
1
|
# Orientation contract
|
|
2
2
|
|
|
3
|
-
The
|
|
4
|
-
|
|
3
|
+
The one definition of how the harness talks to the person. The `orient` skill owns it. Other skills
|
|
4
|
+
point here from a short footer instead of copying it.
|
|
5
5
|
|
|
6
|
-
##
|
|
6
|
+
## Voice: STE, adapted
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
STE (Simplified Technical English, ASD-STE100) is the controlled language of aircraft maintenance
|
|
9
|
+
manuals. Its rules are measurable. Apply them about 80%: in the user's language, without the
|
|
10
|
+
900-word dictionary.
|
|
11
|
+
|
|
12
|
+
| Rule | Limit | Example |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| One idea per sentence | 1 | "Instalé la skill. Ahora reinicia la sesión." |
|
|
15
|
+
| Sentence length | ≤ 20 words for an instruction, ≤ 25 to describe | — |
|
|
16
|
+
| Paragraph length | ≤ 6 sentences, one topic | — |
|
|
17
|
+
| Active voice | always in instructions | "El test comprueba X", not "X es comprobado" |
|
|
18
|
+
| Instruction first, then the reason | — | "Haz backup. Si no, pierdes los datos." |
|
|
19
|
+
| One word, one meaning | — | Do not call the same thing "skill", "módulo" and "plugin" |
|
|
20
|
+
| Noun stacks | ≤ 3 words | "fichero de perfil", not "fichero de configuración de perfil de usuario" |
|
|
21
|
+
| Warnings | the order first, the risk next | "No borres `.rsc/`. Los hooks dejan de funcionar." |
|
|
22
|
+
| Lists | vertical, for anything with steps or more than 3 items | — |
|
|
23
|
+
|
|
24
|
+
Not STE: soften it when a rule would cost meaning. Precision beats the limit.
|
|
25
|
+
|
|
26
|
+
## Stand-alone answers
|
|
27
|
+
|
|
28
|
+
The reader did not see your reasoning, your tool output, or your plan. They may have skipped earlier
|
|
29
|
+
messages. So:
|
|
30
|
+
|
|
31
|
+
- Name things. "El arreglo de las rutas con espacio", not "ese arreglo".
|
|
32
|
+
- No back-references the reader cannot resolve: "el segundo commit", "lo de antes", "como dije".
|
|
33
|
+
- A term you introduced three turns ago gets a short gloss again if it matters now.
|
|
34
|
+
- One sentence of context is enough. Never retell the session.
|
|
35
|
+
|
|
36
|
+
Test: could someone read only this message and act on it? If not, add the missing sentence.
|
|
37
|
+
|
|
38
|
+
## Short
|
|
39
|
+
|
|
40
|
+
- Lead with the answer. Then what the person must do or decide.
|
|
41
|
+
- Cut preambles, recaps of what they said, and summaries of what you just wrote.
|
|
42
|
+
- A table or a list beats a paragraph when there are parallel items.
|
|
43
|
+
- If it does not change what the reader understands or does, delete it.
|
|
44
|
+
|
|
45
|
+
## Register
|
|
46
|
+
|
|
47
|
+
`technical_level` in `02-DOCS/wiki/harness/user-profile.md` sets the vocabulary:
|
|
48
|
+
|
|
49
|
+
- `technical` — use the precise term directly. No 101 explanations.
|
|
50
|
+
- `non-technical` or `mixed` — plain words. One everyday analogy per new idea: things a person has
|
|
51
|
+
held (keys, boxes, a queue at a counter, a light switch). Never explain an unknown with another
|
|
52
|
+
unknown. When a technical word is unavoidable (a command, a file), say what it does in the same
|
|
53
|
+
sentence.
|
|
54
|
+
- No profile — analogies, and ask once: "¿Te hablo en lenguaje técnico o con analogías?".
|
|
55
|
+
|
|
56
|
+
Simple is never false. If an analogy leaves something important out, say what in one line.
|
|
57
|
+
Simple is never childish: adult tone, no baby talk, no exclamation marks.
|
|
58
|
+
|
|
59
|
+
`accompaniment_level:` and `accompaniment:` (the L0–L3 dial) are retired keys from older profiles. Ignore them.
|
|
10
60
|
|
|
11
61
|
## The brújula block
|
|
12
62
|
|
|
63
|
+
```text
|
|
64
|
+
📍 Dónde estás — the state, one sentence that stands alone
|
|
65
|
+
✅ Qué has hecho — one line, only when something was done
|
|
66
|
+
🧭 Por qué — one sentence, only when a decision was made
|
|
67
|
+
➡️ Siguiente — 1-3 concrete options, ending in a question
|
|
13
68
|
```
|
|
14
|
-
📍 Dónde estás — the project phase/state (the map)
|
|
15
|
-
✅ Qué acabas de hacer — one line, in the user's language
|
|
16
|
-
🧭 Por qué — the technical why, scaled to the dial
|
|
17
|
-
➡️ Siguiente — 1-3 concrete options, ending in a question. Never in seco.
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Calibration (the dial)
|
|
21
69
|
|
|
22
|
-
|
|
70
|
+
- 📍 and ➡️ every time. ✅ and 🧭 only when they carry something.
|
|
71
|
+
- Each line follows the voice above: one sentence, stands alone.
|
|
72
|
+
- No turn ends in seco: a turn that finishes an action, reaches a fork, or could leave the person
|
|
73
|
+
unsure ends with the block.
|
|
74
|
+
- Outside any artifact. A text meant to be copied (email, post) is separated from the block.
|
|
23
75
|
|
|
24
|
-
|
|
25
|
-
- **L1 — breve:** the four lines; one line of why.
|
|
26
|
-
- **L2 — explica decisiones:** the four lines; justify the relevant decision; real forks.
|
|
27
|
-
- **L3 — acompañamiento total:** the four lines, full why, many orienting questions, each option in plain language.
|
|
76
|
+
## The ladder
|
|
28
77
|
|
|
29
|
-
|
|
78
|
+
Text first. One step up per clear sign that the person does not follow, or when they ask for a step.
|
|
79
|
+
Detail → `explain-ladder.md`.
|
|
30
80
|
|
|
31
81
|
## Division of labor
|
|
32
82
|
|
|
33
83
|
- `orient` guides the **person** (this contract).
|
|
34
84
|
- `suggest` equips the **session** ("install the missing skill?"). Defer install prompts to it.
|
|
85
|
+
- `unslop` cleans **text that leaves the session** (emails, posts, READMEs): AI tells out, human
|
|
86
|
+
register in.
|
package/skills/parallel/SKILL.md
CHANGED
|
@@ -120,7 +120,7 @@ This is where parallel work is actually finished. In order:
|
|
|
120
120
|
|
|
121
121
|
Only after the combined suite is green is the parallel batch done. Hand the merged, green result back to the phase that called you (usually `implement`, heading for `verify`).
|
|
122
122
|
|
|
123
|
-
**
|
|
123
|
+
**What to say.** In chat, say only what the reader needs, in the `orient` voice: the partition, any frozen contract, and each reconcile conflict with its fix — one line each. The register (technical or with analogies) comes from `technical_level` in `02-DOCS/wiki/harness/user-profile.md`. However short the report, you still run the independence test and the combined-suite gate in full.
|
|
124
124
|
|
|
125
125
|
## Anti-patterns → STOP
|
|
126
126
|
|
|
@@ -32,7 +32,7 @@ should_not_trigger:
|
|
|
32
32
|
why: "The red→green→refactor TDD loop lives inside implement; parallel runs several such loops at once but never replaces the discipline within a single unit."
|
|
33
33
|
|
|
34
34
|
capability:
|
|
35
|
-
- scenario: "User asks: 'I have four tasks left on the plan: (a) add the users repository, (b) add the invoices repository, (c) add a field to the orders migration, (d) add another field to the same orders migration. They feel independent — fan them out across subagents and merge when done.' (FastAPI stack noted in the plan;
|
|
35
|
+
- scenario: "User asks: 'I have four tasks left on the plan: (a) add the users repository, (b) add the invoices repository, (c) add a field to the orders migration, (d) add another field to the same orders migration. They feel independent — fan them out across subagents and merge when done.' (FastAPI stack noted in the plan; technical_level: technical in the profile.)"
|
|
36
36
|
must_include:
|
|
37
37
|
- "Runs the independence test pairwise and correctly identifies that (c) and (d) touch the SAME orders migration/file, so they are NOT independent and must be one serial unit — not two parallel units"
|
|
38
38
|
- "Partitions into a valid plan: (a) and (b) as disjoint parallel units, (c)+(d) collapsed into a single serial unit, with the partition written down before dispatch"
|
|
@@ -41,4 +41,4 @@ capability:
|
|
|
41
41
|
- "Each unit keeps its own red→green→refactor (delegated to implement + the FastAPI testing reference); parallel does not relax the TDD discipline inside a unit"
|
|
42
42
|
- "Gathers ALL units, checks each against its done-check before merge, then reconciles: merges, resolves conflicts by hand, folds decision logs into 02-DOCS/wiki/sdd/decisions.md"
|
|
43
43
|
- "Runs the COMBINED suite across the merged result and refuses to call it done on green-in-isolation; if the seam is red, routes to debug rather than guessing"
|
|
44
|
-
- "
|
|
44
|
+
- "Reports briefly in technical terms (the partition, frozen contracts, and each reconcile conflict with its fix, one line each) and hands the green result back to implement → verify"
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -48,7 +48,7 @@ Pydantic model or a Go method on a struct — it can, because the contract is un
|
|
|
48
48
|
3. **The Knowledge map** — `02-DOCS/wiki/index.md` points at `02-DOCS/wiki/stack/*` and prior
|
|
49
49
|
plans/decisions. Reusing what the project already settled is the difference between a plan and
|
|
50
50
|
scope drift.
|
|
51
|
-
4. **The
|
|
51
|
+
4. **The profile** — `technical_level` in `02-DOCS/wiki/harness/user-profile.md` (see below).
|
|
52
52
|
|
|
53
53
|
## What a plan contains
|
|
54
54
|
|
|
@@ -95,18 +95,14 @@ phase's default tier is **`heavy`**. Routing is off unless `models.enabled: true
|
|
|
95
95
|
`02-DOCS/wiki/sdd/config.yaml`; the resolution order, the announce rule and the model table live in
|
|
96
96
|
`../sdd/references/model-routing.md`. Routing off or no profile → session model, silently.
|
|
97
97
|
|
|
98
|
-
##
|
|
98
|
+
## Talking about the plan
|
|
99
99
|
|
|
100
|
-
The
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
| **L0** | Terse plan, no narration in chat — write the file, point to it. |
|
|
107
|
-
| **L1** | Same artifact, one line of *why* on the top architectural decision. |
|
|
108
|
-
| **L2** | Justify each significant design choice in the artifact; surface the trade-offs weighed. |
|
|
109
|
-
| **L3** | Walk a non-technical user through the architecture in plain language, define terms inline, and ask about constraints you cannot infer — one focused question at a time. |
|
|
100
|
+
The artifact is complete regardless of who reads it: every section, each significant design choice
|
|
101
|
+
justified with the trade-offs weighed. In chat, say only what the reader needs, in the `orient`
|
|
102
|
+
voice: point to the file and give one line of *why* on the top architectural decision. The register
|
|
103
|
+
comes from `technical_level` in `02-DOCS/wiki/harness/user-profile.md` (set by `../init/SKILL.md`):
|
|
104
|
+
for a `non-technical` reader, explain the architecture with an everyday analogy and define each term
|
|
105
|
+
inline. Ask only about constraints you cannot infer.
|
|
110
106
|
|
|
111
107
|
## Anti-patterns
|
|
112
108
|
|
|
@@ -124,7 +120,7 @@ just quiet.
|
|
|
124
120
|
## Always propose isolation before the build
|
|
125
121
|
|
|
126
122
|
Once the plan is written, **always propose isolating the work in a git worktree/branch** before any
|
|
127
|
-
code is implemented — every feature, not just the risky ones. One line
|
|
123
|
+
code is implemented — every feature, not just the risky ones. One line:
|
|
128
124
|
|
|
129
125
|
> *"Antes de implementar, ¿aíslo este trabajo en un worktree/rama propia (`../worktrees/SKILL.md`)
|
|
130
126
|
> para no tocar tu rama actual? (recomendado)"*
|
package/skills/review/SKILL.md
CHANGED
|
@@ -24,7 +24,7 @@ The discipline is the same in both directions: **every finding and every rebutta
|
|
|
24
24
|
|
|
25
25
|
1. `02-DOCS/wiki/sdd/specs/<slug>.md` and `02-DOCS/wiki/sdd/plans/<slug>.md` — what the diff was *supposed* to do. A review with no spec is a review of vibes.
|
|
26
26
|
2. `02-DOCS/wiki/sdd/constitution.md` — the project's non-negotiables (stack canon, quality bars, conventions). Constitution violations are findings even when the code "works".
|
|
27
|
-
3. `02-DOCS/wiki/harness/user-profile.md` — the
|
|
27
|
+
3. `02-DOCS/wiki/harness/user-profile.md` — `technical_level`, the register (see "How a review reads" below).
|
|
28
28
|
|
|
29
29
|
If there is no spec/plan (someone jumped straight to code), say so and review against the constitution + the diff's own stated intent. Don't pretend a spec exists.
|
|
30
30
|
|
|
@@ -247,18 +247,15 @@ When you've processed the review, summarize for the reviewer (and the decisions
|
|
|
247
247
|
| "I'll approve it, the issues are minor" | If they're truly minor, label them nits and approve. If they block, don't approve. No mushy middle. |
|
|
248
248
|
| "No spec, so I'll just eyeball it" | Say there's no spec and review against the constitution + stated intent. Don't fake a baseline. |
|
|
249
249
|
|
|
250
|
-
##
|
|
250
|
+
## How a review reads
|
|
251
251
|
|
|
252
|
-
Read
|
|
252
|
+
Read `technical_level` from `02-DOCS/wiki/harness/user-profile.md`. It changes the words, never the rigor — every reader gets the same passes and the same evidence bar. No profile → use analogies and proceed; don't stall a review to ask.
|
|
253
253
|
|
|
254
|
-
|
|
255
|
-
- **L1** — each finding gets its one-line *why*.
|
|
256
|
-
- **L2** — full finding format (where/why/repro/fix); explain why each blocker blocks.
|
|
257
|
-
- **L3** — the above plus teaching: name the defect class (IDOR, N+1, TOCTOU), why the boundary matters, and how to not reintroduce it. For non-technical authors, translate the impact ("any logged-in person could read everyone else's documents").
|
|
254
|
+
In the `orient` voice: the verdict first, then the blocker list — e.g. `CHANGES REQUESTED: 1 blocker (auth, documents.py:42), 1 nit. Fix the auth scope and re-run verify.` Each finding keeps its full format (where/why/repro/fix) and names its defect class (IDOR, N+1, TOCTOU). For a `non-technical` author, translate the impact ("any logged-in person could read everyone else's documents").
|
|
258
255
|
|
|
259
256
|
## Model tier — `heavy` (opt-in routing)
|
|
260
257
|
|
|
261
|
-
This phase's default model tier is **`heavy`** — adversarial diff reading is where the strongest model pays off most. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`. When on: resolve this phase's tier (`models.overrides` wins over `models.phases`), map it to a model via `models.tiers`, and apply per `../sdd/references/model-routing.md` — announce the switch
|
|
258
|
+
This phase's default model tier is **`heavy`** — adversarial diff reading is where the strongest model pays off most. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`. When on: resolve this phase's tier (`models.overrides` wins over `models.phases`), map it to a model via `models.tiers`, and apply per `../sdd/references/model-routing.md` — announce the switch in one line when it differs from the session model, and dispatch any `Task`/`parallel` subagents on that model. Routing off or no profile → honor the session model silently. Never fake a switch a tool can't make; skip routing on a one-line change.
|
|
262
259
|
|
|
263
260
|
## Where this writes
|
|
264
261
|
|
package/skills/roast-me/SKILL.md
CHANGED
|
@@ -119,4 +119,4 @@ Output the roast report as formatted markdown.
|
|
|
119
119
|
|
|
120
120
|
## Orientación (siempre)
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
package/skills/sdd/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sdd
|
|
3
|
-
description: "Use when you want a disciplined, spec-driven path from a feature idea to shipped, verified software — the SDD dispatcher and front door, in any language. States the method, reads the
|
|
3
|
+
description: "Use when you want a disciplined, spec-driven path from a feature idea to shipped, verified software — the SDD dispatcher and front door, in any language. States the method, reads the user's register from 02-DOCS, and routes to the right phase: constitution -> specify -> clarify -> plan -> tasks -> analyze -> implement -> verify -> review -> ship, with debug / worktrees / parallel on demand. Use it to start a feature, to govern the whole flow, or when unsure which phase you are in. NOT a single phase itself (it dispatches), NOT the workspace harness (that is `harness`), NOT a stack build skill."
|
|
4
4
|
tags: [sdd, spec, workflow, plan]
|
|
5
5
|
recommends: [sdd-init, constitution, specify]
|
|
6
6
|
profiles: [core, full]
|
|
@@ -13,7 +13,7 @@ origin: risco
|
|
|
13
13
|
|
|
14
14
|
`sdd` is the **engineering counterpart of the `harness`**. The harness runs the chaos → knowledge loop (inbox → `02-DOCS` wiki). `sdd` runs the **intent → shipped software** loop, and it writes the artifacts of that loop — constitution, specs, plans, decisions — into the same `02-DOCS/wiki/sdd/` so the project's knowledge grows with every feature instead of leaking into chat history.
|
|
15
15
|
|
|
16
|
-
This skill does **not** do a phase itself. It is the dispatcher: it names the method, reads
|
|
16
|
+
This skill does **not** do a phase itself. It is the dispatcher: it names the method, reads which register you want (technical or with analogies), tells you which phase you are in, and hands off to the phase skill that owns the work. Each phase skill, when it finishes, points you at the next one — so once you enter the chain you rarely come back here.
|
|
17
17
|
|
|
18
18
|
## The method in one breath
|
|
19
19
|
|
|
@@ -117,20 +117,16 @@ to `02-DOCS/wiki/sdd/` as it goes, so the work stays reviewable after the fact.
|
|
|
117
117
|
- **A hard failure** it can't resolve (a red test it can't green → `debug`; an `analyze` contradiction).
|
|
118
118
|
- **Destructive / irreversible / outward-facing actions** — push, merge, delete, secrets. `ship` (PR/merge) still confirms: autopilot drives the **build**, not the **release**.
|
|
119
119
|
|
|
120
|
-
Run the fan-out on the `developer` subagent as usual, and narrate
|
|
120
|
+
Run the fan-out on the `developer` subagent as usual, and narrate in the `orient` voice: name each phase as it passes and show its artifact, one line each. Autopilot changes **when you ask**, never **what gets written** — every artifact and gate-check still happens; you just don't block on a human between them.
|
|
121
121
|
|
|
122
|
-
## Read the
|
|
122
|
+
## Read the register first
|
|
123
123
|
|
|
124
|
-
Before dispatching, read `02-DOCS/wiki/harness/user-profile.md`
|
|
124
|
+
Before dispatching, read `technical_level` in `02-DOCS/wiki/harness/user-profile.md` — exactly as every rsc skill does. It picks the register (technical terms, or plain words with analogies); it never changes whether the gates exist. Speak in the `orient` voice:
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
| **L0** "cavernícola" | Name the phase, do it, show the artifact. Minimal prose. | Ask only the questions that actually change the outcome. |
|
|
129
|
-
| **L1** "breve" | One line of *why this phase now*. | One-line rationale per question. |
|
|
130
|
-
| **L2** "explica decisiones" | Justify each significant choice as you go. | Walk the trade-offs before the user picks. |
|
|
131
|
-
| **L3** "acompañamiento total" | Explain the phase, why it matters, what it produces. | Ask broadly, teach the SDD reasoning, narrate every decision. |
|
|
126
|
+
- **At each phase:** name the phase, give one line of *why this phase now*, do it, show the artifact.
|
|
127
|
+
- **At gates** (clarify / analyze / decisions): ask only the questions that actually change the outcome, each with its trade-off and a recommendation.
|
|
132
128
|
|
|
133
|
-
If there is no profile yet,
|
|
129
|
+
If there is no profile yet, use analogies and ask once **"technical or with analogies?"** before dispatching, and persist the answer — that is `init`'s job and `sdd` honors it.
|
|
134
130
|
|
|
135
131
|
## Per-phase model routing (opt-in)
|
|
136
132
|
|
|
@@ -144,7 +140,7 @@ execution, light on ship/worktrees/sdd-init).
|
|
|
144
140
|
It is **off by default** (`models.enabled: false`). When the user opts in, each phase applies it
|
|
145
141
|
two ways: **programmatically** — dispatching `Task`/`parallel` subagents on the tier's model
|
|
146
142
|
(real routing, e.g. Claude Code) — and **advisorily** — announcing the recommended switch at the
|
|
147
|
-
phase boundary,
|
|
143
|
+
phase boundary, in one line, for inline work and assistants that can't switch
|
|
148
144
|
programmatically. Never switch unasked, never claim a switch a tool can't make, and skip routing
|
|
149
145
|
on trivial one-line changes. The `sdd` dispatcher itself never routes (staying on the session
|
|
150
146
|
model); `parallel` has no fixed tier (each unit inherits the tier of its work). Full protocol,
|
|
@@ -234,7 +230,7 @@ Include current phase, active artifacts, last verdict, completed tasks, next ste
|
|
|
234
230
|
| "I get the feature, I'll just start coding." | That is the failure SDD prevents. At minimum write the spec; the artifact is the contract. |
|
|
235
231
|
| "`sdd` should write the spec itself." | No. `sdd` dispatches. Invoke `specify` — it owns the spec and asks the right questions. |
|
|
236
232
|
| "Clarify and analyze are bureaucracy, skip them." | Skipped gates are where drift hides. Run them; only pass through if the change is genuinely trivial and you say so. |
|
|
237
|
-
| "
|
|
233
|
+
| "The user wants it short, so I'll skip the gates to be terse." | Short changes the words, not the method. Fewer words, same gates. |
|
|
238
234
|
| "I'll keep the plan in chat, it's faster." | Chat is not durable. Write it under `02-DOCS/wiki/sdd/` or the next session is blind. |
|
|
239
235
|
| "I'll skip `sdd-init`; I remember the test command." | The runtime contract belongs in `config.yaml`, not memory. |
|
|
240
236
|
| "I'll load every skill into the subagent." | That contaminates context. Use registry -> selected paths -> compact rules. |
|
|
@@ -48,8 +48,8 @@ the skill — or these rubrics — needs work.
|
|
|
48
48
|
- This is **LLM-as-judge / human-in-the-loop**, not deterministic. Use a consistent grader
|
|
49
49
|
(same model + rubric) across A/B to keep the comparison fair.
|
|
50
50
|
- The headline differentiators for `sdd`: it **dispatches, it does not perform a phase**; it
|
|
51
|
-
states the method ("the artifact is the contract"), reads the **
|
|
52
|
-
|
|
51
|
+
states the method ("the artifact is the contract"), reads the **register** (`technical_level`)
|
|
52
|
+
and speaks in the orient voice (never skipping gates), presents the **chained phase map**, applies the **invoke
|
|
53
53
|
rule** and the **skip rules** honestly, and writes artifacts under `02-DOCS/wiki/sdd/`.
|
|
54
54
|
- Key confusables to watch: "write the spec" is `specify`, not `sdd`; "set the principles" is
|
|
55
55
|
`constitution`; "open the PR" is `ship`; "build 01-TOOLS/02-DOCS" is `harness`. If the agent
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
skill: sdd
|
|
2
2
|
|
|
3
3
|
# Cases for the rsc-sdd "sdd" dispatcher / front door.
|
|
4
|
-
# sdd states the SDD method, reads the
|
|
4
|
+
# sdd states the SDD method, reads the user's register (technical_level) from
|
|
5
5
|
# 02-DOCS/wiki/harness/user-profile.md, and ROUTES to the right phase skill in
|
|
6
6
|
# the chain constitution -> specify -> clarify -> plan -> tasks -> analyze ->
|
|
7
7
|
# implement -> verify -> review -> ship (debug/worktrees/parallel on demand).
|
|
@@ -61,10 +61,10 @@ should_not_trigger:
|
|
|
61
61
|
why: "A concrete stack build with a named framework is the nextjs stack skill. sdd is process, not stack; it would defer build specifics to nextjs rather than fire itself."
|
|
62
62
|
|
|
63
63
|
capability:
|
|
64
|
-
- scenario: "A developer
|
|
64
|
+
- scenario: "A developer whose profile says technical_level: technical says: 'I've got a rough idea for a feature and I want to build it the spec-driven way, end to end. Where do I begin?' Show how the dispatcher opens the engagement."
|
|
65
65
|
must_include:
|
|
66
66
|
- "States the SDD method in brief: decide what & why before how, write it down, each artifact gates the next ('the artifact is the contract')"
|
|
67
|
-
- "Reads (or notes it should read) 02-DOCS/wiki/harness/user-profile.md
|
|
67
|
+
- "Reads (or notes it should read) technical_level from 02-DOCS/wiki/harness/user-profile.md and, being technical, uses technical terms directly with a one-line why per step rather than long explanations or analogies"
|
|
68
68
|
- "Presents the chained phase map: sdd-init -> constitution -> proposal? -> specify -> clarify -> plan -> tasks -> analyze -> implement -> verify -> review -> ship -> archive, with debug/worktrees/parallel on demand"
|
|
69
69
|
- "Includes sdd-init as step zero when 02-DOCS/wiki/sdd/config.yaml is missing, and explains that it detects test commands, strict TDD and .rsc/skill-registry.json"
|
|
70
70
|
- "Applies the invoke rule: a fuzzy idea with no spec on disk routes to specify (and notes constitution runs once per project if not yet present)"
|
|
@@ -85,6 +85,6 @@ capability:
|
|
|
85
85
|
- "Names the three tiers — heavy (deep reasoning), balanced (execution), light (mechanical) — and that each phase has a default tier"
|
|
86
86
|
- "States the default quality-biased mapping: heavy on constitution/plan/analyze/review/debug, balanced on specify/clarify/tasks/implement/verify, light on ship/worktrees/sdd-init"
|
|
87
87
|
- "Says routing is OFF by default (models.enabled:false) and lives in the models block of 02-DOCS/wiki/sdd/config.yaml, written by sdd-init; turning it on is the user's choice"
|
|
88
|
-
- "Explains the two application layers: programmatic (dispatching Task/parallel subagents on the tier's model, e.g. Claude Code) and advisory (announcing the recommended switch at the phase boundary,
|
|
88
|
+
- "Explains the two application layers: programmatic (dispatching Task/parallel subagents on the tier's model, e.g. Claude Code) and advisory (announcing the recommended switch at the phase boundary, in one line)"
|
|
89
89
|
- "Is honest about limits: never switches unasked, never claims a model switch an assistant cannot make, and skips routing on trivial one-line changes"
|
|
90
90
|
- "Points to references/model-routing.md for the full protocol, per-assistant mechanism, and provider→model table rather than inventing model names inline"
|
|
@@ -92,7 +92,7 @@ The user owns this. They change a phase by adding it to `models.overrides` (e.g.
|
|
|
92
92
|
|
|
93
93
|
## How a phase applies the profile (the procedure)
|
|
94
94
|
|
|
95
|
-
Run this at the start of any SDD phase, after reading the
|
|
95
|
+
Run this at the start of any SDD phase, after reading the user profile:
|
|
96
96
|
|
|
97
97
|
1. **Read** `models` from `02-DOCS/wiki/sdd/config.yaml`. If the block is absent or
|
|
98
98
|
`enabled: false` → **do nothing**: honor the session model, say nothing about models.
|
|
@@ -106,7 +106,7 @@ Run this at the start of any SDD phase, after reading the accompaniment dial:
|
|
|
106
106
|
model and is the most reliable application — prefer it.
|
|
107
107
|
- **Advisory (all assistants, inline work).** If the resolved model differs from the current
|
|
108
108
|
session model and the work isn't being delegated, **announce** it at the phase boundary,
|
|
109
|
-
|
|
109
|
+
in one line (below), and give the switch command for the active
|
|
110
110
|
assistant (mechanism table below). Never block — the human may decline and continue.
|
|
111
111
|
5. **Skip routing entirely** for a one-line / trivial change, exactly as the SDD skip rule says
|
|
112
112
|
for the rest of the chain. Ceremony serves shipping, not the other way around.
|
|
@@ -114,16 +114,9 @@ Run this at the start of any SDD phase, after reading the accompaniment dial:
|
|
|
114
114
|
Log it to `02-DOCS/wiki/sdd/decisions.md` only when the choice actually mattered (e.g. you
|
|
115
115
|
overrode a tier for a hard plan) — not on every phase.
|
|
116
116
|
|
|
117
|
-
###
|
|
117
|
+
### How to announce a switch
|
|
118
118
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
| Level | On a model switch you… |
|
|
122
|
-
| --- | --- |
|
|
123
|
-
| **L0** "cavernícola" | Switch/dispatch silently. One short line only if the user must act (e.g. "para esta fase conviene opus: `/model opus`"). |
|
|
124
|
-
| **L1** "breve" | One line: which tier/model and the one-word why. |
|
|
125
|
-
| **L2** "explica decisiones" | Name the tier, the model, and why this phase warrants it; give the switch command. |
|
|
126
|
-
| **L3** "acompañamiento total" | Explain the tier system as it applies here, the cost/quality trade-off, and how to override in config. |
|
|
119
|
+
Announcing never changes whether routing happens. A programmatic dispatch is silent. When the user must act, say it in one line, in the `orient` voice: the tier, the model, the one-word why, and the switch command (e.g. "para esta fase conviene opus: `/model opus`"). Explain the tier system or how to override it in config only when the user asks.
|
|
127
120
|
|
|
128
121
|
## Per-assistant switch mechanism
|
|
129
122
|
|
|
@@ -194,7 +187,7 @@ tier you didn't use.
|
|
|
194
187
|
| --- | --- |
|
|
195
188
|
| "Routing sounds good, I'll switch models even though the user never enabled it." | It's opt-in. `enabled: false` (and a missing block) means honor the session model and say nothing. |
|
|
196
189
|
| "I'll tell the user I switched to Opus." (on an assistant with no programmatic switch) | You can't switch there. Announce the tier and the command; never claim a switch you didn't make. |
|
|
197
|
-
| "
|
|
190
|
+
| "The user wants it short, so I'll skip routing." | Short changes words, not behavior. Route the same; announce only when the user must act. |
|
|
198
191
|
| "It's a one-line typo fix but the phase is `review`, so → heavy." | Skip routing on trivial changes, like the rest of the chain. Don't spin up the expensive model for a copy tweak. |
|
|
199
192
|
| "I'll log the model on every phase." | Log to `decisions.md` only when the model choice mattered. The envelope `model` field already records the routine case. |
|
|
200
193
|
| "config has no `models` block, I'll assume the defaults are active." | A missing block means routing is **off**. Defaults describe what `sdd-init` *writes*, not an implicit on-state. |
|
package/skills/sdd-init/SKILL.md
CHANGED
|
@@ -23,14 +23,14 @@ Read-only first:
|
|
|
23
23
|
|
|
24
24
|
- `package.json`, lockfiles, `pnpm-workspace.yaml`, `pyproject.toml`, `requirements.txt`, `go.mod`, `pubspec.yaml`, `Dockerfile`, `.github/`.
|
|
25
25
|
- Existing `02-DOCS/wiki/sdd/config.yaml`, if present.
|
|
26
|
-
- `02-DOCS/wiki/harness/user-profile.md`, if present, for
|
|
26
|
+
- `02-DOCS/wiki/harness/user-profile.md`, if present, for `technical_level` (the register) only.
|
|
27
27
|
- `.rsc/skill-registry.json`, if present, to decide whether it is stale or missing.
|
|
28
28
|
|
|
29
29
|
If `02-DOCS/` does not exist, create only the `02-DOCS/wiki/sdd/` path needed for the config. Do not run full harness scaffolding unless the user asked for `harness`.
|
|
30
30
|
|
|
31
31
|
## Preflight Choices
|
|
32
32
|
|
|
33
|
-
Ask only when the answer changes behavior;
|
|
33
|
+
Ask only when the answer changes behavior; explain each trade-off in one line, in the register `technical_level` sets.
|
|
34
34
|
|
|
35
35
|
| Setting | Default | Options |
|
|
36
36
|
| --- | --- | --- |
|
|
@@ -77,7 +77,7 @@ Later phases use it as a cheap index — id, trigger, tags, path, installed/avai
|
|
|
77
77
|
Calibration is the moment to make sure the relevant skills are actually present, not just indexed. Detect → propose → install:
|
|
78
78
|
|
|
79
79
|
1. **Detect what this repo needs.** Use the stack you just detected, or ask the CLI: `npx @ericrisco/rsc consult "<one line: stack + what we're building>"`. Map signals to skills — e.g. `next`→`nextjs`+`design`, `go.mod`→`go`, FastAPI→`fastapi`, `*.sql`/Prisma→`postgresdb`/`prisma-orm`, Stripe→`stripe`, Dockerfile/CI→`docker`/`github-actions`, tests→`testing-*`/`e2e-testing`. The SDD phase skills (`specify`…`ship`) should already be present from `--profile core`; install any that are missing.
|
|
80
|
-
2. **Show the shortlist + confirm.** List the skills with a one-line *why* each,
|
|
80
|
+
2. **Show the shortlist + confirm.** List the skills with a one-line *why* each, in the user's register, and get a one-word confirm before touching their environment.
|
|
81
81
|
3. **Install them yourself.** You have a terminal — run it via Bash:
|
|
82
82
|
```bash
|
|
83
83
|
npx @ericrisco/rsc add <skill> [<skill> ...]
|
package/skills/ship/SKILL.md
CHANGED
|
@@ -35,7 +35,7 @@ git log -1 --format='%an <%ae>%n%n%b' | grep -iE 'co-authored-by.*(claude|anthro
|
|
|
35
35
|
|
|
36
36
|
## Read these first
|
|
37
37
|
|
|
38
|
-
1. `02-DOCS/wiki/harness/user-profile.md` — the
|
|
38
|
+
1. `02-DOCS/wiki/harness/user-profile.md` — `technical_level`, the register. It sets the words only, never whether you run the safety checklist.
|
|
39
39
|
2. The **review verdict** for this branch — ship runs only on `APPROVE` or `APPROVE WITH NITS`. `CHANGES REQUESTED` loops back to `implement`, not forward to ship. If there is no verdict on record, say so and treat it as a red flag: do not ship a diff that skipped `../review/SKILL.md` — offer to run it first.
|
|
40
40
|
3. `02-DOCS/wiki/sdd/decisions.md` and the spec/plan slug — so the commit message and PR body describe *what shipped against which spec*, not a vague "various changes".
|
|
41
41
|
|
|
@@ -85,7 +85,7 @@ was reviewed, never that the review was any good.
|
|
|
85
85
|
|
|
86
86
|
## The three landing options — always present exactly three
|
|
87
87
|
|
|
88
|
-
This mirrors the harness "siempre 3 opciones" pattern. Gather the one fact that changes the answer (does this repo use PRs / require review on `main`?), then present **exactly three** with an honest recommendation matched to the workflow
|
|
88
|
+
This mirrors the harness "siempre 3 opciones" pattern. Gather the one fact that changes the answer (does this repo use PRs / require review on `main`?), then present **exactly three** with an honest recommendation matched to the workflow, in the user's register.
|
|
89
89
|
|
|
90
90
|
| Option | What it does | Choose it when |
|
|
91
91
|
| --- | --- | --- |
|
|
@@ -201,16 +201,11 @@ The commit is the durable record. Make it describe the change and tie it to the
|
|
|
201
201
|
|
|
202
202
|
Closing the branch (PR / merge / cleanup) is mechanical, so this phase's default tier is **`light`**. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`; when it is on, follow `../sdd/references/model-routing.md` for resolving and announcing the switch rather than from memory. Routing off or no profile → honor the session model silently, and skip routing on a one-line change. The Eric-only authorship rule is independent of the model and never relaxes.
|
|
203
203
|
|
|
204
|
-
##
|
|
204
|
+
## What ship shows
|
|
205
205
|
|
|
206
|
-
Read
|
|
206
|
+
Read `technical_level` from `02-DOCS/wiki/harness/user-profile.md`. It changes the words, **never** the safety checklist or the authorship rule. No profile → use analogies and proceed; don't stall the ship to ask.
|
|
207
207
|
|
|
208
|
-
|
|
209
|
-
| --- | --- |
|
|
210
|
-
| **L0** | Checklist run silently, recommended option in one line, execute on a yes: `Clean, rebased, authorship Eric. Recommend PR (main is protected). Open it?` |
|
|
211
|
-
| **L1** | The three options as one-liners, with the recommendation and its *why*. |
|
|
212
|
-
| **L2** | The full options table, the checklist results, and why the recommended option fits this repo's workflow. |
|
|
213
|
-
| **L3** | L2 plus teaching, framed for a non-technical owner: what fast-forward vs `--no-ff` does to history, why a protected `main` wants a PR ("asking permission before changing the shared copy"), what squashing trades away. |
|
|
208
|
+
In the `orient` voice: the checklist result in one line, the three options as one-liners, the recommendation and its *why*, then execute on a yes — e.g. `Clean, rebased, authorship Eric. Recommend PR (main is protected). Open it?`. For a `non-technical` owner, explain the recommended option with an analogy: a protected `main` wants a PR ("asking permission before changing the shared copy"). Explain fast-forward vs `--no-ff` or what squashing trades away only when asked.
|
|
214
209
|
|
|
215
210
|
## Anti-patterns → STOP
|
|
216
211
|
|
|
@@ -268,4 +263,4 @@ Ship is the end of the SDD loop for a feature. Two onward paths: the merged code
|
|
|
268
263
|
|
|
269
264
|
## Orientación (siempre)
|
|
270
265
|
|
|
271
|
-
|
|
266
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
|
@@ -98,4 +98,4 @@ Stop when another edit would trade one defensible style for another without lowe
|
|
|
98
98
|
|
|
99
99
|
## Orientación (siempre)
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
|
@@ -46,7 +46,7 @@ Then, in this order and never skipping ahead:
|
|
|
46
46
|
4. **Nothing covers it** → one sentence at the end of the work: the procedure you saw, and whether it fits as a skill or an agent. Then stop; the user decides. Their "no" ends it for this procedure for the rest of the session.
|
|
47
47
|
5. **Record it either way** — `npx @ericrisco/rsc capabilities gap-log --procedure "<what YOU observed doing>" --verdict <covered-installed|covered-catalog|covered-agent|proposed-accepted|proposed-declined>`.
|
|
48
48
|
|
|
49
|
-
**
|
|
49
|
+
**One sentence, always.** In the `orient` voice: one line ("this looked like a procedure — worth a skill?") plus why it qualified. Explain the skill-vs-agent difference only if the user asks; for a `non-technical` reader (`technical_level` in `02-DOCS/wiki/harness/user-profile.md`), use an analogy. Brevity never removes the observation.
|
|
50
50
|
|
|
51
51
|
**The privacy boundary is yours to hold**, not the command's — it validates shape and nothing else, and it cannot tell your description from a paraphrase of the request. `--procedure` carries *your* account of the work you did. Never the user's words. The test: if the line could be reconstructed from what they typed, it does not belong in the log.
|
|
52
52
|
|
|
@@ -105,4 +105,4 @@ Do not use this skill as a reason to delay reversible work indefinitely. If a pr
|
|
|
105
105
|
|
|
106
106
|
## Orientación (siempre)
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|