@ancleto/spec 0.6.7 → 0.6.9
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 +143 -112
- package/package.json +1 -1
- package/skills/ancleto-archive/SKILL.md +5 -5
- package/skills/ancleto-bulk-archive/SKILL.md +22 -35
- package/skills/ancleto-explore/SKILL.md +11 -11
- package/skills/ancleto-onboard/SKILL.md +33 -48
- package/skills/ancleto-upgrade/SKILL.md +56 -110
- package/skills/ancleto-upgrade/references/templates.md +39 -78
- package/skills/ancleto-verify/SKILL.md +11 -15
- package/skills/triage-clarifier/SKILL.md +28 -35
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
# Templates — aspec artifacts
|
|
2
2
|
|
|
3
|
-
Exact templates for the four generated artifacts; fill each `{...}` placeholder.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
3
|
## proposal.md
|
|
8
4
|
|
|
9
5
|
```markdown
|
|
@@ -11,37 +7,27 @@ Exact templates for the four generated artifacts; fill each `{...}` placeholder.
|
|
|
11
7
|
|
|
12
8
|
## Context
|
|
13
9
|
|
|
14
|
-
{Installed version
|
|
15
|
-
points if docs exist.}
|
|
10
|
+
{Installed version, reason, key changelog points.}
|
|
16
11
|
|
|
17
12
|
## Analysis coverage
|
|
18
13
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- config files analyzed: {config_files_scanned}
|
|
22
|
-
- files with matches: {files_with_matches}
|
|
23
|
-
- files without matches: {files_without_matches}
|
|
14
|
+
- analyzed: {source_files_scanned} source / {test_files_scanned} tests / {config_files_scanned} config
|
|
15
|
+
- with/without matches: {files_with_matches}/{files_without_matches}
|
|
24
16
|
|
|
25
17
|
## Change scope
|
|
26
18
|
|
|
27
|
-
|
|
19
|
+
**Dependencies** — {N} in {M} package.json:
|
|
28
20
|
|
|
29
21
|
| package.json | Package | Current version | Target version |
|
|
30
22
|
| ------------ | ------- | --------------- | -------------- |
|
|
31
23
|
|
|
32
24
|
{One row per DEPENDENCY_CHANGES[]}
|
|
33
25
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
{Change per file; if none: "None."}
|
|
26
|
+
**Config files** — {N}: {change per file; if none: "None."}
|
|
37
27
|
|
|
38
|
-
|
|
28
|
+
**Source** — {N}: {files + breaking change; if none: "None."}
|
|
39
29
|
|
|
40
|
-
{
|
|
41
|
-
|
|
42
|
-
### Tests with breaking changes — {N} files
|
|
43
|
-
|
|
44
|
-
{Affected test files; if none: "None."}
|
|
30
|
+
**Tests** — {N}: {files; if none: "None."}
|
|
45
31
|
|
|
46
32
|
## Breaking-change assessment
|
|
47
33
|
|
|
@@ -77,28 +63,28 @@ Source: {DOCS_URL | "Web search: {query}" | "Internal knowledge base"}
|
|
|
77
63
|
|
|
78
64
|
#### Scenario: dependencies installed
|
|
79
65
|
|
|
80
|
-
- **WHEN** dependencies are installed
|
|
66
|
+
- **WHEN** dependencies are installed
|
|
81
67
|
- **THEN** `{package_name}` resolves to `^{TARGET_VERSION}.0.0`
|
|
82
68
|
|
|
83
69
|
### Requirement: Configuration
|
|
84
70
|
|
|
85
71
|
- REQ-C-{N}: The system SHALL {required change} in `{file}`
|
|
86
72
|
|
|
87
|
-
{Per CONFIG_CHANGES[]; empty → "
|
|
73
|
+
{Per CONFIG_CHANGES[]; empty → "None."}
|
|
88
74
|
|
|
89
75
|
### Requirement: Source code
|
|
90
76
|
|
|
91
77
|
- REQ-S-{N} [{break_id}]: The system SHALL {required code change}
|
|
92
78
|
Evidence: `{file}:{line_number}` ({confidence})
|
|
93
79
|
|
|
94
|
-
{Per BREAKING_CHANGES_IN_CODE[]; empty → "
|
|
80
|
+
{Per BREAKING_CHANGES_IN_CODE[]; empty → "None."}
|
|
95
81
|
|
|
96
82
|
### Requirement: Tests
|
|
97
83
|
|
|
98
84
|
- REQ-T-{N} [{break_id}]: The system SHALL {required test change}
|
|
99
85
|
Evidence: `{file}:{line_number}` ({confidence})
|
|
100
86
|
|
|
101
|
-
{Per BREAKING_CHANGES_IN_TESTS[]; empty → "
|
|
87
|
+
{Per BREAKING_CHANGES_IN_TESTS[]; empty → "None."}
|
|
102
88
|
|
|
103
89
|
### Requirement: Verification
|
|
104
90
|
|
|
@@ -110,7 +96,7 @@ Source: {DOCS_URL | "Web search: {query}" | "Internal knowledge base"}
|
|
|
110
96
|
|
|
111
97
|
### Requirement: Analysis coverage
|
|
112
98
|
|
|
113
|
-
- REQ-X-001: The analysis SHALL include every eligible source file (`.ts`, `.tsx`, `.js`)
|
|
99
|
+
- REQ-X-001: The analysis SHALL include every eligible source file (`.ts`, `.tsx`, `.js`) except `node_modules` and `dist`
|
|
114
100
|
- REQ-X-002: The analysis SHALL include every eligible test file (`*.spec.*`, `*.test.*`)
|
|
115
101
|
- REQ-X-003: The result SHALL report coverage metrics (`source_files_scanned`, `test_files_scanned`, `config_files_scanned`)
|
|
116
102
|
```
|
|
@@ -132,16 +118,13 @@ Source: {DOCS_URL | "Web search: {query}" | "Internal knowledge base"}
|
|
|
132
118
|
```bash
|
|
133
119
|
npm install
|
|
134
120
|
```
|
|
135
|
-
````
|
|
136
121
|
|
|
137
122
|
## Phase 2: Infrastructure and runtime
|
|
138
123
|
|
|
139
|
-
{
|
|
124
|
+
{IS_RUNTIME = true only; repeat per file}
|
|
140
125
|
|
|
141
126
|
- [ ] **T-I-001** {Create | Update} `.nvmrc` with value `{TARGET_VERSION}`
|
|
142
|
-
|
|
143
|
-
- [ ] **T-I-002** Update `nodeVersion` in `{CI_FILE}` from `{current}` to `{TARGET_VERSION}.x`
|
|
144
|
-
|
|
127
|
+
- [ ] **T-I-002** Update `nodeVersion` in `{CI_FILE}`: `{current}` → `{TARGET_VERSION}.x`
|
|
145
128
|
- [ ] **T-I-003** Update the base image in `{Dockerfile}`:
|
|
146
129
|
```dockerfile
|
|
147
130
|
# Before
|
|
@@ -149,17 +132,14 @@ Source: {DOCS_URL | "Web search: {query}" | "Internal knowledge base"}
|
|
|
149
132
|
# After
|
|
150
133
|
FROM node:{TARGET_VERSION}-alpine
|
|
151
134
|
```
|
|
152
|
-
_(Match the existing variant: alpine, slim, bullseye
|
|
153
|
-
|
|
135
|
+
_(Match the existing variant: alpine, slim, bullseye.)_
|
|
154
136
|
- [ ] **T-I-004** Update `Runtime` in `{appSettings.json}` to `NODEJS_{TARGET_VERSION}_X`
|
|
155
137
|
|
|
156
|
-
{
|
|
157
|
-
_(Not applicable to library migrations)_
|
|
138
|
+
{IS_RUNTIME = false → _(Not applicable)_}
|
|
158
139
|
|
|
159
140
|
## Phase 3: Build and test configuration
|
|
160
141
|
|
|
161
|
-
- [ ] **T-C-{N}** {Concrete change
|
|
162
|
-
File: `{file}`
|
|
142
|
+
- [ ] **T-C-{N}** {Concrete change} — `{file}`
|
|
163
143
|
```
|
|
164
144
|
// Before
|
|
165
145
|
{current_value}
|
|
@@ -167,8 +147,7 @@ _(Not applicable to library migrations)_
|
|
|
167
147
|
{target_value}
|
|
168
148
|
```
|
|
169
149
|
|
|
170
|
-
{Per CONFIG_CHANGES[]; empty →}
|
|
171
|
-
_(No configuration changes detected)_
|
|
150
|
+
{Per CONFIG_CHANGES[]; empty → _(none detected)_}
|
|
172
151
|
|
|
173
152
|
## Phase 4: Breaking changes in source code
|
|
174
153
|
|
|
@@ -177,8 +156,7 @@ _(No configuration changes detected)_
|
|
|
177
156
|
Affected files:
|
|
178
157
|
- `{file}:{line_number}` ({confidence}) — `{snippet}`
|
|
179
158
|
|
|
180
|
-
{Per BREAKING_CHANGES_IN_CODE[]
|
|
181
|
-
_(No breaking changes detected in source code for this migration)_
|
|
159
|
+
{Per BREAKING_CHANGES_IN_CODE[]; empty → _(none detected)_}
|
|
182
160
|
|
|
183
161
|
## Phase 5: Breaking changes in tests
|
|
184
162
|
|
|
@@ -187,46 +165,37 @@ _(No breaking changes detected in source code for this migration)_
|
|
|
187
165
|
Affected files:
|
|
188
166
|
- `{file}:{line_number}` ({confidence}) — `{snippet}`
|
|
189
167
|
|
|
190
|
-
{Per BREAKING_CHANGES_IN_TESTS[]
|
|
191
|
-
_(No breaking changes detected in tests for this migration)_
|
|
168
|
+
{Per BREAKING_CHANGES_IN_TESTS[]; empty → _(none detected)_}
|
|
192
169
|
|
|
193
170
|
## Phase 6: Verification
|
|
194
171
|
|
|
195
|
-
- [ ] **T-V-001**
|
|
172
|
+
- [ ] **T-V-001** TypeScript compiles:
|
|
196
173
|
```bash
|
|
197
174
|
npx tsc --noEmit
|
|
198
175
|
# Nx monorepos: npx nx affected --target=typecheck
|
|
199
176
|
```
|
|
200
|
-
|
|
201
|
-
- [ ] **T-V-002** Verify build:
|
|
177
|
+
- [ ] **T-V-002** Build passes:
|
|
202
178
|
```bash
|
|
203
179
|
npm run build
|
|
204
180
|
# Nx monorepos: npx nx affected --target=build
|
|
205
181
|
```
|
|
206
|
-
|
|
207
|
-
- [ ] **T-V-003** Run the linter:
|
|
182
|
+
- [ ] **T-V-003** Lint passes:
|
|
208
183
|
```bash
|
|
209
184
|
npm run lint
|
|
210
185
|
# Nx monorepos: npx nx affected:lint
|
|
211
186
|
```
|
|
212
|
-
|
|
213
|
-
- [ ] **T-V-004** Run the test suite:
|
|
187
|
+
- [ ] **T-V-004** Tests pass:
|
|
214
188
|
```bash
|
|
215
189
|
npm test
|
|
216
190
|
# Nx monorepos: npx nx affected --target=test
|
|
217
191
|
```
|
|
218
|
-
|
|
219
|
-
- [ ] **T-V-005** Run tests in CI mode:
|
|
220
|
-
|
|
192
|
+
- [ ] **T-V-005** CI tests:
|
|
221
193
|
```bash
|
|
222
194
|
npm run test:ci
|
|
223
195
|
```
|
|
196
|
+
- [ ] **T-V-900** Coverage: confirm file counts; classify `UNSURE_MATCHES[]`.
|
|
224
197
|
|
|
225
|
-
-
|
|
226
|
-
- confirm scanned file counts (source/tests/config)
|
|
227
|
-
- review `UNSURE_MATCHES[]` and classify each case
|
|
228
|
-
|
|
229
|
-
{T-V-002..T-V-005 only when the matching script exists in SCRIPTS_AVAILABLE[]}
|
|
198
|
+
{T-V-002..T-V-005 only when the script exists}
|
|
230
199
|
|
|
231
200
|
````
|
|
232
201
|
|
|
@@ -239,49 +208,41 @@ _(No breaking changes detected in tests for this migration)_
|
|
|
239
208
|
|
|
240
209
|
## Migration strategy
|
|
241
210
|
|
|
242
|
-
{Phase order
|
|
243
|
-
infrastructure, config, code. Main risk and mitigation.}
|
|
211
|
+
{Phase order + main risk/mitigation.}
|
|
244
212
|
|
|
245
213
|
## Technical decisions
|
|
246
214
|
|
|
247
215
|
### Version range — `^{TARGET_VERSION}.0.0`
|
|
248
216
|
|
|
249
|
-
Caret
|
|
250
|
-
major stability. `>=` is avoided so the next major is not accepted by accident.
|
|
217
|
+
Caret keeps major stability while taking patches/minors; `>=` avoided to reject the next major.
|
|
251
218
|
|
|
252
219
|
### Configuration changes
|
|
253
220
|
|
|
254
|
-
{Per CONFIG_CHANGE: technical reasoning.
|
|
255
|
-
because @middy v7 ships pure ESM and does not transpile node_modules; without it, tests fail
|
|
256
|
-
with a SyntaxError on import."}
|
|
221
|
+
{Per CONFIG_CHANGE: technical reasoning.}
|
|
257
222
|
|
|
258
223
|
### Breaking changes — impact analysis
|
|
259
224
|
|
|
260
|
-
{Per breaking change:
|
|
261
|
-
{If none: "No breaking changes were detected in this repository for this migration. Risk is low."}
|
|
225
|
+
{Per breaking change: impact + why the fix is correct. If none: "None detected."}
|
|
262
226
|
|
|
263
227
|
### Ecosystem compatibility
|
|
264
228
|
|
|
265
|
-
{Related dependencies
|
|
266
|
-
"No ecosystem dependencies with incompatibility risk were identified."}
|
|
229
|
+
{Related dependencies at risk. If none: "None identified."}
|
|
267
230
|
|
|
268
231
|
### Analysis quality
|
|
269
232
|
|
|
270
|
-
- Coverage: {source_files_scanned}
|
|
271
|
-
-
|
|
272
|
-
-
|
|
273
|
-
- Low-confidence matches: {N}
|
|
274
|
-
- Manual review strategy for low confidence: {criterion applied}
|
|
233
|
+
- Coverage: {source_files_scanned}/{test_files_scanned}/{config_files_scanned}
|
|
234
|
+
- Matches: {N} high / {N} medium / {N} low
|
|
235
|
+
- Low-confidence review: {criterion}
|
|
275
236
|
|
|
276
237
|
## Change table
|
|
277
238
|
|
|
278
239
|
| File | Field / Pattern | Before | After |
|
|
279
240
|
|------|-----------------|--------|-------|
|
|
280
|
-
{
|
|
241
|
+
{Per change: DEPENDENCY_CHANGES[], CONFIG_CHANGES[], BREAKING_CHANGES_IN_CODE[], BREAKING_CHANGES_IN_TESTS[]}
|
|
281
242
|
|
|
282
243
|
## References
|
|
283
244
|
|
|
284
|
-
- {DOCS_URL
|
|
285
|
-
- {Additional links
|
|
286
|
-
-
|
|
245
|
+
- {DOCS_URL}
|
|
246
|
+
- {Additional links}
|
|
247
|
+
- Knowledge base: {break_ids from known-breaks.md}
|
|
287
248
|
```
|
|
@@ -10,7 +10,7 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
# aspec Verify
|
|
12
12
|
|
|
13
|
-
Verify an implementation against its change artifacts
|
|
13
|
+
Verify an implementation against its change artifacts. No external binaries.
|
|
14
14
|
|
|
15
15
|
**Input**: Optionally a change name (e.g., `add-auth`); if omitted, infer from context. If ambiguous, list `aspec/changes/` dirs containing `tasks.md` and ask the user to select. Mark incomplete-task changes "(In Progress)".
|
|
16
16
|
|
|
@@ -20,29 +20,25 @@ Verify an implementation against its change artifacts (proposal, design, tasks,
|
|
|
20
20
|
|
|
21
21
|
### 1. Load change artifacts
|
|
22
22
|
|
|
23
|
-
Read under `aspec/changes/<name>/`:
|
|
24
|
-
|
|
25
|
-
- `tasks.md` — checklist (required)
|
|
26
|
-
- `proposal.md`, `design.md` — intent/decisions (if present)
|
|
27
|
-
- `specs/` — delta requirements (if present)
|
|
23
|
+
Read under `aspec/changes/<name>/`: `tasks.md` (required), plus `proposal.md`, `design.md`, `specs/` when present.
|
|
28
24
|
|
|
29
25
|
### 2. Completeness
|
|
30
26
|
|
|
31
|
-
**Tasks:** parse checkboxes (`- [ ]` incomplete vs `- [x]` complete)
|
|
27
|
+
**Tasks:** parse checkboxes (`- [ ]` incomplete vs `- [x]` complete) and count. Each incomplete → CRITICAL: "Complete task: `<description>`" or "Mark as done if already implemented".
|
|
32
28
|
|
|
33
|
-
**Spec coverage:** for each
|
|
29
|
+
**Spec coverage:** for each `### Requirement:` in `specs/`, search the codebase for related keywords. Unimplemented → CRITICAL: "Requirement not found: `<requirement name>`" + "Implement requirement: `<description>`".
|
|
34
30
|
|
|
35
31
|
### 3. Correctness
|
|
36
32
|
|
|
37
33
|
**Mapping:** for each requirement, find implementation evidence; note file paths and lines. Divergence → WARNING: "Implementation may diverge from spec: `<details>`" + "Review `<file>:<lines>` against requirement X".
|
|
38
34
|
|
|
39
|
-
**Scenarios:** for each `#### Scenario:`, check code handles conditions and tests cover it. Uncovered → WARNING: "Scenario not covered: `<scenario name>`" + "Add test or implementation for scenario: `<description>`".
|
|
35
|
+
**Scenarios:** for each `#### Scenario:`, check the code handles the conditions and tests cover it. Uncovered → WARNING: "Scenario not covered: `<scenario name>`" + "Add test or implementation for scenario: `<description>`".
|
|
40
36
|
|
|
41
37
|
### 4. Coherence
|
|
42
38
|
|
|
43
|
-
**Design:** if `design.md` exists, extract key decisions ("Decision:", "Approach:", "Architecture:") and verify adherence. Contradiction → WARNING: "Design decision not followed: `<decision>`" + "Update implementation or revise design.md
|
|
39
|
+
**Design:** if `design.md` exists, extract key decisions ("Decision:", "Approach:", "Architecture:") and verify adherence. Contradiction → WARNING: "Design decision not followed: `<decision>`" + "Update implementation or revise design.md". If absent, note "No design.md to verify against".
|
|
44
40
|
|
|
45
|
-
**Patterns:** review new code against project patterns (
|
|
41
|
+
**Patterns:** review new code against project patterns (naming, dirs, style). Significant deviation → SUGGESTION: "Code pattern deviation: `<details>`" + "Consider following project pattern: `<example>`".
|
|
46
42
|
|
|
47
43
|
### 5. Capture findings into persistent memory
|
|
48
44
|
|
|
@@ -57,7 +53,7 @@ For every WARNING/CRITICAL revealing an architectural decision, standing rule, o
|
|
|
57
53
|
recordDecision({ memory_key: "<kebab-topic>", content: "<the decision>", justification: "<reason>" })
|
|
58
54
|
```
|
|
59
55
|
|
|
60
|
-
Record only what saves future investigation
|
|
56
|
+
Record only what saves future investigation, not the outcome. If nothing meets the bar, record nothing and say so.
|
|
61
57
|
|
|
62
58
|
### 6. Verification Report
|
|
63
59
|
|
|
@@ -72,18 +68,18 @@ Record only what saves future investigation; not the verification outcome. If no
|
|
|
72
68
|
| Coherence | Followed/Issues |
|
|
73
69
|
```
|
|
74
70
|
|
|
75
|
-
**Issues by priority
|
|
71
|
+
**Issues by priority**, each with a specific recommendation:
|
|
76
72
|
|
|
77
73
|
1. **CRITICAL** (block archive): incomplete tasks, missing requirement implementations.
|
|
78
74
|
2. **WARNING** (should fix): spec/design divergences, missing scenario coverage.
|
|
79
75
|
3. **SUGGESTION** (nice to fix): pattern inconsistencies, minor improvements.
|
|
80
76
|
|
|
81
|
-
**Assessment:** CRITICAL → "X critical issue(s) found. Fix before archiving."; only
|
|
77
|
+
**Assessment:** CRITICAL → "X critical issue(s) found. Fix before archiving."; warnings only → "No critical issues. Y warning(s) to consider. Ready for archive (with noted improvements)."; clean → "All checks passed. Ready for archive." Note memories recorded in step 5 (or "No findings recorded").
|
|
82
78
|
|
|
83
79
|
## Heuristics
|
|
84
80
|
|
|
85
81
|
- **Completeness**: objective checklist items only.
|
|
86
|
-
- **Correctness**: keyword search, path analysis,
|
|
82
|
+
- **Correctness**: keyword search, path analysis, inference — no certainty required.
|
|
87
83
|
- **Coherence**: glaring inconsistencies only; don't nitpick style.
|
|
88
84
|
- **False positives**: when uncertain, prefer SUGGESTION > WARNING > CRITICAL.
|
|
89
85
|
- **Actionability**: every issue carries a specific recommendation with file/line refs.
|
|
@@ -7,73 +7,66 @@ description: Clarification-needed triage helper. Use when the request sits betwe
|
|
|
7
7
|
|
|
8
8
|
## Goal
|
|
9
9
|
|
|
10
|
-
Reduce ambiguity
|
|
10
|
+
Reduce triage ambiguity; don't replace the orchestrator or start a spec workflow.
|
|
11
11
|
|
|
12
12
|
## Use only when
|
|
13
13
|
|
|
14
|
-
- the request
|
|
15
|
-
-
|
|
16
|
-
-
|
|
14
|
+
- the request isn't clearly `direct-implementation`, `direct-test-only`, or `spec-required`
|
|
15
|
+
- unclear whether it affects visible behavior, acceptance criteria, or product code
|
|
16
|
+
- one high-value clarification could materially improve confidence
|
|
17
17
|
|
|
18
18
|
## Do not use when
|
|
19
19
|
|
|
20
|
-
- the request already fits one category
|
|
21
|
-
-
|
|
22
|
-
- the user explicitly asked
|
|
20
|
+
- the request already fits one category
|
|
21
|
+
- already clearly large enough for `spec-required`
|
|
22
|
+
- the user explicitly asked for the structured/spec path
|
|
23
23
|
|
|
24
24
|
## Inputs to preserve
|
|
25
25
|
|
|
26
26
|
- the user's original wording
|
|
27
|
-
-
|
|
28
|
-
-
|
|
27
|
+
- repo context already gathered by the orchestrator
|
|
28
|
+
- existing constraints, references, or acceptance criteria in the request
|
|
29
29
|
|
|
30
30
|
## Repository-context boundary
|
|
31
31
|
|
|
32
32
|
Triage classifies the request; it does not reconstruct the repository.
|
|
33
33
|
|
|
34
|
-
If repository context is needed to classify safely,
|
|
35
|
-
search, or inspect the implementation yourself. Ask the orchestrator to delegate one focused
|
|
36
|
-
question to `@technical-discovery`. That subagent reads the repository's technical-discovery
|
|
37
|
-
documents and returns the relevant, cited context for triage.
|
|
34
|
+
If repository context is needed to classify safely, don't sweep source files or inspect the implementation. Ask the orchestrator to delegate one focused question to `@technical-discovery`, which reads the repository's technical-discovery documents and returns cited context.
|
|
38
35
|
|
|
39
|
-
Never replace unavailable technical-discovery documents with a manual repository scan. Use the
|
|
40
|
-
context already provided, ask the one permitted clarification question when it resolves the
|
|
41
|
-
dominant ambiguity, or favor `spec-required` when material uncertainty remains.
|
|
36
|
+
Never replace unavailable technical-discovery documents with a manual repository scan. Use provided context, ask the one permitted clarification question when it resolves the dominant ambiguity, or favor `spec-required` when material uncertainty remains.
|
|
42
37
|
|
|
43
38
|
## Internal evaluation
|
|
44
39
|
|
|
45
|
-
|
|
40
|
+
Evaluate silently before asking:
|
|
46
41
|
|
|
47
|
-
1.
|
|
48
|
-
2.
|
|
49
|
-
3. Could
|
|
50
|
-
4.
|
|
51
|
-
5. If
|
|
52
|
-
6.
|
|
42
|
+
1. Strictly tests, or product code likely to change?
|
|
43
|
+
2. Expected behavior clear, or implementation needs assumptions?
|
|
44
|
+
3. Could it alter visible behavior, business rules, contracts, shared types, architecture, or integrations?
|
|
45
|
+
4. Small and local, or at risk of expanding once implementation starts?
|
|
46
|
+
5. If under-classified, would that create rework or architecture risk?
|
|
47
|
+
6. Low-risk, or does small size hide a behavior change or high-stakes logic (auth, payments, data integrity, security, shared contracts)? If small but high-risk, prefer `spec-required`.
|
|
53
48
|
|
|
54
49
|
## Classification rules
|
|
55
50
|
|
|
56
|
-
Classify without asking
|
|
51
|
+
Classify without asking whenever possible:
|
|
57
52
|
|
|
58
|
-
- choose `direct-test-only` when the request is
|
|
59
|
-
- choose `direct-implementation` when the change is small, local, and
|
|
60
|
-
- choose `spec-required` when the request affects visible behavior, business rules, shared contracts, architecture, or
|
|
53
|
+
- choose `direct-test-only` when the request is limited to tests for existing behavior
|
|
54
|
+
- choose `direct-implementation` when the change is small, local, and its expected result is clear
|
|
55
|
+
- choose `spec-required` when the request affects visible behavior, business rules, shared contracts, architecture, or is already broad
|
|
61
56
|
|
|
62
57
|
## Single-question policy
|
|
63
58
|
|
|
64
|
-
Ask at most one question.
|
|
65
|
-
|
|
66
|
-
That question must:
|
|
59
|
+
Ask at most one question. It must:
|
|
67
60
|
|
|
68
61
|
- target the highest-value ambiguity only
|
|
69
62
|
- be short and concrete
|
|
70
|
-
-
|
|
63
|
+
- separate exactly one boundary, such as:
|
|
71
64
|
- test-only vs product change
|
|
72
65
|
- local bugfix vs behavior change
|
|
73
66
|
- small direct change vs structured/spec change
|
|
74
67
|
|
|
75
68
|
Do not ask multi-part questions.
|
|
76
|
-
Do not ask for implementation details unless
|
|
69
|
+
Do not ask for implementation details unless required to classify safely.
|
|
77
70
|
Do not start an interview.
|
|
78
71
|
|
|
79
72
|
## Fallback policy
|
|
@@ -84,18 +77,18 @@ When in doubt, prefer the safer classification over an under-scoped direct path.
|
|
|
84
77
|
|
|
85
78
|
## Expected outcome
|
|
86
79
|
|
|
87
|
-
After applying this skill, the orchestrator should do exactly one of
|
|
80
|
+
After applying this skill, the orchestrator should do exactly one of:
|
|
88
81
|
|
|
89
82
|
1. classify directly as `direct-test-only`
|
|
90
83
|
2. classify directly as `direct-implementation`
|
|
91
84
|
3. classify directly as `spec-required`
|
|
92
85
|
4. ask one concise clarification question
|
|
93
86
|
|
|
94
|
-
If option 4 happened and the answer still
|
|
87
|
+
If option 4 happened and the answer still leaves the main ambiguity, classify as `spec-required`.
|
|
95
88
|
|
|
96
89
|
## What not to do
|
|
97
90
|
|
|
98
91
|
- do not create specs, design, tasks, or proposals
|
|
99
92
|
- do not trigger cleto or any workflow handoff
|
|
100
93
|
- do not ask more than one clarification question
|
|
101
|
-
- do not replace the orchestrator's final responsibility for classification
|
|
94
|
+
- do not replace the orchestrator's final responsibility for classification
|