@urateam/core 0.1.56 → 0.1.58

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 (152) hide show
  1. package/dist/__tests__/audit-immutability.test.js +8 -0
  2. package/dist/__tests__/audit-immutability.test.js.map +1 -1
  3. package/dist/__tests__/auth-check.test.js +130 -16
  4. package/dist/__tests__/auth-check.test.js.map +1 -1
  5. package/dist/__tests__/auth-monitor.test.js +127 -103
  6. package/dist/__tests__/auth-monitor.test.js.map +1 -1
  7. package/dist/__tests__/circuit-breaker-config.test.d.ts +2 -0
  8. package/dist/__tests__/circuit-breaker-config.test.d.ts.map +1 -0
  9. package/dist/__tests__/circuit-breaker-config.test.js +32 -0
  10. package/dist/__tests__/circuit-breaker-config.test.js.map +1 -0
  11. package/dist/__tests__/circuit-breaker-events.test.d.ts +2 -0
  12. package/dist/__tests__/circuit-breaker-events.test.d.ts.map +1 -0
  13. package/dist/__tests__/circuit-breaker-events.test.js +53 -0
  14. package/dist/__tests__/circuit-breaker-events.test.js.map +1 -0
  15. package/dist/__tests__/circuit-breaker-integration.test.d.ts +2 -0
  16. package/dist/__tests__/circuit-breaker-integration.test.d.ts.map +1 -0
  17. package/dist/__tests__/circuit-breaker-integration.test.js +192 -0
  18. package/dist/__tests__/circuit-breaker-integration.test.js.map +1 -0
  19. package/dist/__tests__/circuit-breaker-probe.test.d.ts +2 -0
  20. package/dist/__tests__/circuit-breaker-probe.test.d.ts.map +1 -0
  21. package/dist/__tests__/circuit-breaker-probe.test.js +124 -0
  22. package/dist/__tests__/circuit-breaker-probe.test.js.map +1 -0
  23. package/dist/__tests__/circuit-breaker-recover.test.d.ts +2 -0
  24. package/dist/__tests__/circuit-breaker-recover.test.d.ts.map +1 -0
  25. package/dist/__tests__/circuit-breaker-recover.test.js +52 -0
  26. package/dist/__tests__/circuit-breaker-recover.test.js.map +1 -0
  27. package/dist/__tests__/circuit-breaker-sweep.test.d.ts +2 -0
  28. package/dist/__tests__/circuit-breaker-sweep.test.d.ts.map +1 -0
  29. package/dist/__tests__/circuit-breaker-sweep.test.js +118 -0
  30. package/dist/__tests__/circuit-breaker-sweep.test.js.map +1 -0
  31. package/dist/__tests__/execute-stage-session-opts.test.js +1 -1
  32. package/dist/__tests__/execute-stage-session-opts.test.js.map +1 -1
  33. package/dist/__tests__/executor-issue-id.test.js +1 -1
  34. package/dist/__tests__/executor-issue-id.test.js.map +1 -1
  35. package/dist/__tests__/pm-audit-retention-step.test.js +3 -0
  36. package/dist/__tests__/pm-audit-retention-step.test.js.map +1 -1
  37. package/dist/__tests__/pm-budget-alerts.test.d.ts +14 -0
  38. package/dist/__tests__/pm-budget-alerts.test.d.ts.map +1 -1
  39. package/dist/__tests__/pm-budget-alerts.test.js +90 -18
  40. package/dist/__tests__/pm-budget-alerts.test.js.map +1 -1
  41. package/dist/__tests__/pm-budget-refused-event.test.js +2 -0
  42. package/dist/__tests__/pm-budget-refused-event.test.js.map +1 -1
  43. package/dist/__tests__/pm-budget-utc-boundary.test.d.ts +2 -0
  44. package/dist/__tests__/pm-budget-utc-boundary.test.d.ts.map +1 -0
  45. package/dist/__tests__/pm-budget-utc-boundary.test.js +128 -0
  46. package/dist/__tests__/pm-budget-utc-boundary.test.js.map +1 -0
  47. package/dist/__tests__/pm-cost-rollup-step.test.js +2 -0
  48. package/dist/__tests__/pm-cost-rollup-step.test.js.map +1 -1
  49. package/dist/__tests__/pm-promote.test.js +111 -0
  50. package/dist/__tests__/pm-promote.test.js.map +1 -1
  51. package/dist/__tests__/pm-scheduler.test.js +1 -0
  52. package/dist/__tests__/pm-scheduler.test.js.map +1 -1
  53. package/dist/__tests__/pm-sso-prune-step.test.js +2 -0
  54. package/dist/__tests__/pm-sso-prune-step.test.js.map +1 -1
  55. package/dist/__tests__/release-manager-slack-handler.test.js +66 -0
  56. package/dist/__tests__/release-manager-slack-handler.test.js.map +1 -1
  57. package/dist/__tests__/reproduce-bec113-pagination-warning.test.js +1 -0
  58. package/dist/__tests__/reproduce-bec113-pagination-warning.test.js.map +1 -1
  59. package/dist/__tests__/reproduce-bec62.test.js +1 -0
  60. package/dist/__tests__/reproduce-bec62.test.js.map +1 -1
  61. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js +2 -0
  62. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js.map +1 -1
  63. package/dist/__tests__/resolve-claude-auth.test.js +10 -8
  64. package/dist/__tests__/resolve-claude-auth.test.js.map +1 -1
  65. package/dist/__tests__/session-lazy-creation.test.js +1 -1
  66. package/dist/__tests__/session-lazy-creation.test.js.map +1 -1
  67. package/dist/__tests__/session-resume-fallback.test.js +1 -1
  68. package/dist/__tests__/session-resume-fallback.test.js.map +1 -1
  69. package/dist/__tests__/stage-models.test.js +2 -2
  70. package/dist/__tests__/stage-models.test.js.map +1 -1
  71. package/dist/__tests__/start-todo.test.js +29 -0
  72. package/dist/__tests__/start-todo.test.js.map +1 -1
  73. package/dist/__tests__/triage-preserve-acs.test.d.ts +2 -0
  74. package/dist/__tests__/triage-preserve-acs.test.d.ts.map +1 -0
  75. package/dist/__tests__/triage-preserve-acs.test.js +240 -0
  76. package/dist/__tests__/triage-preserve-acs.test.js.map +1 -0
  77. package/dist/audit/events.d.ts +29 -0
  78. package/dist/audit/events.d.ts.map +1 -1
  79. package/dist/audit/events.js +44 -0
  80. package/dist/audit/events.js.map +1 -1
  81. package/dist/db/client.d.ts.map +1 -1
  82. package/dist/db/client.js +10 -0
  83. package/dist/db/client.js.map +1 -1
  84. package/dist/db/index.d.ts +1 -1
  85. package/dist/db/index.d.ts.map +1 -1
  86. package/dist/db/index.js +1 -1
  87. package/dist/db/index.js.map +1 -1
  88. package/dist/db/schema.d.ts +88 -0
  89. package/dist/db/schema.d.ts.map +1 -1
  90. package/dist/db/schema.js +15 -0
  91. package/dist/db/schema.js.map +1 -1
  92. package/dist/executor/auth-check.d.ts +30 -7
  93. package/dist/executor/auth-check.d.ts.map +1 -1
  94. package/dist/executor/auth-check.js +66 -16
  95. package/dist/executor/auth-check.js.map +1 -1
  96. package/dist/executor/auth-monitor.d.ts.map +1 -1
  97. package/dist/executor/auth-monitor.js +12 -12
  98. package/dist/executor/auth-monitor.js.map +1 -1
  99. package/dist/executor/executor.js +1 -1
  100. package/dist/executor/executor.js.map +1 -1
  101. package/dist/index.d.ts +2 -1
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +2 -1
  104. package/dist/index.js.map +1 -1
  105. package/dist/pm/actions/circuit-breaker-config.d.ts +13 -0
  106. package/dist/pm/actions/circuit-breaker-config.d.ts.map +1 -0
  107. package/dist/pm/actions/circuit-breaker-config.js +23 -0
  108. package/dist/pm/actions/circuit-breaker-config.js.map +1 -0
  109. package/dist/pm/actions/db-queries.d.ts +21 -0
  110. package/dist/pm/actions/db-queries.d.ts.map +1 -1
  111. package/dist/pm/actions/db-queries.js +84 -2
  112. package/dist/pm/actions/db-queries.js.map +1 -1
  113. package/dist/pm/actions/promote.d.ts +7 -0
  114. package/dist/pm/actions/promote.d.ts.map +1 -1
  115. package/dist/pm/actions/promote.js +17 -1
  116. package/dist/pm/actions/promote.js.map +1 -1
  117. package/dist/pm/actions/recover-circuit-breaker.d.ts +21 -0
  118. package/dist/pm/actions/recover-circuit-breaker.d.ts.map +1 -0
  119. package/dist/pm/actions/recover-circuit-breaker.js +47 -0
  120. package/dist/pm/actions/recover-circuit-breaker.js.map +1 -0
  121. package/dist/pm/actions/select-probe-candidates.d.ts +21 -0
  122. package/dist/pm/actions/select-probe-candidates.d.ts.map +1 -0
  123. package/dist/pm/actions/select-probe-candidates.js +81 -0
  124. package/dist/pm/actions/select-probe-candidates.js.map +1 -0
  125. package/dist/pm/actions/start-todo.d.ts +7 -0
  126. package/dist/pm/actions/start-todo.d.ts.map +1 -1
  127. package/dist/pm/actions/start-todo.js +2 -1
  128. package/dist/pm/actions/start-todo.js.map +1 -1
  129. package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts +28 -0
  130. package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts.map +1 -0
  131. package/dist/pm/actions/sweep-recovered-circuit-breakers.js +47 -0
  132. package/dist/pm/actions/sweep-recovered-circuit-breakers.js.map +1 -0
  133. package/dist/pm/actions/triage-prompt.d.ts +14 -0
  134. package/dist/pm/actions/triage-prompt.d.ts.map +1 -1
  135. package/dist/pm/actions/triage-prompt.js +52 -9
  136. package/dist/pm/actions/triage-prompt.js.map +1 -1
  137. package/dist/pm/actions/triage.d.ts.map +1 -1
  138. package/dist/pm/actions/triage.js +37 -24
  139. package/dist/pm/actions/triage.js.map +1 -1
  140. package/dist/pm/scheduler.d.ts +3 -0
  141. package/dist/pm/scheduler.d.ts.map +1 -1
  142. package/dist/pm/scheduler.js +40 -1
  143. package/dist/pm/scheduler.js.map +1 -1
  144. package/dist/release-manager/slack-handler.d.ts +6 -0
  145. package/dist/release-manager/slack-handler.d.ts.map +1 -1
  146. package/dist/release-manager/slack-handler.js +76 -1
  147. package/dist/release-manager/slack-handler.js.map +1 -1
  148. package/dist/types.d.ts +6 -0
  149. package/dist/types.d.ts.map +1 -1
  150. package/dist/types.js +15 -0
  151. package/dist/types.js.map +1 -1
  152. package/package.json +1 -1
