@reqord/cli 0.1.0 → 0.2.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 (113) hide show
  1. package/dist/commands/req/approve.d.ts.map +1 -1
  2. package/dist/commands/req/approve.js +43 -12
  3. package/dist/commands/req/approve.js.map +1 -1
  4. package/dist/commands/req/approve.test.js +90 -4
  5. package/dist/commands/req/approve.test.js.map +1 -1
  6. package/dist/commands/req/draft.d.ts.map +1 -1
  7. package/dist/commands/req/draft.js +3 -1
  8. package/dist/commands/req/draft.js.map +1 -1
  9. package/dist/commands/req/draft.test.js +16 -2
  10. package/dist/commands/req/draft.test.js.map +1 -1
  11. package/dist/commands/req/implement.d.ts.map +1 -1
  12. package/dist/commands/req/implement.js +70 -21
  13. package/dist/commands/req/implement.js.map +1 -1
  14. package/dist/commands/req/implement.test.js +113 -0
  15. package/dist/commands/req/implement.test.js.map +1 -1
  16. package/dist/commands/req/update.d.ts.map +1 -1
  17. package/dist/commands/req/update.js +3 -0
  18. package/dist/commands/req/update.js.map +1 -1
  19. package/dist/commands/req/update.test.d.ts +2 -0
  20. package/dist/commands/req/update.test.d.ts.map +1 -0
  21. package/dist/commands/req/update.test.js +93 -0
  22. package/dist/commands/req/update.test.js.map +1 -0
  23. package/dist/commands/spec/approve.d.ts.map +1 -1
  24. package/dist/commands/spec/approve.js +37 -17
  25. package/dist/commands/spec/approve.js.map +1 -1
  26. package/dist/commands/spec/approve.test.js +79 -5
  27. package/dist/commands/spec/approve.test.js.map +1 -1
  28. package/dist/commands/spec/draft.d.ts.map +1 -1
  29. package/dist/commands/spec/draft.js +3 -1
  30. package/dist/commands/spec/draft.js.map +1 -1
  31. package/dist/commands/spec/draft.test.js +16 -2
  32. package/dist/commands/spec/draft.test.js.map +1 -1
  33. package/dist/commands/spec/implement.d.ts.map +1 -1
  34. package/dist/commands/spec/implement.js +52 -15
  35. package/dist/commands/spec/implement.js.map +1 -1
  36. package/dist/commands/spec/spec-approval-flow.integration.test.js +25 -5
  37. package/dist/commands/spec/spec-approval-flow.integration.test.js.map +1 -1
  38. package/dist/repositories/project-settings.d.ts +2 -0
  39. package/dist/repositories/project-settings.d.ts.map +1 -0
  40. package/dist/repositories/project-settings.js +18 -0
  41. package/dist/repositories/project-settings.js.map +1 -0
  42. package/dist/repositories/project-settings.test.d.ts +2 -0
  43. package/dist/repositories/project-settings.test.d.ts.map +1 -0
  44. package/dist/repositories/project-settings.test.js +42 -0
  45. package/dist/repositories/project-settings.test.js.map +1 -0
  46. package/dist/repositories/requirement.d.ts +1 -0
  47. package/dist/repositories/requirement.d.ts.map +1 -1
  48. package/dist/repositories/requirement.js +7 -0
  49. package/dist/repositories/requirement.js.map +1 -1
  50. package/dist/services/approval-service.d.ts +5 -4
  51. package/dist/services/approval-service.d.ts.map +1 -1
  52. package/dist/services/approval-service.js +56 -40
  53. package/dist/services/approval-service.js.map +1 -1
  54. package/dist/services/approval-service.test.js +127 -10
  55. package/dist/services/approval-service.test.js.map +1 -1
  56. package/dist/services/draft-reversion-service.d.ts +2 -1
  57. package/dist/services/draft-reversion-service.d.ts.map +1 -1
  58. package/dist/services/draft-reversion-service.js +49 -33
  59. package/dist/services/draft-reversion-service.js.map +1 -1
  60. package/dist/services/draft-reversion-service.test.js +172 -17
  61. package/dist/services/draft-reversion-service.test.js.map +1 -1
  62. package/dist/services/feedback-validation.d.ts +7 -0
  63. package/dist/services/feedback-validation.d.ts.map +1 -0
  64. package/dist/services/feedback-validation.js +16 -0
  65. package/dist/services/feedback-validation.js.map +1 -0
  66. package/dist/services/feedback-validation.test.d.ts +2 -0
  67. package/dist/services/feedback-validation.test.d.ts.map +1 -0
  68. package/dist/services/feedback-validation.test.js +221 -0
  69. package/dist/services/feedback-validation.test.js.map +1 -0
  70. package/dist/services/init-service.d.ts.map +1 -1
  71. package/dist/services/init-service.js +7 -16
  72. package/dist/services/init-service.js.map +1 -1
  73. package/dist/services/init-service.test.js +7 -34
  74. package/dist/services/init-service.test.js.map +1 -1
  75. package/dist/services/project-settings-service.d.ts +4 -0
  76. package/dist/services/project-settings-service.d.ts.map +1 -0
  77. package/dist/services/project-settings-service.js +22 -0
  78. package/dist/services/project-settings-service.js.map +1 -0
  79. package/dist/services/project-settings-service.test.d.ts +2 -0
  80. package/dist/services/project-settings-service.test.d.ts.map +1 -0
  81. package/dist/services/project-settings-service.test.js +64 -0
  82. package/dist/services/project-settings-service.test.js.map +1 -0
  83. package/dist/services/requirement-service.d.ts +7 -1
  84. package/dist/services/requirement-service.d.ts.map +1 -1
  85. package/dist/services/requirement-service.js +30 -1
  86. package/dist/services/requirement-service.js.map +1 -1
  87. package/dist/services/requirement-service.test.js +208 -4
  88. package/dist/services/requirement-service.test.js.map +1 -1
  89. package/dist/services/specification-service.d.ts +2 -2
  90. package/dist/services/specification-service.d.ts.map +1 -1
  91. package/dist/services/specification-service.js +23 -10
  92. package/dist/services/specification-service.js.map +1 -1
  93. package/dist/services/specification-service.test.js +117 -10
  94. package/dist/services/specification-service.test.js.map +1 -1
  95. package/dist/services/status-transition-service.d.ts +30 -0
  96. package/dist/services/status-transition-service.d.ts.map +1 -0
  97. package/dist/services/status-transition-service.js +61 -0
  98. package/dist/services/status-transition-service.js.map +1 -0
  99. package/dist/services/status-transition-service.test.d.ts +2 -0
  100. package/dist/services/status-transition-service.test.d.ts.map +1 -0
  101. package/dist/services/status-transition-service.test.js +161 -0
  102. package/dist/services/status-transition-service.test.js.map +1 -0
  103. package/dist/services/version-service.d.ts +6 -1
  104. package/dist/services/version-service.d.ts.map +1 -1
  105. package/dist/services/version-service.js +20 -2
  106. package/dist/services/version-service.js.map +1 -1
  107. package/dist/services/version-service.test.js +45 -4
  108. package/dist/services/version-service.test.js.map +1 -1
  109. package/dist/utils/templates.d.ts +1 -0
  110. package/dist/utils/templates.d.ts.map +1 -1
  111. package/dist/utils/templates.js +41 -0
  112. package/dist/utils/templates.js.map +1 -1
  113. package/package.json +4 -4
