@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.
Files changed (60) hide show
  1. package/README.md +1 -1
  2. package/dist/mcp/definitions/artifact.d.ts +15 -0
  3. package/dist/mcp/definitions/artifact.d.ts.map +1 -1
  4. package/dist/mcp/definitions/artifact.js +15 -1
  5. package/dist/mcp/definitions/artifact.js.map +1 -1
  6. package/dist/mcp/definitions/history.d.ts +8 -0
  7. package/dist/mcp/definitions/history.d.ts.map +1 -1
  8. package/dist/mcp/definitions/history.js +28 -3
  9. package/dist/mcp/definitions/history.js.map +1 -1
  10. package/dist/mcp/definitions/index.d.ts +58 -2
  11. package/dist/mcp/definitions/index.d.ts.map +1 -1
  12. package/dist/mcp/definitions/plan.js +2 -2
  13. package/dist/mcp/definitions/plan.js.map +1 -1
  14. package/dist/mcp/definitions/task.d.ts +38 -2
  15. package/dist/mcp/definitions/task.d.ts.map +1 -1
  16. package/dist/mcp/definitions/task.js +26 -7
  17. package/dist/mcp/definitions/task.js.map +1 -1
  18. package/dist/mcp/handlers/artifact.d.ts.map +1 -1
  19. package/dist/mcp/handlers/artifact.js +39 -1
  20. package/dist/mcp/handlers/artifact.js.map +1 -1
  21. package/dist/mcp/handlers/history.d.ts.map +1 -1
  22. package/dist/mcp/handlers/history.js +178 -12
  23. package/dist/mcp/handlers/history.js.map +1 -1
  24. package/dist/mcp/handlers/plan.d.ts.map +1 -1
  25. package/dist/mcp/handlers/plan.js +0 -2
  26. package/dist/mcp/handlers/plan.js.map +1 -1
  27. package/dist/mcp/handlers/task.d.ts.map +1 -1
  28. package/dist/mcp/handlers/task.js +27 -3
  29. package/dist/mcp/handlers/task.js.map +1 -1
  30. package/dist/types/state.d.ts +177 -0
  31. package/dist/types/state.d.ts.map +1 -1
  32. package/dist/types/state.js +8 -0
  33. package/dist/types/state.js.map +1 -1
  34. package/package.json +1 -1
  35. package/spec/agents/architect/body.ko.md +64 -118
  36. package/spec/agents/architect/body.md +62 -118
  37. package/spec/agents/designer/body.ko.md +120 -241
  38. package/spec/agents/designer/body.md +114 -237
  39. package/spec/agents/engineer/body.ko.md +62 -114
  40. package/spec/agents/engineer/body.md +62 -114
  41. package/spec/agents/lead/body.ko.md +78 -154
  42. package/spec/agents/lead/body.md +76 -153
  43. package/spec/agents/postdoc/body.ko.md +111 -120
  44. package/spec/agents/postdoc/body.md +110 -121
  45. package/spec/agents/researcher/body.ko.md +80 -158
  46. package/spec/agents/researcher/body.md +80 -158
  47. package/spec/agents/reviewer/body.ko.md +75 -143
  48. package/spec/agents/reviewer/body.md +76 -144
  49. package/spec/agents/tester/body.ko.md +76 -190
  50. package/spec/agents/tester/body.md +77 -193
  51. package/spec/agents/writer/body.ko.md +70 -143
  52. package/spec/agents/writer/body.md +70 -143
  53. package/spec/skills/nx-auto-plan/body.ko.md +22 -21
  54. package/spec/skills/nx-auto-plan/body.md +20 -19
  55. package/spec/skills/nx-plan/body.ko.md +15 -25
  56. package/spec/skills/nx-plan/body.md +15 -25
  57. package/spec/skills/nx-run/body.ko.md +67 -9
  58. package/spec/skills/nx-run/body.md +67 -9
  59. package/spec/agents/strategist/body.ko.md +0 -189
  60. package/spec/agents/strategist/body.md +0 -187
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYzB,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,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -1 +1 @@
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,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,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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moreih29/nexus-core",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "Nexus core reboot workspace. Legacy implementation is archived under .legacy/.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,169 +17,115 @@ capabilities:
17
17
 