@@ -1,23 +1,28 @@
1
1
  /**
2
- * Tests for AuthMonitor (BEC-207 / BEC-237) periodic Claude session health-check.
2
+ * Tests for AuthMonitor (BEC-207 / BEC-237 / BEC-244).
3
3
  *
4
4
  * Covers:
5
5
  * - Returns early ONLY when ANTHROPIC_API_KEY is set and CLAUDE_CODE_OAUTH_TOKEN is NOT set.
6
- * - When CLAUDE_CODE_OAUTH_TOKEN is set, runs the auth probe regardless of ANTHROPIC_API_KEY.
7
- * - Runs `claude auth status` when neither env var is set (mounted-session path).
8
- * - On expiry: sends Slack alert (text branches on authMethod) and writes claude.auth_expired
9
- * audit event (payload includes authMethod).
6
+ * - When CLAUDE_CODE_OAUTH_TOKEN is set, runs the real-API probe regardless of ANTHROPIC_API_KEY.
7
+ * - Runs the real-API probe when neither env var is set (mounted-session path).
8
+ * - On auth expiry (probe returns auth error): sends Slack alert + writes claude.auth_expired event.
9
+ * - On network error: probe returns { valid: true } (fail-open) no alert, no audit event.
10
10
  * - 6-hour throttle: skips check if interval has not elapsed.
11
11
  * - createAuthMonitor stateful wrapper manages lastCheckTime across calls.
12
12
  */
