@ericrisco/rsc 3.7.4 → 4.0.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 +16 -9
- package/manifest.json +49 -40
- package/package.json +1 -1
- package/scripts/lib/domains.js +1 -1
- package/scripts/lib/onboarding-apply.js +1 -1
- package/scripts/lib/onboarding.js +7 -7
- package/scripts/lib/retired-skills.js +4 -0
- package/scripts/lib/review-findings.js +3 -0
- package/scripts/lib/review-ledger.js +185 -0
- package/scripts/lib/risk.js +65 -0
- package/scripts/lib/spec-gate.js +10 -1
- package/scripts/rsc.js +91 -6
- package/skills/analyze/SKILL.md +3 -3
- package/skills/asdd/SKILL.md +159 -0
- package/skills/{sdd → asdd}/evals/README.md +10 -10
- package/skills/{sdd → asdd}/evals/cases.yaml +4 -4
- package/skills/{sdd → asdd}/references/model-routing.md +2 -2
- package/skills/building-agents/SKILL.md +1 -1
- package/skills/clarify/SKILL.md +48 -55
- package/skills/clarify/evals/cases.yaml +6 -7
- package/skills/connect-tool/SKILL.md +119 -21
- package/skills/connect-tool/THIRD_PARTY.md +43 -0
- package/skills/connect-tool/bridge-kit/01-TOOLS-plantilla/test_connection.sh +33 -0
- package/skills/connect-tool/bridge-kit/LICENSE +27 -0
- package/skills/connect-tool/bridge-kit/README.md +48 -0
- package/skills/connect-tool/bridge-kit/UPSTREAM.json +8 -0
- package/skills/connect-tool/bridge-kit/access/access_a_sqlite.py +82 -0
- package/skills/connect-tool/bridge-kit/dbhub/dbhub.toml.ejemplo +65 -0
- package/skills/connect-tool/bridge-kit/red/cloudflared-config.yml.ejemplo +18 -0
- package/skills/connect-tool/bridge-kit/red/tailscale-grants.hujson +22 -0
- package/skills/connect-tool/bridge-kit/sqlserver/01-login-servidor.sql +25 -0
- package/skills/connect-tool/bridge-kit/sqlserver/02-usuario-y-vistas.sql +69 -0
- package/skills/connect-tool/bridge-kit/sqlserver/03-prueba-solo-lectura.sql +65 -0
- package/skills/connect-tool/bridge-kit/sqlserver/copia-nocturna.ps1 +68 -0
- package/skills/connect-tool/evals/cases.yaml +41 -4
- package/skills/connect-tool/references/connect-or-migrate.md +96 -0
- package/skills/connect-tool/references/database-bridge.md +159 -0
- package/skills/connect-tool/references/file-exchange.md +103 -0
- package/skills/connect-tool/references/messages.md +120 -0
- package/skills/connect-tool/references/program-types.md +97 -0
- package/skills/connect-tool/references/spain.md +103 -0
- package/skills/connect-tool/references/what-to-find-out.md +57 -0
- package/skills/constitution/SKILL.md +21 -8
- package/skills/constitution/evals/README.md +1 -1
- package/skills/debug/SKILL.md +1 -1
- package/skills/fastapi/SKILL.md +1 -1
- package/skills/flutter/SKILL.md +1 -1
- package/skills/ftd/SKILL.md +26 -10
- package/skills/ftd/evals/cases.yaml +1 -1
- package/skills/ftd/evals/routing.json +4 -4
- package/skills/go/SKILL.md +1 -1
- package/skills/implement/SKILL.md +126 -113
- package/skills/implement/evals/cases.yaml +4 -2
- package/skills/implement/references/per-task-review.md +19 -26
- package/skills/nextjs/SKILL.md +1 -1
- package/skills/parallel/SKILL.md +1 -1
- package/skills/plan/SKILL.md +2 -2
- package/skills/postgresdb/SKILL.md +1 -1
- package/skills/react/SKILL.md +1 -1
- package/skills/review/SKILL.md +58 -31
- package/skills/sdd-init/SKILL.md +6 -6
- package/skills/ship/SKILL.md +38 -18
- package/skills/specify/SKILL.md +32 -33
- package/skills/specify/evals/cases.yaml +1 -1
- package/skills/specify/references/spec-template.md +27 -5
- package/skills/suggest/SKILL.md +4 -4
- package/skills/tasks/SKILL.md +37 -33
- package/skills/tasks/evals/README.md +1 -1
- package/skills/tasks/evals/cases.yaml +2 -2
- package/skills/verify/SKILL.md +30 -15
- package/skills/verify/evals/README.md +2 -2
- package/skills/verify/evals/cases.yaml +1 -0
- package/skills/worktrees/SKILL.md +1 -1
- package/targets/clone-bootstrap.mjs +1 -1
- package/targets/hook-once.mjs +2 -2
- package/targets/sello.mjs +1 -1
- package/skills/sdd/SKILL.md +0 -250
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: constitution
|
|
3
|
-
description: "Use when setting or amending a project's non-negotiables — stack canon, quality bars, conventions, security/a11y floors — as numbered, testable rules later phases obey.
|
|
4
|
-
tags: [
|
|
3
|
+
description: "Use when setting or amending a project's non-negotiables — stack canon, quality bars, conventions, security/a11y floors — as numbered, testable rules later phases obey, and drafting the REVIEW.md the reviewer reads. ASDD's base stage; writes 02-DOCS/wiki/sdd/constitution.md and REVIEW.md at the project root. NOT a feature spec (that is `specify`), NOT the technical plan (that is `plan`), NOT the wiki itself (that is `harness`)."
|
|
4
|
+
tags: [asdd, constitution, principles, review]
|
|
5
5
|
recommends: [specify]
|
|
6
6
|
profiles: [core, full]
|
|
7
7
|
origin: risco
|
|
@@ -9,7 +9,7 @@ origin: risco
|
|
|
9
9
|
|
|
10
10
|
# constitution — the project's non-negotiable principles
|
|
11
11
|
|
|
12
|
-
*
|
|
12
|
+
*ASDD's base stage (`../asdd/SKILL.md`). Run once per project, then amend. It writes down the rules every later phase obeys — stack canon, quality bars, conventions — and the `REVIEW.md` the reviewer reads first. Everything downstream — specify, plan, analyze, implement, verify, review — reads these as guardrails.*
|
|
13
13
|
|
|
14
14
|
A constitution is small, durable, and enforceable. It is **not** a wiki of everything you know about the project (that is what `02-DOCS/wiki/` already is, run by the `harness`). It is the short list of principles that, if violated, mean the work is wrong regardless of whether it runs. If a rule here cannot be checked or pointed at later, it does not belong here — move it to the stack wiki and link it.
|
|
15
15
|
|
|
@@ -17,7 +17,7 @@ Not this phase: *what to build* → `../specify/SKILL.md`; the technical approac
|
|
|
17
17
|
|
|
18
18
|
## Model tier — `heavy` (opt-in routing)
|
|
19
19
|
|
|
20
|
-
This phase's default model tier is **`heavy`** — it sets the project's non-negotiables, the highest-leverage decisions in the repo. 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 `../
|
|
20
|
+
This phase's default model tier is **`heavy`** — it sets the project's non-negotiables, the highest-leverage decisions in the repo. 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 `../asdd/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.
|
|
21
21
|
|
|
22
22
|
## Honor the register first
|
|
23
23
|
|
|
@@ -88,6 +88,18 @@ Create `02-DOCS/wiki/sdd/` if it does not exist. Do not overwrite an existing co
|
|
|
88
88
|
|
|
89
89
|
**A draft is "complete me", not "amend me".** `rsc onboard` writes a skeleton with `status: draft` in the frontmatter: the template's headings, the facts onboarding knew (goal, kind, scope, workflow, detected stack) and no principle. Keep those facts, run the interview, fill the sections, then on ratification drop `status: draft`, set `version: v1.0.0` and log v1.0.0 in the amendment log.
|
|
90
90
|
|
|
91
|
+
## REVIEW.md — what the reviewer reads first
|
|
92
|
+
|
|
93
|
+
With the constitution, draft `REVIEW.md` at the project root (the code repo — the reviewer runs there). It is short, specific to this repo, and ratified with the constitution:
|
|
94
|
+
|
|
95
|
+
- **What failure looks like here** — the defect classes that actually hurt this project (e.g. "a query without the tenant filter", "a migration that is not reversible").
|
|
96
|
+
- **Paths to skip** — generated code, vendored files, fixtures.
|
|
97
|
+
- **Nit cap** — the most nits one review may report (e.g. 3); the rest are dropped.
|
|
98
|
+
- **Always-human paths** — what must never merge without a person (billing, auth, infra). Listing them here only informs; to be *enforced* they go into `.rsc/sello-config.json` `risk.raise`, which `rsc risk` reads — say so to the user.
|
|
99
|
+
- **Summary starts with a count** — "3 findings: 1 blocker, 2 nits", before anything else.
|
|
100
|
+
|
|
101
|
+
`review` adds to it when a finding keeps repeating; amend it like the constitution, never silently.
|
|
102
|
+
|
|
91
103
|
## Versioning & amendment protocol
|
|
92
104
|
|
|
93
105
|
The constitution is versioned so `analyze` and `review` can cite "constitution v1.2.0, principle 4".
|
|
@@ -118,6 +130,7 @@ The constitution is versioned so `analyze` and `review` can cite "constitution v
|
|
|
118
130
|
- [ ] The Definition-of-Done checklist is present (what `verify` runs against).
|
|
119
131
|
- [ ] Fixed principles included: human git authorship + decisions logged.
|
|
120
132
|
- [ ] `02-DOCS/wiki/sdd/constitution.md` written with version + ratified date + amendment log.
|
|
133
|
+
- [ ] `REVIEW.md` drafted at the project root; always-human paths mirrored into `.rsc/sello-config.json` `risk.raise` (or the user told why they are not).
|
|
121
134
|
- [ ] Root `CLAUDE.md` `## Knowledge map` pointer has the read-first row for the constitution.
|
|
122
135
|
- [ ] The constitution was shown to the user and explicitly ratified.
|
|
123
136
|
|
|
@@ -133,8 +146,8 @@ Every later rsc-sdd phase reads this file before it works. The harness maintains
|
|
|
133
146
|
|
|
134
147
|
## Result envelope
|
|
135
148
|
|
|
136
|
-
End with the parseable block every
|
|
137
|
-
interpreting prose (contract: `../
|
|
149
|
+
End with the parseable block every phase shares, so the dispatcher can chain without
|
|
150
|
+
interpreting prose (contract: `../asdd/SKILL.md`):
|
|
138
151
|
|
|
139
152
|
```json result-envelope
|
|
140
153
|
{
|
|
@@ -149,10 +162,10 @@ interpreting prose (contract: `../sdd/SKILL.md`):
|
|
|
149
162
|
"fallback": [],
|
|
150
163
|
"compact_rules": ["Principles are inherited constraints, not choices to re-make.", "Every rule is testable or it is a preference."]
|
|
151
164
|
},
|
|
152
|
-
"evidence": ["constitution path exists", "rules numbered and testable", "decisions log appended"]
|
|
165
|
+
"evidence": ["constitution path exists", "rules numbered and testable", "REVIEW.md drafted", "decisions log appended"]
|
|
153
166
|
}
|
|
154
167
|
```
|
|
155
168
|
|
|
156
169
|
## Next in the chain
|
|
157
170
|
|
|
158
|
-
The constitution is the guardrail; now describe what to build. Hand off to **`../specify/SKILL.md`** — turn a fuzzy intent into a spec (what & why, no implementation), grounded in these principles. The
|
|
171
|
+
The constitution is the guardrail; now describe what to build. Hand off to **`../specify/SKILL.md`** — turn a fuzzy intent into a spec (what & why, no implementation), grounded in these principles. The ASDD stages: **base → spec → plan → per-task loop → closing → learn** (with `debug`, `worktrees`, `parallel` callable on demand). The dispatcher is `../asdd/SKILL.md`.
|
|
@@ -64,5 +64,5 @@ even if it reads tidy.
|
|
|
64
64
|
- Re-run after any edit to `SKILL.md` or `references/constitution-template.md` —
|
|
65
65
|
wording changes shift both triggering and rubric coverage.
|
|
66
66
|
- Several `route_to` targets are rsc-sdd phase siblings (`specify`, `plan`,
|
|
67
|
-
`analyze`, `
|
|
67
|
+
`analyze`, `asdd`) that ship alongside this skill; the near-misses here route
|
|
68
68
|
only to skills already present in the repo so the eval is runnable today.
|
package/skills/debug/SKILL.md
CHANGED
|
@@ -26,7 +26,7 @@ delegation table below.
|
|
|
26
26
|
|
|
27
27
|
## Model tier — `heavy` (opt-in routing)
|
|
28
28
|
|
|
29
|
-
This phase's default model tier is **`heavy`** — root-cause diagnosis is deep reasoning. 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 `../
|
|
29
|
+
This phase's default model tier is **`heavy`** — root-cause diagnosis is deep reasoning. 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 `../asdd/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.
|
|
30
30
|
|
|
31
31
|
## Read the room first (register)
|
|
32
32
|
|
package/skills/fastapi/SKILL.md
CHANGED
|
@@ -20,7 +20,7 @@ pytest 8 + pytest-asyncio 1.0+ (`asyncio_mode=auto`), ruff 0.7+, mypy 1.13+ stri
|
|
|
20
20
|
uv 0.5+, uvicorn 0.32+ / gunicorn 23+ + uvicorn-worker 0.3+, PyJWT 2.10+, argon2-cffi 23+,
|
|
21
21
|
pip-audit 2.7+, PostgreSQL 16. (All lower bounds; install the latest in each line.)
|
|
22
22
|
|
|
23
|
-
> **⚠️ SDD new-feature gate — read this first.** If this skill fired on a **new, non-trivial feature or behaviour change** and there is **no approved spec + plan** under `02-DOCS/wiki/sdd/`, STOP — do **not** write feature code yet. Hand off to `../specify/SKILL.md` first: it runs brainstorm → spec → plan → tasks before any code, then routes back here once the plan is approved. Build here directly only for a genuinely one-line / low-risk change. Method: `../
|
|
23
|
+
> **⚠️ SDD new-feature gate — read this first.** If this skill fired on a **new, non-trivial feature or behaviour change** and there is **no approved spec + plan** under `02-DOCS/wiki/sdd/`, STOP — do **not** write feature code yet. Hand off to `../specify/SKILL.md` first: it runs brainstorm → spec → plan → tasks before any code, then routes back here once the plan is approved. Build here directly only for a genuinely one-line / low-risk change. Method: `../asdd/SKILL.md`.
|
|
24
24
|
|
|
25
25
|
Out of scope, and where it goes instead: [`django`](../django/SKILL.md) for Django; Flask / sync WSGI,
|
|
26
26
|
notebooks and CLI-only scripts (no skill); language-level Python, typing and packaging →
|
package/skills/flutter/SKILL.md
CHANGED
|
@@ -18,7 +18,7 @@ this skill targets: **Flutter 3.44 / Dart 3.12**, **Riverpod 3.0**, **go_router
|
|
|
18
18
|
|
|
19
19
|
## Boundaries
|
|
20
20
|
|
|
21
|
-
> **⚠️ SDD new-feature gate — read this first.** If this skill fired on a **new, non-trivial feature or behaviour change** and there is **no approved spec + plan** under `02-DOCS/wiki/sdd/`, STOP — do **not** write feature code yet. Hand off to `../specify/SKILL.md` first: it runs brainstorm → spec → plan → tasks before any code, then routes back here once the plan is approved. Build here directly only for a genuinely one-line / low-risk change. Method: `../
|
|
21
|
+
> **⚠️ SDD new-feature gate — read this first.** If this skill fired on a **new, non-trivial feature or behaviour change** and there is **no approved spec + plan** under `02-DOCS/wiki/sdd/`, STOP — do **not** write feature code yet. Hand off to `../specify/SKILL.md` first: it runs brainstorm → spec → plan → tasks before any code, then routes back here once the plan is approved. Build here directly only for a genuinely one-line / low-risk change. Method: `../asdd/SKILL.md`.
|
|
22
22
|
|
|
23
23
|
This skill owns the `pubspec.yaml` subproject and nothing else in the repo. Hand off when the UI is
|
|
24
24
|
Compose Multiplatform (`compose-multiplatform`), SwiftUI/native iOS (`swift-ios`) or React Native
|
package/skills/ftd/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ftd
|
|
3
|
-
description: "Use for ordinary authorised change — the default lane once the decisor has ruled out a question and not selected the chain. Keeps one feature document per feature in 02-DOCS holding intent, scope, checklist, evidence and next step, checks tasks off only against observed proof,
|
|
3
|
+
description: "Use for ordinary authorised change — the default lane once the decisor has ruled out a question and not selected the chain. Keeps one feature document per feature in 02-DOCS holding intent, scope, checklist, evidence and next step, checks tasks off only against observed proof, asks whether to branch before the work writes code, and runs a minimal risk loop (self-check, `rsc risk`, one reviewer from tier 1). NOT the full method (that is `asdd`), NOT the classification itself (that is the decisor in `suggest`), NOT a request for information, which writes nothing."
|
|
4
4
|
tags: [ftd, lane, default, feature-document, evidence]
|
|
5
5
|
recommends: [worktrees, debug, verify]
|
|
6
6
|
profiles: [minimal, core, full]
|
|
@@ -10,11 +10,11 @@ origin: risco
|
|
|
10
10
|
# FTD — Fast-Track Development
|
|
11
11
|
|
|
12
12
|
The lane ordinary work takes. Not a lighter methodology: the **same** discipline about evidence with
|
|
13
|
-
none of the coordination
|
|
13
|
+
none of the coordination `asdd` exists to buy. One document instead of five, written
|
|
14
14
|
because the work might be interrupted, not because somebody has to approve it first.
|
|
15
15
|
|
|
16
16
|
You are here because the decisor in `../suggest/SKILL.md` ruled that this turn authorises a change
|
|
17
|
-
and did not select `../
|
|
17
|
+
and did not select `../asdd/SKILL.md`. If it is still a question, you are in the wrong place: go back
|
|
18
18
|
and answer it.
|
|
19
19
|
|
|
20
20
|
## Why this lane exists
|
|
@@ -24,7 +24,7 @@ riesgo. Silencio para lo trivial, ceremonia solo donde el fallo es caro. Un sist
|
|
|
24
24
|
80% inofensivo acaba apagado, y apagado no protege el 20% que importa.»*
|
|
25
25
|
|
|
26
26
|
The harness spent a long time contradicting it — every request that sounded like building went
|
|
27
|
-
through
|
|
27
|
+
through the whole chain. This lane is that principle finally implemented, not a new idea.
|
|
28
28
|
|
|
29
29
|
## The feature document
|
|
30
30
|
|
|
@@ -60,6 +60,20 @@ the test output, the command's result, the page rendering. A task whose check wa
|
|
|
60
60
|
could not run is recorded as such, honestly. The tenth principle applies here exactly as it does in
|
|
61
61
|
the chain: a result asserted without evidence is treated as not done.
|
|
62
62
|
|
|
63
|
+
## The minimal loop — per change that writes code
|
|
64
|
+
|
|
65
|
+
The lane inherits ASDD's per-task loop, cut to its floor:
|
|
66
|
+
|
|
67
|
+
1. **Self-check** — run the change's own check and record the output under Evidence.
|
|
68
|
+
2. **`npx @ericrisco/rsc risk`** — the tier of what changed (same path table as the sello; works
|
|
69
|
+
with it off).
|
|
70
|
+
3. **Tier ≥ 1 → one fresh-context reviewer** (`../review/SKILL.md`, per-task mode). Tier 0 → none.
|
|
71
|
+
4. **Mandatory controls** — tests, build, the security scan the project has. What did not run is
|
|
72
|
+
written «not executed», never left blank.
|
|
73
|
+
|
|
74
|
+
**Escalate to `asdd`** when `rsc risk` says **tier 2**, or when the change contradicts a decision
|
|
75
|
+
already recorded in `decisions.md`: the feature document becomes its spec input, as below.
|
|
76
|
+
|
|
63
77
|
## Isolation
|
|
64
78
|
|
|
65
79
|
Where the work runs follows the project's decision (asked at install: «main» or «ramas y PR»; rsc
|
|
@@ -83,10 +97,10 @@ cleanup is automatic and you do not run anything.
|
|
|
83
97
|
|
|
84
98
|
## Growing out of the lane
|
|
85
99
|
|
|
86
|
-
A feature that turns out to need
|
|
87
|
-
becomes the input to `../specify/SKILL.md`, and no completed work is discarded. Promotion happens
|
|
88
|
-
|
|
89
|
-
|
|
100
|
+
A feature that turns out to need `asdd` is **promoted, not restarted**: the feature document
|
|
101
|
+
becomes the input to `../specify/SKILL.md`, and no completed work is discarded. Promotion happens
|
|
102
|
+
when durable artifacts would remove a substantial ambiguity, or by the escalation above (tier 2, a
|
|
103
|
+
contradicted decision) — never because the work turned out to be big.
|
|
90
104
|
|
|
91
105
|
## Anti-patterns → STOP
|
|
92
106
|
|
|
@@ -96,13 +110,15 @@ and never because the work turned out to be big.
|
|
|
96
110
|
| Check a task off because you believe it works | Observed proof or it is not done (P10). Record the check you could not run. |
|
|
97
111
|
| Write the document into the code repository | It belongs in `02-DOCS`. A clone should get code, not notes. |
|
|
98
112
|
| Open a worktree "to be safe" | That is the chain's ceremony arriving through the back door (P7). |
|
|
99
|
-
| Escalate to
|
|
113
|
+
| Escalate to `asdd` because the change is large | Size never selects it. Only unresolved ambiguity, tier 2, or a contradicted decision. |
|
|
114
|
+
| Skip the reviewer because the change looks safe | `rsc risk` decides, not the feeling. Tier ≥ 1 gets one. |
|
|
100
115
|
| Produce a spec, plan or task artifact here | Those are the chain's. This lane has one document. |
|
|
101
116
|
|
|
102
117
|
## See Also
|
|
103
118
|
|
|
104
119
|
- `../suggest/SKILL.md` — the decisor that routed here, and the other two lanes.
|
|
105
|
-
- `../
|
|
120
|
+
- `../asdd/SKILL.md` — the full method, for when artifacts genuinely earn their cost.
|
|
121
|
+
- `../review/SKILL.md` — the reviewer the minimal loop calls at tier ≥ 1.
|
|
106
122
|
- `../verify/SKILL.md` — the evidence gate, when this lane's checks need the full battery.
|
|
107
123
|
- `../debug/SKILL.md` — a failure to reproduce before fixing; comes back here afterwards.
|
|
108
124
|
|
|
@@ -3,7 +3,7 @@ skill: ftd
|
|
|
3
3
|
# Cases for FTD — Fast-Track Development, the lane ordinary authorised change takes.
|
|
4
4
|
# FTD keeps ONE feature document per feature in 02-DOCS (intent, scope, checklist,
|
|
5
5
|
# evidence, next step), checks tasks off only against observed proof, and branches when
|
|
6
|
-
# the work writes code. It is NOT the
|
|
6
|
+
# the work writes code. It is NOT the full method (asdd), NOT the classification
|
|
7
7
|
# itself (the decisor lives in the always-on suggest body), and NOT a request for
|
|
8
8
|
# information — those write nothing at all.
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"lanes": {
|
|
4
4
|
"answer": "information only; writes nothing, creates no artifact",
|
|
5
5
|
"ftd": "authorised change, ordinary; one feature document",
|
|
6
|
-
"
|
|
6
|
+
"asdd": "the ASDD chain (review inside every task), entered by the agent for big or complex work"
|
|
7
7
|
},
|
|
8
8
|
"cases": [
|
|
9
9
|
{ "request": "¿Por qué el login tarda tanto en producción?", "expect": "answer", "why": "investigation; nothing authorises a change" },
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
{ "request": "Renombra la tabla de usuarios en las 40 llamadas que la usan", "expect": "ftd", "why": "large and mechanical: size alone must never select the chain" },
|
|
18
18
|
{ "request": "Sube la versión de la dependencia y arregla lo que rompa", "expect": "ftd", "why": "authorised change with no unresolved design question" },
|
|
19
19
|
{ "request": "Migra los tres endpoints al nuevo formato de respuesta", "expect": "ftd", "why": "many files, but nothing a spec would settle that the code does not" },
|
|
20
|
-
{ "request": "Quiero especificar bien el sistema de permisos antes de tocar nada", "expect": "
|
|
21
|
-
{ "request": "Vamos a hacer una spec de esto", "expect": "
|
|
22
|
-
{ "request": "No tengo claro si los permisos van por rol o por recurso, y afecta al esquema, a la API y a la UI", "expect": "
|
|
20
|
+
{ "request": "Quiero especificar bien el sistema de permisos antes de tocar nada", "expect": "asdd", "why": "explicit request for the chain" },
|
|
21
|
+
{ "request": "Vamos a hacer una spec de esto", "expect": "asdd", "why": "explicit request, stated in the user's own words" },
|
|
22
|
+
{ "request": "No tengo claro si los permisos van por rol o por recurso, y afecta al esquema, a la API y a la UI", "expect": "asdd", "why": "enter the chain: several interlocking decisions that durable artifacts would settle; the agent enters it and says why" }
|
|
23
23
|
]
|
|
24
24
|
}
|
package/skills/go/SKILL.md
CHANGED
|
@@ -12,7 +12,7 @@ Targets **Go 1.22+** (Go 1.26 is the current stable release): enhanced `net/http
|
|
|
12
12
|
(`mux.HandleFunc("GET /users/{id}", h)` + `r.PathValue`), `log/slog` structured
|
|
13
13
|
logging, and fixed loop-variable semantics (no more `tt := tt`).
|
|
14
14
|
|
|
15
|
-
> **⚠️ SDD new-feature gate — read this first.** If this skill fired on a **new, non-trivial feature or behaviour change** and there is **no approved spec + plan** under `02-DOCS/wiki/sdd/`, STOP — do **not** write feature code yet. Hand off to `../specify/SKILL.md` first: it runs brainstorm → spec → plan → tasks before any code, then routes back here once the plan is approved. Build here directly only for a genuinely one-line / low-risk change. Method: `../
|
|
15
|
+
> **⚠️ SDD new-feature gate — read this first.** If this skill fired on a **new, non-trivial feature or behaviour change** and there is **no approved spec + plan** under `02-DOCS/wiki/sdd/`, STOP — do **not** write feature code yet. Hand off to `../specify/SKILL.md` first: it runs brainstorm → spec → plan → tasks before any code, then routes back here once the plan is approved. Build here directly only for a genuinely one-line / low-risk change. Method: `../asdd/SKILL.md`.
|
|
16
16
|
|
|
17
17
|
## Boundary
|
|
18
18
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: implement
|
|
3
|
-
description: "Use when an approved plan and task list exist and it is time to turn them into working,
|
|
4
|
-
tags: [sdd, implement, code]
|
|
5
|
-
recommends: [verify]
|
|
3
|
+
description: "Use when an approved plan and task list exist and it is time to turn them into working, reviewed code — ASDD stage 4, the per-task loop after `analyze`: TDD build and self-check, `rsc risk` on the diff, review scaled by tier (0/1/3 reviewers), mandatory controls (tests, build, security, traceability), at most 3 fix rounds, then fix-and-record or park in the decision queue. Progress ledger survives compaction; disjoint tasks fan out via `parallel`. NOT spec writing (that is `specify`), NOT planning (that is `plan`), NOT the closing whole-branch gate (stage 5: `verify` + `review`)."
|
|
4
|
+
tags: [asdd, sdd, implement, code]
|
|
5
|
+
recommends: [verify, review]
|
|
6
6
|
profiles: [core, full]
|
|
7
7
|
origin: risco
|
|
8
8
|
---
|
|
@@ -10,10 +10,11 @@ origin: risco
|
|
|
10
10
|
# implement — turn the task list into tested code
|
|
11
11
|
|
|
12
12
|
You have a spec, a plan, and an ordered task list (from `specify` → `plan` → `tasks`), and the
|
|
13
|
-
`analyze` gate has cleared. This skill
|
|
14
|
-
one
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
`analyze` gate has cleared. This skill is **ASDD stage 4**: it walks the tasks in order and runs each
|
|
14
|
+
one through a build → risk → review → controls → fix → decide loop before the next starts. Review
|
|
15
|
+
lives *inside* the task, not after the branch: tests prove the code works, not that it is what was
|
|
16
|
+
asked, and an unrequested feature caught at one commit is cheap — caught under thousands of green
|
|
17
|
+
tests at the end, it is not.
|
|
17
18
|
|
|
18
19
|
This is a **process skill**. It owns the discipline (red → green → refactor, checkpoints, decision
|
|
19
20
|
logging, constitution adherence). It does **not** own the test tooling — pytest fixtures, `go test`
|
|
@@ -51,9 +52,11 @@ back — you do not write feature code anyway.
|
|
|
51
52
|
6. **Scan the tasks for independence.** Mark which tasks share files/state and which are disjoint.
|
|
52
53
|
Disjoint clusters are candidates for `parallel`; everything else runs in order.
|
|
53
54
|
|
|
54
|
-
## The loop —
|
|
55
|
+
## The loop — seven steps per task
|
|
55
56
|
|
|
56
|
-
For **each task** in the list, in order (or dispatched per the parallel rule below)
|
|
57
|
+
For **each task** in the list, in order (or dispatched per the parallel rule below), run a → g.
|
|
58
|
+
|
|
59
|
+
### a) Build and self-check (TDD)
|
|
57
60
|
|
|
58
61
|
```text
|
|
59
62
|
RED → write the smallest failing test that encodes the task's done-check. Run it. Watch it FAIL
|
|
@@ -63,24 +66,15 @@ GREEN → write the least code that makes that test pass. No extra features,
|
|
|
63
66
|
TRIANGULATE → add the smallest edge-case test that proves the behavior is not hard-coded
|
|
64
67
|
(only when config.testing.strict_tdd is true and the task has meaningful edge cases).
|
|
65
68
|
REFACTOR → with the test green, clean up names/duplication/shape. Re-run; still green. Only now.
|
|
66
|
-
CHECK → re-read the task's done-check. Met? Constitution still honored? Decision worth logging?
|
|
67
|
-
PROGRESS → append task/test/blocker/decision state to 02-DOCS/wiki/sdd/progress/<slug>.md.
|
|
68
69
|
COMMIT → commit this task as one logical unit (authorship = Eric; see ship for the rule).
|
|
69
|
-
REVIEW → dispatch a fresh reviewer subagent over THIS task's commits (see "Per-task review gate").
|
|
70
|
-
Fold its Critical/Important findings back in before you move on; Minor can wait.
|
|
71
|
-
CHECKPOINT → stop and show: what changed, test output, review verdict, the next task. Wait for the user.
|
|
72
70
|
```
|
|
73
71
|
|
|
74
72
|
The order is load-bearing. **Red before green** is not a suggestion — a test you write *after* the
|
|
75
73
|
code tells you nothing about whether it can fail. **Refactor only on green** keeps every cleanup
|
|
76
|
-
reversible against a passing bar.
|
|
77
|
-
reviewable instead of a 2000-line surprise diff.
|
|
74
|
+
reversible against a passing bar. Self-check means evidence: the test output you saw, not "I tested it".
|
|
78
75
|
|
|
79
76
|
### Four things you may never do to reach green
|
|
80
77
|
|
|
81
|
-
The loop only means anything if green cannot be manufactured. These are absolute, and each one is a
|
|
82
|
-
way people reach green without fixing anything:
|
|
83
|
-
|
|
84
78
|
1. **Never weaken a test to make it pass.** Not broadening an assertion, not adding a skip, not
|
|
85
79
|
raising a tolerance, not deleting it. A test that looks wrong is a **spec conversation** — surface
|
|
86
80
|
it, don't bury it.
|
|
@@ -94,12 +88,82 @@ way people reach green without fixing anything:
|
|
|
94
88
|
added to touch lines, with no meaningful assertion, is gaming — and mutation testing exists
|
|
95
89
|
precisely to catch it (`../testing-py/SKILL.md`, `../testing-web/SKILL.md`, `../testing-go/SKILL.md`).
|
|
96
90
|
|
|
97
|
-
|
|
91
|
+
**The done-check is the contract.** The task's done-check **is** your first failing test. Never
|
|
92
|
+
invent a looser one; done means that test is green and the traced acceptance criterion holds.
|
|
93
|
+
|
|
94
|
+
### b) Risk — computed, never chosen
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx @ericrisco/rsc risk --base <task base sha> --json
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
It reads the task's **actual** diff through the sello's path table (sello on or off) and prints the
|
|
101
|
+
tier, the touched classes, `reviewers: 0|1|3` and `human approval: required|not required`. Tier 2 =
|
|
102
|
+
auth, billing, CI workflows, migrations, secrets, harness config. The computed tier wins over the
|
|
103
|
+
task's risk forecast. **The agent never picks or argues down its own tier.**
|
|
104
|
+
|
|
105
|
+
### c) Review scaled by tier — fresh context
|
|
106
|
+
|
|
107
|
+
| Tier | Review |
|
|
108
|
+
| --- | --- |
|
|
109
|
+
| 0 | none — the controls (e) still run |
|
|
110
|
+
| 1 | one fresh-context reviewer; frozen brief in `references/per-task-review.md` |
|
|
111
|
+
| 2 | the three refuters (`refuter-correctness` · `refuter-security` · `refuter-tests`) in parallel, as `../review/SKILL.md` runs them |
|
|
112
|
+
|
|
113
|
+
Every reviewer gets the **spec**, the **diff as a file** (`scripts/review-package <BASE> <HEAD>`, BASE
|
|
114
|
+
= the task's *recorded* base sha, never `HEAD~1`), the **surrounding code** at that sha (not just the
|
|
115
|
+
hunk), the task's done-check, its **Interfaces → Produces** and the plan's **§0 Global Constraints**.
|
|
116
|
+
Never your session reasoning. **Anti-pre-judging (hard rule):** the dispatch never says what not to
|
|
117
|
+
flag, pre-rates a severity, or explains why a choice is fine — a stated rationale never downgrades a
|
|
118
|
+
finding.
|
|
119
|
+
|
|
120
|
+
### d) Consolidate, verify, record
|
|
121
|
+
|
|
122
|
+
Exactly as `../review/SKILL.md` → *Consolidate, then verify*: `npx @ericrisco/rsc review consolidate
|
|
123
|
+
<reports…>`, then `finding-verifier` on every finding it marks `verify` (tier 1: on every blocker).
|
|
124
|
+
Then `npx @ericrisco/rsc review ledger record <findings.json>`. A finding the ledger already holds
|
|
125
|
+
comes back `repeat`: **never raise it again**. When a finding closes, record its outcome:
|
|
126
|
+
`review ledger outcome <id> fixed|false|intentional|irrelevant`.
|
|
127
|
+
|
|
128
|
+
### e) Mandatory controls — every tier
|
|
129
|
+
|
|
130
|
+
These are `verify`'s per-task mode (`../verify/SKILL.md`):
|
|
131
|
+
|
|
132
|
+
- **Tests** — the affected suite, not just the new test (`testing.commands.apply`).
|
|
133
|
+
- **Build** — the project compiles and type-checks.
|
|
134
|
+
- **Security** — the stack's audit; `../secure-coding/SKILL.md` when input, authz or secrets are touched.
|
|
135
|
+
- **Traceability** — every new behaviour in the diff traces to a spec acceptance criterion.
|
|
136
|
+
**Untraced behaviour is a finding.** This is the control that catches the unrequested feature: a
|
|
137
|
+
QR nobody asked for passes every test.
|
|
138
|
+
|
|
139
|
+
A control that did not run is reported as **not run**, never as passed — and the task is not done.
|
|
140
|
+
|
|
141
|
+
### f) Fix loop — at most 3 rounds
|
|
98
142
|
|
|
99
|
-
Each
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
143
|
+
Each round opens with `npx @ericrisco/rsc review ledger round <slug>/<task>`. It exits non-zero on the 4th
|
|
144
|
+
round with the action to take; obey it (step g).
|
|
145
|
+
|
|
146
|
+
- **From round 2, re-review only the new diff** (BASE = the previous round's head).
|
|
147
|
+
- **Fix the bug class, not the line**: name the class and fix every instance in the task's scope.
|
|
148
|
+
- **Never repeat a finding** — the ledger marks repeats; drop them.
|
|
149
|
+
- Re-run the controls (e) before the next round.
|
|
150
|
+
|
|
151
|
+
### g) Decide
|
|
152
|
+
|
|
153
|
+
| Situation | Action |
|
|
154
|
+
| --- | --- |
|
|
155
|
+
| Trivial, or no business weight | Fix it and record it in `decisions.md` with the task id |
|
|
156
|
+
| Tier 2, contradicts a decision in `decisions.md`, or no convergence in 3 rounds | Park the task in the **decision queue** and continue with independent tasks |
|
|
157
|
+
|
|
158
|
+
The **decision queue** is a `## Decision queue` section in `02-DOCS/wiki/sdd/progress/<slug>.md`, one
|
|
159
|
+
entry per parked task: task id, tier, the question, the options, your recommendation, the evidence
|
|
160
|
+
path. Tasks that depend on a parked task wait; the rest continue. Only a human empties the queue — an
|
|
161
|
+
agent's approval never counts as human.
|
|
162
|
+
|
|
163
|
+
Then append the progress entry and show the checkpoint (below).
|
|
164
|
+
|
|
165
|
+
**`verify` and `review` run twice.** Per task, inside this loop (steps c–e); and once more at
|
|
166
|
+
**closing** (stage 5), over the whole branch against main.
|
|
103
167
|
|
|
104
168
|
## Delegating the test tooling (do not reinvent it)
|
|
105
169
|
|
|
@@ -118,27 +182,10 @@ stack and pulls that stack's testing reference — you do not mix idioms inside
|
|
|
118
182
|
|
|
119
183
|
## Skill digestion and resolution
|
|
120
184
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
.
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
Select the smallest set of skills that match the task. Digest each selected skill into 4-5 compact rules that affect this task. A task brief or checkpoint includes:
|
|
128
|
-
|
|
129
|
-
```text
|
|
130
|
-
Selected skills: fastapi, postgresdb, implement
|
|
131
|
-
Compact rules:
|
|
132
|
-
- Use the configured apply command from config.yaml.
|
|
133
|
-
- Red test first; verify it fails for the right reason.
|
|
134
|
-
- Keep DB migrations expand-contract when touching production tables.
|
|
135
|
-
Skill resolution:
|
|
136
|
-
- used: [...]
|
|
137
|
-
- missing: [...]
|
|
138
|
-
- fallback: [...]
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
If a skill is referenced but unavailable, say so and record the fallback. Do not silently pretend it was used.
|
|
185
|
+
Select the smallest set of skills from `.rsc/skill-registry.json` that match the task and digest
|
|
186
|
+
each into 4-5 compact rules. Every task brief or checkpoint carries `Selected skills`, `Compact
|
|
187
|
+
rules` and `Skill resolution` (`used` / `missing` / `fallback`). A referenced skill that is
|
|
188
|
+
unavailable is named with its fallback — never silently pretended.
|
|
142
189
|
|
|
143
190
|
## Apply progress
|
|
144
191
|
|
|
@@ -157,8 +204,10 @@ Entry shape:
|
|
|
157
204
|
- green: same test passed
|
|
158
205
|
- triangulation: blank title returns 422
|
|
159
206
|
- files: app/auth.py, tests/auth/test_login.py
|
|
160
|
-
-
|
|
161
|
-
-
|
|
207
|
+
- risk: tier 2 (auth) — 3 refuters
|
|
208
|
+
- review: 5 reported → 2 unique → 1 confirmed (fixed, round 2)
|
|
209
|
+
- controls: tests ✅ build ✅ security ✅ traceability ✅ (AC3)
|
|
210
|
+
- decision: parked in decision queue (tier 2)
|
|
162
211
|
```
|
|
163
212
|
|
|
164
213
|
This file is what makes resumes and archive reliable. Never rewrite old entries; append corrections as new entries.
|
|
@@ -194,7 +243,7 @@ discipline inside each branch.
|
|
|
194
243
|
pinned to the balanced tier (Sonnet by default, chosen at onboarding, never `light`). When you
|
|
195
244
|
delegate a task or fan out via `parallel`, dispatch it to that agent (e.g. Claude Code
|
|
196
245
|
`subagent_type: developer`) so the bulk of TDD execution runs on the cheaper-but-capable model
|
|
197
|
-
while you stay on the session model to orchestrate. Full rationale: `../
|
|
246
|
+
while you stay on the session model to orchestrate. Full rationale: `../asdd/references/model-routing.md`.
|
|
198
247
|
|
|
199
248
|
### The dispatch contract (carriers, statuses, escalation)
|
|
200
249
|
|
|
@@ -220,51 +269,19 @@ each dispatch self-sufficient and make its return machine-checkable:
|
|
|
220
269
|
escalate the tier (balanced → heavy) for a genuinely hard sub-problem. Re-running an identical
|
|
221
270
|
prompt on an identical model is how a loop burns budget without progress.
|
|
222
271
|
|
|
223
|
-
## Per-task review gate
|
|
224
|
-
|
|
225
|
-
After a task is committed and before its checkpoint, run a **small, fresh-eyes review of that task
|
|
226
|
-
alone** — catching over-/under-building while it is one commit cheap to fix, instead of waiting for
|
|
227
|
-
the whole-branch review when it is buried in a large diff. It is a mid-build gate, not the finish
|
|
228
|
-
line (see the boundary below).
|
|
229
|
-
|
|
230
|
-
How to run it:
|
|
231
|
-
|
|
232
|
-
1. **Package the diff as a file, not a paste.** `scripts/review-package <BASE> <HEAD>` where `BASE`
|
|
233
|
-
is the task's *recorded* base sha (never `HEAD~1` — that drops every commit but the last of a
|
|
234
|
-
multi-commit task). It writes the commit list + `--stat` + full diff to one file.
|
|
235
|
-
2. **Dispatch a fresh reviewer subagent** (context-isolated — it must NOT inherit your session
|
|
236
|
-
reasoning). Hand it: the review-package *path*, the task's **done-check**, the task's
|
|
237
|
-
**Interfaces → Produces** contract, and the plan's **§0 Global Constraints**. With routing on,
|
|
238
|
-
balanced is the floor; escalate to heavy for a risky/security-touching task. The frozen brief
|
|
239
|
-
lives in `references/per-task-review.md`.
|
|
240
|
-
3. **It returns two verdicts in one pass:** *spec compliance* (missing / extra / misunderstood vs the
|
|
241
|
-
done-check + Produces) and *code quality* — every finding tagged severity
|
|
242
|
-
(`Critical`/`Important`/`Minor`) with `file:line` evidence.
|
|
243
|
-
4. **Fold `Critical`/`Important` back in now**; `Minor` may wait for the end-of-branch review.
|
|
244
|
-
|
|
245
|
-
**Anti-pre-judging (hard rule).** The dispatch must never tell the reviewer what *not* to flag,
|
|
246
|
-
pre-rate a finding's severity, or explain why a choice is fine ("the plan chose X, treat as Minor").
|
|
247
|
-
A stated rationale never downgrades a finding — that is laundering your own bias through the reviewer.
|
|
248
|
-
Hand it the evidence and the contract; let it judge.
|
|
249
|
-
|
|
250
|
-
**Boundary — this does not replace the end gates.** `verify` still runs the *whole* suite and the
|
|
251
|
-
acceptance criteria once at the end, and `review` still reads the *whole* diff adversarially once
|
|
252
|
-
before `ship`. The per-task gate is the cheap early pass; the broad reviews remain. Skip the per-task
|
|
253
|
-
gate on a genuinely trivial task (a one-line change), like the rest of the chain.
|
|
254
|
-
|
|
255
272
|
## Model tier — `balanced` (opt-in routing)
|
|
256
273
|
|
|
257
|
-
|
|
274
|
+
Default tier **`balanced`** — the bulk of TDD execution. Routing is **off** unless `models.enabled:
|
|
275
|
+
true` in `02-DOCS/wiki/sdd/config.yaml`; when on, resolve and apply it per
|
|
276
|
+
`../asdd/references/model-routing.md` (fan-out on `balanced`, a hard sub-problem escalated to
|
|
277
|
+
`heavy`). Routing off → honor the session model silently.
|
|
258
278
|
|
|
259
279
|
## Checkpoints — what to say
|
|
260
280
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
where the plan
|
|
264
|
-
irreversible.
|
|
265
|
-
|
|
266
|
-
How short you are **never** changes the engineering. TDD, the done-checks, the constitution and
|
|
267
|
-
decision logging hold for every reader.
|
|
281
|
+
In the `orient` voice and the `technical_level` register, show: the task, tier, review verdict
|
|
282
|
+
(reported → unique → confirmed), controls (passed / **not run**), rounds, the *why* of any
|
|
283
|
+
non-obvious choice, and the next task. Ask only where the plan forked; confirm before deviating or
|
|
284
|
+
anything irreversible. In autopilot, log it and continue. Brevity never changes the engineering.
|
|
268
285
|
|
|
269
286
|
## Logging decisions (the 02-DOCS trail)
|
|
270
287
|
|
|
@@ -299,13 +316,14 @@ outranks the plan, and the plan outranks your in-the-moment preference.
|
|
|
299
316
|
| "I'll write the tests after, once the code settles" | Then the test only confirms what you built, not what was asked. Red first, always. |
|
|
300
317
|
| "This task is trivial, skip the failing test" | Trivial code breaks too, and the next task may lean on it. Smallest red test still goes first. |
|
|
301
318
|
| "I'm here anyway, I'll also fix that other thing" | Scope creep buries the diff and breaks the done-check contract. One task, one commit. |
|
|
302
|
-
| "The test passed first try without ever being red" | It tests nothing. Make it fail on purpose, then make it pass. |
|
|
303
319
|
| "I'll batch ten tasks into one big commit to save time" | You just made the work unreviewable and un-resumable. One logical unit per task. |
|
|
304
320
|
| "The constitution's rule doesn't fit here, I'll bend it" | The constitution outranks you. Surface the conflict; don't bend it silently. |
|
|
305
321
|
| "These two tasks touch the same file but I'll parallelize anyway" | Shared file = shared state = merge pain and lost work. Serialize them. |
|
|
306
|
-
| "Refactor now, the test is still red" | Never refactor on red — you can't tell a cleanup from a regression. Get green first. |
|
|
307
322
|
| "I'll mark it done, the code looks correct" | Done = the done-check's test is green and the acceptance criterion holds. Looks ≠ green. |
|
|
308
323
|
| "I'll just write the .env so the integration test runs" | Never. Secrets are the user's; mock/stub the boundary or use a test fixture. |
|
|
324
|
+
| "This diff is obviously low-risk, skip the review" | The tier is `rsc risk`'s, not yours. Run it and obey it. |
|
|
325
|
+
| "The security scan didn't run, but nothing changed there" | Report it **not run**. The task is not done. |
|
|
326
|
+
| "Round 4 will crack it" | The ledger stops at 3. Park the task; continue with independent ones. |
|
|
309
327
|
|
|
310
328
|
## Red flags — stop and re-route
|
|
311
329
|
|
|
@@ -324,16 +342,14 @@ outranks the plan, and the plan outranks your in-the-moment preference.
|
|
|
324
342
|
## Checklist (copy per task)
|
|
325
343
|
|
|
326
344
|
```text
|
|
327
|
-
- [ ]
|
|
328
|
-
- [ ]
|
|
329
|
-
- [ ]
|
|
330
|
-
- [ ]
|
|
331
|
-
- [ ]
|
|
332
|
-
- [ ]
|
|
333
|
-
- [ ]
|
|
334
|
-
- [ ]
|
|
335
|
-
- [ ] Committed as one logical unit (authorship = Eric)
|
|
336
|
-
- [ ] Checkpoint shown in the orient voice; next task named
|
|
345
|
+
- [ ] a) RED for the right reason → GREEN → REFACTOR; committed as one unit (authorship = Eric)
|
|
346
|
+
- [ ] b) `rsc risk` on the task diff; tier recorded
|
|
347
|
+
- [ ] c) review by tier, fresh context, spec + diff + surrounding code, no pre-judging
|
|
348
|
+
- [ ] d) `review consolidate` + `finding-verifier`; `review ledger record`
|
|
349
|
+
- [ ] e) tests, build, security, traceability — each passed or **not run**
|
|
350
|
+
- [ ] f) `review ledger round <slug>/<task>` each round; ≤ 3; class fixed, no repeats
|
|
351
|
+
- [ ] g) fixed + logged in decisions.md, or parked in the decision queue
|
|
352
|
+
- [ ] Progress entry appended; skill resolution recorded; checkpoint shown
|
|
337
353
|
```
|
|
338
354
|
|
|
339
355
|
## Result envelope
|
|
@@ -343,7 +359,7 @@ End every implementation checkpoint or completed batch with:
|
|
|
343
359
|
```json result-envelope
|
|
344
360
|
{
|
|
345
361
|
"status": "complete",
|
|
346
|
-
"executive_summary": "Implemented task(s)
|
|
362
|
+
"executive_summary": "Implemented task(s): red/green evidence, tier, review, controls, decision-queue state.",
|
|
347
363
|
"artifact": "02-DOCS/wiki/sdd/progress/<slug>.md",
|
|
348
364
|
"next_recommended": "implement|verify",
|
|
349
365
|
"risk": "low|medium|high",
|
|
@@ -351,31 +367,28 @@ End every implementation checkpoint or completed batch with:
|
|
|
351
367
|
"used": ["implement"],
|
|
352
368
|
"missing": [],
|
|
353
369
|
"fallback": [],
|
|
354
|
-
"compact_rules": ["
|
|
370
|
+
"compact_rules": ["Tier comes from rsc risk, never the agent.", "Max 3 fix rounds; park, don't loop."]
|
|
355
371
|
},
|
|
356
|
-
"evidence": ["red
|
|
372
|
+
"evidence": ["red/green output", "rsc risk output", "ledger record", "controls", "progress entry path"]
|
|
357
373
|
}
|
|
358
374
|
```
|
|
359
375
|
|
|
360
376
|
## What this skill is NOT
|
|
361
377
|
|
|
362
|
-
- **Not the
|
|
363
|
-
|
|
364
|
-
feature is done here — that claim belongs to `verify`, on evidence.
|
|
378
|
+
- **Not the closing gate.** The per-task controls prove each task; the whole branch against main,
|
|
379
|
+
the rollback plan and the human explanation are stage 5 (`verify` closing mode, `review`, `ship`).
|
|
365
380
|
- **Not spec or plan writing.** If you find the plan is wrong mid-build, stop and amend it via
|
|
366
381
|
`plan`; don't silently re-architect inside a commit.
|
|
367
382
|
- **Not the deep-debug protocol.** When a test fails for a reason you don't understand, switch to
|
|
368
383
|
`debug` (reproduce → isolate → hypothesize → fix → verify) instead of guessing.
|
|
369
384
|
|
|
370
|
-
## Where you are in
|
|
385
|
+
## Where you are in ASDD
|
|
371
386
|
|
|
372
|
-
|
|
373
|
-
`review`
|
|
374
|
-
isolation), `parallel` (independent tasks to fan out).
|
|
387
|
+
Base → Spec → Plan (`plan` · `tasks` · `analyze`) → **Build loop (this skill)** → Close (`verify` ·
|
|
388
|
+
`review` · `ship`) → Learn. On demand: `debug`, `worktrees`, `parallel`. Front door: `../asdd/SKILL.md`.
|
|
375
389
|
|
|
376
|
-
**Next:** when every task
|
|
377
|
-
|
|
378
|
-
the feature done.
|
|
390
|
+
**Next:** when every task is done or parked, go to stage 5 — `verify` in closing mode over the whole
|
|
391
|
+
branch. Parked tasks travel in the decision queue for the human.
|
|
379
392
|
|
|
380
393
|
## Orientación (siempre)
|
|
381
394
|
|