@ancleto/spec 0.6.7 → 0.6.10

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.
@@ -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 + migration reason (EOL, perf, compatibility, features); key changelog
15
- points if docs exist.}
10
+ {Installed version, reason, key changelog points.}
16
11
 
17
12
  ## Analysis coverage
18
13
 
19
- - source files analyzed: {source_files_scanned}
20
- - test files analyzed: {test_files_scanned}
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
- ### Affected dependencies — {N} packages in {M} package.json
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
- ### Config files to modify — {N} files
35
-
36
- {Change per file; if none: "None."}
26
+ **Config files** — {N}: {change per file; if none: "None."}
37
27
 
38
- ### Source code with breaking changes — {N} files
28
+ **Source** — {N}: {files + breaking change; if none: "None."}
39
29
 
40
- {Affected files + breaking change; if none: "None."}
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 for the affected package
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 → "No configuration requirements."}
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 → "No source-code requirements."}
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 → "No test requirements."}
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`), excluding `node_modules`, `dist` and generated artifacts
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
- {Only if IS_RUNTIME = true; one T-I task per file found}
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, etc.)_
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
- {If IS_RUNTIME = false:}
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 description}
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[], one sub-bullet per file; empty →}
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[], one sub-bullet per file; empty →}
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** Verify TypeScript compilation:
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
- - [ ] **T-V-900** Validate scan coverage:
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: dependencies first (surface compilation errors before touching code), then
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 (`^`) instead of an exact pin receives patches and minors automatically while keeping
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. E.g. MIDDY7-001: "Jest needs transformIgnorePatterns
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: technical impact and why the fix is correct, not a workaround.}
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 that may be affected (e.g. Middy v7 third-party middlewares). If none:
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} source, {test_files_scanned} tests, {config_files_scanned} config
271
- - High-confidence matches: {N}
272
- - Medium-confidence matches: {N}
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
- {One row per change in DEPENDENCY_CHANGES[], CONFIG_CHANGES[], BREAKING_CHANGES_IN_CODE[], BREAKING_CHANGES_IN_TESTS[]}
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 if available}
285
- - {Additional links found during the analysis}
286
- - Internal knowledge base consulted: {relevant break_ids from known-breaks.md}
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 (proposal, design, tasks, delta specs) by reading files. No external binaries.
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); count. Each incomplete → CRITICAL: "Complete task: `<description>`" or "Mark as done if already implemented".
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 requirement (`### Requirement:`) in `specs/`, search the codebase for related keywords. Unimplemented → CRITICAL: "Requirement not found: `<requirement name>`" + "Implement requirement: `<description>`".
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 to match reality". If absent, note "No design.md to verify against".
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 (file naming, dirs, style). Significant deviation → SUGGESTION: "Code pattern deviation: `<details>`" + "Consider following project pattern: `<example>`".
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; not the verification outcome. If nothing meets the bar, record nothing and say so.
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** — each needs a specific, actionable recommendation:
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 warnings → "No critical issues. Y warning(s) to consider. Ready for archive (with noted improvements)."; clean → "All checks passed. Ready for archive." Plus which memories were recorded in step 5 (or "No findings recorded").
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, reasonable inference — no perfect certainty required.
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 during triage without replacing the orchestrator or starting a spec workflow.
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 is not clearly `direct-implementation`, `direct-test-only`, or `spec-required`
15
- - it is unclear whether the change affects visible behavior, acceptance criteria, or product code
16
- - a single high-value clarification can materially improve classification confidence
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 clearly
21
- - the request is already clearly large enough for `spec-required`
22
- - the user explicitly asked to open the structured/spec path
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
- - any repo-specific context already gathered by the orchestrator
28
- - any existing constraints, references, or acceptance criteria already present in the request
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, do not sweep source files, broaden a
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
- Before asking anything, evaluate these questions silently:
40
+ Evaluate silently before asking:
46
41
 
47
- 1. Is the request strictly about tests, or is product code likely to change?
48
- 2. Is the expected behavior already clear, or would implementation require assumptions?
49
- 3. Could the change alter visible behavior, business rules, contracts, shared types, architecture, or integrations?
50
- 4. Is the request small and local, or does it risk expanding once implementation starts?
51
- 5. If the team guessed wrong and under-classified it, would that create rework or architecture risk?
52
- 6. Is the change low-risk, or does its 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`.
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 a question whenever possible:
51
+ Classify without asking whenever possible:
57
52
 
58
- - choose `direct-test-only` when the request is clearly limited to tests for existing behavior
59
- - choose `direct-implementation` when the change is small, local, and the expected result is already clear
60
- - choose `spec-required` when the request affects visible behavior, business rules, shared contracts, architecture, or scope is already meaningfully broad
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
- - help separate exactly one boundary, such as:
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 they are required to classify safely.
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 these:
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 does not remove the main ambiguity, classify as `spec-required`.
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