@moreih29/nexus-core 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/mcp/definitions/artifact.d.ts +15 -0
- package/dist/mcp/definitions/artifact.d.ts.map +1 -1
- package/dist/mcp/definitions/artifact.js +15 -1
- package/dist/mcp/definitions/artifact.js.map +1 -1
- package/dist/mcp/definitions/history.d.ts +8 -0
- package/dist/mcp/definitions/history.d.ts.map +1 -1
- package/dist/mcp/definitions/history.js +28 -3
- package/dist/mcp/definitions/history.js.map +1 -1
- package/dist/mcp/definitions/index.d.ts +58 -2
- package/dist/mcp/definitions/index.d.ts.map +1 -1
- package/dist/mcp/definitions/plan.js +2 -2
- package/dist/mcp/definitions/plan.js.map +1 -1
- package/dist/mcp/definitions/task.d.ts +38 -2
- package/dist/mcp/definitions/task.d.ts.map +1 -1
- package/dist/mcp/definitions/task.js +26 -7
- package/dist/mcp/definitions/task.js.map +1 -1
- package/dist/mcp/handlers/artifact.d.ts.map +1 -1
- package/dist/mcp/handlers/artifact.js +39 -1
- package/dist/mcp/handlers/artifact.js.map +1 -1
- package/dist/mcp/handlers/history.d.ts.map +1 -1
- package/dist/mcp/handlers/history.js +178 -12
- package/dist/mcp/handlers/history.js.map +1 -1
- package/dist/mcp/handlers/plan.d.ts.map +1 -1
- package/dist/mcp/handlers/plan.js +0 -2
- package/dist/mcp/handlers/plan.js.map +1 -1
- package/dist/mcp/handlers/task.d.ts.map +1 -1
- package/dist/mcp/handlers/task.js +27 -3
- package/dist/mcp/handlers/task.js.map +1 -1
- package/dist/types/state.d.ts +177 -0
- package/dist/types/state.d.ts.map +1 -1
- package/dist/types/state.js +8 -0
- package/dist/types/state.js.map +1 -1
- package/package.json +1 -1
- package/spec/agents/architect/body.ko.md +64 -118
- package/spec/agents/architect/body.md +62 -118
- package/spec/agents/designer/body.ko.md +120 -241
- package/spec/agents/designer/body.md +114 -237
- package/spec/agents/engineer/body.ko.md +62 -114
- package/spec/agents/engineer/body.md +62 -114
- package/spec/agents/lead/body.ko.md +78 -154
- package/spec/agents/lead/body.md +76 -153
- package/spec/agents/postdoc/body.ko.md +111 -120
- package/spec/agents/postdoc/body.md +110 -121
- package/spec/agents/researcher/body.ko.md +80 -158
- package/spec/agents/researcher/body.md +80 -158
- package/spec/agents/reviewer/body.ko.md +75 -143
- package/spec/agents/reviewer/body.md +76 -144
- package/spec/agents/tester/body.ko.md +76 -190
- package/spec/agents/tester/body.md +77 -193
- package/spec/agents/writer/body.ko.md +70 -143
- package/spec/agents/writer/body.md +70 -143
- package/spec/skills/nx-auto-plan/body.ko.md +22 -21
- package/spec/skills/nx-auto-plan/body.md +20 -19
- package/spec/skills/nx-plan/body.ko.md +15 -25
- package/spec/skills/nx-plan/body.md +15 -25
- package/spec/skills/nx-run/body.ko.md +67 -9
- package/spec/skills/nx-run/body.md +67 -9
- package/spec/agents/strategist/body.ko.md +0 -189
- package/spec/agents/strategist/body.md +0 -187
package/dist/types/state.d.ts
CHANGED
|
@@ -162,6 +162,23 @@ export declare const TaskOwnerSchema: z.ZodObject<{
|
|
|
162
162
|
resume_tier?: "persistent" | "bounded" | "ephemeral" | undefined;
|
|
163
163
|
}>;
|
|
164
164
|
export type TaskOwner = z.infer<typeof TaskOwnerSchema>;
|
|
165
|
+
export declare const TaskResultSchema: z.ZodObject<{
|
|
166
|
+
outcome: z.ZodEnum<["success", "failure", "partial"]>;
|
|
167
|
+
summary: z.ZodString;
|
|
168
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
169
|
+
recorded_at: z.ZodString;
|
|
170
|
+
}, "strip", z.ZodTypeAny, {
|
|
171
|
+
summary: string;
|
|
172
|
+
recorded_at: string;
|
|
173
|
+
outcome: "success" | "failure" | "partial";
|
|
174
|
+
artifacts?: string[] | undefined;
|
|
175
|
+
}, {
|
|
176
|
+
summary: string;
|
|
177
|
+
recorded_at: string;
|
|
178
|
+
outcome: "success" | "failure" | "partial";
|
|
179
|
+
artifacts?: string[] | undefined;
|
|
180
|
+
}>;
|
|
181
|
+
export type TaskResult = z.infer<typeof TaskResultSchema>;
|
|
165
182
|
export declare const TaskItemSchema: z.ZodObject<{
|
|
166
183
|
id: z.ZodNumber;
|
|
167
184
|
title: z.ZodString;
|
|
@@ -185,6 +202,22 @@ export declare const TaskItemSchema: z.ZodObject<{
|
|
|
185
202
|
agent_id?: string | undefined;
|
|
186
203
|
resume_tier?: "persistent" | "bounded" | "ephemeral" | undefined;
|
|
187
204
|
}>;
|
|
205
|
+
result: z.ZodOptional<z.ZodObject<{
|
|
206
|
+
outcome: z.ZodEnum<["success", "failure", "partial"]>;
|
|
207
|
+
summary: z.ZodString;
|
|
208
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
209
|
+
recorded_at: z.ZodString;
|
|
210
|
+
}, "strip", z.ZodTypeAny, {
|
|
211
|
+
summary: string;
|
|
212
|
+
recorded_at: string;
|
|
213
|
+
outcome: "success" | "failure" | "partial";
|
|
214
|
+
artifacts?: string[] | undefined;
|
|
215
|
+
}, {
|
|
216
|
+
summary: string;
|
|
217
|
+
recorded_at: string;
|
|
218
|
+
outcome: "success" | "failure" | "partial";
|
|
219
|
+
artifacts?: string[] | undefined;
|
|
220
|
+
}>>;
|
|
188
221
|
created_at: z.ZodString;
|
|
189
222
|
}, "strip", z.ZodTypeAny, {
|
|
190
223
|
id: number;
|
|
@@ -202,6 +235,12 @@ export declare const TaskItemSchema: z.ZodObject<{
|
|
|
202
235
|
risk?: string | undefined;
|
|
203
236
|
plan_issue?: number | undefined;
|
|
204
237
|
deps?: number[] | undefined;
|
|
238
|
+
result?: {
|
|
239
|
+
summary: string;
|
|
240
|
+
recorded_at: string;
|
|
241
|
+
outcome: "success" | "failure" | "partial";
|
|
242
|
+
artifacts?: string[] | undefined;
|
|
243
|
+
} | undefined;
|
|
205
244
|
}, {
|
|
206
245
|
id: number;
|
|
207
246
|
status: "pending" | "in_progress" | "completed";
|
|
@@ -218,6 +257,12 @@ export declare const TaskItemSchema: z.ZodObject<{
|
|
|
218
257
|
risk?: string | undefined;
|
|
219
258
|
plan_issue?: number | undefined;
|
|
220
259
|
deps?: number[] | undefined;
|
|
260
|
+
result?: {
|
|
261
|
+
summary: string;
|
|
262
|
+
recorded_at: string;
|
|
263
|
+
outcome: "success" | "failure" | "partial";
|
|
264
|
+
artifacts?: string[] | undefined;
|
|
265
|
+
} | undefined;
|
|
221
266
|
}>;
|
|
222
267
|
export type TaskItem = z.infer<typeof TaskItemSchema>;
|
|
223
268
|
export declare const TasksFileSchema: z.ZodObject<{
|
|
@@ -246,6 +291,22 @@ export declare const TasksFileSchema: z.ZodObject<{
|
|
|
246
291
|
agent_id?: string | undefined;
|
|
247
292
|
resume_tier?: "persistent" | "bounded" | "ephemeral" | undefined;
|
|
248
293
|
}>;
|
|
294
|
+
result: z.ZodOptional<z.ZodObject<{
|
|
295
|
+
outcome: z.ZodEnum<["success", "failure", "partial"]>;
|
|
296
|
+
summary: z.ZodString;
|
|
297
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
298
|
+
recorded_at: z.ZodString;
|
|
299
|
+
}, "strip", z.ZodTypeAny, {
|
|
300
|
+
summary: string;
|
|
301
|
+
recorded_at: string;
|
|
302
|
+
outcome: "success" | "failure" | "partial";
|
|
303
|
+
artifacts?: string[] | undefined;
|
|
304
|
+
}, {
|
|
305
|
+
summary: string;
|
|
306
|
+
recorded_at: string;
|
|
307
|
+
outcome: "success" | "failure" | "partial";
|
|
308
|
+
artifacts?: string[] | undefined;
|
|
309
|
+
}>>;
|
|
249
310
|
created_at: z.ZodString;
|
|
250
311
|
}, "strip", z.ZodTypeAny, {
|
|
251
312
|
id: number;
|
|
@@ -263,6 +324,12 @@ export declare const TasksFileSchema: z.ZodObject<{
|
|
|
263
324
|
risk?: string | undefined;
|
|
264
325
|
plan_issue?: number | undefined;
|
|
265
326
|
deps?: number[] | undefined;
|
|
327
|
+
result?: {
|
|
328
|
+
summary: string;
|
|
329
|
+
recorded_at: string;
|
|
330
|
+
outcome: "success" | "failure" | "partial";
|
|
331
|
+
artifacts?: string[] | undefined;
|
|
332
|
+
} | undefined;
|
|
266
333
|
}, {
|
|
267
334
|
id: number;
|
|
268
335
|
status: "pending" | "in_progress" | "completed";
|
|
@@ -279,6 +346,12 @@ export declare const TasksFileSchema: z.ZodObject<{
|
|
|
279
346
|
risk?: string | undefined;
|
|
280
347
|
plan_issue?: number | undefined;
|
|
281
348
|
deps?: number[] | undefined;
|
|
349
|
+
result?: {
|
|
350
|
+
summary: string;
|
|
351
|
+
recorded_at: string;
|
|
352
|
+
outcome: "success" | "failure" | "partial";
|
|
353
|
+
artifacts?: string[] | undefined;
|
|
354
|
+
} | undefined;
|
|
282
355
|
}>, "many">;
|
|
283
356
|
}, "strip", z.ZodTypeAny, {
|
|
284
357
|
tasks: {
|
|
@@ -297,6 +370,12 @@ export declare const TasksFileSchema: z.ZodObject<{
|
|
|
297
370
|
risk?: string | undefined;
|
|
298
371
|
plan_issue?: number | undefined;
|
|
299
372
|
deps?: number[] | undefined;
|
|
373
|
+
result?: {
|
|
374
|
+
summary: string;
|
|
375
|
+
recorded_at: string;
|
|
376
|
+
outcome: "success" | "failure" | "partial";
|
|
377
|
+
artifacts?: string[] | undefined;
|
|
378
|
+
} | undefined;
|
|
300
379
|
}[];
|
|
301
380
|
goal?: string | undefined;
|
|
302
381
|
decisions?: string[] | undefined;
|
|
@@ -317,6 +396,12 @@ export declare const TasksFileSchema: z.ZodObject<{
|
|
|
317
396
|
risk?: string | undefined;
|
|
318
397
|
plan_issue?: number | undefined;
|
|
319
398
|
deps?: number[] | undefined;
|
|
399
|
+
result?: {
|
|
400
|
+
summary: string;
|
|
401
|
+
recorded_at: string;
|
|
402
|
+
outcome: "success" | "failure" | "partial";
|
|
403
|
+
artifacts?: string[] | undefined;
|
|
404
|
+
} | undefined;
|
|
320
405
|
}[];
|
|
321
406
|
goal?: string | undefined;
|
|
322
407
|
decisions?: string[] | undefined;
|
|
@@ -433,6 +518,22 @@ export declare const HistoryCycleSchema: z.ZodObject<{
|
|
|
433
518
|
agent_id?: string | undefined;
|
|
434
519
|
resume_tier?: "persistent" | "bounded" | "ephemeral" | undefined;
|
|
435
520
|
}>;
|
|
521
|
+
result: z.ZodOptional<z.ZodObject<{
|
|
522
|
+
outcome: z.ZodEnum<["success", "failure", "partial"]>;
|
|
523
|
+
summary: z.ZodString;
|
|
524
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
525
|
+
recorded_at: z.ZodString;
|
|
526
|
+
}, "strip", z.ZodTypeAny, {
|
|
527
|
+
summary: string;
|
|
528
|
+
recorded_at: string;
|
|
529
|
+
outcome: "success" | "failure" | "partial";
|
|
530
|
+
artifacts?: string[] | undefined;
|
|
531
|
+
}, {
|
|
532
|
+
summary: string;
|
|
533
|
+
recorded_at: string;
|
|
534
|
+
outcome: "success" | "failure" | "partial";
|
|
535
|
+
artifacts?: string[] | undefined;
|
|
536
|
+
}>>;
|
|
436
537
|
created_at: z.ZodString;
|
|
437
538
|
}, "strip", z.ZodTypeAny, {
|
|
438
539
|
id: number;
|
|
@@ -450,6 +551,12 @@ export declare const HistoryCycleSchema: z.ZodObject<{
|
|
|
450
551
|
risk?: string | undefined;
|
|
451
552
|
plan_issue?: number | undefined;
|
|
452
553
|
deps?: number[] | undefined;
|
|
554
|
+
result?: {
|
|
555
|
+
summary: string;
|
|
556
|
+
recorded_at: string;
|
|
557
|
+
outcome: "success" | "failure" | "partial";
|
|
558
|
+
artifacts?: string[] | undefined;
|
|
559
|
+
} | undefined;
|
|
453
560
|
}, {
|
|
454
561
|
id: number;
|
|
455
562
|
status: "pending" | "in_progress" | "completed";
|
|
@@ -466,6 +573,12 @@ export declare const HistoryCycleSchema: z.ZodObject<{
|
|
|
466
573
|
risk?: string | undefined;
|
|
467
574
|
plan_issue?: number | undefined;
|
|
468
575
|
deps?: number[] | undefined;
|
|
576
|
+
result?: {
|
|
577
|
+
summary: string;
|
|
578
|
+
recorded_at: string;
|
|
579
|
+
outcome: "success" | "failure" | "partial";
|
|
580
|
+
artifacts?: string[] | undefined;
|
|
581
|
+
} | undefined;
|
|
469
582
|
}>, "many">>;
|
|
470
583
|
}, "strip", z.ZodTypeAny, {
|
|
471
584
|
completed_at: string;
|
|
@@ -486,6 +599,12 @@ export declare const HistoryCycleSchema: z.ZodObject<{
|
|
|
486
599
|
risk?: string | undefined;
|
|
487
600
|
plan_issue?: number | undefined;
|
|
488
601
|
deps?: number[] | undefined;
|
|
602
|
+
result?: {
|
|
603
|
+
summary: string;
|
|
604
|
+
recorded_at: string;
|
|
605
|
+
outcome: "success" | "failure" | "partial";
|
|
606
|
+
artifacts?: string[] | undefined;
|
|
607
|
+
} | undefined;
|
|
489
608
|
}[] | undefined;
|
|
490
609
|
schema_version?: string | undefined;
|
|
491
610
|
plan?: {
|
|
@@ -525,6 +644,12 @@ export declare const HistoryCycleSchema: z.ZodObject<{
|
|
|
525
644
|
risk?: string | undefined;
|
|
526
645
|
plan_issue?: number | undefined;
|
|
527
646
|
deps?: number[] | undefined;
|
|
647
|
+
result?: {
|
|
648
|
+
summary: string;
|
|
649
|
+
recorded_at: string;
|
|
650
|
+
outcome: "success" | "failure" | "partial";
|
|
651
|
+
artifacts?: string[] | undefined;
|
|
652
|
+
} | undefined;
|
|
528
653
|
}[] | undefined;
|
|
529
654
|
schema_version?: string | undefined;
|
|
530
655
|
plan?: {
|
|
@@ -660,6 +785,22 @@ export declare const HistoryFileSchema: z.ZodObject<{
|
|
|
660
785
|
agent_id?: string | undefined;
|
|
661
786
|
resume_tier?: "persistent" | "bounded" | "ephemeral" | undefined;
|
|
662
787
|
}>;
|
|
788
|
+
result: z.ZodOptional<z.ZodObject<{
|
|
789
|
+
outcome: z.ZodEnum<["success", "failure", "partial"]>;
|
|
790
|
+
summary: z.ZodString;
|
|
791
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
792
|
+
recorded_at: z.ZodString;
|
|
793
|
+
}, "strip", z.ZodTypeAny, {
|
|
794
|
+
summary: string;
|
|
795
|
+
recorded_at: string;
|
|
796
|
+
outcome: "success" | "failure" | "partial";
|
|
797
|
+
artifacts?: string[] | undefined;
|
|
798
|
+
}, {
|
|
799
|
+
summary: string;
|
|
800
|
+
recorded_at: string;
|
|
801
|
+
outcome: "success" | "failure" | "partial";
|
|
802
|
+
artifacts?: string[] | undefined;
|
|
803
|
+
}>>;
|
|
663
804
|
created_at: z.ZodString;
|
|
664
805
|
}, "strip", z.ZodTypeAny, {
|
|
665
806
|
id: number;
|
|
@@ -677,6 +818,12 @@ export declare const HistoryFileSchema: z.ZodObject<{
|
|
|
677
818
|
risk?: string | undefined;
|
|
678
819
|
plan_issue?: number | undefined;
|
|
679
820
|
deps?: number[] | undefined;
|
|
821
|
+
result?: {
|
|
822
|
+
summary: string;
|
|
823
|
+
recorded_at: string;
|
|
824
|
+
outcome: "success" | "failure" | "partial";
|
|
825
|
+
artifacts?: string[] | undefined;
|
|
826
|
+
} | undefined;
|
|
680
827
|
}, {
|
|
681
828
|
id: number;
|
|
682
829
|
status: "pending" | "in_progress" | "completed";
|
|
@@ -693,6 +840,12 @@ export declare const HistoryFileSchema: z.ZodObject<{
|
|
|
693
840
|
risk?: string | undefined;
|
|
694
841
|
plan_issue?: number | undefined;
|
|
695
842
|
deps?: number[] | undefined;
|
|
843
|
+
result?: {
|
|
844
|
+
summary: string;
|
|
845
|
+
recorded_at: string;
|
|
846
|
+
outcome: "success" | "failure" | "partial";
|
|
847
|
+
artifacts?: string[] | undefined;
|
|
848
|
+
} | undefined;
|
|
696
849
|
}>, "many">>;
|
|
697
850
|
}, "strip", z.ZodTypeAny, {
|
|
698
851
|
completed_at: string;
|
|
@@ -713,6 +866,12 @@ export declare const HistoryFileSchema: z.ZodObject<{
|
|
|
713
866
|
risk?: string | undefined;
|
|
714
867
|
plan_issue?: number | undefined;
|
|
715
868
|
deps?: number[] | undefined;
|
|
869
|
+
result?: {
|
|
870
|
+
summary: string;
|
|
871
|
+
recorded_at: string;
|
|
872
|
+
outcome: "success" | "failure" | "partial";
|
|
873
|
+
artifacts?: string[] | undefined;
|
|
874
|
+
} | undefined;
|
|
716
875
|
}[] | undefined;
|
|
717
876
|
schema_version?: string | undefined;
|
|
718
877
|
plan?: {
|
|
@@ -752,6 +911,12 @@ export declare const HistoryFileSchema: z.ZodObject<{
|
|
|
752
911
|
risk?: string | undefined;
|
|
753
912
|
plan_issue?: number | undefined;
|
|
754
913
|
deps?: number[] | undefined;
|
|
914
|
+
result?: {
|
|
915
|
+
summary: string;
|
|
916
|
+
recorded_at: string;
|
|
917
|
+
outcome: "success" | "failure" | "partial";
|
|
918
|
+
artifacts?: string[] | undefined;
|
|
919
|
+
} | undefined;
|
|
755
920
|
}[] | undefined;
|
|
756
921
|
schema_version?: string | undefined;
|
|
757
922
|
plan?: {
|
|
@@ -793,6 +958,12 @@ export declare const HistoryFileSchema: z.ZodObject<{
|
|
|
793
958
|
risk?: string | undefined;
|
|
794
959
|
plan_issue?: number | undefined;
|
|
795
960
|
deps?: number[] | undefined;
|
|
961
|
+
result?: {
|
|
962
|
+
summary: string;
|
|
963
|
+
recorded_at: string;
|
|
964
|
+
outcome: "success" | "failure" | "partial";
|
|
965
|
+
artifacts?: string[] | undefined;
|
|
966
|
+
} | undefined;
|
|
796
967
|
}[] | undefined;
|
|
797
968
|
schema_version?: string | undefined;
|
|
798
969
|
plan?: {
|
|
@@ -835,6 +1006,12 @@ export declare const HistoryFileSchema: z.ZodObject<{
|
|
|
835
1006
|
risk?: string | undefined;
|
|
836
1007
|
plan_issue?: number | undefined;
|
|
837
1008
|
deps?: number[] | undefined;
|
|
1009
|
+
result?: {
|
|
1010
|
+
summary: string;
|
|
1011
|
+
recorded_at: string;
|
|
1012
|
+
outcome: "success" | "failure" | "partial";
|
|
1013
|
+
artifacts?: string[] | undefined;
|
|
1014
|
+
} | undefined;
|
|
838
1015
|
}[] | undefined;
|
|
839
1016
|
schema_version?: string | undefined;
|
|
840
1017
|
plan?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,gBAAgB,mDAAiD,CAAC;AAC/E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAG1D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAGxE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAGxD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,eAAe;;;;;;;;;;;;EAI1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAGxD,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"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"}
|
package/dist/types/state.js
CHANGED
|
@@ -30,6 +30,13 @@ export const TaskOwnerSchema = z.object({
|
|
|
30
30
|
agent_id: z.string().optional(),
|
|
31
31
|
resume_tier: ResumeTierSchema.optional(),
|
|
32
32
|
});
|
|
33
|
+
// TaskResult
|
|
34
|
+
export const TaskResultSchema = z.object({
|
|
35
|
+
outcome: z.enum(["success", "failure", "partial"]),
|
|
36
|
+
summary: z.string(),
|
|
37
|
+
artifacts: z.array(z.string()).optional(),
|
|
38
|
+
recorded_at: z.string(),
|
|
39
|
+
});
|
|
33
40
|
// TaskItem
|
|
34
41
|
export const TaskItemSchema = z.object({
|
|
35
42
|
id: z.number(),
|
|
@@ -42,6 +49,7 @@ export const TaskItemSchema = z.object({
|
|
|
42
49
|
plan_issue: z.number().optional(),
|
|
43
50
|
deps: z.array(z.number()).optional(),
|
|
44
51
|
owner: TaskOwnerSchema,
|
|
52
|
+
result: TaskResultSchema.optional(),
|
|
45
53
|
created_at: z.string(),
|
|
46
54
|
});
|
|
47
55
|
// TasksFile
|
package/dist/types/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,cAAc;AACd,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAG/E,2BAA2B;AAC3B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM;CAChC,CAAC,CAAC;AAGH,YAAY;AACZ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAGH,WAAW;AACX,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IAChC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAGH,YAAY;AACZ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAGH,aAAa;AACb,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAGH,WAAW;AACX,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAGH,YAAY;AACZ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;CAC/B,CAAC,CAAC;AAGH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAGH,cAAc;AACd,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;CACpC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -17,169 +17,115 @@ capabilities:
|
|
|
17
17
|
|
|
18
18
|
## 역할
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
순수한 기술적 관점에서 작동한다: 실현 가능성, 정확성, 구조, 장기적 유지보수성.
|
|
22
|
-
조언을 제공한다 — 범위 결정은 하지 않으며, 코드를 작성하지도 않는다.
|
|
20
|
+
Architect는 '어떻게' 구현해야 하는지를 평가하는 기술 자문이다. 코드를 작성하지 않고 설계를 검토한다. 범위는 Lead의 영역이며, 검토하지 않은 코드·설계는 승인하지 않는다.
|
|
23
21
|
|
|
24
|
-
##
|
|
22
|
+
## 사고 축
|
|
25
23
|
|
|
26
|
-
|
|
27
|
-
- task를 생성하거나 수정하지 않는다 (task를 소유하는 Lead에게 조언한다)
|
|
28
|
-
- 범위 결정을 내리지 않는다 — 그것은 Lead의 영역이다
|
|
29
|
-
- 검토하지 않은 작업을 승인하지 않는다 — 의견을 내기 전에 반드시 읽는다
|
|
24
|
+
설계를 평가할 때 네 축으로 본다. 각 축은 서로 다른 위반 패턴을 드러낸다.
|
|
30
25
|
|
|
31
|
-
|
|
26
|
+
### 1. 응집·경계 — 무엇을 함께 두는가
|
|
32
27
|
|
|
33
|
-
|
|
28
|
+
변경의 축을 따라 결합한다. 레이어(수평)보다 도메인·기능(수직)이 우선이다.
|
|
34
29
|
|
|
35
|
-
|
|
36
|
-
- 수용 기준 — 공급되면 항목별 PASS/FAIL로 판정, 아니면 일반 품질 기준으로 검증한다
|
|
37
|
-
- 참조 맥락 (기존 결정·문서·코드 링크) — 공급된 링크를 우선 확인한다
|
|
38
|
-
- 산출물 저장 규칙 — 공급되면 그 방식으로 기록, 아니면 인라인으로 보고한다
|
|
39
|
-
- 프로젝트 컨벤션 — 공급되면 적용한다
|
|
30
|
+
**위반 신호**: God object(과도한 책임), 강한 결합(주입 불가능한 의존성), 산탄총 수술(개념 변경이 여러 파일에 흩어짐), 암묵적 전역 상태.
|
|
40
31
|
|
|
41
|
-
|
|
32
|
+
### 2. 가시성·예측 가능성 — 읽는 사람이 즉시 이해하는가
|
|
42
33
|
|
|
43
|
-
|
|
34
|
+
코드 단위의 동작은 그 단위만 보고 추론 가능해야 한다(Locality of Behavior).
|
|
44
35
|
|
|
45
|
-
|
|
36
|
+
**위반 신호**: 누설된 추상화, 성급한 일반화, 발생 불가 분기의 에러 처리, 호출 지점에서 보이지 않는 부수효과.
|
|
46
37
|
|
|
47
|
-
|
|
38
|
+
### 3. 비용·위험 대칭 — 변경이 얼마나 값비싸고 되돌릴 수 있는가
|
|
48
39
|
|
|
49
|
-
|
|
40
|
+
구조적 변경(리팩터)과 행동적 변경(기능)을 분리한다(Tidy First). 결정이 미래 선택지를 닫는가, 작은 되돌릴 수 있는 단계로 쪼갤 수 있는가를 묻는다.
|
|
50
41
|
|
|
51
|
-
|
|
42
|
+
**위반 신호**: 하나의 큰 비가역 변경, 측정 없는 성능 최적화, 누락된 에러 경계로 인한 검사 없는 실패 전파.
|
|
52
43
|
|
|
53
|
-
|
|
54
|
-
2. **요건 명확화**: 제안된 변경이 달성해야 하는 것을 확인한다 — 의도를 가정하지 않는다
|
|
55
|
-
3. **가정에 의문 제기**: "무엇이 잘못될 수 있는가?"와 "이것이 필요한가?"를 질문한다
|
|
56
|
-
4. **접근 방식 평가**: 결정 프레임워크를 적용하고 안티패턴과 대조 확인한다
|
|
57
|
-
5. **설계 제안**: 변경이 필요하면 근거와 함께 구체적인 대안을 제시한다
|
|
58
|
-
6. **트레이드오프 문서화**: 각 옵션으로 얻는 것과 잃는 것을 기록한다
|
|
44
|
+
### 4. 테스트 가능성·증분성 — seam이 보이고 red-green-refactor가 가능한가
|
|
59
45
|
|
|
60
|
-
|
|
46
|
+
seam(주입 지점·I/O 격리)이 설계 단계에서 먼저 보여야 한다. 테스트할 수 없는 설계는 불완전한 설계다.
|
|
61
47
|
|
|
62
|
-
|
|
48
|
+
**위반 신호**: 거대한 생성자 부작용, 전역 I/O 하드코딩, 초기화 시점에만 녹아드는 로직, 외부 I/O(파일·네트워크·시간·난수)가 로직 내부에 박힘.
|
|
63
49
|
|
|
64
|
-
|
|
65
|
-
- **강한 결합**: 격리하여 테스트하거나 변경할 수 없는 컴포넌트; 의존성이 내부에 직접 생성되어 주입·치환이 불가능한 경우 포함
|
|
66
|
-
- **성급한 최적화**: 측정 없이 성능을 위해 추가된 복잡성
|
|
67
|
-
- **누설된 추상화**: 내부 구현 세부 사항이 호출자에게 노출됨
|
|
68
|
-
- **산탄총 수술**: 하나의 개념적 변경이 여러 파일에 걸친 수정을 필요로 함
|
|
69
|
-
- **암묵적 전역 상태**: 명확한 소유권 없이 공유되는 가변 상태
|
|
70
|
-
- **누락된 에러 경계**: 한 서브시스템의 실패가 검사 없이 전파됨
|
|
71
|
-
- **테스트 불가능한 구조**: 숨은 I/O(파일·네트워크·시간·난수)가 로직 내부에 박혀 있거나, 주입 불가능한 전역 상태, seam 부재로 격리 테스트가 불가능한 모듈
|
|
72
|
-
- **TDD 차단 설계**: 테스트 선행이 불가능한 구조 — 거대한 생성자 부작용, 전역 I/O 하드코딩, 초기화 단계에서만 녹아드는 로직
|
|
50
|
+
## 검토 프로세스
|
|
73
51
|
|
|
74
|
-
|
|
52
|
+
1. 영향 파일을 읽고 기존 패턴·의존성을 매핑한다
|
|
53
|
+
2. 요건을 명확히 한다 — 의도를 가정하지 않는다
|
|
54
|
+
3. 네 축으로 위반 신호를 표시하고 심각도를 분류한다
|
|
55
|
+
4. 대안을 트레이드오프와 함께 제시한다
|
|
75
56
|
|
|
76
|
-
|
|
77
|
-
2. **설계 제안**: 트레이드오프와 함께 구체적인 구현 접근 방식을 제안한다
|
|
78
|
-
3. **아키텍처 검토**: 구조적 결정을 코드베이스의 기존 패턴과 비교 평가한다
|
|
79
|
-
4. **리스크 식별**: 기술 부채, 숨겨진 복잡성, 브레이킹 체인지, 성능 우려를 표시한다
|
|
80
|
-
5. **기술적 에스컬레이션 지원**: Engineer나 Tester가 어려운 기술 문제에 직면했을 때 해결 방안을 조언한다
|
|
81
|
-
6. **테스트 가능한 설계**: 설계 산출물에 seam 위치(의존성 주입 지점·I/O 격리), 테스트 경계(unit/integration/E2E), 설계 단계에서 식별 가능한 경계 케이스를 포함한다. 이는 TDD 우선 설계의 자연스러운 결과다 — seam이 먼저 보여야 red-green-refactor가 가능하다.
|
|
57
|
+
## 진단 도구
|
|
82
58
|
|
|
83
|
-
|
|
59
|
+
`git log` / `git diff` / `git blame`, 타입 검사·테스트 실행 명령(프로젝트 공급), 파일·내용 검색·읽기 도구. 상태를 변경하는 명령은 실행하지 않는다.
|
|
84
60
|
|
|
85
|
-
|
|
86
|
-
- `git log`, `git diff`, `git blame` — 히스토리와 맥락 파악
|
|
87
|
-
- 타입 검사 명령 (프로젝트가 공급) — 타입 정확성 확인
|
|
88
|
-
- 테스트 실행 명령 (프로젝트가 공급) — 테스트 결과 관찰 (테스트 수정 금지)
|
|
89
|
-
- 코드베이스 탐색을 위해 파일 검색·내용 검색·파일 읽기 tool 사용 (셸 명령어보다 전용 tool 우선)
|
|
61
|
+
## 트레이드오프 표현
|
|
90
62
|
|
|
91
|
-
|
|
63
|
+
옵션 비교 시 아래 표로 제시한다. 각 컬럼의 의미는 다음과 같다 — 의미가 흐려지면 표가 형식만 남는다.
|
|
92
64
|
|
|
93
|
-
|
|
65
|
+
| 컬럼 | 의미 |
|
|
66
|
+
|---|---|
|
|
67
|
+
| Pros | 옵션 자체의 강점 (절대 평가) |
|
|
68
|
+
| Cons | 옵션 자체의 결함 (절대 평가) |
|
|
69
|
+
| Tradeoff | 이 옵션이 **교환하는 축의 이름** — Pros/Cons 위에 얹히는 메타. 예: "단순성 ↔ 확장성", "단기 속도 ↔ 장기 유지보수", "가시성 ↔ 응집" |
|
|
70
|
+
| Recommend | ✓ / ✗ / 조건부 — 한 줄 사유 동반. 옵션마다 반드시 표기한다 ("양쪽 다 좋다"는 도피 금지) |
|
|
94
71
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
4. 새로운 의존성이나 결합을 도입하는가? (유지보수성)
|
|
100
|
-
5. 코드베이스나 결정 로그에 선례가 있는가? (공급된 참조 맥락 우선 확인)
|
|
101
|
-
6. **Testability**: 이 설계의 seam은 어디에 있는가? 어떤 경계에서 단위 테스트가 가능한가? 외부 I/O(파일·네트워크·시간·난수)는 격리되어 있는가?
|
|
102
|
-
7. **TDD 친화성**: 이 설계는 작은 실패 테스트부터 증분 구현이 가능한가?
|
|
72
|
+
| Option | Pros | Cons | Tradeoff | Recommend |
|
|
73
|
+
|--------|------|------|----------|-----------|
|
|
74
|
+
| A | ... | ... | 단순성 ↔ 확장성 | ✓ — 현 규모에 적합 |
|
|
75
|
+
| B | ... | ... | 안정성 ↔ 속도 | ✗ — 비가역 변경 |
|
|
103
76
|
|
|
104
|
-
##
|
|
77
|
+
## 심각도 분류
|
|
78
|
+
|
|
79
|
+
발견 항목은 다음 3단계로 표시한다.
|
|
105
80
|
|
|
106
|
-
|
|
81
|
+
- **CRITICAL** — 머지·승인 전 반드시 수정. 정합성 결함·비가역 결정 위험·테스트 불가능 설계.
|
|
82
|
+
- **WARNING** — 수정해야 함. 명확한 약점이지만 차단 사유는 아님.
|
|
83
|
+
- **INFO** — 있으면 좋음. 가독성·일관성 개선 제안·관찰 메모.
|
|
107
84
|
|
|
108
85
|
## 계획 게이트
|
|
109
86
|
|
|
110
|
-
Lead가 개발 task를 확정하기 전
|
|
87
|
+
Lead가 개발 task를 확정하기 전 기술 승인 게이트로 동작한다. 명시적 신호어를 사용한다.
|
|
111
88
|
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
- 제안된 접근 방식이 기술적으로 타당하지 않으면 대안을 제시한다
|
|
116
|
-
- 명시적으로 승인("approach approved") 또는 거부("approach requires revision") 신호를 보내 Lead가 확신을 가지고 진행할 수 있도록 한다
|
|
89
|
+
- **approach approved** — 네 축 모두 통과
|
|
90
|
+
- **approved with conditions: [조건]** — 조건 충족 시 진행 가능
|
|
91
|
+
- **approach requires revision: [이유]** — 재설계 필요
|
|
117
92
|
|
|
118
|
-
##
|
|
93
|
+
## 출력 형식
|
|
94
|
+
|
|
95
|
+
집중된 자문 응답은 다음 5개 필드. 응답 첫 줄에 판정을 쓴다.
|
|
119
96
|
|
|
120
|
-
|
|
97
|
+
1. **현재 상태** — 무엇이 있고 왜 그렇게 구성되어 있는지
|
|
98
|
+
2. **문제·기회** — 무엇을 변경해야 하며 그 이유 (각 항목 심각도 표기)
|
|
99
|
+
3. **권고** — 근거와 함께 구체적 접근
|
|
100
|
+
4. **트레이드오프** — 위 표
|
|
101
|
+
5. **리스크** — 잘못될 수 있는 것과 완화
|
|
102
|
+
|
|
103
|
+
공식 설계 산출물은 Architecture Decision Record 형식.
|
|
121
104
|
|
|
122
105
|
```
|
|
123
|
-
|
|
106
|
+
### Verdict
|
|
107
|
+
[approach approved | approved with conditions: ... | approach requires revision: ...]
|
|
124
108
|
|
|
125
109
|
### Context
|
|
126
|
-
[
|
|
110
|
+
[결정을 촉발한 상황·문제]
|
|
127
111
|
|
|
128
112
|
### Decision
|
|
129
|
-
[선택된 접근
|
|
113
|
+
[선택된 접근 방식]
|
|
130
114
|
|
|
131
115
|
### Consequences
|
|
132
|
-
[
|
|
116
|
+
[더 쉬워지는 것·어려워지는 것]
|
|
133
117
|
|
|
134
118
|
### Trade-offs
|
|
135
|
-
|
|
136
|
-
|--------|------|------|-------------|
|
|
137
|
-
| A | ... | ... | 예: unit at X boundary; integration at Y |
|
|
138
|
-
| B | ... | ... | 예: seam 부재 — I/O 격리 불가 |
|
|
119
|
+
[위 표 참조]
|
|
139
120
|
|
|
140
121
|
### Findings (by severity)
|
|
141
|
-
|
|
142
|
-
- warning: 로직 우려, 누락된 에러 처리, 성능 문제 — 수정해야 함 [목록]
|
|
143
|
-
- suggestion: 스타일, 네이밍, 사소한 개선 — 있으면 좋음 [목록]
|
|
144
|
-
- note: 설계 의도에 관한 관찰이나 질문 [목록]
|
|
122
|
+
[CRITICAL/WARNING/INFO — 위 "심각도 분류" 정의 참조]
|
|
145
123
|
```
|
|
146
124
|
|
|
147
|
-
##
|
|
125
|
+
## 근거
|
|
148
126
|
|
|
149
|
-
|
|
150
|
-
1. **현재 상태**: 현재 무엇이 있고 왜 그렇게 구성되어 있는지
|
|
151
|
-
2. **문제/기회**: 무엇을 변경해야 하며 그 이유
|
|
152
|
-
3. **권고 사항**: 근거와 함께 구체적인 접근 방식
|
|
153
|
-
4. **트레이드오프**: 이 접근 방식으로 포기하는 것 (ADR Trade-offs 표 참조)
|
|
154
|
-
5. **리스크**: 잘못될 수 있는 것과 완화 전략
|
|
155
|
-
|
|
156
|
-
공식 설계 산출물은 위의 Architecture Decision Record 템플릿을 사용한다.
|
|
157
|
-
|
|
158
|
-
## 에스컬레이션 프로토콜
|
|
159
|
-
|
|
160
|
-
다음 경우 Lead에게 에스컬레이션한다:
|
|
161
|
-
|
|
162
|
-
- 기술적 발견이 범위나 우선순위 함의를 가질 때 (예: 변경이 범위에 없던 모듈의 재작업을 요구하는 경우)
|
|
163
|
-
- 비즈니스 맥락 없이는 두 접근 방식 중 어느 것이 올바른지 판단할 수 없을 때
|
|
164
|
-
- Critical 발견이 납품을 막지만 안전한 대안이 없을 때
|
|
165
|
-
- 검토가 즉각적인 task를 넘어서는 시스템적 이슈를 드러낼 때
|
|
166
|
-
|
|
167
|
-
에스컬레이션 시 포함 사항:
|
|
168
|
-
1. **트리거**: 에스컬레이션이 필요한 발견 사항
|
|
169
|
-
2. **기술적 요약**: 구체적인 우려 사항과 근거 (파일 경로, 코드 참조, 오류)
|
|
170
|
-
3. **당신의 평가**: 영향이 무엇이라고 판단하는지
|
|
171
|
-
4. **필요한 것**: Lead의 결정, 추가 맥락, 또는 범위 명확화
|
|
172
|
-
|
|
173
|
-
## 근거 요건
|
|
174
|
-
|
|
175
|
-
불가능성, 실현 불가능성, 플랫폼 한계에 관한 모든 주장에는 반드시 근거가 포함되어야 한다: 문서 URL, 코드 경로, 또는 이슈 번호. 근거 없는 주장은 researcher를 통한 재조사를 촉발한다.
|
|
127
|
+
불가능성·플랫폼 한계 주장은 출처(문서 URL, 코드 경로, 이슈 번호)를 동반한다. 근거 없는 주장은 researcher 재조사를 촉발한다.
|
|
176
128
|
|
|
177
129
|
## 완료 보고
|
|
178
130
|
|
|
179
|
-
검토
|
|
180
|
-
|
|
181
|
-
- **검토 대상**: 검토한 것 (파일, PR, 설계 문서, 접근 방식 설명)
|
|
182
|
-
- **발견 사항 요약**: 심각도별 수 — 예: "critical 2개, warning 1개, suggestion 3개"
|
|
183
|
-
- **Critical 발견 사항**: 각 critical 또는 warning 항목을 구체적으로 설명 — 영향받는 파일, 라인, 또는 컴포넌트
|
|
184
|
-
- **권고 사항**: 승인 / 조건부 승인 / 수정 필요
|
|
185
|
-
- **미해결 리스크**: 여전히 열려 있거나 추가 조사가 필요한 우려 사항
|
|
131
|
+
검토 대상, 심각도별 발견 수(CRITICAL/WARNING/INFO), CRITICAL·WARNING 항목 구체 위치(파일·라인), 권고(승인·조건부·수정 필요), 미해결 리스크·미결 질문.
|