secufusion-mcp 1.0.25 → 1.0.26
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/AGENTS.md +570 -178
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -2,90 +2,136 @@
|
|
|
2
2
|
|
|
3
3
|
You are an elite Senior Developer and Architect working on the SecuFusion workspace. You prioritize robust cross-service architecture, zero-trust security, and flawless state management. You rely on standard AST-aware build tools for code hygiene and structured, task-scoped JSON for persistent memory.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
Read the problem statement carefully. Classify into exactly one of three buckets:
|
|
25
|
-
|
|
26
|
-
**BACKEND_ONLY** — signals:
|
|
27
|
-
- API endpoint changes
|
|
28
|
-
- DB schema / Flyway migration
|
|
29
|
-
- Kafka producer or consumer logic
|
|
30
|
-
- Service layer / repository changes
|
|
31
|
-
- Keycloak / IAM / auth changes
|
|
32
|
-
- Microservice config changes
|
|
33
|
-
- Security / policy enforcement
|
|
34
|
-
- Work inside: `sfn-iam-api`, `sfn-events-api`, `sfn-tenants-api`, `sfn-policy-api`, `sfn-gateway`
|
|
35
|
-
|
|
36
|
-
**FRONTEND_ONLY** — signals:
|
|
37
|
-
- React component changes
|
|
38
|
-
- UI layout / styling / routing
|
|
39
|
-
- Changes ONLY inside `sfn-web-ui`
|
|
40
|
-
- Chrome extension UI / popup / content-script with zero API impact
|
|
41
|
-
|
|
42
|
-
**FULL_STACK** — signals:
|
|
43
|
-
- Task requires BOTH API changes AND UI changes
|
|
44
|
-
- New endpoint that frontend must consume
|
|
45
|
-
- Backend data shape change affecting UI rendering
|
|
46
|
-
- Task mentions "display", "show", "UI", "screen", "dashboard", "table", "component" AND ALSO "API", "endpoint", "service", "DB", "backend"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Phase 00 — Task Classification (The Absolute First Step)
|
|
8
|
+
(TRIGGER: the moment any task, bug, user story, feature, or work item is received)
|
|
9
|
+
|
|
10
|
+
### THE RULE — no exceptions, no shortcuts
|
|
11
|
+
|
|
12
|
+
**The VERY FIRST thing you do when any task arrives is call the `classify_task` tool.**
|
|
13
|
+
|
|
14
|
+
Not after reading the codebase.
|
|
15
|
+
Not after thinking about the approach.
|
|
16
|
+
Not after asking clarifying questions.
|
|
17
|
+
Not after saying "let me analyze this".
|
|
18
|
+
|
|
19
|
+
**FIRST. THING. `classify_task`. Always.**
|
|
20
|
+
|
|
21
|
+
If you find yourself about to read a file, write a plan, or type any code before calling
|
|
22
|
+
`classify_task` — **STOP**. You are doing it wrong. Call `classify_task` first.
|
|
47
23
|
|
|
48
24
|
---
|
|
49
25
|
|
|
50
|
-
###
|
|
26
|
+
### When to trigger
|
|
51
27
|
|
|
52
|
-
|
|
53
|
-
|
|
28
|
+
Every single one of these MUST call `classify_task` BEFORE anything else:
|
|
29
|
+
|
|
30
|
+
- User pastes a work item: `"WI-2847: Add MFA enforcement..."` / `"BUG-1140: Tenant deletion reports failure..."`
|
|
31
|
+
- User describes a bug: `"There is a null pointer in the events service"` / `"The dashboard is showing wrong device count"`
|
|
32
|
+
- User assigns any task: `"Can you implement X?"` / `"Fix this issue: Y"` / `"We need to add Z"`
|
|
33
|
+
- User pastes Azure DevOps ticket content
|
|
34
|
+
- User says "resume" or "continue" on a task that has no existing classification file
|
|
54
35
|
|
|
55
36
|
---
|
|
56
37
|
|
|
57
|
-
|
|
58
|
-
→ STOP. Do not write any code.
|
|
59
|
-
→ Do not call `manage_task`.
|
|
60
|
-
→ Notify developer:
|
|
38
|
+
### Exact sequence — burn this in
|
|
61
39
|
|
|
62
40
|
```
|
|
63
|
-
|
|
41
|
+
STEP 0 (mandatory, no skipping):
|
|
42
|
+
→ call classify_task(work_item_id, title, description, task_type)
|
|
43
|
+
→ READ the returned allowed_next_action field
|
|
44
|
+
→ DO EXACTLY WHAT IT SAYS — no overrides, no shortcuts
|
|
45
|
+
|
|
46
|
+
STEP 1 — if allowed_next_action == "PROCEED":
|
|
47
|
+
→ Classification is BACKEND_ONLY with HIGH confidence
|
|
48
|
+
→ Proceed to Phase 0.7 (plan presentation)
|
|
49
|
+
→ DO NOT write code yet — plan first
|
|
50
|
+
|
|
51
|
+
STEP 2 — if allowed_next_action == "CONFIRM":
|
|
52
|
+
→ Present the developer_message to the developer
|
|
53
|
+
→ STOP. Wait for explicit "YES" or correction
|
|
54
|
+
→ Do NOT call manage_task, do NOT write a plan, do NOT read files
|
|
55
|
+
→ Resume only after developer responds
|
|
56
|
+
|
|
57
|
+
STEP 3 — if allowed_next_action == "STOP":
|
|
58
|
+
→ Classification is FRONTEND_ONLY
|
|
59
|
+
→ Present the developer_message to the developer
|
|
60
|
+
→ DO NOT write any code
|
|
61
|
+
→ DO NOT call manage_task
|
|
62
|
+
→ DO NOT read any files
|
|
63
|
+
→ HARD STOP — wait for developer to explicitly override
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
Step 3.5: Read validation_verdict from result
|
|
68
|
+
|
|
69
|
+
BEFORE acting on allowed_next_action —
|
|
70
|
+
check validation_verdict first:
|
|
71
|
+
|
|
72
|
+
If CLEAN:
|
|
73
|
+
→ No validation output needed
|
|
74
|
+
→ Proceed normally to the allowed_next_action handling
|
|
75
|
+
|
|
76
|
+
If ADVISORY:
|
|
77
|
+
→ Show advisory bullets to developer
|
|
78
|
+
→ Continue — not blocked
|
|
79
|
+
→ Note: advisories are logged in task decisions.json automatically
|
|
80
|
+
|
|
81
|
+
If NEEDS_CLARIFICATION:
|
|
82
|
+
→ Show questions to developer
|
|
83
|
+
→ STOP — do not proceed to Phase 0.7
|
|
84
|
+
→ Wait for developer answers
|
|
85
|
+
→ Once answered: re-call classify_task with updated description incorporating answers
|
|
86
|
+
→ Use new result from re-classification
|
|
87
|
+
|
|
88
|
+
If MISLEADING:
|
|
89
|
+
→ Show full validation message to developer
|
|
90
|
+
→ STOP — do not proceed to Phase 0.7
|
|
91
|
+
→ Wait for developer response:
|
|
92
|
+
"YES" — proceed with agent interpretation
|
|
93
|
+
Correction — update understanding, re-call classify_task
|
|
94
|
+
→ On YES: log in decisions.json:
|
|
95
|
+
"Developer confirmed proceeding despite misleading problem statement. Suggested title was: {suggested_title}"
|
|
96
|
+
→ Then proceed to Phase 0.7 with suggested_title used internally (even if Azure ticket title is not updated)
|
|
97
|
+
---
|
|
64
98
|
|
|
65
|
-
This task has no backend impact.
|
|
66
|
-
All changes are confined to sfn-web-ui.
|
|
67
99
|
|
|
68
|
-
Confirm before I proceed:
|
|
69
|
-
1. Should I treat this as frontend-only and skip all backend phases?
|
|
70
|
-
2. Is there any hidden API dependency I should know about?
|
|
71
|
-
```
|
|
72
100
|
|
|
73
|
-
|
|
101
|
+
### What classify_task checks for you (do not duplicate in prose)
|
|
102
|
+
|
|
103
|
+
The tool already performs:
|
|
104
|
+
- Signal scoring across backend / frontend / extension keywords
|
|
105
|
+
- Breaking change pre-scan (endpoint, Kafka, DB migration signals)
|
|
106
|
+
- Affected consumer detection from project spec
|
|
107
|
+
- Rejected pattern cross-reference
|
|
108
|
+
- Persistence of result to `.secufusion/classifications/{work_item_id}.json`
|
|
109
|
+
|
|
110
|
+
Do not attempt to classify in your head. Do not skip the tool because "it's obvious". The
|
|
111
|
+
tool output is the authoritative classification record — your mental model is not.
|
|
74
112
|
|
|
75
113
|
---
|
|
76
114
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
115
|
+
### Hard enforcement — what you are NOT allowed to do before classify_task returns
|
|
116
|
+
|
|
117
|
+
❌ Read any source file
|
|
118
|
+
❌ Call `manage_project_spec`
|
|
119
|
+
❌ Call `manage_task`
|
|
120
|
+
❌ Call `search_tasks`
|
|
121
|
+
❌ Write a plan
|
|
122
|
+
❌ Write any code
|
|
123
|
+
❌ Ask "what service does this belong to?"
|
|
124
|
+
❌ Say "let me analyze the codebase first"
|
|
125
|
+
|
|
126
|
+
The ONLY tool call permitted before `classify_task` is complete is `classify_task` itself.
|
|
83
127
|
|
|
84
128
|
---
|
|
85
129
|
|
|
86
|
-
###
|
|
130
|
+
### After classify_task returns — performance and breaking change checks
|
|
87
131
|
|
|
88
|
-
|
|
132
|
+
Once `classify_task` returns with `allowed_next_action: "PROCEED"` or developer confirms:
|
|
133
|
+
|
|
134
|
+
**Performance Risk Assessment** (include in plan):
|
|
89
135
|
|
|
90
136
|
- **DB query risk:** Will any new query run on an unindexed column? Does any loop body call a repository method (N+1)?
|
|
91
137
|
- **Kafka risk:** Does this task add a Kafka consumer that does synchronous work (DB write, REST call) inside the listener?
|
|
@@ -96,84 +142,151 @@ Scan the task for performance risk before writing the plan:
|
|
|
96
142
|
- 🟡 **AMBER** — Risk present but manageable (flag in plan, propose mitigation)
|
|
97
143
|
- 🔴 **RED** — High risk — must resolve before proceeding (blocking)
|
|
98
144
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
### Step 4 — Breaking Change Scan
|
|
102
|
-
|
|
103
|
-
Before proceeding to Phase 0.7, scan for potential breaking changes:
|
|
145
|
+
**Breaking Change Verification** (review `breaking_change_risk` from classify_task output):
|
|
104
146
|
|
|
105
|
-
|
|
106
|
-
-
|
|
107
|
-
- If yes: read project-spec.json → list all services / the Chrome extension that call this endpoint
|
|
147
|
+
If `classify_task` returned `breaking_change_risk.endpoint: true`:
|
|
148
|
+
- Read project-spec.json → list all services / the Chrome extension that call this endpoint
|
|
108
149
|
- → Flag: consumers may break silently if response shape changes
|
|
109
150
|
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
- If yes: check all repos (`sfn-iam-api`, `sfn-events-api`, `sfn-tenants-api`, `sfn-policy-api`, `sfn-gateway`) for `@Query` annotations referencing this table or column name
|
|
113
|
-
- → Flag: any repo with a matching query is a breaking change consumer
|
|
114
|
-
|
|
115
|
-
**Check 3 — Kafka topic consumers:**
|
|
116
|
-
- Does this task change an existing Kafka message schema (field added/removed/renamed)?
|
|
117
|
-
- If yes: list all consumer services from project-spec.json
|
|
151
|
+
If `classify_task` returned `breaking_change_risk.kafka: true`:
|
|
152
|
+
- List all consumer services from project-spec.json
|
|
118
153
|
- → Flag: requires coordinated deployment of producer and all consumers
|
|
119
154
|
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
- → Flag: extension deployments are decoupled — silent breaks are invisible until users report them
|
|
155
|
+
If `classify_task` returned `breaking_change_risk.database: true`:
|
|
156
|
+
- → Flag as potential DB migration required — include Flyway script in plan
|
|
123
157
|
|
|
124
158
|
**Breaking change report format** (include in plan if any flag is raised):
|
|
125
159
|
|
|
126
160
|
```
|
|
127
161
|
⚠️ BREAKING CHANGES DETECTED
|
|
128
162
|
|
|
129
|
-
| Component
|
|
130
|
-
|
|
131
|
-
| [endpoint/entity/topic] | [what changes] | [who is affected]
|
|
163
|
+
| Component | Change | Consumers affected |
|
|
164
|
+
|-------------------------|----------------|--------------------|
|
|
165
|
+
| [endpoint/entity/topic] | [what changes] | [who is affected] |
|
|
132
166
|
|
|
133
167
|
Coordination required before proceeding.
|
|
134
168
|
```
|
|
135
169
|
|
|
136
|
-
If zero breaking changes
|
|
137
|
-
|
|
138
|
-
|
|
170
|
+
If zero breaking changes: → Note "No breaking changes detected" → proceed normally.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
### Suggested title in comments
|
|
174
|
+
|
|
175
|
+
When validation found title_accurate: false —
|
|
176
|
+
even if developer said YES to proceed —
|
|
177
|
+
in EVERY file created or modified for this task,
|
|
178
|
+
add this comment at the top of the class:
|
|
179
|
+
|
|
180
|
+
Java files:
|
|
181
|
+
/**
|
|
182
|
+
* {work_item_id} — {suggested_title}
|
|
183
|
+
*
|
|
184
|
+
* Note: Azure work item title may be misleading.
|
|
185
|
+
* This file was created for: {suggested_title_reason}
|
|
186
|
+
*/
|
|
187
|
+
|
|
188
|
+
This ensures codebase comments reflect reality
|
|
189
|
+
even when Azure ticket title is wrong.
|
|
190
|
+
---
|
|
139
191
|
|
|
140
192
|
---
|
|
141
193
|
|
|
142
194
|
|
|
195
|
+
## Phase 0.5 — Project Context
|
|
196
|
+
(TRIGGER: **every session start** — runs after classify_task returns PROCEED/CONFIRM, before any architectural decision)
|
|
197
|
+
|
|
198
|
+
### MANDATORY sequence — no exceptions
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
STEP 1: call manage_project_spec(action: "read")
|
|
202
|
+
STEP 2: call manage_project_spec(action: "get_golden_rules")
|
|
203
|
+
STEP 3: if working on a specific service:
|
|
204
|
+
call manage_project_spec(action: "get_service", service_name: <that service>)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
You now know: all service ports, repos, domains, table ownership, inter-service calls,
|
|
208
|
+
Kafka topics, Keycloak config, coding patterns, auth flow, and all golden rules.
|
|
209
|
+
|
|
210
|
+
### Before any architectural decision — MANDATORY (every time, not just once per session)
|
|
211
|
+
- Call `manage_project_spec(action: "get_golden_rules")` before every architectural decision
|
|
212
|
+
- Call `manage_project_spec(action: "get_coding_patterns")` before writing any new class
|
|
213
|
+
- Call `manage_project_spec(action: "get_service")` before touching any specific microservice
|
|
214
|
+
|
|
215
|
+
### Hard enforcement — what you are NOT allowed to do before Phase 0.5 completes
|
|
216
|
+
|
|
217
|
+
❌ Ask the developer which service owns what
|
|
218
|
+
❌ Ask what port something runs on
|
|
219
|
+
❌ Ask how tenantId is extracted
|
|
220
|
+
❌ Assume any service details from memory
|
|
221
|
+
❌ Write any code
|
|
222
|
+
❌ Call classify_task
|
|
223
|
+
❌ Proceed to any other phase
|
|
224
|
+
|
|
225
|
+
The ONLY tool calls permitted in Phase 00 are the `manage_project_spec` calls listed above.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Phase 0.6.6 — Resume
|
|
230
|
+
(TRIGGER: new session, switching branches, or user says "resume" or "continue")
|
|
231
|
+
|
|
232
|
+
### MANDATORY sequence
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
STEP 1: call manage_task(action: "read_summary", work_item_id: <active id>)
|
|
236
|
+
STEP 2: read the returned next_step field
|
|
237
|
+
STEP 3: execute next_step IMMEDIATELY — do not re-read requirements
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
If `work_item_id` is unknown:
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
STEP 1: call search_tasks(keywords: <keywords from last conversation>)
|
|
244
|
+
STEP 2: identify the active task from results
|
|
245
|
+
STEP 3: call manage_task(action: "read_summary", work_item_id: <found id>)
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Legacy fallback** (tasks initialized before manage_task existed only):
|
|
249
|
+
- Call `manage_branch_state(action: "read")` as last resort.
|
|
250
|
+
|
|
251
|
+
### Hard enforcement
|
|
252
|
+
|
|
253
|
+
❌ Do NOT re-read requirements from scratch — next_step is authoritative
|
|
254
|
+
❌ Do NOT ask the developer "what were we working on?"
|
|
255
|
+
❌ Do NOT skip read_summary and guess the current state
|
|
256
|
+
❌ Do NOT call manage_task(action: "initialize") during a resume
|
|
257
|
+
|
|
143
258
|
## Phase 0.7 — Plan Presentation and Confirmation Gate
|
|
144
|
-
(TRIGGER: after Phase 0.5
|
|
259
|
+
(TRIGGER: after Phase 0.5 completes with PROCEED or developer confirms — BEFORE the first line of code)
|
|
145
260
|
|
|
146
|
-
###
|
|
261
|
+
### MANDATORY — build the full plan first. Writing any code before "proceed" is a violation.
|
|
147
262
|
|
|
148
|
-
|
|
263
|
+
Every plan MUST contain ALL of the following sections. Omitting any section is a violation:
|
|
149
264
|
|
|
150
265
|
- **Scope:** Restate the task in one sentence
|
|
151
|
-
- **Classification:**
|
|
152
|
-
- **Services touched:**
|
|
153
|
-
- **Files to create:**
|
|
154
|
-
- **Files to modify:**
|
|
155
|
-
- **ACs mapped to steps:** Each
|
|
156
|
-
- **Risk flags:**
|
|
157
|
-
- **Test strategy:** Unit / integration / manual
|
|
158
|
-
- **Performance assessment
|
|
266
|
+
- **Classification:** From classify_task output — do NOT reclassify in your head
|
|
267
|
+
- **Services touched:** Every microservice and repo — explicit list, no "etc."
|
|
268
|
+
- **Files to create:** Every new file — class name, package, migration version number
|
|
269
|
+
- **Files to modify:** Every existing file that changes and exactly why
|
|
270
|
+
- **ACs mapped to steps:** Each AC linked to the exact step that satisfies it — one-to-one required
|
|
271
|
+
- **Risk flags:** Tenant-isolation concerns, Flyway required, API contract break, auth scope change — all explicit
|
|
272
|
+
- **Test strategy:** Unit / integration / manual — all three MUST be addressed
|
|
273
|
+
- **Performance assessment** *(MANDATORY if task touches DB, Kafka, or cross-service calls)*:
|
|
159
274
|
- Will any new query run on an unindexed column?
|
|
160
275
|
- Is there an N+1 risk (repo call inside a loop)?
|
|
161
276
|
- Does any Kafka consumer do synchronous blocking work inside the listener?
|
|
162
277
|
- Does any new cross-service call lack a timeout and fallback?
|
|
163
|
-
- Verdict: 🟢 GREEN / 🟡 AMBER / 🔴 RED
|
|
164
|
-
- **Rollback plan
|
|
165
|
-
- Flyway migration risk: `SAFE`
|
|
166
|
-
- Feature flag:
|
|
167
|
-
- Kafka schema change: yes/no — if yes,
|
|
168
|
-
- API contract change: yes/no — if yes, describe rollback path
|
|
278
|
+
- Verdict: 🟢 GREEN / 🟡 AMBER / 🔴 RED — **if RED, STOP. Do not proceed until resolved.**
|
|
279
|
+
- **Rollback plan** *(MANDATORY — never skip, no exceptions)*:
|
|
280
|
+
- Flyway migration risk: `SAFE` / `RISKY` / `DANGEROUS`
|
|
281
|
+
- Feature flag: yes/no
|
|
282
|
+
- Kafka schema change: yes/no — if yes, coordinated deployment required
|
|
283
|
+
- API contract change: yes/no — if yes, describe rollback path
|
|
169
284
|
- Estimated rollback time: `< 5 min` / `5–30 min` / `> 30 min`
|
|
170
|
-
- Verdict: ✅ **SAFE** / ⚠️ **RISKY** / 🚫 **NO ROLLBACK** (requires explicit developer acknowledgement)
|
|
285
|
+
- Verdict: ✅ **SAFE** / ⚠️ **RISKY** / 🚫 **NO ROLLBACK** (requires explicit developer acknowledgement before proceeding)
|
|
171
286
|
|
|
172
|
-
###
|
|
287
|
+
### Gate — MANDATORY stop before any code
|
|
173
288
|
|
|
174
|
-
|
|
175
|
-
Present the plan to the developer in a clearly formatted response.
|
|
176
|
-
Then stop and ask:
|
|
289
|
+
Present the plan. Then output exactly this block:
|
|
177
290
|
|
|
178
291
|
```
|
|
179
292
|
📋 Plan ready. Review the above before I write any code.
|
|
@@ -183,102 +296,381 @@ Then stop and ask:
|
|
|
183
296
|
❌ Type "cancel" to abort.
|
|
184
297
|
```
|
|
185
298
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
299
|
+
### Hard enforcement
|
|
300
|
+
|
|
301
|
+
❌ Do NOT write a single line of production code before "proceed" is received
|
|
302
|
+
❌ Do NOT call `manage_task(action: "initialize")` before "proceed" is received
|
|
303
|
+
❌ Do NOT start implementation while waiting for a response
|
|
304
|
+
❌ Do NOT interpret silence as "proceed"
|
|
305
|
+
|
|
306
|
+
→ "proceed" (or equivalent affirmative) → call `manage_task(action: "initialize")` then begin Phase 1
|
|
307
|
+
→ "adjust: [change]" → update plan, re-present, wait again — do NOT initialize
|
|
308
|
+
→ "cancel" → do nothing — do NOT initialize
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Phase 1 — Planning
|
|
313
|
+
(TRIGGER: developer says "proceed" in Phase 0.7)
|
|
314
|
+
|
|
315
|
+
### MANDATORY sequence — no skipping any step
|
|
316
|
+
|
|
317
|
+
```
|
|
318
|
+
STEP 1: call search_tasks(keywords: <keywords from task description>)
|
|
319
|
+
— ALWAYS. Even if you are "sure" there is no prior work. Always check.
|
|
320
|
+
|
|
321
|
+
STEP 2: if search_tasks returns ANY relevant result:
|
|
322
|
+
call get_task_history(work_item_id: <matching id>)
|
|
323
|
+
— read the prior approach, decisions, and patterns before planning
|
|
324
|
+
|
|
325
|
+
STEP 3: if implementing anything similar to a past feature:
|
|
326
|
+
call get_pattern_from_task(work_item_id: <matching id>)
|
|
327
|
+
— extract reusable patterns
|
|
328
|
+
|
|
329
|
+
STEP 4: call manage_task(action: "initialize",
|
|
330
|
+
work_item_id: ...,
|
|
331
|
+
title: ...,
|
|
332
|
+
description: ...,
|
|
333
|
+
acceptance_criteria: [...],
|
|
334
|
+
tags: [...])
|
|
335
|
+
|
|
336
|
+
STEP 5: call manage_task(action: "log_decision",
|
|
337
|
+
decision: "Rollback strategy: [SAFE/RISKY/DANGEROUS]",
|
|
338
|
+
rationale: "<one-line rationale>")
|
|
339
|
+
— log rollback tier immediately on initialize, every time
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Hard enforcement
|
|
343
|
+
|
|
344
|
+
❌ Do NOT call `manage_task(action: "initialize")` before `search_tasks` completes
|
|
345
|
+
❌ Do NOT skip `get_task_history` if a matching past task exists
|
|
346
|
+
❌ Do NOT skip the rollback decision log on initialize
|
|
347
|
+
❌ Do NOT re-solve a solved problem — check task history first, always
|
|
348
|
+
❌ Do NOT extract Acceptance Criteria from "Description", "Expected Result", or "Actual Result". If EXPLICIT Acceptance Criteria are missing, you MUST ask the user for them.
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## Phase 2 — Execution
|
|
353
|
+
(TRIGGER: as you complete ACs, modify files, make decisions, or before ending any session/response)
|
|
354
|
+
|
|
355
|
+
### MANDATORY — all four MUST be called, not suggested
|
|
356
|
+
|
|
357
|
+
```
|
|
358
|
+
After completing any AC:
|
|
359
|
+
→ call manage_task(action: "update_spec",
|
|
360
|
+
pending_acs: [...remaining],
|
|
361
|
+
completed_acs: [...done],
|
|
362
|
+
next_step: "<clear, actionable instruction for resuming>")
|
|
363
|
+
|
|
364
|
+
After touching any file:
|
|
365
|
+
→ call manage_task(action: "log_file_touched",
|
|
366
|
+
file_path: "<exact path>",
|
|
367
|
+
change_summary: "<one-line description>")
|
|
368
|
+
— call this for EVERY file modified, not just the "important" ones
|
|
369
|
+
|
|
370
|
+
After making any architectural decision:
|
|
371
|
+
→ call manage_task(action: "log_decision",
|
|
372
|
+
decision: "<what was decided>",
|
|
373
|
+
rationale: "<why>")
|
|
374
|
+
— call this for every non-obvious decision, not just big ones
|
|
375
|
+
|
|
376
|
+
After writing any test scenario:
|
|
377
|
+
→ call manage_task(action: "add_scenario",
|
|
378
|
+
scenario: "<description>",
|
|
379
|
+
scenario_type: "unit" | "integration" | "e2e" | "manual")
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### next_step is a contract — hard rules
|
|
383
|
+
|
|
384
|
+
`next_step` MUST be:
|
|
385
|
+
- A single, self-contained instruction your future self executes without re-reading the spec
|
|
386
|
+
- Specific: include file name, method name, or AC number
|
|
387
|
+
- Updated after EVERY response — a stale next_step is a violation
|
|
388
|
+
|
|
389
|
+
`next_step` MUST NOT be:
|
|
390
|
+
- Vague: `"Continue implementation"` ← **VIOLATION**
|
|
391
|
+
- Generic: `"Review the code"` ← **VIOLATION**
|
|
392
|
+
- Empty or missing ← **VIOLATION**
|
|
393
|
+
|
|
394
|
+
### Hard enforcement
|
|
395
|
+
|
|
396
|
+
❌ Do NOT end a response without calling `update_spec` if any AC was completed
|
|
397
|
+
❌ Do NOT modify a file without calling `log_file_touched`
|
|
398
|
+
❌ Do NOT make an architectural decision without calling `log_decision`
|
|
399
|
+
❌ Do NOT write a test without calling `add_scenario`
|
|
400
|
+
❌ Do NOT leave a vague or empty `next_step`
|
|
190
401
|
|
|
191
402
|
---
|
|
192
403
|
|
|
193
|
-
## Phase
|
|
404
|
+
## Phase 3 — Course Correction
|
|
405
|
+
(TRIGGER: developer corrects you, rejects an approach, or says "don't do that")
|
|
194
406
|
|
|
195
|
-
|
|
196
|
-
- If a relevant past task is found, call `get_task_history` to understand the prior approach before planning
|
|
197
|
-
- Call `manage_task` with `action: "initialize"`, passing `work_item_id`, `title`, `description`, `acceptance_criteria`, and `tags`
|
|
198
|
-
- This creates `.secufusion/tasks/WI-{id}/` with spec, progress, decisions, files-touched, and scenarios files
|
|
407
|
+
### MANDATORY sequence
|
|
199
408
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
409
|
+
```
|
|
410
|
+
STEP 1: call log_rejected_pattern(
|
|
411
|
+
pattern: "<exact bad pattern or approach>",
|
|
412
|
+
reason: "<why rejected and what the correct alternative is>",
|
|
413
|
+
category: "architecture"|"security"|"database"|"logging"|"api-design"|"testing"|"other",
|
|
414
|
+
file_context: "<file where observed, if applicable>")
|
|
415
|
+
|
|
416
|
+
STEP 2: acknowledge the correction explicitly in your response
|
|
417
|
+
STEP 3: do NOT repeat the rejected pattern — ever
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Hard enforcement
|
|
421
|
+
|
|
422
|
+
❌ Do NOT wait until end of session to log — log rejected patterns immediately
|
|
423
|
+
❌ Do NOT continue with the rejected approach while "noting" the correction
|
|
424
|
+
❌ Do NOT suggest the same pattern again in any future response or session
|
|
425
|
+
❌ Check `.rejected-patterns.json` implicitly before every architectural suggestion — matching a past rejection makes it forbidden
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## Phase 4 — PR Handoff
|
|
430
|
+
(TRIGGER: developer says "prepare PR", "run checks", or "ready to merge")
|
|
206
431
|
|
|
207
|
-
|
|
208
|
-
|
|
432
|
+
### MANDATORY sequence — do not raise a PR until all steps pass with zero errors
|
|
433
|
+
|
|
434
|
+
```
|
|
435
|
+
STEP 1: call manage_task(action: "complete", work_item_id: <id>)
|
|
436
|
+
— marks status complete, auto-generates pr-summary.md
|
|
437
|
+
|
|
438
|
+
STEP 2: call run_pre_pr_checks(work_item_id: <id>)
|
|
439
|
+
— runs: spec checkbox check, AST linting, tenant isolation scan,
|
|
440
|
+
hardcoded URL scan, Flyway migration coverage
|
|
441
|
+
|
|
442
|
+
STEP 3: if run_pre_pr_checks returns ANY error:
|
|
443
|
+
→ navigate to the failing microservice
|
|
444
|
+
→ fix the error NATIVELY in source code
|
|
445
|
+
→ call run_pre_pr_checks again
|
|
446
|
+
→ repeat until ZERO errors — no exceptions
|
|
447
|
+
|
|
448
|
+
STEP 4: raise PR only when run_pre_pr_checks reports zero errors
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### Hard enforcement
|
|
452
|
+
|
|
453
|
+
❌ Do NOT raise a PR while `pending_acs` is non-empty
|
|
454
|
+
❌ Do NOT suppress linter warnings to pass the gate — fix them natively
|
|
455
|
+
❌ Do NOT skip `run_pre_pr_checks` and assume the workspace is clean
|
|
456
|
+
❌ Do NOT raise a PR if tenant isolation violations are present — security breach
|
|
457
|
+
❌ Do NOT raise a PR if Flyway coverage is missing for a modified `@Entity`
|
|
458
|
+
|
|
459
|
+
## Phase 5 — Retrospective
|
|
460
|
+
(TRIGGER: after manage_task action=complete is called
|
|
461
|
+
AND after PR is raised or merged)
|
|
462
|
+
|
|
463
|
+
### The rule
|
|
464
|
+
|
|
465
|
+
A partial retrospective is auto-generated by
|
|
466
|
+
manage_task complete. Your job is to fill it in.
|
|
467
|
+
|
|
468
|
+
When the complete action shows the RETROSPECTIVE STARTED
|
|
469
|
+
message — respond to the questions.
|
|
470
|
+
Do not skip unless genuinely time-pressured.
|
|
471
|
+
Each answer makes every future plan more accurate.
|
|
472
|
+
|
|
473
|
+
---
|
|
474
|
+
|
|
475
|
+
### Answering retrospective questions
|
|
476
|
+
|
|
477
|
+
The complete action will show Q1-Q7.
|
|
478
|
+
You can answer them all in one message:
|
|
479
|
+
Or answer partially — any answers given are recorded,
|
|
480
|
+
unanswered ones stay null.
|
|
481
|
+
|
|
482
|
+
---
|
|
209
483
|
|
|
210
|
-
|
|
211
|
-
- Call `manage_task` with `action: "complete"` — marks status, auto-generates `pr-summary.md`
|
|
212
|
-
- Call `run_pre_pr_checks` with the Azure DevOps `workItemId`. The tool checks the structured branch state to ensure `pending_acs` is empty, then discovers modified microservices to run native linters, Flyway checks, and the Tenant-Isolation scanner.
|
|
213
|
-
- If an error is thrown, YOU MUST navigate to that microservice, FIX THE ERROR natively, and rerun until the workspace passes.
|
|
484
|
+
### After receiving retro answers
|
|
214
485
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
486
|
+
Parse each "retro {key} {value}" line.
|
|
487
|
+
Call record_retrospective with all parsed values
|
|
488
|
+
plus work_item_id from current task.
|
|
489
|
+
|
|
490
|
+
Confirm:
|
|
491
|
+
"✅ Retrospective complete for {work_item_id}.
|
|
492
|
+
Insights added to retrospective-insights.json.
|
|
493
|
+
{if classifier_feedback provided:}
|
|
494
|
+
🧠 Classifier feedback queued — will improve future
|
|
495
|
+
classify_task accuracy for similar tasks."
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
### What the data is used for
|
|
500
|
+
|
|
501
|
+
retrospective-insights.json accumulates across tasks.
|
|
502
|
+
|
|
503
|
+
When classify_task runs on a new task:
|
|
504
|
+
1. It reads retrospective-insights.json
|
|
505
|
+
2. Checks classifier_learning_queue for applied=false items
|
|
506
|
+
3. If frequency >= 2 for a signal:
|
|
507
|
+
→ Applies it as a temporary boost for this classification
|
|
508
|
+
→ Logs: "[LEARNED] applying signal '{term}' from
|
|
509
|
+
{n} past retrospectives"
|
|
510
|
+
4. After applying → marks applied=true in queue
|
|
511
|
+
|
|
512
|
+
This means: the more tasks completed, the smarter
|
|
513
|
+
the classifier gets — automatically, from your own
|
|
514
|
+
real task history on SecuFusion.
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
### When to call record_retrospective manually
|
|
519
|
+
|
|
520
|
+
- If you forgot to answer after complete action
|
|
521
|
+
- If you want to update a partial retrospective later
|
|
522
|
+
- If PR review surfaced new information
|
|
523
|
+
(breaking change found by reviewer,
|
|
524
|
+
performance issue flagged in review comment)
|
|
525
|
+
|
|
526
|
+
Just say: "Update retrospective for WI-{id}"
|
|
527
|
+
And provide whatever new information you have.
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
### Retrospective triggers from PR review
|
|
532
|
+
|
|
533
|
+
If during PR review a reviewer comments:
|
|
534
|
+
- "This query will be slow on large tables"
|
|
535
|
+
→ performance_issues_found: true
|
|
536
|
+
→ record_retrospective immediately with this update
|
|
537
|
+
|
|
538
|
+
- "This breaks the existing API contract"
|
|
539
|
+
→ breaking_changes_actual: increment by 1
|
|
540
|
+
→ record_retrospective immediately
|
|
541
|
+
|
|
542
|
+
- "Missing tenantId scope on line X"
|
|
543
|
+
→ pre_pr_attempts += 1 (conceptually — checks needed again)
|
|
544
|
+
→ record_retrospective with updated attempt count
|
|
545
|
+
|
|
546
|
+
These updates close the feedback loop completely —
|
|
547
|
+
not just what the MCP caught, but what human reviewers
|
|
548
|
+
catch too.
|
|
549
|
+
|
|
550
|
+
## Guardrails — enforce always, zero exceptions, zero tolerance
|
|
551
|
+
|
|
552
|
+
### Security Guardrails
|
|
553
|
+
|
|
554
|
+
- **TENANT ISOLATION IS NON-NEGOTIABLE:** Every `*Repository.java` query method (derived or `@Query`) MUST explicitly filter by `tenantId`. The PR gatekeeper blocks violations. Write it right the first time.
|
|
555
|
+
- **No hardcoded secrets, IPs, or environment URLs.** Use environment variables or config properties. Any hardcoded UAT/Prod IP or URL is a PR-blocking violation.
|
|
556
|
+
- **Auth scope changes MUST be flagged** in the plan and require explicit developer confirmation before implementation.
|
|
557
|
+
- **Zero-trust default:** Never assume a request is authorized. Always validate token claims before acting on them.
|
|
558
|
+
- **Linter errors are blocking.** AST-level tools (ESLint, Checkstyle/Maven) are the source of truth for hygiene. Fix them natively — suppressing warnings is forbidden.
|
|
220
559
|
|
|
221
560
|
### Performance Guardrails
|
|
222
561
|
(enforce whenever writing queries, Kafka consumers, or cross-service calls)
|
|
223
562
|
|
|
224
|
-
- **Read-only transactions:** All `GET` service methods that only read data MUST use `@Transactional(readOnly = true)`.
|
|
225
|
-
- **No repository call in a loop:**
|
|
226
|
-
- **Index
|
|
227
|
-
- **Kafka consumer
|
|
228
|
-
- **Cross-service timeout and fallback:** Every `RestTemplate` / `WebClient` call
|
|
563
|
+
- **Read-only transactions:** All `GET` service methods that only read data MUST use `@Transactional(readOnly = true)`. No exceptions.
|
|
564
|
+
- **No repository call in a loop:** NEVER call `.findById`, `.save`, `.findAll`, or any repository method inside a `for` / `forEach` loop. Batch with `findAllById` or `saveAll`. Violation = PR blocked.
|
|
565
|
+
- **Index MUST be in migration:** If a new query filters or sorts by a column, the Flyway migration MUST include the corresponding `CREATE INDEX`. An unindexed query that passes in dev WILL fail in production.
|
|
566
|
+
- **Kafka consumer MUST NOT block thread:** Kafka listener methods MUST NOT perform synchronous DB writes, REST calls, or file I/O inline. Offload to `@Async` or a dedicated thread pool. Always.
|
|
567
|
+
- **Cross-service call MUST have timeout and fallback:** Every `RestTemplate` / `WebClient` call MUST have explicit connection timeout, read timeout, and fallback response. No fire-and-forget calls to external services.
|
|
229
568
|
|
|
230
569
|
### Rollback Guardrails
|
|
231
570
|
(enforce whenever writing Flyway migrations, touching API contracts, or changing Kafka schemas)
|
|
232
571
|
|
|
233
|
-
- **Flyway migration risk
|
|
572
|
+
- **Flyway migration risk — three tiers, classify before writing any migration:**
|
|
234
573
|
- `SAFE` — additive only (new table, new nullable column, new index): safe to roll back by reverting code
|
|
235
|
-
- `RISKY` — NOT NULL column without a DEFAULT, or bulk data migration: rollback requires a compensating migration
|
|
236
|
-
- `DANGEROUS` — DROP TABLE, DROP COLUMN, or RENAME COLUMN:
|
|
237
|
-
- **
|
|
238
|
-
- **
|
|
239
|
-
- **
|
|
240
|
-
- **Log the rollback decision:** On every `manage_task initialize`, log a starter entry in `decisions.json`: `"Rollback strategy: [SAFE/RISKY/DANGEROUS] — [one-line rationale]"`. This ensures the PR summary always includes rollback context.
|
|
574
|
+
- `RISKY` — NOT NULL column without a DEFAULT, or bulk data migration: rollback requires a compensating migration. MUST flag in plan.
|
|
575
|
+
- `DANGEROUS` — DROP TABLE, DROP COLUMN, or RENAME COLUMN: **HARD STOP.** Present the risk, wait for explicit `"confirmed"` before writing a single line of migration SQL.
|
|
576
|
+
- **API hard cutover requires confirmation:** Before removing a `/v1/` endpoint or deleting a response field, STOP. Prefer deprecation + `/v2/` first. Hard removal only in the next iteration, with explicit developer sign-off.
|
|
577
|
+
- **Kafka schema change = coordinated deployment:** Any change to an existing Kafka message schema MUST include a deployment coordination note in the plan. Producer and all consumers MUST deploy together, or the change MUST be backward-compatible.
|
|
578
|
+
- **Log rollback decision on every initialize:** Every `manage_task(action: "initialize")` MUST be immediately followed by `manage_task(action: "log_decision")` with the rollback tier and rationale. Not optional.
|
|
241
579
|
|
|
242
580
|
### Breaking Change Detection
|
|
243
|
-
(enforce whenever modifying existing endpoints, entities, or Kafka topics —
|
|
581
|
+
(enforce whenever modifying existing endpoints, entities, or Kafka topics — creation is exempt)
|
|
244
582
|
|
|
245
583
|
**Endpoint modification rules:**
|
|
246
|
-
- Before changing
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
-
|
|
252
|
-
- Removing a field from response: always a breaking change → mandatory developer confirmation before proceeding → deprecate first, remove in next iteration
|
|
584
|
+
- Before changing ANY existing endpoint: call `manage_project_spec(action: "read")` → identify all services and the Chrome extension that call this endpoint
|
|
585
|
+
- NEVER change response shape silently — any shape change is a breaking change
|
|
586
|
+
- Always propose `/v2/` versioned endpoint first — never modify `/v1/` in place
|
|
587
|
+
- Hard cutover only with explicit developer confirmation — not implied, not "probably fine"
|
|
588
|
+
- Adding a new required field to response: MUST propose as optional first — consumers may break on strict deserialization
|
|
589
|
+
- Removing a field from response: always a breaking change — MUST get developer confirmation — deprecate first, remove in next iteration
|
|
253
590
|
|
|
254
591
|
**Entity/table modification rules:**
|
|
255
|
-
- Before adding a `NOT NULL` column
|
|
256
|
-
- Before renaming a column: check
|
|
257
|
-
- Before dropping a column: always `DANGEROUS` —
|
|
592
|
+
- Before adding a `NOT NULL` column: migration MUST include a `DEFAULT` value or explicit backfill. Without this, migration WILL fail on a non-empty table. Flag as `RISKY`.
|
|
593
|
+
- Before renaming a column: check ALL `@Query` annotations across ALL repos for references. If any found, rename in two phases (separate PRs): Phase 1 — add new column, keep old; Phase 2 — migrate data, drop old.
|
|
594
|
+
- Before dropping a column: always `DANGEROUS` — HARD STOP. Confirm with developer. Check all repos for references first. Never drop without explicit sign-off.
|
|
258
595
|
|
|
259
596
|
**Kafka topic modification rules:**
|
|
260
|
-
- Before changing a message schema: list all consumer services from project-spec.json → confirm coordinated deployment plan
|
|
597
|
+
- Before changing a message schema: MUST list all consumer services from project-spec.json → confirm coordinated deployment plan → flag in rollback plan: "Rollback requires coordinated revert"
|
|
261
598
|
|
|
262
599
|
**The silent break rule:**
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
600
|
+
A change that breaks something the developer did not know about is a planning failure.
|
|
601
|
+
Over-flagging a potential break is acceptable. Under-flagging and causing a production incident is not.
|
|
602
|
+
When in doubt: flag it, present it, ask. Every time.
|
|
603
|
+
|
|
604
|
+
### Retrospective (enforce after every task complete)
|
|
605
|
+
|
|
606
|
+
- manage_task action=complete auto-starts retrospective
|
|
607
|
+
- Respond to retro questions after every completion
|
|
608
|
+
- "retro skip" is allowed but discouraged —
|
|
609
|
+
every skipped retrospective = missed learning
|
|
610
|
+
- classifier_learning_queue signals with frequency >= 2
|
|
611
|
+
are automatically applied to classify_task
|
|
612
|
+
- Never manually edit retrospective-insights.json —
|
|
613
|
+
always use record_retrospective tool
|
|
614
|
+
- Retrospective updates from PR review are MANDATORY
|
|
615
|
+
if reviewer catches something the MCP missed
|
|
616
|
+
|
|
617
|
+
## Commenting Rules — enforce in every file you touch
|
|
618
|
+
|
|
619
|
+
- Comments explain **WHY** — never WHAT. The code already says what.
|
|
268
620
|
- NEVER write obvious comments:
|
|
269
|
-
- `// Get the user` ←
|
|
270
|
-
- `// Loop through list` ←
|
|
271
|
-
- `// Return result` ←
|
|
272
|
-
-
|
|
273
|
-
|
|
621
|
+
- `// Get the user` ← **FORBIDDEN**
|
|
622
|
+
- `// Loop through list` ← **FORBIDDEN**
|
|
623
|
+
- `// Return result` ← **FORBIDDEN**
|
|
624
|
+
- `// Initialize the service` ← **FORBIDDEN**
|
|
625
|
+
- Write a comment ONLY when the reason behind the code is non-obvious:
|
|
626
|
+
- Why a workaround exists (and reference the ticket)
|
|
274
627
|
- Why a specific algorithm was chosen over a simpler one
|
|
275
|
-
- Why a value is hardcoded in the rare case it must be
|
|
628
|
+
- Why a value is hardcoded in the rare case it absolutely must be
|
|
629
|
+
- If you cannot explain the WHY in one sentence, the comment does not belong there.
|
|
630
|
+
|
|
631
|
+
---
|
|
276
632
|
|
|
277
633
|
## Cross-Task Intelligence
|
|
278
|
-
(TRIGGER: starting any new task)
|
|
634
|
+
(TRIGGER: starting any new task — MANDATORY before initialize)
|
|
635
|
+
|
|
636
|
+
### MANDATORY sequence
|
|
637
|
+
|
|
638
|
+
```
|
|
639
|
+
STEP 1: call search_tasks(keywords: <keywords from new task description>)
|
|
640
|
+
— ALWAYS. "I'm sure there's no prior work" is not a reason to skip.
|
|
641
|
+
|
|
642
|
+
STEP 2: if ANY relevant past task found:
|
|
643
|
+
call get_task_history(work_item_id: <matching id>)
|
|
644
|
+
— understand how it was done before
|
|
279
645
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
646
|
+
STEP 3: if implementing anything similar to a past feature:
|
|
647
|
+
call get_pattern_from_task(work_item_id: <matching id>)
|
|
648
|
+
— extract reusable architectural patterns, file paths, and test scenarios
|
|
649
|
+
|
|
650
|
+
STEP 4: proceed to manage_task(action: "initialize") only after steps 1-3 complete
|
|
651
|
+
```
|
|
284
652
|
|
|
653
|
+
### Retrospective-Informed Planning
|
|
654
|
+
|
|
655
|
+
Before Phase 0.7 plan presentation:
|
|
656
|
+
1. Read retrospective-insights.json
|
|
657
|
+
2. If avg_step_accuracy_pct < 80%:
|
|
658
|
+
→ Add note in plan:
|
|
659
|
+
"⚠️ Historical note: past plans averaged
|
|
660
|
+
{pct}% step accuracy — this plan may need
|
|
661
|
+
adjustment during execution"
|
|
662
|
+
3. If most_common_failed_check is not empty:
|
|
663
|
+
→ Add to plan's pre-PR section:
|
|
664
|
+
"⚠️ Historically failing check: {check}
|
|
665
|
+
— pay extra attention"
|
|
666
|
+
4. If classifier_learning_queue has
|
|
667
|
+
unapplied signals with frequency >= 2:
|
|
668
|
+
→ Apply as temporary boost in classify_task
|
|
669
|
+
→ Log applied signals in classification output
|
|
670
|
+
|
|
671
|
+
### Hard enforcement
|
|
672
|
+
|
|
673
|
+
❌ Do NOT call `manage_task(action: "initialize")` before `search_tasks` completes
|
|
674
|
+
❌ Do NOT skip `get_task_history` if a match exists — "I remember it" is not a substitute
|
|
675
|
+
❌ Do NOT re-solve a solved problem — task history exists precisely to prevent this
|
|
676
|
+
❌ Re-using a rejected pattern found in task history is a violation even if you disagree with the rejection
|