@noego/app 0.0.25 → 0.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/.bashlite/issue.yml +799 -0
- package/.bashlite/settings.yml +6 -0
- package/package.json +1 -1
- package/src/commands/dev.js +4 -4
|
@@ -0,0 +1,799 @@
|
|
|
1
|
+
name: Handle Ticket
|
|
2
|
+
version: 1
|
|
3
|
+
defaults:
|
|
4
|
+
engine: anthropic
|
|
5
|
+
model: claude-sonnet-4-5
|
|
6
|
+
loopLimits:
|
|
7
|
+
perPhase: 3
|
|
8
|
+
total: 10
|
|
9
|
+
git:
|
|
10
|
+
branchPattern: "bashly/issue-{{number}}"
|
|
11
|
+
entry: learn
|
|
12
|
+
|
|
13
|
+
phases:
|
|
14
|
+
# Phase 1: Learn the repository
|
|
15
|
+
- name: learn
|
|
16
|
+
systemPrompt: |
|
|
17
|
+
You will see the GitHub issue but do not focus on it yet. Focus only on learning the repository.
|
|
18
|
+
Read markdown files (NOEGO_FRAMEWORK_GUIDE.md, instructions/forge-testing.md),
|
|
19
|
+
examine the project structure, understand testing patterns, coding style,
|
|
20
|
+
and architectural decisions. Summarize the key standards that must be
|
|
21
|
+
followed when making changes.
|
|
22
|
+
readOnly: true
|
|
23
|
+
preActions:
|
|
24
|
+
- git.clone
|
|
25
|
+
next: classify_issue
|
|
26
|
+
|
|
27
|
+
# Phase 2: Classify the type of issue
|
|
28
|
+
- name: classify_issue
|
|
29
|
+
type: decision
|
|
30
|
+
prompt: |
|
|
31
|
+
Classify this GitHub issue by its primary nature. Score 0-1:
|
|
32
|
+
|
|
33
|
+
**Bug investigation (0.0-0.2):**
|
|
34
|
+
- Something is broken and needs debugging
|
|
35
|
+
- Unexpected behavior reported
|
|
36
|
+
- Error messages or stack traces mentioned
|
|
37
|
+
- Regression from a previous change
|
|
38
|
+
|
|
39
|
+
**Database/migration (0.2-0.4):**
|
|
40
|
+
- Requires new tables, columns, or schema changes
|
|
41
|
+
- Mentions database, migration, schema, or SQL
|
|
42
|
+
- Needs proper CLI migrations
|
|
43
|
+
- Data model changes
|
|
44
|
+
|
|
45
|
+
**Code change (0.4-1.0):**
|
|
46
|
+
- New feature, enhancement, or refactor
|
|
47
|
+
- UI changes, API changes, styling
|
|
48
|
+
- Documentation-only changes
|
|
49
|
+
- Test additions without code changes
|
|
50
|
+
- Any implementation work that doesn't involve debugging or migrations
|
|
51
|
+
|
|
52
|
+
Consider:
|
|
53
|
+
- Is the issue about something broken vs something new?
|
|
54
|
+
- Does it mention database tables, columns, or schema?
|
|
55
|
+
- Is the primary work investigation or implementation?
|
|
56
|
+
options: ["bug_investigate", "migration_plan", "code_change_triage"]
|
|
57
|
+
thresholds: [0.2, 0.5]
|
|
58
|
+
aiConfig:
|
|
59
|
+
model: claude-sonnet-4-5
|
|
60
|
+
|
|
61
|
+
# ============================================================
|
|
62
|
+
# CODE CHANGE TRIAGE (bridge to complexity decision)
|
|
63
|
+
# ============================================================
|
|
64
|
+
|
|
65
|
+
- name: code_change_triage
|
|
66
|
+
systemPrompt: |
|
|
67
|
+
This issue has been classified as a code change (not a bug or migration).
|
|
68
|
+
Briefly summarize the scope of work needed so the next phase can assess complexity.
|
|
69
|
+
readOnly: true
|
|
70
|
+
next: assess_complexity
|
|
71
|
+
aiConfig:
|
|
72
|
+
model: claude-haiku-4-5
|
|
73
|
+
|
|
74
|
+
# ============================================================
|
|
75
|
+
# BUG INVESTIGATION FLOW
|
|
76
|
+
# ============================================================
|
|
77
|
+
|
|
78
|
+
- name: bug_investigate
|
|
79
|
+
systemPrompt: |
|
|
80
|
+
Read the GitHub issue carefully. This is a bug report. Your goal is to:
|
|
81
|
+
1. Understand the reported symptoms and expected behavior
|
|
82
|
+
2. Trace through the relevant code paths to identify the root cause
|
|
83
|
+
3. Reproduce the issue by reading tests or running the app if possible
|
|
84
|
+
4. Document the root cause clearly
|
|
85
|
+
|
|
86
|
+
Do not fix the bug yet. Focus on understanding and documenting.
|
|
87
|
+
readOnly: true
|
|
88
|
+
input:
|
|
89
|
+
type: object
|
|
90
|
+
properties:
|
|
91
|
+
rootCause:
|
|
92
|
+
type: string
|
|
93
|
+
description: Clear explanation of the root cause
|
|
94
|
+
affectedFiles:
|
|
95
|
+
type: array
|
|
96
|
+
items:
|
|
97
|
+
type: string
|
|
98
|
+
description: Files involved in the bug
|
|
99
|
+
reproductionSteps:
|
|
100
|
+
type: array
|
|
101
|
+
items:
|
|
102
|
+
type: string
|
|
103
|
+
description: Steps to reproduce the issue
|
|
104
|
+
required:
|
|
105
|
+
- rootCause
|
|
106
|
+
- affectedFiles
|
|
107
|
+
next: bug_plan
|
|
108
|
+
aiConfig:
|
|
109
|
+
model: claude-opus-4-5
|
|
110
|
+
|
|
111
|
+
- name: bug_plan
|
|
112
|
+
systemPrompt: |
|
|
113
|
+
Based on the root cause analysis, create a plan to fix the bug.
|
|
114
|
+
Identify the minimal set of changes needed. Plan regression tests
|
|
115
|
+
to prevent this bug from recurring. Do not write code yet.
|
|
116
|
+
|
|
117
|
+
Categorize each file as: create (new), modify (existing), or delete (remove).
|
|
118
|
+
List files to read for context with a reason for each.
|
|
119
|
+
readOnly: true
|
|
120
|
+
input:
|
|
121
|
+
type: object
|
|
122
|
+
properties:
|
|
123
|
+
filesToCreate:
|
|
124
|
+
type: array
|
|
125
|
+
items:
|
|
126
|
+
type: object
|
|
127
|
+
properties:
|
|
128
|
+
path:
|
|
129
|
+
type: string
|
|
130
|
+
purpose:
|
|
131
|
+
type: string
|
|
132
|
+
required:
|
|
133
|
+
- path
|
|
134
|
+
- purpose
|
|
135
|
+
description: New files to create
|
|
136
|
+
filesToModify:
|
|
137
|
+
type: array
|
|
138
|
+
items:
|
|
139
|
+
type: object
|
|
140
|
+
properties:
|
|
141
|
+
path:
|
|
142
|
+
type: string
|
|
143
|
+
changes:
|
|
144
|
+
type: string
|
|
145
|
+
required:
|
|
146
|
+
- path
|
|
147
|
+
- changes
|
|
148
|
+
description: Existing files to modify and what changes are needed
|
|
149
|
+
filesToDelete:
|
|
150
|
+
type: array
|
|
151
|
+
items:
|
|
152
|
+
type: object
|
|
153
|
+
properties:
|
|
154
|
+
path:
|
|
155
|
+
type: string
|
|
156
|
+
reason:
|
|
157
|
+
type: string
|
|
158
|
+
required:
|
|
159
|
+
- path
|
|
160
|
+
- reason
|
|
161
|
+
description: Files to remove
|
|
162
|
+
filesToRead:
|
|
163
|
+
type: array
|
|
164
|
+
items:
|
|
165
|
+
type: object
|
|
166
|
+
properties:
|
|
167
|
+
path:
|
|
168
|
+
type: string
|
|
169
|
+
reason:
|
|
170
|
+
type: string
|
|
171
|
+
required:
|
|
172
|
+
- path
|
|
173
|
+
- reason
|
|
174
|
+
description: Files to read for additional context before implementing
|
|
175
|
+
approach:
|
|
176
|
+
type: string
|
|
177
|
+
testCases:
|
|
178
|
+
type: array
|
|
179
|
+
items:
|
|
180
|
+
type: object
|
|
181
|
+
properties:
|
|
182
|
+
name:
|
|
183
|
+
type: string
|
|
184
|
+
type:
|
|
185
|
+
type: string
|
|
186
|
+
required:
|
|
187
|
+
- name
|
|
188
|
+
- type
|
|
189
|
+
required:
|
|
190
|
+
- filesToModify
|
|
191
|
+
- approach
|
|
192
|
+
- testCases
|
|
193
|
+
next: bug_fix
|
|
194
|
+
aiConfig:
|
|
195
|
+
model: claude-opus-4-5
|
|
196
|
+
|
|
197
|
+
- name: bug_fix
|
|
198
|
+
systemPrompt: |
|
|
199
|
+
Execute the fix plan. First read any files listed in filesToRead to gather context.
|
|
200
|
+
Then implement the minimal changes to resolve the bug and write regression tests.
|
|
201
|
+
Follow all repository standards.
|
|
202
|
+
next: bug_test
|
|
203
|
+
aiConfig:
|
|
204
|
+
model: claude-opus-4-5
|
|
205
|
+
|
|
206
|
+
- name: bug_test
|
|
207
|
+
systemPrompt: |
|
|
208
|
+
Run the tests to verify the bug fix. Ensure the regression tests pass
|
|
209
|
+
and no existing tests are broken. Report the results.
|
|
210
|
+
readOnly: true
|
|
211
|
+
next: bug_review
|
|
212
|
+
aiConfig:
|
|
213
|
+
model: claude-opus-4-5
|
|
214
|
+
|
|
215
|
+
- name: bug_review
|
|
216
|
+
type: loop
|
|
217
|
+
prompt: Are all tests passing and is the bug fully resolved with regression tests?
|
|
218
|
+
threshold: 0.9
|
|
219
|
+
loopTarget: bug_fix
|
|
220
|
+
next: check_svelte
|
|
221
|
+
aiConfig:
|
|
222
|
+
model: claude-opus-4-5
|
|
223
|
+
|
|
224
|
+
# ============================================================
|
|
225
|
+
# DATABASE / MIGRATION FLOW
|
|
226
|
+
# ============================================================
|
|
227
|
+
|
|
228
|
+
- name: migration_plan
|
|
229
|
+
systemPrompt: |
|
|
230
|
+
Read the GitHub issue carefully. This involves database schema changes.
|
|
231
|
+
Plan the migration(s) needed:
|
|
232
|
+
1. What tables/columns need to be created, altered, or dropped
|
|
233
|
+
2. What the up and down migrations should contain
|
|
234
|
+
3. How this affects existing repository classes, services, and controllers
|
|
235
|
+
4. What seed data changes are needed (if any)
|
|
236
|
+
|
|
237
|
+
Use the proper CLI to create migrations (never create migration files manually).
|
|
238
|
+
Do not write code yet.
|
|
239
|
+
|
|
240
|
+
Categorize each file as: create (new), modify (existing), or delete (remove).
|
|
241
|
+
List files to read for context with a reason for each.
|
|
242
|
+
readOnly: true
|
|
243
|
+
input:
|
|
244
|
+
type: object
|
|
245
|
+
properties:
|
|
246
|
+
migrations:
|
|
247
|
+
type: array
|
|
248
|
+
items:
|
|
249
|
+
type: object
|
|
250
|
+
properties:
|
|
251
|
+
name:
|
|
252
|
+
type: string
|
|
253
|
+
description:
|
|
254
|
+
type: string
|
|
255
|
+
required:
|
|
256
|
+
- name
|
|
257
|
+
- description
|
|
258
|
+
description: Migrations to create
|
|
259
|
+
filesToCreate:
|
|
260
|
+
type: array
|
|
261
|
+
items:
|
|
262
|
+
type: object
|
|
263
|
+
properties:
|
|
264
|
+
path:
|
|
265
|
+
type: string
|
|
266
|
+
purpose:
|
|
267
|
+
type: string
|
|
268
|
+
required:
|
|
269
|
+
- path
|
|
270
|
+
- purpose
|
|
271
|
+
description: New files to create (repos, services, SQL files, tests)
|
|
272
|
+
filesToModify:
|
|
273
|
+
type: array
|
|
274
|
+
items:
|
|
275
|
+
type: object
|
|
276
|
+
properties:
|
|
277
|
+
path:
|
|
278
|
+
type: string
|
|
279
|
+
changes:
|
|
280
|
+
type: string
|
|
281
|
+
required:
|
|
282
|
+
- path
|
|
283
|
+
- changes
|
|
284
|
+
description: Existing files to modify and what changes are needed
|
|
285
|
+
filesToDelete:
|
|
286
|
+
type: array
|
|
287
|
+
items:
|
|
288
|
+
type: object
|
|
289
|
+
properties:
|
|
290
|
+
path:
|
|
291
|
+
type: string
|
|
292
|
+
reason:
|
|
293
|
+
type: string
|
|
294
|
+
required:
|
|
295
|
+
- path
|
|
296
|
+
- reason
|
|
297
|
+
description: Files to remove
|
|
298
|
+
filesToRead:
|
|
299
|
+
type: array
|
|
300
|
+
items:
|
|
301
|
+
type: object
|
|
302
|
+
properties:
|
|
303
|
+
path:
|
|
304
|
+
type: string
|
|
305
|
+
reason:
|
|
306
|
+
type: string
|
|
307
|
+
required:
|
|
308
|
+
- path
|
|
309
|
+
- reason
|
|
310
|
+
description: Files to read for additional context before implementing
|
|
311
|
+
approach:
|
|
312
|
+
type: string
|
|
313
|
+
testCases:
|
|
314
|
+
type: array
|
|
315
|
+
items:
|
|
316
|
+
type: object
|
|
317
|
+
properties:
|
|
318
|
+
name:
|
|
319
|
+
type: string
|
|
320
|
+
type:
|
|
321
|
+
type: string
|
|
322
|
+
required:
|
|
323
|
+
- name
|
|
324
|
+
- type
|
|
325
|
+
required:
|
|
326
|
+
- migrations
|
|
327
|
+
- approach
|
|
328
|
+
next: migration_implement
|
|
329
|
+
aiConfig:
|
|
330
|
+
model: claude-opus-4-5
|
|
331
|
+
|
|
332
|
+
- name: migration_implement
|
|
333
|
+
systemPrompt: |
|
|
334
|
+
Execute the migration plan. First read any files listed in filesToRead to gather context.
|
|
335
|
+
Then:
|
|
336
|
+
1. Create migrations using the proper CLI tool
|
|
337
|
+
2. Update repository classes with new queries
|
|
338
|
+
3. Update services and controllers as needed
|
|
339
|
+
4. Write tests for the new data layer
|
|
340
|
+
Follow all repository standards.
|
|
341
|
+
next: migration_test
|
|
342
|
+
aiConfig:
|
|
343
|
+
model: claude-opus-4-5
|
|
344
|
+
|
|
345
|
+
- name: migration_test
|
|
346
|
+
systemPrompt: |
|
|
347
|
+
Run the tests to verify the migration and related changes.
|
|
348
|
+
Ensure migrations run cleanly up and down. Check that all new
|
|
349
|
+
and existing tests pass. Report the results.
|
|
350
|
+
readOnly: true
|
|
351
|
+
next: migration_review
|
|
352
|
+
aiConfig:
|
|
353
|
+
model: claude-opus-4-5
|
|
354
|
+
|
|
355
|
+
- name: migration_review
|
|
356
|
+
type: loop
|
|
357
|
+
prompt: Are all tests passing, migrations running cleanly, and does the implementation fully address the issue?
|
|
358
|
+
threshold: 0.85
|
|
359
|
+
loopTarget: migration_implement
|
|
360
|
+
next: check_svelte
|
|
361
|
+
aiConfig:
|
|
362
|
+
model: claude-opus-4-5
|
|
363
|
+
|
|
364
|
+
# ============================================================
|
|
365
|
+
# CODE CHANGE FLOW — complexity routing
|
|
366
|
+
# ============================================================
|
|
367
|
+
|
|
368
|
+
- name: assess_complexity
|
|
369
|
+
type: decision
|
|
370
|
+
prompt: |
|
|
371
|
+
Analyze the complexity of this code change and score it 0-1:
|
|
372
|
+
|
|
373
|
+
**Simple (0.0-0.3):**
|
|
374
|
+
- Documentation updates, README changes
|
|
375
|
+
- Simple styling tweaks (colors, margins, font sizes)
|
|
376
|
+
- Typo fixes, renaming variables
|
|
377
|
+
- Adding comments or simple logging
|
|
378
|
+
- Straightforward single-file changes with no logic
|
|
379
|
+
|
|
380
|
+
**Medium (0.4-0.6):**
|
|
381
|
+
- Adding new components or routes with basic logic
|
|
382
|
+
- Simple form handling or validation
|
|
383
|
+
- Basic API endpoint changes (1-2 files)
|
|
384
|
+
- Moderate styling with some conditional logic
|
|
385
|
+
- Integration of existing patterns (2-3 files)
|
|
386
|
+
|
|
387
|
+
**Complex (0.7-1.0):**
|
|
388
|
+
- Touches 4+ files across multiple layers
|
|
389
|
+
- State management, complex business rules
|
|
390
|
+
- Async operations, race conditions
|
|
391
|
+
- Multi-layer changes (controller + service + repository + SQL)
|
|
392
|
+
- Multi-component coordination across server/client
|
|
393
|
+
- Performance optimization
|
|
394
|
+
- Integration of multiple systems
|
|
395
|
+
- New full-stack features (route + controller + service + repo + tests)
|
|
396
|
+
- Changes that ripple across many dependents
|
|
397
|
+
|
|
398
|
+
Consider:
|
|
399
|
+
- How many files will need to change? (4+ files = likely complex)
|
|
400
|
+
- Does it span multiple layers (API, service, repository, SQL, UI)?
|
|
401
|
+
- Does it require understanding the NoEgo framework deeply?
|
|
402
|
+
- Will it need multiple types of tests?
|
|
403
|
+
- Could a change in one file break behavior in several others?
|
|
404
|
+
options: ["easy_plan", "medium_plan", "hard_plan"]
|
|
405
|
+
thresholds: [0.4, 0.7]
|
|
406
|
+
aiConfig:
|
|
407
|
+
model: claude-sonnet-4-5
|
|
408
|
+
|
|
409
|
+
# === Easy path: All Haiku ===
|
|
410
|
+
- name: easy_plan
|
|
411
|
+
systemPrompt: |
|
|
412
|
+
Read the GitHub issue carefully. Based on the issue and repository standards,
|
|
413
|
+
create a brief implementation plan. Do not write code yet.
|
|
414
|
+
|
|
415
|
+
Categorize each file as: create (new), modify (existing), or delete (remove).
|
|
416
|
+
List files to read for context with a reason for each.
|
|
417
|
+
readOnly: true
|
|
418
|
+
input:
|
|
419
|
+
type: object
|
|
420
|
+
properties:
|
|
421
|
+
filesToCreate:
|
|
422
|
+
type: array
|
|
423
|
+
items:
|
|
424
|
+
type: object
|
|
425
|
+
properties:
|
|
426
|
+
path:
|
|
427
|
+
type: string
|
|
428
|
+
purpose:
|
|
429
|
+
type: string
|
|
430
|
+
required:
|
|
431
|
+
- path
|
|
432
|
+
- purpose
|
|
433
|
+
filesToModify:
|
|
434
|
+
type: array
|
|
435
|
+
items:
|
|
436
|
+
type: object
|
|
437
|
+
properties:
|
|
438
|
+
path:
|
|
439
|
+
type: string
|
|
440
|
+
changes:
|
|
441
|
+
type: string
|
|
442
|
+
required:
|
|
443
|
+
- path
|
|
444
|
+
- changes
|
|
445
|
+
filesToDelete:
|
|
446
|
+
type: array
|
|
447
|
+
items:
|
|
448
|
+
type: object
|
|
449
|
+
properties:
|
|
450
|
+
path:
|
|
451
|
+
type: string
|
|
452
|
+
reason:
|
|
453
|
+
type: string
|
|
454
|
+
required:
|
|
455
|
+
- path
|
|
456
|
+
- reason
|
|
457
|
+
filesToRead:
|
|
458
|
+
type: array
|
|
459
|
+
items:
|
|
460
|
+
type: object
|
|
461
|
+
properties:
|
|
462
|
+
path:
|
|
463
|
+
type: string
|
|
464
|
+
reason:
|
|
465
|
+
type: string
|
|
466
|
+
required:
|
|
467
|
+
- path
|
|
468
|
+
- reason
|
|
469
|
+
approach:
|
|
470
|
+
type: string
|
|
471
|
+
required:
|
|
472
|
+
- approach
|
|
473
|
+
next: easy_implement
|
|
474
|
+
aiConfig:
|
|
475
|
+
model: claude-haiku-4-5
|
|
476
|
+
|
|
477
|
+
- name: easy_implement
|
|
478
|
+
systemPrompt: |
|
|
479
|
+
Execute the plan. First read any files listed in filesToRead to gather context.
|
|
480
|
+
Then implement the changes as designed.
|
|
481
|
+
Follow all repository standards learned in the first phase.
|
|
482
|
+
next: check_svelte
|
|
483
|
+
aiConfig:
|
|
484
|
+
model: claude-haiku-4-5
|
|
485
|
+
|
|
486
|
+
# === Medium path: Haiku plan, Sonnet implement ===
|
|
487
|
+
- name: medium_plan
|
|
488
|
+
systemPrompt: |
|
|
489
|
+
Read the GitHub issue carefully. Based on the issue and repository standards,
|
|
490
|
+
create a detailed implementation plan. Plan what tests are needed.
|
|
491
|
+
Do not write code yet.
|
|
492
|
+
|
|
493
|
+
Categorize each file as: create (new), modify (existing), or delete (remove).
|
|
494
|
+
List files to read for context with a reason for each.
|
|
495
|
+
readOnly: true
|
|
496
|
+
input:
|
|
497
|
+
type: object
|
|
498
|
+
properties:
|
|
499
|
+
filesToCreate:
|
|
500
|
+
type: array
|
|
501
|
+
items:
|
|
502
|
+
type: object
|
|
503
|
+
properties:
|
|
504
|
+
path:
|
|
505
|
+
type: string
|
|
506
|
+
purpose:
|
|
507
|
+
type: string
|
|
508
|
+
required:
|
|
509
|
+
- path
|
|
510
|
+
- purpose
|
|
511
|
+
filesToModify:
|
|
512
|
+
type: array
|
|
513
|
+
items:
|
|
514
|
+
type: object
|
|
515
|
+
properties:
|
|
516
|
+
path:
|
|
517
|
+
type: string
|
|
518
|
+
changes:
|
|
519
|
+
type: string
|
|
520
|
+
required:
|
|
521
|
+
- path
|
|
522
|
+
- changes
|
|
523
|
+
filesToDelete:
|
|
524
|
+
type: array
|
|
525
|
+
items:
|
|
526
|
+
type: object
|
|
527
|
+
properties:
|
|
528
|
+
path:
|
|
529
|
+
type: string
|
|
530
|
+
reason:
|
|
531
|
+
type: string
|
|
532
|
+
required:
|
|
533
|
+
- path
|
|
534
|
+
- reason
|
|
535
|
+
filesToRead:
|
|
536
|
+
type: array
|
|
537
|
+
items:
|
|
538
|
+
type: object
|
|
539
|
+
properties:
|
|
540
|
+
path:
|
|
541
|
+
type: string
|
|
542
|
+
reason:
|
|
543
|
+
type: string
|
|
544
|
+
required:
|
|
545
|
+
- path
|
|
546
|
+
- reason
|
|
547
|
+
approach:
|
|
548
|
+
type: string
|
|
549
|
+
testCases:
|
|
550
|
+
type: array
|
|
551
|
+
items:
|
|
552
|
+
type: object
|
|
553
|
+
properties:
|
|
554
|
+
name:
|
|
555
|
+
type: string
|
|
556
|
+
type:
|
|
557
|
+
type: string
|
|
558
|
+
required:
|
|
559
|
+
- name
|
|
560
|
+
- type
|
|
561
|
+
required:
|
|
562
|
+
- approach
|
|
563
|
+
next: medium_implement
|
|
564
|
+
aiConfig:
|
|
565
|
+
model: claude-haiku-4-5
|
|
566
|
+
|
|
567
|
+
- name: medium_implement
|
|
568
|
+
systemPrompt: |
|
|
569
|
+
Execute the plan. First read any files listed in filesToRead to gather context.
|
|
570
|
+
Then implement the changes and write tests as designed.
|
|
571
|
+
Follow all repository standards learned in the first phase.
|
|
572
|
+
next: medium_test
|
|
573
|
+
aiConfig:
|
|
574
|
+
model: claude-sonnet-4-5
|
|
575
|
+
|
|
576
|
+
- name: medium_test
|
|
577
|
+
systemPrompt: |
|
|
578
|
+
Run the tests to verify the implementation. Check that all new and existing
|
|
579
|
+
tests pass. Report the results.
|
|
580
|
+
readOnly: true
|
|
581
|
+
next: medium_review
|
|
582
|
+
aiConfig:
|
|
583
|
+
model: claude-sonnet-4-5
|
|
584
|
+
|
|
585
|
+
- name: medium_review
|
|
586
|
+
type: loop
|
|
587
|
+
prompt: Are all tests passing and does the implementation fully address the issue?
|
|
588
|
+
threshold: 0.85
|
|
589
|
+
loopTarget: medium_implement
|
|
590
|
+
next: check_svelte
|
|
591
|
+
aiConfig:
|
|
592
|
+
model: claude-sonnet-4-5
|
|
593
|
+
|
|
594
|
+
# === Hard path: All Opus ===
|
|
595
|
+
- name: hard_plan
|
|
596
|
+
systemPrompt: |
|
|
597
|
+
Read the GitHub issue carefully. Understand the requirements, acceptance
|
|
598
|
+
criteria, and any context provided. Based on the issue and the repository
|
|
599
|
+
standards you learned, create a detailed implementation plan.
|
|
600
|
+
Identify risks and edge cases. Do not write code yet.
|
|
601
|
+
|
|
602
|
+
Categorize each file as: create (new), modify (existing), or delete (remove).
|
|
603
|
+
List files to read for context with a reason for each.
|
|
604
|
+
readOnly: true
|
|
605
|
+
input:
|
|
606
|
+
type: object
|
|
607
|
+
properties:
|
|
608
|
+
filesToCreate:
|
|
609
|
+
type: array
|
|
610
|
+
items:
|
|
611
|
+
type: object
|
|
612
|
+
properties:
|
|
613
|
+
path:
|
|
614
|
+
type: string
|
|
615
|
+
purpose:
|
|
616
|
+
type: string
|
|
617
|
+
required:
|
|
618
|
+
- path
|
|
619
|
+
- purpose
|
|
620
|
+
description: New files to create
|
|
621
|
+
filesToModify:
|
|
622
|
+
type: array
|
|
623
|
+
items:
|
|
624
|
+
type: object
|
|
625
|
+
properties:
|
|
626
|
+
path:
|
|
627
|
+
type: string
|
|
628
|
+
changes:
|
|
629
|
+
type: string
|
|
630
|
+
required:
|
|
631
|
+
- path
|
|
632
|
+
- changes
|
|
633
|
+
description: Existing files to modify and what changes are needed
|
|
634
|
+
filesToDelete:
|
|
635
|
+
type: array
|
|
636
|
+
items:
|
|
637
|
+
type: object
|
|
638
|
+
properties:
|
|
639
|
+
path:
|
|
640
|
+
type: string
|
|
641
|
+
reason:
|
|
642
|
+
type: string
|
|
643
|
+
required:
|
|
644
|
+
- path
|
|
645
|
+
- reason
|
|
646
|
+
description: Files to remove
|
|
647
|
+
filesToRead:
|
|
648
|
+
type: array
|
|
649
|
+
items:
|
|
650
|
+
type: object
|
|
651
|
+
properties:
|
|
652
|
+
path:
|
|
653
|
+
type: string
|
|
654
|
+
reason:
|
|
655
|
+
type: string
|
|
656
|
+
required:
|
|
657
|
+
- path
|
|
658
|
+
- reason
|
|
659
|
+
description: Files to read for additional context before implementing
|
|
660
|
+
approach:
|
|
661
|
+
type: string
|
|
662
|
+
risks:
|
|
663
|
+
type: array
|
|
664
|
+
items:
|
|
665
|
+
type: string
|
|
666
|
+
required:
|
|
667
|
+
- approach
|
|
668
|
+
next: hard_plan_tests
|
|
669
|
+
aiConfig:
|
|
670
|
+
model: claude-opus-4-5
|
|
671
|
+
|
|
672
|
+
- name: hard_plan_tests
|
|
673
|
+
systemPrompt: |
|
|
674
|
+
Based on the implementation plan, design a testing strategy. Determine which
|
|
675
|
+
types of tests are needed (unit, integration, API, visual), what test cases
|
|
676
|
+
to cover, and how to verify the fix. Follow the repository's existing test patterns.
|
|
677
|
+
readOnly: true
|
|
678
|
+
input:
|
|
679
|
+
type: object
|
|
680
|
+
properties:
|
|
681
|
+
testTypes:
|
|
682
|
+
type: array
|
|
683
|
+
items:
|
|
684
|
+
type: string
|
|
685
|
+
enum:
|
|
686
|
+
- unit
|
|
687
|
+
- integration
|
|
688
|
+
- api
|
|
689
|
+
- visual
|
|
690
|
+
testCases:
|
|
691
|
+
type: array
|
|
692
|
+
items:
|
|
693
|
+
type: object
|
|
694
|
+
properties:
|
|
695
|
+
name:
|
|
696
|
+
type: string
|
|
697
|
+
type:
|
|
698
|
+
type: string
|
|
699
|
+
file:
|
|
700
|
+
type: string
|
|
701
|
+
required:
|
|
702
|
+
- name
|
|
703
|
+
- type
|
|
704
|
+
required:
|
|
705
|
+
- testTypes
|
|
706
|
+
- testCases
|
|
707
|
+
next: hard_implement
|
|
708
|
+
aiConfig:
|
|
709
|
+
model: claude-opus-4-5
|
|
710
|
+
|
|
711
|
+
- name: hard_implement
|
|
712
|
+
systemPrompt: |
|
|
713
|
+
Execute the plan. First read any files listed in filesToRead to gather context.
|
|
714
|
+
Then implement the changes and write the tests as designed.
|
|
715
|
+
Follow all repository standards learned in the first phase.
|
|
716
|
+
next: hard_test
|
|
717
|
+
aiConfig:
|
|
718
|
+
model: claude-opus-4-5
|
|
719
|
+
|
|
720
|
+
- name: hard_test
|
|
721
|
+
systemPrompt: |
|
|
722
|
+
Run the tests to verify the implementation. Check that all new and existing
|
|
723
|
+
tests pass. Report the results.
|
|
724
|
+
readOnly: true
|
|
725
|
+
next: hard_review
|
|
726
|
+
aiConfig:
|
|
727
|
+
model: claude-opus-4-5
|
|
728
|
+
|
|
729
|
+
- name: hard_review
|
|
730
|
+
type: loop
|
|
731
|
+
prompt: Are all tests passing and does the implementation fully address the issue?
|
|
732
|
+
threshold: 0.85
|
|
733
|
+
loopTarget: hard_implement
|
|
734
|
+
next: check_svelte
|
|
735
|
+
aiConfig:
|
|
736
|
+
model: claude-opus-4-5
|
|
737
|
+
|
|
738
|
+
# ============================================================
|
|
739
|
+
# SHARED: Visual check + Ship
|
|
740
|
+
# ============================================================
|
|
741
|
+
|
|
742
|
+
- name: check_svelte
|
|
743
|
+
type: decision
|
|
744
|
+
prompt: |
|
|
745
|
+
Check if any .svelte files were created or modified during this task.
|
|
746
|
+
Run: git diff --name-only HEAD $(git merge-base HEAD main)
|
|
747
|
+
Also check git status for untracked .svelte files.
|
|
748
|
+
|
|
749
|
+
Score 0-1:
|
|
750
|
+
**No .svelte changes (0.0-0.4):** No Svelte components were touched.
|
|
751
|
+
**Has .svelte changes (0.5-1.0):** One or more .svelte files were created or modified.
|
|
752
|
+
options: ["ship", "visual_test"]
|
|
753
|
+
thresholds: [0.5]
|
|
754
|
+
aiConfig:
|
|
755
|
+
model: claude-haiku-4-5
|
|
756
|
+
|
|
757
|
+
- name: visual_test
|
|
758
|
+
systemPrompt: |
|
|
759
|
+
Svelte files were changed in this task. You must run Forge visual tests to
|
|
760
|
+
verify the UI looks correct.
|
|
761
|
+
|
|
762
|
+
Read instructions/forge-testing.md for the full guide.
|
|
763
|
+
|
|
764
|
+
Steps:
|
|
765
|
+
1. Identify which pages/routes are affected by the .svelte changes
|
|
766
|
+
2. Check if visual tests already exist in test/ui/ for those pages
|
|
767
|
+
3. If tests exist, run them: npx forge test/ui/<feature>.forge.ts
|
|
768
|
+
4. If no tests exist, create them following the pattern in instructions/forge-testing.md:
|
|
769
|
+
- Use createImageRenderer with outputDir, stitchConfig, componentDir, template
|
|
770
|
+
- Capture at desktop (1920x1080), tablet (768x1024), mobile (375x812)
|
|
771
|
+
- Test relevant states (empty, loaded, error)
|
|
772
|
+
- Use mock data from test/helpers/mock_data.ts
|
|
773
|
+
5. Review the screenshots in test/output/screenshots/ to verify the design looks correct
|
|
774
|
+
6. If anything looks wrong, fix the Svelte components and re-run
|
|
775
|
+
|
|
776
|
+
Run all visual tests for affected pages and report results.
|
|
777
|
+
next: visual_review
|
|
778
|
+
aiConfig:
|
|
779
|
+
model: claude-sonnet-4-5
|
|
780
|
+
|
|
781
|
+
- name: visual_review
|
|
782
|
+
type: loop
|
|
783
|
+
prompt: Do the visual screenshots look correct? Are all Forge visual tests passing and do the pages render properly at all resolutions?
|
|
784
|
+
threshold: 0.85
|
|
785
|
+
loopTarget: visual_test
|
|
786
|
+
next: ship
|
|
787
|
+
aiConfig:
|
|
788
|
+
model: claude-sonnet-4-5
|
|
789
|
+
|
|
790
|
+
- name: ship
|
|
791
|
+
systemPrompt: |
|
|
792
|
+
Create a pull request with a clear description of the changes, linking back
|
|
793
|
+
to the issue. Comment on the issue summarizing what was done.
|
|
794
|
+
readOnly: true
|
|
795
|
+
postActions:
|
|
796
|
+
- pr.create
|
|
797
|
+
- issue.comment
|
|
798
|
+
aiConfig:
|
|
799
|
+
model: claude-sonnet-4-5
|
package/package.json
CHANGED
package/src/commands/dev.js
CHANGED
|
@@ -506,7 +506,7 @@ async function runSplitServeWithWatch(context, tsxExecutable, tsxArgs, baseEnv,
|
|
|
506
506
|
logger.info(` Shared: ${sharedPatterns.length} patterns`);
|
|
507
507
|
logger.info(` Backend: ${backendPatterns.length} patterns`);
|
|
508
508
|
logger.info(` Frontend: ${frontendPatterns.length} patterns`);
|
|
509
|
-
logger.info(` Watch targets (${watchTargets.size}): ${JSON.stringify(Array.from(watchTargets)
|
|
509
|
+
logger.info(` Watch targets (${watchTargets.size}): ${JSON.stringify(Array.from(watchTargets))}`);
|
|
510
510
|
|
|
511
511
|
// Create matchers
|
|
512
512
|
const sharedMatcher = sharedPatterns.length > 0 ? picomatch(sharedPatterns) : null;
|
|
@@ -1112,8 +1112,8 @@ async function runSplitServeWithWatch(context, tsxExecutable, tsxArgs, baseEnv,
|
|
|
1112
1112
|
// Create watcher
|
|
1113
1113
|
// Use cwd with relative patterns for proper glob support
|
|
1114
1114
|
logger.info(`[WATCHER] Creating watcher with cwd: ${root}`);
|
|
1115
|
-
logger.info(`[WATCHER] Patterns (classification only): ${JSON.stringify(allPatterns
|
|
1116
|
-
logger.info(`[WATCHER] Concrete targets: ${JSON.stringify(Array.from(watchTargets)
|
|
1115
|
+
logger.info(`[WATCHER] Patterns (classification only): ${JSON.stringify(allPatterns)}`);
|
|
1116
|
+
logger.info(`[WATCHER] Concrete targets: ${JSON.stringify(Array.from(watchTargets))}`);
|
|
1117
1117
|
|
|
1118
1118
|
let watcher;
|
|
1119
1119
|
try {
|
|
@@ -1270,7 +1270,7 @@ async function createWatcher(context, yamlConfig, configFilePath) {
|
|
|
1270
1270
|
}
|
|
1271
1271
|
|
|
1272
1272
|
logger.info('Watching for changes to restart server...');
|
|
1273
|
-
logger.info(`[WATCHER] Concrete targets: ${JSON.stringify(Array.from(watchTargets)
|
|
1273
|
+
logger.info(`[WATCHER] Concrete targets: ${JSON.stringify(Array.from(watchTargets))}`);
|
|
1274
1274
|
// Use cwd with relative targets for proper glob support
|
|
1275
1275
|
let watcher;
|
|
1276
1276
|
try {
|