@@ -11,13 +11,29 @@ vi.mock("../../services/specification-service.js", () => ({
11
11
  vi.mock("../../services/impl-validation-service.js", () => ({
12
12
  checkImplementConsistency: vi.fn(),
13
13
  }));
14
+ vi.mock("../../services/project-settings-service.js", () => ({
15
+ loadProjectSettings: vi.fn(),
16
+ }));
14
17
  import { updateRequirement, showRequirement } from "../../services/requirement-service.js";
15
18
  import { listSpecifications } from "../../services/specification-service.js";
16
19
  import { checkImplementConsistency } from "../../services/impl-validation-service.js";
20
+ import { loadProjectSettings } from "../../services/project-settings-service.js";
17
21
  const mockUpdateRequirement = vi.mocked(updateRequirement);
22
+ const mockLoadProjectSettings = vi.mocked(loadProjectSettings);
18
23
  const mockShowRequirement = vi.mocked(showRequirement);
19
24
  const mockListSpecifications = vi.mocked(listSpecifications);
20
25
  const mockCheckConsistency = vi.mocked(checkImplementConsistency);
26
+ function makeDefaultSettings() {
27
+ return {
28
+ invariants: { versioning: true, cyclicDependencyCheck: true, statusTransitionRules: true, schemaValidation: true },
29
+ approvalPrerequisites: { designMdCheck: true, descriptionMdCheck: false, customFiles: [] },
30
+ statusTransitionPr: { draftToApproved: true, approvedToImplemented: false, toDraft: true },
31
+ branchNaming: { toApprovedPrefix: "reqord", toImplementedPrefix: "reqord", toDraftPrefix: "reqord" },
32
+ feedbackValidation: { blockOnUnresolved: false, severityThreshold: "critical" },
33
+ autoRevert: { onContentChange: "always" },
34
+ consistencyCheck: { specNotImplementedLevel: "warning" },
35
+ };
36
+ }
21
37
  function makeRequirement(overrides = {}) {
22
38
  return {
23
39
  id: "req-000001",
@@ -68,6 +84,8 @@ describe("req implement command", () => {
68
84
  implementCommand.setOptionValue("json", undefined);
69
85
  // Default: no consistency warnings
70
86
  mockCheckConsistency.mockResolvedValue({ warnings: [] });
87
+ // Default: warning level settings
88
+ mockLoadProjectSettings.mockResolvedValue(makeDefaultSettings());
71
89
  });
72
90
  it("approved → implementedへの遷移", async () => {
73
91
  const before = makeRequirement({ status: "approved", version: "2.0" });
@@ -213,6 +231,101 @@ describe("req implement command", () => {
213
231
  // Still proceeds to implement
214
232
  expect(mockUpdateRequirement).toHaveBeenCalled();
215
233
  });
234
+ // spec-000040: specNotImplementedLevel tests
235
+ it("specNotImplementedLevel=warning: spec未実装でも警告のみで実装完了(デフォルト動作)", async () => {
236
+ const before = makeRequirement({ status: "approved" });
237
+ const after = makeRequirement({ status: "implemented" });
238
+ mockShowRequirement.mockResolvedValue({ requirement: before, description: null });
239
+ mockListSpecifications.mockResolvedValue([]);
240
+ mockUpdateRequirement.mockResolvedValue({ before, after, descriptionUpdated: false });
241
+ mockCheckConsistency.mockResolvedValue({
242
+ warnings: [
243
+ {
244
+ type: "spec-not-implemented",
245
+ message: "spec-000001 status is approved (not implemented)",
246
+ details: { id: "spec-000001", currentStatus: "approved" },
247
+ },
248
+ ],
249
+ });
250
+ await implementCommand.parseAsync(["node", "test", "req-000001"]);
251
+ expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining("Consistency check warnings"));
252
+ expect(mockUpdateRequirement).toHaveBeenCalled();
253
+ });
254
+ it("specNotImplementedLevel=error: spec未実装時にエラーで処理をブロック", async () => {
255
+ const before = makeRequirement({ status: "approved" });
256
+ mockShowRequirement.mockResolvedValue({ requirement: before, description: null });
257
+ mockListSpecifications.mockResolvedValue([]);
258
+ mockLoadProjectSettings.mockResolvedValue({
259
+ ...makeDefaultSettings(),
260
+ consistencyCheck: { specNotImplementedLevel: "error" },
261
+ });
262
+ mockCheckConsistency.mockResolvedValue({
263
+ warnings: [
264
+ {
265
+ type: "spec-not-implemented",
266
+ message: "spec-000001 status is approved (not implemented)",
267
+ details: { id: "spec-000001", currentStatus: "approved" },
268
+ },
269
+ ],
270
+ });
271
+ await implementCommand.parseAsync(["node", "test", "req-000001"]);
272
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining("Some specifications are not yet implemented"));
273
+ expect(process.exitCode).toBe(1);
274
+ expect(mockUpdateRequirement).not.toHaveBeenCalled();
275
+ });
276
+ it("specNotImplementedLevel=error: 全spec実装済みなら正常に実装完了", async () => {
277
+ const before = makeRequirement({ status: "approved" });
278
+ const after = makeRequirement({ status: "implemented" });
279
+ mockShowRequirement.mockResolvedValue({ requirement: before, description: null });
280
+ mockListSpecifications.mockResolvedValue([]);
281
+ mockUpdateRequirement.mockResolvedValue({ before, after, descriptionUpdated: false });
282
+ mockLoadProjectSettings.mockResolvedValue({
283
+ ...makeDefaultSettings(),
284
+ consistencyCheck: { specNotImplementedLevel: "error" },
285
+ });
286
+ mockCheckConsistency.mockResolvedValue({ warnings: [] });
287
+ await implementCommand.parseAsync(["node", "test", "req-000001"]);
288
+ expect(mockUpdateRequirement).toHaveBeenCalled();
289
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining("Marked requirement as implemented"));
290
+ });
291
+ it("specNotImplementedLevel=error: specが0件なら警告もエラーもなく正常処理", async () => {
292
+ const before = makeRequirement({ status: "approved" });
293
+ const after = makeRequirement({ status: "implemented" });
294
+ mockShowRequirement.mockResolvedValue({ requirement: before, description: null });
295
+ mockListSpecifications.mockResolvedValue([]);
296
+ mockUpdateRequirement.mockResolvedValue({ before, after, descriptionUpdated: false });
297
+ mockLoadProjectSettings.mockResolvedValue({
298
+ ...makeDefaultSettings(),
299
+ consistencyCheck: { specNotImplementedLevel: "error" },
300
+ });
301
+ mockCheckConsistency.mockResolvedValue({ warnings: [] });
302
+ await implementCommand.parseAsync(["node", "test", "req-000001"]);
303
+ expect(mockUpdateRequirement).toHaveBeenCalled();
304
+ });
305
+ it("specNotImplementedLevel=error: issue-not-closedは影響を受けず常に警告のみで通過", async () => {
306
+ const before = makeRequirement({ status: "approved" });
307
+ const after = makeRequirement({ status: "implemented" });
308
+ mockShowRequirement.mockResolvedValue({ requirement: before, description: null });
309
+ mockListSpecifications.mockResolvedValue([]);
310
+ mockUpdateRequirement.mockResolvedValue({ before, after, descriptionUpdated: false });
311
+ mockLoadProjectSettings.mockResolvedValue({
312
+ ...makeDefaultSettings(),
313
+ consistencyCheck: { specNotImplementedLevel: "error" },
314
+ });
315
+ mockCheckConsistency.mockResolvedValue({
316
+ warnings: [
317
+ {
318
+ type: "issue-not-closed",
319
+ message: "#44 (Service implementation) is open",
320
+ details: { id: "44", currentStatus: "open" },
321
+ },
322
+ ],
323
+ });
324
+ await implementCommand.parseAsync(["node", "test", "req-000001"]);
325
+ // issue-not-closed is not blocked by specNotImplementedLevel
326
+ expect(mockUpdateRequirement).toHaveBeenCalled();
327
+ expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining("Consistency check warnings"));
328
+ });
216
329
  it("整合性チェック警告があってもimplemented遷移完了", async () => {
217
330
  const before = makeRequirement({ status: "approved" });
218
331
  const after = makeRequirement({ status: "implemented" });
@@ -1 +1 @@
1
- {"version":3,"file":"implement.test.js","sourceRoot":"","sources":["../../../src/commands/req/implement.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,gBAAgB;AAChB,EAAE,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;IAC1B,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;CACzB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC5B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1D,yBAAyB,EAAE,EAAE,CAAC,EAAE,EAAE;CACnC,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAEtF,MAAM,qBAAqB,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC3D,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACvD,MAAM,sBAAsB,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC7D,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAElE,SAAS,eAAe,CAAC,YAAkC,EAAE;IAC3D,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;QACjC,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE;YACL,WAAW,EAAE,wCAAwC;YACrD,aAAa,EAAE,EAAE;SAClB;QACD,eAAe,EAAE,EAAE;QACnB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;QAC7B,YAAY,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1D,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,YAAoC,EAAE;IAC/D,OAAO;QACL,EAAE,EAAE,aAAa;QACjB,aAAa,EAAE,YAAY;QAC3B,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;QACjC,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE;YACL,MAAM,EAAE,sCAAsC;YAC9C,aAAa,EAAE,EAAE;SAClB;QACD,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,aAA0C,CAAC;IAC/C,IAAI,eAA4C,CAAC;IAEjD,IAAI,cAA2C,CAAC;IAEhD,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtE,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC1E,cAAc,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxE,+BAA+B;QAC/B,gBAAgB,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnD,mCAAmC;QACnC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzE,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtF,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAChD,OAAO,CAAC,GAAG,EAAE,EACb,YAAY,EACZ,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,aAAa;SACtB,CAAC,CACH,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,MAAM,CAAC,gBAAgB,CAAC,+CAA+C,CAAC,CACzE,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzE,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtF,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,+CAA+C;QAC/C,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAC5C,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG;YACZ,iBAAiB,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5E,iBAAiB,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAChF,CAAC;QAEF,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAChD,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtF,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CACtD,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,CAAC;QAC/E,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,qCAAqC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAEzD,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtF,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAC5C,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC;YAC7B,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,KAAK;YACd,cAAc,EAAE,EAAE;SACnB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,KAAK;YACd,cAAc,EAAE;gBACd;oBACE,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,aAAa;oBACrB,SAAS,EAAE,sBAAsB;oBACjC,OAAO,EAAE,6CAA6C;iBACvD;aACF;SACF,CAAC,CAAC;QAEH,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtF,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,MAAM,CAAC,gBAAgB,CAAC,sDAAsD,CAAC,CAChF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzE,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtF,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE5E,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,4CAA4C;QAC5C,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAC5C,MAAM,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,CAC7D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAEjD,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,MAAM,CAAC,gBAAgB,CAAC,uDAAuD,CAAC,CACjF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAEvD,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,MAAM,CAAC,gBAAgB,CAAC,6DAA6D,CAAC,CACvF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAEjD,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE5E,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CACxC,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAC5C,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAEpC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAChD,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtF,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE5E,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAC5C,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAEzD,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,oBAAoB,CAAC,iBAAiB,CAAC;YACrC,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,kDAAkD;oBAC3D,OAAO,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE;iBAC1D;gBACD;oBACE,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,sCAAsC;oBAC/C,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE;iBAC7C;aACF;SACF,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CACtD,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,CAC1D,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,gBAAgB,CAAC,sCAAsC,CAAC,CAChE,CAAC;QACF,8BAA8B;QAC9B,MAAM,CAAC,qBAAqB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAEzD,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,oBAAoB,CAAC,iBAAiB,CAAC;YACrC,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,+CAA+C;oBACxD,OAAO,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE;iBACvD;aACF;SACF,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,MAAM,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,CAC7D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"implement.test.js","sourceRoot":"","sources":["../../../src/commands/req/implement.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/req/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,aAAa,SA2IvB,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/req/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,aAAa,SA8IvB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { Command } from "commander";
2
2
  import chalk from "chalk";
3
3
  import { updateRequirement, } from "../../services/requirement-service.js";
4
+ import { loadProjectSettings } from "../../services/project-settings-service.js";
4
5
  import * as fs from "../../repositories/file-system.js";
5
6
  import { handleError } from "../../utils/error-handler.js";
6
7
  import { AppError, ErrorCode } from "../../utils/errors.js";
@@ -64,6 +65,8 @@ export const updateCommand = new Command("update")
64
65
  updateOpts.versionBump = "major";
65
66
  if (options.patch)
66
67
  updateOpts.versionBump = "patch";
68
+ // Load project settings for auto-revert control
69
+ updateOpts.settings = await loadProjectSettings(cwd);
67
70
  const { before, after, descriptionUpdated } = await updateRequirement(cwd, id, updateOpts);
68
71
  if (options.json) {
69
72
  console.log(JSON.stringify(after, null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/req/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/req/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.test.d.ts","sourceRoot":"","sources":["../../../src/commands/req/update.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ // Mock services BEFORE imports
3
+ vi.mock("../../services/requirement-service.js", () => ({
4
+ updateRequirement: vi.fn(),
5
+ }));
6
+ vi.mock("../../services/project-settings-service.js", () => ({
7
+ loadProjectSettings: vi.fn(),
8
+ }));
9
+ vi.mock("../../repositories/file-system.js", () => ({
10
+ readText: vi.fn(),
11
+ }));
12
+ import { updateCommand } from "./update.js";
13
+ import { updateRequirement } from "../../services/requirement-service.js";
14
+ import { loadProjectSettings } from "../../services/project-settings-service.js";
15
+ function makeRequirement(overrides = {}) {
16
+ return {
17
+ id: "req-000001",
18
+ version: "1.0",
19
+ title: "Test Requirement",
20
+ status: "draft",
21
+ priority: "medium",
22
+ createdAt: "2026-01-01T00:00:00Z",
23
+ updatedAt: "2026-01-01T00:00:00Z",
24
+ versionHistory: [],
25
+ files: {
26
+ description: "requirements/req-000001/description.md",
27
+ supplementary: [],
28
+ },
29
+ successCriteria: ["Criterion 1"],
30
+ format: { type: "free-form" },
31
+ dependencies: { blockedBy: [], blocks: [], relatedTo: [] },
32
+ ...overrides,
33
+ };
34
+ }
35
+ const defaultSettings = {
36
+ invariants: { versioning: true, cyclicDependencyCheck: true, statusTransitionRules: true, schemaValidation: true },
37
+ approvalPrerequisites: { designMdCheck: true, descriptionMdCheck: false, customFiles: [] },
38
+ statusTransitionPr: { draftToApproved: true, approvedToImplemented: false, toDraft: true },
39
+ branchNaming: { toApprovedPrefix: "reqord", toImplementedPrefix: "reqord", toDraftPrefix: "reqord" },
40
+ feedbackValidation: { blockOnUnresolved: false, severityThreshold: "critical" },
41
+ autoRevert: { onContentChange: "always" },
42
+ consistencyCheck: { specNotImplementedLevel: "warning" },
43
+ };
44
+ describe("updateCommand - settings連携", () => {
45
+ beforeEach(() => {
46
+ vi.clearAllMocks();
47
+ process.exitCode = 0;
48
+ // Reset Commander option state
49
+ updateCommand.setOptionValue("title", undefined);
50
+ updateCommand.setOptionValue("status", undefined);
51
+ updateCommand.setOptionValue("priority", undefined);
52
+ updateCommand.setOptionValue("patchFile", undefined);
53
+ updateCommand.setOptionValue("descriptionFile", undefined);
54
+ updateCommand.setOptionValue("major", undefined);
55
+ updateCommand.setOptionValue("patch", undefined);
56
+ updateCommand.setOptionValue("json", undefined);
57
+ });
58
+ it("updateRequirementにsettingsが渡される", async () => {
59
+ const req = makeRequirement({ status: "approved" });
60
+ vi.mocked(loadProjectSettings).mockResolvedValue(defaultSettings);
61
+ vi.mocked(updateRequirement).mockResolvedValue({
62
+ before: req,
63
+ after: { ...req, title: "New Title" },
64
+ descriptionUpdated: false,
65
+ versionChanged: false,
66
+ });
67
+ await updateCommand.parseAsync(["node", "update", "req-000001", "--title", "New Title"]);
68
+ expect(loadProjectSettings).toHaveBeenCalled();
69
+ expect(updateRequirement).toHaveBeenCalledWith(expect.any(String), "req-000001", expect.objectContaining({
70
+ title: "New Title",
71
+ settings: defaultSettings,
72
+ }));
73
+ });
74
+ it("autoRevert.onContentChange=neverの設定がupdateRequirementに渡される", async () => {
75
+ const neverSettings = {
76
+ ...defaultSettings,
77
+ autoRevert: { onContentChange: "never" },
78
+ };
79
+ const req = makeRequirement({ status: "approved" });
80
+ vi.mocked(loadProjectSettings).mockResolvedValue(neverSettings);
81
+ vi.mocked(updateRequirement).mockResolvedValue({
82
+ before: req,
83
+ after: req,
84
+ descriptionUpdated: false,
85
+ versionChanged: false,
86
+ });
87
+ await updateCommand.parseAsync(["node", "update", "req-000001", "--title", "New Title"]);
88
+ expect(updateRequirement).toHaveBeenCalledWith(expect.any(String), "req-000001", expect.objectContaining({
89
+ settings: neverSettings,
90
+ }));
91
+ });
92
+ });
93
+ //# sourceMappingURL=update.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.test.js","sourceRoot":"","sources":["../../../src/commands/req/update.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../../src/commands/spec/approve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,eAAO,MAAM,kBAAkB,SA6F3B,CAAC"}
1
+ {"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../../src/commands/spec/approve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,eAAO,MAAM,kBAAkB,SAyH3B,CAAC"}
@@ -8,6 +8,9 @@ import { specificationHandler } from "../../services/specification-approval-hand
8
8
  import { extractDesignSummary, extractDesignSection, extractComponentList, buildSpecApprovalPrBody, } from "../../services/spec-approval-helpers.js";
9
9
  import { handleError } from "../../utils/error-handler.js";
10
10
  import { findUnresolvedByArtifactId } from "../../repositories/feedback.js";
11
+ import { loadProjectSettings } from "../../services/project-settings-service.js";
12
+ import { shouldBlockApproval } from "../../services/feedback-validation.js";
13
+ import { AppError, ErrorCode } from "../../utils/errors.js";
11
14
  export const specApproveCommand = new Command("approve")
12
15
  .description("Create an approval request PR for a specification (approval is confirmed when the PR is merged)")
13
16
  .argument("<id>", "Specification ID (e.g. spec-000001)")
@@ -15,10 +18,12 @@ export const specApproveCommand = new Command("approve")
15
18
  .action(async (id, options) => {
16
19
  const cwd = process.cwd();
17
20
  try {
18
- // 1. Load spec and check for existing approval PR first
21
+ // 1. Load project settings
22
+ const settings = await loadProjectSettings(cwd);
23
+ // 2. Load spec and check for existing approval PR first
19
24
  const { specification, design } = await showSpecification(cwd, id);
20
- // 2. Check prerequisites
21
- const prereqs = await checkSpecApprovalPrerequisites(cwd, id);
25
+ // 3. Check prerequisites
26
+ const prereqs = await checkSpecApprovalPrerequisites(cwd, id, settings);
22
27
  if (!prereqs.ok) {
23
28
  for (const error of prereqs.errors) {
24
29
  console.error(chalk.red(`Error: ${error}`));
@@ -28,17 +33,27 @@ export const specApproveCommand = new Command("approve")
28
33
  return;
29
34
  }
30
35
  const { requirement } = await showRequirement(cwd, specification.requirementId);
31
- // Feedback warning before approval
36
+ // Feedback warning (or block) before approval
32
37
  const unresolvedFeedbacks = await findUnresolvedByArtifactId(cwd, id);
33
38
  if (unresolvedFeedbacks.length > 0) {
34
- console.log(chalk.yellow(`⚠ Warning: ${specification.id} has ${unresolvedFeedbacks.length} unresolved feedback(s):`));
35
- for (const fb of unresolvedFeedbacks) {
36
- console.log(chalk.yellow(` - #${fb.githubIssue} (${fb.type ?? "unclassified"}, severity: ${fb.severity ?? "medium"})`));
39
+ const { blocked, blockingFeedbacks } = shouldBlockApproval(unresolvedFeedbacks, settings);
40
+ if (blocked) {
41
+ console.error(chalk.red(`Error: ${specification.id} has ${blockingFeedbacks.length} unresolved feedback(s) that meet or exceed the severity threshold (${settings.feedbackValidation.severityThreshold}):`));
42
+ for (const fb of blockingFeedbacks) {
43
+ console.error(chalk.red(` - #${fb.githubIssue} (${fb.type ?? "unclassified"}, severity: ${fb.severity ?? "low"})`));
44
+ }
45
+ throw new AppError(`Approval blocked: ${blockingFeedbacks.length} unresolved feedback(s) at or above severity threshold "${settings.feedbackValidation.severityThreshold}". Resolve them or set feedbackValidation.blockOnUnresolved to false in setting.yaml.`, ErrorCode.VALIDATION_ERROR);
46
+ }
47
+ else {
48
+ console.log(chalk.yellow(`⚠ Warning: ${specification.id} has ${unresolvedFeedbacks.length} unresolved feedback(s):`));
49
+ for (const fb of unresolvedFeedbacks) {
50
+ console.log(chalk.yellow(` - #${fb.githubIssue} (${fb.type ?? "unclassified"}, severity: ${fb.severity ?? "low"})`));
51
+ }
52
+ console.log(chalk.yellow("Proceeding with approval..."));
53
+ console.log();
37
54
  }
38
- console.log(chalk.yellow("Proceeding with approval..."));
39
- console.log();
40
55
  }
41
- // 3. Build custom handler with actual design content
56
+ // 4. Build custom handler with actual design content
42
57
  const designContent = design ?? "";
43
58
  const designSummary = extractDesignSummary(designContent);
44
59
  const testPlan = extractDesignSection(designContent, "Test Plan")
@@ -57,7 +72,7 @@ export const specApproveCommand = new Command("approve")
57
72
  components: components.length > 0 ? components : undefined,
58
73
  }),
59
74
  };
60
- // 4. Build target
75
+ // 5. Build target
61
76
  const target = {
62
77
  type: "specification",
63
78
  id: specification.id,
@@ -69,17 +84,22 @@ export const specApproveCommand = new Command("approve")
69
84
  `${REQORD_DIR}/${SPECIFICATIONS_DIR}/${specification.id}/design.md`,
70
85
  ],
71
86
  };
72
- // 5. Start approval
73
- const result = await startApproval(cwd, target, customHandler, {
87
+ // 6. Start approval
88
+ const result = await startApproval(cwd, target, customHandler, settings, {
74
89
  dryRun: options.dryRun,
75
90
  });
76
91
  if (options.dryRun) {
77
92
  return;
78
93
  }
79
- console.log(chalk.green(`Approval PR created: ${id}`));
80
- console.log(`Approval will be confirmed when the PR is merged`);
81
- console.log(` Branch: ${result.branchName}`);
82
- console.log(` PR: ${result.prUrl}`);
94
+ if (result.prUrl) {
95
+ console.log(chalk.green(`Approval PR created: ${id}`));
96
+ console.log(`Approval will be confirmed when the PR is merged`);
97
+ console.log(` Branch: ${result.branchName}`);
98
+ console.log(` PR: ${result.prUrl}`);
99
+ }
100
+ else {
101
+ console.log(chalk.green(`Approved: ${id} (direct commit)`));
102
+ }
83
103
  }
84
104
  catch (error) {
85
105
  handleError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../../src/commands/spec/approve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../../src/commands/spec/approve.ts"],"names":[],"mappings":"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"}
@@ -28,11 +28,50 @@ vi.mock("../../services/spec-approval-helpers.js", () => ({
28
28
  vi.mock("../../repositories/feedback.js", () => ({
29
29
  findUnresolvedByArtifactId: vi.fn(),
30
30
  }));
31
+ vi.mock("../../services/project-settings-service.js", () => ({
32
+ loadProjectSettings: vi.fn(),
33
+ }));
31
34
  import { showSpecification, checkSpecApprovalPrerequisites, } from "../../services/specification-service.js";
32
35
  import { showRequirement } from "../../services/requirement-service.js";
33
36
  import { startApproval, } from "../../services/approval-service.js";
34
37
  import { extractDesignSummary, buildSpecApprovalPrBody, } from "../../services/spec-approval-helpers.js";
35
38
  import { findUnresolvedByArtifactId } from "../../repositories/feedback.js";
39
+ import { loadProjectSettings } from "../../services/project-settings-service.js";
40
+ function makeDefaultSettings() {
41
+ return {
42
+ invariants: {
43
+ versioning: true,
44
+ cyclicDependencyCheck: true,
45
+ statusTransitionRules: true,
46
+ schemaValidation: true,
47
+ },
48
+ approvalPrerequisites: {
49
+ designMdCheck: true,
50
+ descriptionMdCheck: false,
51
+ customFiles: [],
52
+ },
53
+ statusTransitionPr: {
54
+ draftToApproved: true,
55
+ approvedToImplemented: false,
56
+ toDraft: true,
57
+ },
58
+ branchNaming: {
59
+ toApprovedPrefix: "reqord",
60
+ toImplementedPrefix: "reqord",
61
+ toDraftPrefix: "reqord",
62
+ },
63
+ feedbackValidation: {
64
+ blockOnUnresolved: false,
65
+ severityThreshold: "critical",
66
+ },
67
+ autoRevert: {
68
+ onContentChange: "always",
69
+ },
70
+ consistencyCheck: {
71
+ specNotImplementedLevel: "warning",
72
+ },
73
+ };
74
+ }
36
75
  function makeRequirement(overrides = {}) {
37
76
  return {
38
77
  id: "req-000001",
@@ -77,6 +116,8 @@ describe("specApproveCommand", () => {
77
116
  specApproveCommand.setOptionValue("dryRun", undefined);
78
117
  // Default: no unresolved feedbacks
79
118
  vi.mocked(findUnresolvedByArtifactId).mockResolvedValue([]);
119
+ // Default: load project settings
120
+ vi.mocked(loadProjectSettings).mockResolvedValue(makeDefaultSettings());
80
121
  });
81
122
  it("正常系: 前提条件OKでPR作成", async () => {
82
123
  const specification = makeSpecification();
@@ -104,8 +145,10 @@ describe("specApproveCommand", () => {
104
145
  vi.mocked(startApproval).mockResolvedValue(approvalResult);
105
146
  const consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => { });
106
147
  await specApproveCommand.parseAsync(["node", "test", "spec-000001"]);
107
- // Prerequisites checked
108
- expect(checkSpecApprovalPrerequisites).toHaveBeenCalledWith(process.cwd(), "spec-000001");
148
+ // Project settings loaded
149
+ expect(loadProjectSettings).toHaveBeenCalledWith(process.cwd());
150
+ // Prerequisites checked with settings
151
+ expect(checkSpecApprovalPrerequisites).toHaveBeenCalledWith(process.cwd(), "spec-000001", expect.any(Object));
109
152
  // Spec and requirement loaded
110
153
  expect(showSpecification).toHaveBeenCalledWith(process.cwd(), "spec-000001");
111
154
  expect(showRequirement).toHaveBeenCalledWith(process.cwd(), "req-000001");
@@ -123,7 +166,7 @@ describe("specApproveCommand", () => {
123
166
  ".reqord/specifications/spec-000001/design.md",
124
167
  ],
125
168
  }, expect.any(Object), // custom handler
126
- { dryRun: undefined });
169
+ expect.objectContaining({ statusTransitionPr: expect.any(Object) }), { dryRun: undefined });
127
170
  // Success message
128
171
  expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining("Approval PR created: spec-000001"));
129
172
  expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining("Approval will be confirmed when the PR is merged"));
@@ -152,7 +195,7 @@ describe("specApproveCommand", () => {
152
195
  consoleErrorSpy.mockRestore();
153
196
  });
154
197
  it("Specificationが存在しない場合のエラー", async () => {
155
- vi.mocked(checkSpecApprovalPrerequisites).mockRejectedValue(new Error("Specification spec-999999 not found."));
198
+ vi.mocked(loadProjectSettings).mockRejectedValue(new Error("Specification spec-999999 not found."));
156
199
  const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => { });
157
200
  await specApproveCommand.parseAsync(["node", "test", "spec-999999"]);
158
201
  expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining("Specification spec-999999 not found."));
@@ -184,7 +227,7 @@ describe("specApproveCommand", () => {
184
227
  vi.mocked(startApproval).mockResolvedValue(approvalResult);
185
228
  const consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => { });
186
229
  await specApproveCommand.parseAsync(["node", "test", "spec-000001", "--dry-run"]);
187
- expect(startApproval).toHaveBeenCalledWith(process.cwd(), expect.any(Object), expect.any(Object), { dryRun: true });
230
+ expect(startApproval).toHaveBeenCalledWith(process.cwd(), expect.any(Object), expect.any(Object), expect.objectContaining({ statusTransitionPr: expect.any(Object) }), { dryRun: true });
188
231
  // Success message NOT shown in dry-run
189
232
  expect(consoleLogSpy).not.toHaveBeenCalledWith(expect.stringContaining("Approval PR created"));
190
233
  consoleLogSpy.mockRestore();
@@ -300,5 +343,36 @@ describe("specApproveCommand", () => {
300
343
  expect(consoleLogSpy).not.toHaveBeenCalledWith(expect.stringContaining("Warning"));
301
344
  consoleLogSpy.mockRestore();
302
345
  });
346
+ it("settingsのdesignMdCheck=falseでも承認チェックにsettingsが渡される", async () => {
347
+ const customSettings = makeDefaultSettings();
348
+ customSettings.approvalPrerequisites.designMdCheck = false;
349
+ vi.mocked(loadProjectSettings).mockResolvedValue(customSettings);
350
+ const specification = makeSpecification();
351
+ const requirement = makeRequirement();
352
+ vi.mocked(checkSpecApprovalPrerequisites).mockResolvedValue({
353
+ ok: true,
354
+ errors: [],
355
+ });
356
+ vi.mocked(showSpecification).mockResolvedValue({
357
+ specification,
358
+ design: null,
359
+ });
360
+ vi.mocked(showRequirement).mockResolvedValue({
361
+ requirement,
362
+ description: null,
363
+ });
364
+ vi.mocked(extractDesignSummary).mockReturnValue("");
365
+ vi.mocked(buildSpecApprovalPrBody).mockReturnValue("PR Body");
366
+ vi.mocked(startApproval).mockResolvedValue({
367
+ branchName: "reqord/spec-000001-approve-v1.0",
368
+ prNumber: 1,
369
+ prUrl: "https://github.com/owner/repo/pull/1",
370
+ });
371
+ const consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => { });
372
+ await specApproveCommand.parseAsync(["node", "test", "spec-000001"]);
373
+ // Settings passed to checkSpecApprovalPrerequisites
374
+ expect(checkSpecApprovalPrerequisites).toHaveBeenCalledWith(process.cwd(), "spec-000001", customSettings);
375
+ consoleLogSpy.mockRestore();
376
+ });
303
377
  });
304
378
  //# sourceMappingURL=approve.test.js.map