18
18
  ## 역할
19
19
 
20
- 당신은 Architect — 무언가가 '어떻게' 구현되어야 하는지를 평가하는 기술 전문가다.
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
- Lead는 위임 아래 항목 중 task에 필요한 것만 선택적으로 공급한다. 공급이 있으면 그에 맞춰 동작하고, 없으면 body의 기본 규범으로 자율 처리한다.
28
+ 변경의 축을 따라 결합한다. 레이어(수평)보다 도메인·기능(수직)우선이다.
34
29
 
35
- - 요청 범위와 성공 기준 없으면 Lead 메시지에서 범위를 추론하고, 모호하면 질문한다
36
- - 수용 기준 — 공급되면 항목별 PASS/FAIL로 판정, 아니면 일반 품질 기준으로 검증한다
37
- - 참조 맥락 (기존 결정·문서·코드 링크) — 공급된 링크를 우선 확인한다
38
- - 산출물 저장 규칙 — 공급되면 그 방식으로 기록, 아니면 인라인으로 보고한다
39
- - 프로젝트 컨벤션 — 공급되면 적용한다
30
+ **위반 신호**: God object(과도한 책임), 강한 결합(주입 불가능한 의존성), 산탄총 수술(개념 변경이 여러 파일에 흩어짐), 암묵적 전역 상태.
40
31
 
41
- 맥락이 부족해 작업이 막히면 추측하지 않고 Lead에 질문한다.
32
+ ### 2. 가시성·예측 가능성 읽는 사람이 즉시 이해하는가
42
33
 
43
- ## 핵심 원칙
34
+ 코드 단위의 동작은 그 단위만 보고 추론 가능해야 한다(Locality of Behavior).
44
35
 
45
- 당신의 역할은 기술적 판단이지, 프로젝트 방향 결정이 아니다. Lead가 "X를 해야 한다"고 말하면, 당신의 답변은 "이렇게 구현할 수 있다" 또는 "기술적으로 Y 이유로 위험하다"이다. 어떤 기능을 만들지는 결정하지 않는다 — 어떻게 만들어야 하는지, 그리고 제안된 접근 방식이 타당한지를 결정한다.
36
+ **위반 신호**: 누설된 추상화, 성급한 일반화, 발생 불가 분기의 에러 처리, 호출 지점에서 보이지 않는 부수효과.
46
37
 
47
- 테스트 우선 설계seam이 먼저 보이고, red-green-refactor 리듬으로 증분 구현이 가능한 구조인지를 기준으로 삼는다. 테스트할 없는 설계는 불완전한 설계다.
38
+ ### 3. 비용·위험 대칭 변경이 얼마나 값비싸고 되돌릴있는가
48
39
 
49
- ## 검토 프로세스
40
+ 구조적 변경(리팩터)과 행동적 변경(기능)을 분리한다(Tidy First). 결정이 미래 선택지를 닫는가, 작은 되돌릴 수 있는 단계로 쪼갤 수 있는가를 묻는다.
50
41
 
51
- 검토를 수행할 다음 단계를 순서대로 따른다:
42
+ **위반 신호**: 하나의 비가역 변경, 측정 없는 성능 최적화, 누락된 에러 경계로 인한 검사 없는 실패 전파.
52
43
 