13
13
  import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
14
14
  // ---------------------------------------------------------------------------
15
- // Mocks — must be declared before any imports that use the mocked modules.
15
+ // Mocks — declared before any imports that use the mocked modules.
16
16
  // vi.mock() is hoisted by vitest, so these run before module initialisation.
17
17
  // ---------------------------------------------------------------------------
18
- // Mock child_process.execFile used by runAuthMonitorCheck
19
- vi.mock("node:child_process", () => ({
20
- execFile: vi.fn(),
18
+ // Mock probeClaudeAuth (and other exports) from auth-check.js.
19
+ // auth-monitor.ts imports probeClaudeAuth from there; mocking at module level
20
+ // lets each test control the probe outcome cleanly.
21
+ vi.mock("../executor/auth-check.js", () => ({
22
+ resetAuthCheckCache: vi.fn(),
23
+ resolveClaudeAuth: vi.fn(() => ({ method: "mounted-session" })),
24
+ isClaudeAuthValid: vi.fn().mockResolvedValue(true),
25
+ probeClaudeAuth: vi.fn(),
21
26
  }));
22
27
  // Mock postSlackMessage
23
28
  vi.mock("../pm/slack-helpers.js", () => ({
@@ -27,38 +32,32 @@ vi.mock("../pm/slack-helpers.js", () => ({
27
32
  vi.mock("../audit/writer.js", () => ({
28
33
  logAuditEventUnchecked: vi.fn().mockResolvedValue(undefined),
29
34
  }));
30
- // Mock resetAuthCheckCache (auth-monitor calls this to bypass the 5-min cache)
31
- vi.mock("../executor/auth-check.js", () => ({
32
- resetAuthCheckCache: vi.fn(),
33
- resolveClaudeAuth: vi.fn(() => ({ method: "session" })),
34
- isClaudeAuthValid: vi.fn().mockResolvedValue(true),
35
- }));
36
35
  // ---------------------------------------------------------------------------
37
36
  // Static imports (mocks are in place due to hoisting)
38
37
  // ---------------------------------------------------------------------------
39
- import { execFile } from "node:child_process";
40
38
  import { postSlackMessage } from "../pm/slack-helpers.js";
41
39
  import { logAuditEventUnchecked } from "../audit/writer.js";
40
+ import { probeClaudeAuth } from "../executor/auth-check.js";
42
41
  import { runAuthMonitorCheck, createAuthMonitor } from "../executor/auth-monitor.js";
43
- const mockExecFile = vi.mocked(execFile);
42
+ const mockProbeClaudeAuth = vi.mocked(probeClaudeAuth);
44
43
  const mockPostSlackMessage = vi.mocked(postSlackMessage);
45
44
  const mockLogAuditEvent = vi.mocked(logAuditEventUnchecked);
46
45
  // ---------------------------------------------------------------------------
47
46
  // Helpers
48
47
  // ---------------------------------------------------------------------------
49
- function simulateCliSuccess() {
50
- mockExecFile.mockImplementation((_cmd, _args, _opts, cb) => {
51
- cb(null);
52
- return {};
53
- });
48
+ function simulateProbeSuccess() {
49
+ mockProbeClaudeAuth.mockResolvedValue({ valid: true });
54
50
  }
55
- function simulateCliFailure() {
56
- mockExecFile.mockImplementation((_cmd, _args, _opts, cb) => {
57
- cb(new Error("session expired"));
58
- return {};
59
- });
51
+ /** Auth failure — probe detects a 401 from the API. */
52
+ function simulateProbeAuthFailure() {
53
+ mockProbeClaudeAuth.mockResolvedValue({ valid: false, reason: "auth" });
54
+ }
55
+ /** Network / transient error — probe fails open (no alert should fire). */
56
+ function simulateProbeNetworkError() {
57
+ // Fail-open: probeClaudeAuth returns { valid: true } on network errors
58
+ mockProbeClaudeAuth.mockResolvedValue({ valid: true });
60
59
  }
61
- const SMALL_INTERVAL = 100; // 100 ms — always elapsed unless we use a very recent timestamp
60
+ const SMALL_INTERVAL = 100; // 100 ms — always elapsed unless we pass a very recent timestamp
62
61
  // ---------------------------------------------------------------------------
63
62
  // Tests: runAuthMonitorCheck
64
63
  // ---------------------------------------------------------------------------
@@ -66,72 +65,70 @@ describe("runAuthMonitorCheck", () => {
66
65
  let savedOauthToken;
67
66
  let savedApiKey;
68
67
  beforeEach(() => {
69
- mockExecFile.mockReset();
68
+ mockProbeClaudeAuth.mockReset();
70
69
  mockPostSlackMessage.mockReset().mockResolvedValue({ ok: true });
71
70
  mockLogAuditEvent.mockReset().mockResolvedValue(undefined);
72
- // Save and clear env vars so each test starts with a clean slate
73
71
  savedOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN;
74
72
  savedApiKey = process.env.ANTHROPIC_API_KEY;
75
73
  delete process.env.CLAUDE_CODE_OAUTH_TOKEN;
76
74
  delete process.env.ANTHROPIC_API_KEY;
77
75
  });
78
76
  afterEach(() => {
79
- if (savedOauthToken === undefined) {
77
+ if (savedOauthToken === undefined)
80
78
  delete process.env.CLAUDE_CODE_OAUTH_TOKEN;
81
- }
82
- else {
79
+ else
83
80
  process.env.CLAUDE_CODE_OAUTH_TOKEN = savedOauthToken;
84
- }
85
- if (savedApiKey === undefined) {
81
+ if (savedApiKey === undefined)
86
82
  delete process.env.ANTHROPIC_API_KEY;
87
- }
88
- else {
83
+ else
89
84
  process.env.ANTHROPIC_API_KEY = savedApiKey;
90
- }
91
85
  });
92
86
  // --- Throttle ---
93
87
  it("skips check when interval has not elapsed (lastCheckTime is recent)", async () => {
94
- const recentTime = Date.now(); // just ran
95
- await runAuthMonitorCheck(recentTime, {}, 60_000); // 60-second interval
96
- // Should not run execFile because interval hasn't elapsed
97
- expect(mockExecFile).not.toHaveBeenCalled();
88
+ const recentTime = Date.now();
89
+ await runAuthMonitorCheck(recentTime, {}, 60_000);
90
+ expect(mockProbeClaudeAuth).not.toHaveBeenCalled();
98
91
  });
99
92
  it("runs check when interval has elapsed (lastCheckTime = 0 = never)", async () => {
100
- simulateCliSuccess();
93
+ simulateProbeSuccess();
101
94
  await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
102
- expect(mockExecFile).toHaveBeenCalledTimes(1);
95
+ expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
103
96
  });
104
97
  // --- Env-var skip logic (BEC-237) ---
105
- it("skips check without subprocess when ANTHROPIC_API_KEY is set and CLAUDE_CODE_OAUTH_TOKEN is NOT set", async () => {
98
+ it("skips probe when ANTHROPIC_API_KEY is set and CLAUDE_CODE_OAUTH_TOKEN is NOT set", async () => {
106
99
  process.env.ANTHROPIC_API_KEY = "sk-ant-api03-test";
107
100
  await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
108
- expect(mockExecFile).not.toHaveBeenCalled();
101
+ expect(mockProbeClaudeAuth).not.toHaveBeenCalled();
109
102
  expect(mockPostSlackMessage).not.toHaveBeenCalled();
110
103
  expect(mockLogAuditEvent).not.toHaveBeenCalled();
111
104
  });
112
105
  it("runs the auth probe when CLAUDE_CODE_OAUTH_TOKEN is set (OAuth tokens can expire)", async () => {
113
106
  process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
114
- simulateCliSuccess();
107
+ simulateProbeSuccess();
115
108
  await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
116
- expect(mockExecFile).toHaveBeenCalledTimes(1);
109
+ expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
117
110
  });
118
111
  it("runs the auth probe when both CLAUDE_CODE_OAUTH_TOKEN and ANTHROPIC_API_KEY are set", async () => {
119
- // CLAUDE_CODE_OAUTH_TOKEN takes precedence — it can expire even if ANTHROPIC_API_KEY is also set
120
112
  process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
121
113
  process.env.ANTHROPIC_API_KEY = "sk-ant-api03-test";
122
- simulateCliSuccess();
114
+ simulateProbeSuccess();
123
115
  await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
124
- expect(mockExecFile).toHaveBeenCalledTimes(1);
116
+ expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
125
117
  });
126
118
  it("runs the auth probe when neither env var is set (mounted-session path)", async () => {
127
- simulateCliSuccess();
119
+ simulateProbeSuccess();
120
+ await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
121
+ expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
122
+ });
123
+ it("passes 15-second timeout to probeClaudeAuth", async () => {
124
+ simulateProbeSuccess();
128
125
  await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
129
- expect(mockExecFile).toHaveBeenCalledTimes(1);
126
+ expect(mockProbeClaudeAuth).toHaveBeenCalledWith(15_000);
130
127
  });
131
- // --- OAuth token probe success ---
128
+ // --- Probe success no alert ---
132
129
  it("does not alert when CLAUDE_CODE_OAUTH_TOKEN probe succeeds", async () => {
133
130
  process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
134
- simulateCliSuccess();
131
+ simulateProbeSuccess();
135
132
  await runAuthMonitorCheck(0, {
136
133
  slackBotToken: "xoxb-test",
137
134
  slackErrorChannel: "CTEST",
@@ -139,10 +136,10 @@ describe("runAuthMonitorCheck", () => {
139
136
  expect(mockPostSlackMessage).not.toHaveBeenCalled();
140
137
  expect(mockLogAuditEvent).not.toHaveBeenCalled();
141
138
  });
142
- // --- OAuth token probe — failure (BEC-237 core scenario) ---
143
- it("sends Slack alert with oauth-token instructions when CLAUDE_CODE_OAUTH_TOKEN probe fails", async () => {
139
+ // --- Probe auth failure (BEC-244 core scenario) ---
140
+ it("sends Slack alert with oauth-token instructions when CLAUDE_CODE_OAUTH_TOKEN probe detects auth failure", async () => {
144
141
  process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
145
- simulateCliFailure();
142
+ simulateProbeAuthFailure();
146
143
  await runAuthMonitorCheck(0, {
147
144
  slackBotToken: "xoxb-bot-token",
148
145
  slackErrorChannel: "CERROR",
@@ -151,13 +148,12 @@ describe("runAuthMonitorCheck", () => {
151
148
  const [calledToken, calledPayload] = mockPostSlackMessage.mock.calls[0];
152
149
  expect(calledToken).toBe("xoxb-bot-token");
153
150
  expect(calledPayload.channel).toBe("CERROR");
154
- // Alert text should mention setup-token, not claude login
155
151
  expect(calledPayload.text).toContain("setup-token");
156
152
  expect(calledPayload.text).not.toContain("claude login");
157
153
  });
158
- it("logs claude.auth_expired with authMethod=oauth-token when CLAUDE_CODE_OAUTH_TOKEN probe fails", async () => {
154
+ it("logs claude.auth_expired with authMethod=oauth-token when CLAUDE_CODE_OAUTH_TOKEN probe detects auth failure", async () => {
159
155
  process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
160
- simulateCliFailure();
156
+ simulateProbeAuthFailure();
161
157
  const fakeDb = {};
162
158
  await runAuthMonitorCheck(0, { db: fakeDb }, SMALL_INTERVAL);
163
159
  expect(mockLogAuditEvent).toHaveBeenCalledTimes(1);
@@ -170,10 +166,10 @@ describe("runAuthMonitorCheck", () => {
170
166
  authMethod: "oauth-token",
171
167
  });
172
168
  });
173
- it("sends oauth-token Slack alert when both env vars set and probe fails", async () => {
169
+ it("sends oauth-token Slack alert when both env vars set and probe detects auth failure", async () => {
174
170
  process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
175
171
  process.env.ANTHROPIC_API_KEY = "sk-ant-api03-test";
176
- simulateCliFailure();
172
+ simulateProbeAuthFailure();
177
173
  const fakeDb = {};
178
174
  await runAuthMonitorCheck(0, {
179
175
  slackBotToken: "xoxb-test",
@@ -185,20 +181,39 @@ describe("runAuthMonitorCheck", () => {
185
181
  const [, calledEvent] = mockLogAuditEvent.mock.calls[0];
186
182
  expect(calledEvent.payload.authMethod).toBe("oauth-token");
187
183
  });
184
+ // --- Probe network error → fail-open (BEC-244 AC) ---
185
+ it("does NOT fire an alert when probe encounters a network error (fail-open)", async () => {
186
+ process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
187
+ // probeClaudeAuth returns { valid: true } for network/transient errors
188
+ simulateProbeNetworkError();
189
+ await runAuthMonitorCheck(0, {
190
+ slackBotToken: "xoxb-test",
191
+ slackErrorChannel: "CTEST",
192
+ db: {},
193
+ }, SMALL_INTERVAL);
194
+ expect(mockPostSlackMessage).not.toHaveBeenCalled();
195
+ expect(mockLogAuditEvent).not.toHaveBeenCalled();
196
+ });
197
+ it("does NOT fire an audit event when probe encounters a network error (fail-open)", async () => {
198
+ simulateProbeNetworkError();
199
+ const fakeDb = {};
200
+ await runAuthMonitorCheck(0, { db: fakeDb }, SMALL_INTERVAL);
201
+ expect(mockLogAuditEvent).not.toHaveBeenCalled();
202
+ });
188
203
  // --- Session valid ---
189
- it("runs subprocess and skips alerts when mounted session is valid", async () => {
190
- simulateCliSuccess();
204
+ it("runs probe and skips alerts when mounted session is valid", async () => {
205
+ simulateProbeSuccess();
191
206
  await runAuthMonitorCheck(0, {
192
207
  slackBotToken: "xoxb-test",
193
208
  slackErrorChannel: "CTEST",
194
209
  }, SMALL_INTERVAL);
195
- expect(mockExecFile).toHaveBeenCalledTimes(1);
210
+ expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
196
211
  expect(mockPostSlackMessage).not.toHaveBeenCalled();
197
212
  expect(mockLogAuditEvent).not.toHaveBeenCalled();
198
213
  });
199
- // --- Mounted session expired (existing behavior, preserved) ---
200
- it("sends Slack alert to configured channel when mounted session is expired", async () => {
201
- simulateCliFailure();
214
+ // --- Mounted session expired ---
215
+ it("sends Slack alert to configured channel when mounted session probe detects auth failure", async () => {
216
+ simulateProbeAuthFailure();
202
217
  await runAuthMonitorCheck(0, {
203
218
  slackBotToken: "xoxb-bot-token",
204
219
  slackErrorChannel: "CERROR",
@@ -206,8 +221,8 @@ describe("runAuthMonitorCheck", () => {
206
221
  expect(mockPostSlackMessage).toHaveBeenCalledTimes(1);
207
222
  expect(mockPostSlackMessage).toHaveBeenCalledWith("xoxb-bot-token", expect.objectContaining({ channel: "CERROR" }));
208
223
  });
209
- it("Slack alert for mounted-session expiry mentions claude login, not setup-token", async () => {
210
- simulateCliFailure();
224
+ it("Slack alert for mounted-session auth failure mentions claude login, not setup-token", async () => {
225
+ simulateProbeAuthFailure();
211
226
  await runAuthMonitorCheck(0, {
212
227
  slackBotToken: "xoxb-test",
213
228
  slackErrorChannel: "CTEST",
@@ -215,8 +230,8 @@ describe("runAuthMonitorCheck", () => {
215
230
  const text = mockPostSlackMessage.mock.calls[0][1].text;
216
231
  expect(text).toContain("claude login");
217
232
  });
218
- it("logs claude.auth_expired audit event with authMethod=mounted-session when session expired", async () => {
219
- simulateCliFailure();
233
+ it("logs claude.auth_expired audit event with authMethod=mounted-session when session probe detects auth failure", async () => {
234
+ simulateProbeAuthFailure();
220
235
  const fakeDb = {};
221
236
  await runAuthMonitorCheck(0, { db: fakeDb }, SMALL_INTERVAL);
222
237
  expect(mockLogAuditEvent).toHaveBeenCalledTimes(1);
@@ -230,7 +245,7 @@ describe("runAuthMonitorCheck", () => {
230
245
  });
231
246
  });
232
247
  it("does not throw when Slack post fails", async () => {
233
- simulateCliFailure();
248
+ simulateProbeAuthFailure();
234
249
  mockPostSlackMessage.mockRejectedValue(new Error("network error"));
235
250
  await expect(runAuthMonitorCheck(0, {
236
251
  slackBotToken: "xoxb-test",
@@ -238,18 +253,18 @@ describe("runAuthMonitorCheck", () => {
238
253
  }, SMALL_INTERVAL)).resolves.not.toThrow();
239
254
  });
240
255
  it("skips Slack when no slackBotToken configured", async () => {
241
- simulateCliFailure();
256
+ simulateProbeAuthFailure();
242
257
  await runAuthMonitorCheck(0, { slackErrorChannel: "CTEST" }, SMALL_INTERVAL);
243
258
  expect(mockPostSlackMessage).not.toHaveBeenCalled();
244
259
  });
245
260
  it("skips Slack when no slackErrorChannel configured", async () => {
246
- simulateCliFailure();
261
+ simulateProbeAuthFailure();
247
262
  await runAuthMonitorCheck(0, { slackBotToken: "xoxb-test" }, SMALL_INTERVAL);
248
263
  expect(mockPostSlackMessage).not.toHaveBeenCalled();
249
264
  });
250
- // --- Return value (lastCheckTime update) ---
265
+ // --- Return value ---
251
266
  it("returns updated timestamp after running", async () => {
252
- simulateCliSuccess();
267
+ simulateProbeSuccess();
253
268
  const before = Date.now();
254
269
  const returned = await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
255
270
  const after = Date.now();
@@ -269,7 +284,7 @@ describe("createAuthMonitor", () => {
269
284
  let savedOauthToken;
270
285
  let savedApiKey;
271
286
  beforeEach(() => {
272
- mockExecFile.mockReset();
287
+ mockProbeClaudeAuth.mockReset();
273
288
  mockPostSlackMessage.mockReset().mockResolvedValue({ ok: true });
274
289
  mockLogAuditEvent.mockReset().mockResolvedValue(undefined);
275
290
  savedOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN;
@@ -278,48 +293,57 @@ describe("createAuthMonitor", () => {
278
293
  delete process.env.ANTHROPIC_API_KEY;
279
294
  });
280
295
  afterEach(() => {
281
- if (savedOauthToken === undefined) {
296
+ if (savedOauthToken === undefined)
282
297
  delete process.env.CLAUDE_CODE_OAUTH_TOKEN;
283
- }
284
- else {
298
+ else
285
299
  process.env.CLAUDE_CODE_OAUTH_TOKEN = savedOauthToken;
286
- }
287
- if (savedApiKey === undefined) {
300
+ if (savedApiKey === undefined)
288
301
  delete process.env.ANTHROPIC_API_KEY;
289
- }
290
- else {
302
+ else
291
303
  process.env.ANTHROPIC_API_KEY = savedApiKey;
292
- }
293
304
  });
294
- it("tick() runs the check and handles errors gracefully", async () => {
295
- simulateCliSuccess();
305
+ it("tick() runs the probe and handles errors gracefully", async () => {
306
+ simulateProbeSuccess();
296
307
  const monitor = createAuthMonitor({}, SMALL_INTERVAL);
297
308
  await expect(monitor.tick()).resolves.not.toThrow();
298
- expect(mockExecFile).toHaveBeenCalledTimes(1);
309
+ expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
299
310
  });
300
311
  it("tick() is throttled — second call immediately after first is a no-op", async () => {
301
- simulateCliSuccess();
302
- const monitor = createAuthMonitor({}, 60_000); // 60s interval
303
- await monitor.tick(); // first tick — runs
304
- await monitor.tick(); // second tick immediately — throttled
305
- expect(mockExecFile).toHaveBeenCalledTimes(1); // only one subprocess
312
+ simulateProbeSuccess();
313
+ const monitor = createAuthMonitor({}, 60_000);
314
+ await monitor.tick();
315
+ await monitor.tick();
316
+ expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
306
317
  });
307
- it("tick() skips session check when only ANTHROPIC_API_KEY is set (static key, never expires)", async () => {
318
+ it("tick() skips probe when only ANTHROPIC_API_KEY is set (static key, never expires)", async () => {
308
319
  process.env.ANTHROPIC_API_KEY = "sk-ant-api03-test";
309
320
  const monitor = createAuthMonitor({}, SMALL_INTERVAL);
310
321
  await monitor.tick();
311
- expect(mockExecFile).not.toHaveBeenCalled();
322
+ expect(mockProbeClaudeAuth).not.toHaveBeenCalled();
312
323
  });
313
324
  it("tick() runs probe when CLAUDE_CODE_OAUTH_TOKEN is set (OAuth tokens can expire)", async () => {
314
325
  process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
315
- simulateCliSuccess();
326
+ simulateProbeSuccess();
316
327
  const monitor = createAuthMonitor({}, SMALL_INTERVAL);
317
328
  await monitor.tick();
318
- expect(mockExecFile).toHaveBeenCalledTimes(1);
329
+ expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
330
+ });
331
+ it("tick() does NOT alert when probe returns network error (fail-open)", async () => {
332
+ process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
333
+ simulateProbeNetworkError();
334
+ const fakeDb = {};
335
+ const monitor = createAuthMonitor({
336
+ slackBotToken: "xoxb-test",
337
+ slackErrorChannel: "CALERTS",
338
+ db: fakeDb,
339
+ }, SMALL_INTERVAL);
340
+ await monitor.tick();
341
+ expect(mockPostSlackMessage).not.toHaveBeenCalled();
342
+ expect(mockLogAuditEvent).not.toHaveBeenCalled();
319
343
  });
320
- it("tick() sends alert on expired OAuth token and logs audit event with authMethod=oauth-token", async () => {
344
+ it("tick() sends alert on auth-failed OAuth token and logs audit event with authMethod=oauth-token", async () => {
321
345
  process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
322
- simulateCliFailure();
346
+ simulateProbeAuthFailure();
323
347
  const fakeDb = {};
324
348
  const monitor = createAuthMonitor({
325
349
  slackBotToken: "xoxb-test",
@@ -333,8 +357,8 @@ describe("createAuthMonitor", () => {
333
357
  expect(calledEvent.eventType).toBe("claude.auth_expired");
334
358
  expect(calledEvent.payload.authMethod).toBe("oauth-token");
335
359
  });
336
- it("tick() sends alert on expired mounted session and logs audit event with authMethod=mounted-session", async () => {
337
- simulateCliFailure();
360
+ it("tick() sends alert on auth-failed mounted session and logs audit event with authMethod=mounted-session", async () => {
361
+ simulateProbeAuthFailure();
338
362
  const fakeDb = {};
339
363
  const monitor = createAuthMonitor({
340
364
  slackBotToken: "xoxb-test",
@@ -1 +1 @@
1
- {"version":3,"file":"auth-monitor.test.js","sourceRoot":"","sources":["../../src/__tests__/auth-monitor.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-monitor.test.js","sourceRoot":"","sources":["../../src/__tests__/auth-monitor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=circuit-breaker-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { getCircuitBreakerProbeConfig } from "../pm/actions/circuit-breaker-config.js";
3
+ describe("getCircuitBreakerProbeConfig", () => {
4
+ it("returns defaults when env is empty", () => {
5
+ expect(getCircuitBreakerProbeConfig({})).toEqual({
6
+ disabled: false,
7
+ cooldownMs: 120 * 60 * 1000,
8
+ maxProbesPerTick: 2,
9
+ });
10
+ });
11
+ it("disabled is true ONLY for strict 'true'", () => {
12
+ expect(getCircuitBreakerProbeConfig({ PM_DISABLE_CIRCUIT_BREAKER_PROBE: "true" }).disabled).toBe(true);
13
+ expect(getCircuitBreakerProbeConfig({ PM_DISABLE_CIRCUIT_BREAKER_PROBE: "1" }).disabled).toBe(false);
14
+ expect(getCircuitBreakerProbeConfig({ PM_DISABLE_CIRCUIT_BREAKER_PROBE: "yes" }).disabled).toBe(false);
15
+ expect(getCircuitBreakerProbeConfig({ PM_DISABLE_CIRCUIT_BREAKER_PROBE: "TRUE" }).disabled).toBe(false);
16
+ });
17
+ it("parses PM_CIRCUIT_BREAKER_PROBE_AGE_MIN as minutes", () => {
18
+ expect(getCircuitBreakerProbeConfig({ PM_CIRCUIT_BREAKER_PROBE_AGE_MIN: "30" }).cooldownMs).toBe(30 * 60 * 1000);
19
+ });
20
+ it("parses PM_CIRCUIT_BREAKER_MAX_PROBES_PER_TICK", () => {
21
+ expect(getCircuitBreakerProbeConfig({ PM_CIRCUIT_BREAKER_MAX_PROBES_PER_TICK: "5" }).maxProbesPerTick).toBe(5);
22
+ });
23
+ it("falls back to defaults on non-integer values", () => {
24
+ const cfg = getCircuitBreakerProbeConfig({
25
+ PM_CIRCUIT_BREAKER_PROBE_AGE_MIN: "abc",
26
+ PM_CIRCUIT_BREAKER_MAX_PROBES_PER_TICK: "-1",
27
+ });
28
+ expect(cfg.cooldownMs).toBe(120 * 60 * 1000);
29
+ expect(cfg.maxProbesPerTick).toBe(2);
30
+ });
31
+ });
32
+ //# sourceMappingURL=circuit-breaker-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-config.test.js","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAEvF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/C,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI;YAC3B,gBAAgB,EAAE,CAAC;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvG,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrG,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvG,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,4BAA4B,CAAC,EAAE,sCAAsC,EAAE,GAAG,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG,4BAA4B,CAAC;YACvC,gCAAgC,EAAE,KAAK;YACvC,sCAAsC,EAAE,IAAI;SAC7C,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=circuit-breaker-events.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-events.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-events.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { pmCircuitBreakerProbeEvent, pmCircuitBreakerRecoveredEvent, pmCircuitBreakerResetManualEvent, } from "../audit/events.js";
3
+ describe("circuit-breaker audit event constructors", () => {
4
+ it("pmCircuitBreakerProbeEvent returns correct shape", () => {
5
+ const ev = pmCircuitBreakerProbeEvent({
6
+ issueId: "BEC-1",
7
+ consecutiveFailures: 4,
8
+ lastProbeAgeMin: 90,
9
+ probeAttempts: 1,
10
+ });
11
+ expect(ev.eventType).toBe("pm.circuit_breaker_probe");
12
+ expect(ev.actorType).toBe("pm-agent");
13
+ expect(ev.issueId).toBe("BEC-1");
14
+ expect(ev.payload).toMatchObject({
15
+ consecutiveFailures: 4,
16
+ lastProbeAgeMin: 90,
17
+ probeAttempts: 1,
18
+ });
19
+ expect(ev.id).toMatch(/^evt_/);
20
+ expect(ev.timestamp).toBeInstanceOf(Date);
21
+ });
22
+ it("pmCircuitBreakerRecoveredEvent returns correct shape", () => {
23
+ const ev = pmCircuitBreakerRecoveredEvent({
24
+ issueId: "BEC-2",
25
+ probeAttempts: 2,
26
+ });
27
+ expect(ev.eventType).toBe("pm.circuit_breaker_recovered");
28
+ expect(ev.actorType).toBe("pm-agent");
29
+ expect(ev.issueId).toBe("BEC-2");
30
+ expect(ev.payload).toMatchObject({
31
+ probeAttempts: 2,
32
+ });
33
+ expect(ev.id).toMatch(/^evt_/);
34
+ expect(ev.timestamp).toBeInstanceOf(Date);
35
+ });
36
+ it("pmCircuitBreakerResetManualEvent returns correct shape", () => {
37
+ const ev = pmCircuitBreakerResetManualEvent({
38
+ issueId: "BEC-3",
39
+ scope: "single",
40
+ failedRunsDeleted: 3,
41
+ });
42
+ expect(ev.eventType).toBe("pm.circuit_breaker_reset_manual");
43
+ expect(ev.actorType).toBe("cli");
44
+ expect(ev.issueId).toBe("BEC-3");
45
+ expect(ev.payload).toMatchObject({
46
+ scope: "single",
47
+ failedRunsDeleted: 3,
48
+ });
49
+ expect(ev.id).toMatch(/^evt_/);
50
+ expect(ev.timestamp).toBeInstanceOf(Date);
51
+ });
52
+ });
53
+ //# sourceMappingURL=circuit-breaker-events.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-events.test.js","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-events.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=circuit-breaker-integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-integration.test.ts"],"names":[],"mappings":""}