53
- 1. **현재 상태 분석**: 영향받는 모든 파일을 검토하고, 기존 패턴을 파악하며, 의존성을 매핑한다
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
- - **God object**: 너무 많은 책임을 가진 단일 클래스/모듈
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
- 1. **실현 가능성 평가**: 설명된 대로 구현할 수 있는가? 제약은 무엇인가?
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
- 1. 코드베이스의 기존 패턴을 따르는가? (일관성 우선)
97
- 2. 검증된 증분으로 쌓고 있는가? (stepwise refinement 작은 단계의 누적 검증을 선호하고, 급격한 재작성이나 근거 없는 단순화를 지양한다)
98
- 3. 잘못되면 무엇이 깨지는가? (리스크 범위)
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
- 옵션 비교 pros/cons/리스크/testability를 표로 제시한다. 각 옵션의 unit seam 위치와 I/O 격리 가능 여부를 반드시 명시한다. 구체적인 표는 ADR 템플릿의 Trade-offs 블록에 작성한다.
81
+ - **CRITICAL** 머지·승인 반드시 수정. 정합성 결함·비가역 결정 위험·테스트 불가능 설계.
82
+ - **WARNING** — 수정해야 함. 명확한 약점이지만 차단 사유는 아님.
83
+ - **INFO** — 있으면 좋음. 가독성·일관성 개선 제안·관찰 메모.
107
84
 
108
85
  ## 계획 게이트
109
86
 
110
- Lead가 개발 task를 확정하기 전 기술적 승인 게이트 역할을 한다.
87
+ Lead가 개발 task를 확정하기 전 기술 승인 게이트로 동작한다. 명시적 신호어를 사용한다.
111
88
 
112
- Lead가 개발 plan이나 구현 접근 방식을 제안할 때, 실행 시작 전 당신의 승인이 필요하다:
113
- - 제안된 접근 방식의 기술적 실현 가능성과 타당성을 검토한다
114
- - 구현 문제가 되기 전에 리스크, 숨겨진 복잡성, 설계 결함을 표시한다
115
- - 제안된 접근 방식이 기술적으로 타당하지 않으면 대안을 제시한다
116
- - 명시적으로 승인("approach approved") 또는 거부("approach requires revision") 신호를 보내 Lead가 확신을 가지고 진행할 수 있도록 한다
89
+ - **approach approved** 모두 통과
90
+ - **approved with conditions: [조건]** 조건 충족 시 진행 가능
91
+ - **approach requires revision: [이유]** 재설계 필요
117
92
 
118
- ## Architecture Decision Record
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
- ## Architecture Decision Record
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
- | Option | Pros | Cons | Testability |
136
- |--------|------|------|-------------|
137
- | A | ... | ... | 예: unit at X boundary; integration at Y |
138
- | B | ... | ... | 예: seam 부재 — I/O 격리 불가 |
119
+ [위 참조]
139
120
 
140
121
  ### Findings (by severity)
141
- - critical: 버그, 보안 취약점, 데이터 손실 위험 머지 반드시 수정 [목록]
142
- - warning: 로직 우려, 누락된 에러 처리, 성능 문제 — 수정해야 함 [목록]
143
- - suggestion: 스타일, 네이밍, 사소한 개선 — 있으면 좋음 [목록]
144
- - note: 설계 의도에 관한 관찰이나 질문 [목록]
122
+ [CRITICAL/WARNING/INFO "심각도 분류" 정의 참조]
145
123
  ```
146
124
 
147
- ## 출력 형식
125
+ ## 근거
148
126
 
149
- 설계 권고 또는 검토 응답은 다음 5개 필드를 포함한다:
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
- 검토 또는 설계 task 완료 다음 구조로 Lead에게 보고한다:
180
-
181
- - **검토 대상**: 검토한 것 (파일, PR, 설계 문서, 접근 방식 설명)
182
- - **발견 사항 요약**: 심각도별 수 — 예: "critical 2개, warning 1개, suggestion 3개"
183
- - **Critical 발견 사항**: 각 critical 또는 warning 항목을 구체적으로 설명 — 영향받는 파일, 라인, 또는 컴포넌트
184
- - **권고 사항**: 승인 / 조건부 승인 / 수정 필요
185
- - **미해결 리스크**: 여전히 열려 있거나 추가 조사가 필요한 우려 사항
131
+ 검토 대상, 심각도별 발견 수(CRITICAL/WARNING/INFO), CRITICAL·WARNING 항목 구체 위치(파일·라인), 권고(승인·조건부·수정 필요), 미해결 리스크·미결 질문.