bb-cc-lite 0.1.12 → 0.1.13

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 (53) hide show
  1. package/README.md +22 -1
  2. package/assets/statusline-coach-guard-demo.gif +0 -0
  3. package/dist/audit.js +1 -1
  4. package/dist/audit.js.map +1 -1
  5. package/dist/baseline-builder.d.ts +5 -0
  6. package/dist/baseline-builder.js +68 -31
  7. package/dist/baseline-builder.js.map +1 -1
  8. package/dist/baseline.d.ts +7 -2
  9. package/dist/baseline.js +53 -3
  10. package/dist/baseline.js.map +1 -1
  11. package/dist/cache-efficiency.d.ts +3 -0
  12. package/dist/cache-efficiency.js +38 -0
  13. package/dist/cache-efficiency.js.map +1 -0
  14. package/dist/doctor.js +10 -0
  15. package/dist/doctor.js.map +1 -1
  16. package/dist/event-store-persistence.js +21 -0
  17. package/dist/event-store-persistence.js.map +1 -1
  18. package/dist/event-store-queries.d.ts +3 -1
  19. package/dist/event-store-queries.js +48 -1
  20. package/dist/event-store-queries.js.map +1 -1
  21. package/dist/feedback-outcomes.js +6 -0
  22. package/dist/feedback-outcomes.js.map +1 -1
  23. package/dist/feedback-policy.d.ts +3 -1
  24. package/dist/feedback-policy.js +99 -0
  25. package/dist/feedback-policy.js.map +1 -1
  26. package/dist/file-identity.d.ts +8 -0
  27. package/dist/file-identity.js +43 -0
  28. package/dist/file-identity.js.map +1 -0
  29. package/dist/historical-replay.d.ts +12 -0
  30. package/dist/historical-replay.js +139 -43
  31. package/dist/historical-replay.js.map +1 -1
  32. package/dist/hook-control.js +7 -2
  33. package/dist/hook-control.js.map +1 -1
  34. package/dist/hook-payload.js +13 -4
  35. package/dist/hook-payload.js.map +1 -1
  36. package/dist/hook-summary.d.ts +2 -0
  37. package/dist/hook-summary.js +22 -1
  38. package/dist/hook-summary.js.map +1 -1
  39. package/dist/recovery-stats.d.ts +27 -1
  40. package/dist/recovery-stats.js +128 -5
  41. package/dist/recovery-stats.js.map +1 -1
  42. package/dist/settings.js +2 -1
  43. package/dist/settings.js.map +1 -1
  44. package/dist/signals.js +192 -19
  45. package/dist/signals.js.map +1 -1
  46. package/dist/status-input.js +15 -15
  47. package/dist/transcript.d.ts +1 -0
  48. package/dist/transcript.js +112 -1
  49. package/dist/transcript.js.map +1 -1
  50. package/dist/types.d.ts +57 -0
  51. package/dist/why.js +2 -0
  52. package/dist/why.js.map +1 -1
  53. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-outcomes.js","sourceRoot":"","sources":["../src/feedback-outcomes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feedback-outcomes.js","sourceRoot":"","sources":["../src/feedback-outcomes.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { DecisionConfidence, StoredDecision, TranscriptSummary } from "./types.js";
1
+ import type { DecisionConfidence, ReadKind, StoredDecision, TranscriptSummary } from "./types.js";
2
2
  export type FeedbackMode = "observe" | "coach" | "guard";
3
3
  export type FeedbackDelivery = "additional_context" | "stop_block";
4
4
  export type FeedbackSafeCategory = "tests" | "lint" | "typecheck" | "build" | "tool" | "mcp" | "edit" | "budget" | "activity" | "finish";
@@ -10,6 +10,8 @@ export interface RecentFeedback {
10
10
  export interface CurrentHookTool {
11
11
  toolName: string;
12
12
  purpose?: string;
13
+ fileIdentityHash?: string;
14
+ readKind?: ReadKind;
13
15
  }
14
16
  export interface FeedbackPolicyInput {
15
17
  mode: FeedbackMode;
@@ -6,6 +6,17 @@ export function decideFeedback(input) {
6
6
  if (input.hookEventName === "Stop") {
7
7
  return stopFeedback(input);
8
8
  }
9
+ if (input.hookEventName === "PreCompact") {
10
+ return { kind: "none" };
11
+ }
12
+ const compactionGoalPreservation = postCompactionGoalPreservationFeedback(input);
13
+ if (compactionGoalPreservation) {
14
+ return compactionGoalPreservation;
15
+ }
16
+ const readRepeat = redundantReadFeedback(input);
17
+ if (readRepeat) {
18
+ return readRepeat;
19
+ }
9
20
  const coachRetryWarning = coachValidationRetryWarning(input);
10
21
  if (coachRetryWarning) {
11
22
  return coachRetryWarning;
@@ -41,7 +52,30 @@ export function decideFeedback(input) {
41
52
  message: messageFor(risk.messageKey)
42
53
  };
43
54
  }
55
+ function postCompactionGoalPreservationFeedback(input) {
56
+ if (input.hookEventName !== "PostCompact" || input.summary.compactionEvents <= 0) {
57
+ return undefined;
58
+ }
59
+ const cooldownKey = `coach:compaction_goal_preservation:${input.summary.latestCompactionTimestamp || "current"}`;
60
+ if (hasRecentCooldown(input.recentFeedback, cooldownKey)) {
61
+ return undefined;
62
+ }
63
+ return {
64
+ kind: "coach",
65
+ delivery: "additional_context",
66
+ reasonCode: "compaction_goal_preservation",
67
+ safeCategory: "activity",
68
+ confidence: "medium",
69
+ messageKey: "compaction_goal_preservation",
70
+ cooldownKey,
71
+ message: messageFor("compaction_goal_preservation")
72
+ };
73
+ }
44
74
  function guardFeedback(input) {
75
+ const readGuard = redundantReadGuardFeedback(input);
76
+ if (readGuard) {
77
+ return readGuard;
78
+ }
45
79
  const currentCategory = validationCategory(input.currentTool?.purpose);
46
80
  if (!currentCategory || input.currentTool?.toolName !== "Bash") {
47
81
  return { kind: "none" };
@@ -65,6 +99,65 @@ function guardFeedback(input) {
65
99
  message: messageFor("guard_validation_retry")
66
100
  };
67
101
  }
102
+ function redundantReadFeedback(input) {
103
+ if (input.hookEventName !== "PreToolUse" || input.currentTool?.toolName !== "Read") {
104
+ return undefined;
105
+ }
106
+ if (input.mode === "guard") {
107
+ return redundantReadGuardFeedback(input);
108
+ }
109
+ if (input.mode !== "coach") {
110
+ return undefined;
111
+ }
112
+ const repeat = repeatedFullFileReadForCurrentTool(input);
113
+ if (!repeat) {
114
+ return undefined;
115
+ }
116
+ const cooldownKey = `coach:redundant_read:${repeat.fileIdentityHash}`;
117
+ if (hasRecentCooldown(input.recentFeedback, cooldownKey)) {
118
+ return undefined;
119
+ }
120
+ return {
121
+ kind: "coach",
122
+ delivery: "additional_context",
123
+ reasonCode: "redundant_read",
124
+ safeCategory: "tool",
125
+ confidence: "medium",
126
+ messageKey: "redundant_read",
127
+ cooldownKey,
128
+ message: messageFor("redundant_read")
129
+ };
130
+ }
131
+ function redundantReadGuardFeedback(input) {
132
+ const repeat = repeatedFullFileReadForCurrentTool(input);
133
+ if (!repeat) {
134
+ return undefined;
135
+ }
136
+ return {
137
+ kind: "guard",
138
+ reasonCode: "guard_redundant_read",
139
+ safeCategory: "tool",
140
+ confidence: "high",
141
+ messageKey: "guard_redundant_read",
142
+ cooldownKey: `guard:guard_redundant_read:${repeat.fileIdentityHash}`,
143
+ message: messageFor("guard_redundant_read")
144
+ };
145
+ }
146
+ function repeatedFullFileReadForCurrentTool(input) {
147
+ if (input.hookEventName !== "PreToolUse" ||
148
+ input.currentTool?.toolName !== "Read" ||
149
+ input.currentTool.readKind !== "full" ||
150
+ !input.currentTool.fileIdentityHash) {
151
+ return undefined;
152
+ }
153
+ const match = input.summary.activeFullFileReads?.find((read) => read.fileIdentityHash === input.currentTool?.fileIdentityHash && read.unchangedFullFileReadCount >= 1);
154
+ return match
155
+ ? {
156
+ fileIdentityHash: match.fileIdentityHash,
157
+ count: match.unchangedFullFileReadCount
158
+ }
159
+ : undefined;
160
+ }
68
161
  function coachValidationRetryWarning(input) {
69
162
  if (input.mode !== "coach" || input.hookEventName !== "PreToolUse" || !isValidationTool(input.currentTool)) {
70
163
  return undefined;
@@ -234,6 +327,12 @@ function messageFor(messageKey) {
234
327
  return "bb-cc-lite: budget is high for this session; summarize progress, name the next smallest check, and avoid broad retries.";
235
328
  case "busy_no_observed_progress":
236
329
  return "bb-cc-lite: many tool calls have run without a safe progress signal. Pause, state what changed, and choose one focused next step.";
330
+ case "compaction_goal_preservation":
331
+ return "bb-cc-lite: compaction just finished. Before continuing, restate the current goal, key constraints, and next three steps from existing context.";
332
+ case "redundant_read":
333
+ return "bb-cc-lite: this file was already read recently and no edit/write was seen. Use existing context or read a specific range if needed.";
334
+ case "guard_redundant_read":
335
+ return "bb-cc-lite denied this Read: this file was already read recently and no edit/write was seen. Read a specific range if needed.";
237
336
  case "guard_validation_retry":
238
337
  return "bb-cc-lite denied this retry: the same validation category has failed repeatedly without an edit or passing check. Inspect before retrying.";
239
338
  case "finish_with_unresolved_risk":
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-policy.js","sourceRoot":"","sources":["../src/feedback-policy.ts"],"names":[],"mappings":"AAiDA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7E,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACnC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,aAAa,KAAK,YAAY,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,SAAS,IAAI,yBAAyB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACpF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;IACpE,IAAI,iBAAiB,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,oBAAoB;QAC9B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW;QACX,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAA0B;IAC/C,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACvE,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,WAAW,EAAE,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IAC5C,MAAM,QAAQ,GAAG,kCAAkC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,MAAM,qBAAqB,GACzB,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB;QAClC,CAAC,CAAC,UAAU,EAAE,QAAQ,KAAK,eAAe,IAAI,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC;YACnF,CAAC,QAAQ,EAAE,YAAY,KAAK,eAAe,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,WAAW,GAAG,gCAAgC,eAAe,EAAE,CAAC;IACtE,OAAO;QACL,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,wBAAwB;QACpC,YAAY,EAAE,eAAe;QAC7B,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,wBAAwB;QACpC,WAAW;QACX,OAAO,EAAE,UAAU,CAAC,wBAAwB,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,KAA0B;IAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,aAAa,KAAK,YAAY,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3G,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IAC5C,MAAM,QAAQ,GAAG,kCAAkC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,MAAM,mBAAmB,GACvB,CAAC,UAAU,EAAE,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC;QAC7E,CAAC,QAAQ,EAAE,YAAY,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,oBAAoB,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CACpD,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,MAAM,KAAK,OAAO;QAC3B,CAAC,QAAQ,CAAC,WAAW,KAAK,6BAA6B,QAAQ,EAAE;YAC/D,QAAQ,CAAC,WAAW,KAAK,0BAA0B,QAAQ,EAAE;YAC7D,QAAQ,CAAC,WAAW,KAAK,+CAA+C,QAAQ,EAAE,CAAC,CACxF,CAAC;IACF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,oBAAoB;QAC9B,UAAU,EAAE,uCAAuC;QACnD,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAE,UAAU,IAAI,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;QACpF,UAAU,EAAE,uCAAuC;QACnD,WAAW,EAAE,+CAA+C,QAAQ,EAAE;QACtE,OAAO,EAAE,UAAU,CAAC,uCAAuC,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAA0B;IAC9C,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,iBAAiB,GACrB,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,MAAM;QAChC,KAAK,CAAC,QAAQ,EAAE,UAAU,KAAK,aAAa;QAC5C,KAAK,CAAC,QAAQ,EAAE,UAAU,KAAK,uBAAuB;QACtD,KAAK,CAAC,OAAO,CAAC,mBAAmB;QACjC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC;QACzF,OAAO,CAAC,kCAAkC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,WAAW,GAAG,0CAA0C,CAAC;IAC/D,IAAI,iBAAiB,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,6BAA6B;QACzC,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,6BAA6B;QACzC,WAAW;QACX,OAAO,EAAE,UAAU,CAAC,6BAA6B,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAA0B;IAQ/C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IAC5C,IAAI,UAAU,IAAI,UAAU,CAAC,sBAAsB,IAAI,CAAC,EAAE,CAAC;QACzD,OAAO;YACL,UAAU,EAAE,kBAAkB;YAC9B,YAAY,EAAE,8BAA8B,CAAC,UAAU,CAAC,QAAQ,CAAC;YACjE,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,kBAAkB;SAC/B,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,IAAI,UAAU,CAAC,sBAAsB,IAAI,CAAC,EAAE,CAAC;QACzD,OAAO;YACL,UAAU,EAAE,qBAAqB;YACjC,YAAY,EAAE,8BAA8B,CAAC,UAAU,CAAC,QAAQ,CAAC;YACjE,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,qBAAqB;SAClC,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,kCAAkC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,UAAU,EAAE,qBAAqB;YACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,UAAU,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;YACnD,UAAU,EAAE,qBAAqB;SAClC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACtC,OAAO;YACL,UAAU,EAAE,yBAAyB;YACrC,YAAY,EAAE,MAAM;YACpB,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,yBAAyB;SACtC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,UAAU,KAAK,kCAAkC,EAAE,CAAC;QACtE,OAAO;YACL,UAAU,EAAE,kCAAkC;YAC9C,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,kCAAkC;SAC/C,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE,UAAU,KAAK,aAAa,IAAI,KAAK,CAAC,QAAQ,EAAE,UAAU,KAAK,iBAAiB,EAAE,CAAC;QACrG,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;YACrC,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,gBAAgB;SAC7B,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE,UAAU,KAAK,2BAA2B,EAAE,CAAC;QAC/D,OAAO;YACL,UAAU,EAAE,2BAA2B;YACvC,YAAY,EAAE,UAAU;YACxB,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,2BAA2B;SACxC,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kCAAkC,CACzC,OAA0B;IAE1B,OAAO,OAAO,CAAC,gBAAgB;SAC5B,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzG,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,yBAAyB,CAAC,OAA0B;IAC3D,OAAO,OAAO,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAiC;IACzD,OAAO,IAAI,EAAE,QAAQ,KAAK,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;AACrF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyB;IACnD,OAAO,KAAK,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5C,CAAC,CAAE,KAAiF;QACpF,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,8BAA8B,CAAC,QAAgB;IACtD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACpG,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,cAAgC,EAAE,WAAmB;IAC9E,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,UAAU,CAAC,UAAkB;IACpC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,kBAAkB;YACrB,OAAO,mJAAmJ,CAAC;QAC7J,KAAK,qBAAqB;YACxB,OAAO,uJAAuJ,CAAC;QACjK,KAAK,uCAAuC;YAC1C,OAAO,wKAAwK,CAAC;QAClL,KAAK,yBAAyB;YAC5B,OAAO,gIAAgI,CAAC;QAC1I,KAAK,kCAAkC;YACrC,OAAO,mIAAmI,CAAC;QAC7I,KAAK,gBAAgB;YACnB,OAAO,yHAAyH,CAAC;QACnI,KAAK,2BAA2B;YAC9B,OAAO,mIAAmI,CAAC;QAC7I,KAAK,wBAAwB;YAC3B,OAAO,6IAA6I,CAAC;QACvJ,KAAK,6BAA6B;YAChC,OAAO,kHAAkH,CAAC;QAC5H;YACE,OAAO,oEAAoE,CAAC;IAChF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"feedback-policy.js","sourceRoot":"","sources":["../src/feedback-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ReadKind } from "./types.js";
2
+ export interface FileIdentity {
3
+ fileIdentityHash: string;
4
+ safeFileLabel?: string;
5
+ }
6
+ export declare function fileIdentityFromToolInput(toolName: string, input: unknown): FileIdentity | undefined;
7
+ export declare function readKindFromInput(input: unknown): ReadKind | undefined;
8
+ export declare function isFullFileReadInput(input: unknown): boolean;
@@ -0,0 +1,43 @@
1
+ import { hashValue } from "./paths.js";
2
+ import { asRecord, stringField } from "./status-input.js";
3
+ export function fileIdentityFromToolInput(toolName, input) {
4
+ const root = asRecord(input);
5
+ if (!root) {
6
+ return undefined;
7
+ }
8
+ const rawPath = stringField(root.file_path) || (toolName === "NotebookEdit" ? stringField(root.notebook_path) : undefined);
9
+ const fileIdentityHash = hashValue(rawPath);
10
+ return fileIdentityHash
11
+ ? {
12
+ fileIdentityHash,
13
+ safeFileLabel: safeFileLabel(rawPath)
14
+ }
15
+ : undefined;
16
+ }
17
+ export function readKindFromInput(input) {
18
+ const root = asRecord(input);
19
+ if (!root) {
20
+ return undefined;
21
+ }
22
+ return root.offset === undefined && root.limit === undefined ? "full" : "partial";
23
+ }
24
+ export function isFullFileReadInput(input) {
25
+ return readKindFromInput(input) === "full";
26
+ }
27
+ function safeFileLabel(filePath) {
28
+ if (!filePath) {
29
+ return undefined;
30
+ }
31
+ const segment = filePath.split(/[\\/]+/u).filter(Boolean).at(-1);
32
+ if (!segment || segment === "." || segment === "..") {
33
+ return undefined;
34
+ }
35
+ // Keep only a basename-style hint; never retain the full local path.
36
+ // eslint-disable-next-line no-control-regex
37
+ const label = segment.replace(/[\u0000-\u001f\u007f]+/gu, " ").replace(/\s+/gu, " ").trim();
38
+ if (!label) {
39
+ return undefined;
40
+ }
41
+ return label.length > 80 ? `${label.slice(0, 77)}...` : label;
42
+ }
43
+ //# sourceMappingURL=file-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-identity.js","sourceRoot":"","sources":["../src/file-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQ1D,MAAM,UAAU,yBAAyB,CAAC,QAAgB,EAAE,KAAc;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3H,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,gBAAgB;QACrB,CAAC,CAAC;YACE,gBAAgB;YAChB,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC;SACtC;QACH,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,iBAAiB,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,QAA4B;IACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,qEAAqE;IACrE,4CAA4C;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC"}
@@ -20,9 +20,21 @@ export interface HistoricalReplayMetrics {
20
20
  averageToolResultsBeforeWarning: number;
21
21
  averageCostBeforeWarning: number | undefined;
22
22
  averageDurationBeforeWarning: number | undefined;
23
+ warningLeadTimeAttempts: number;
24
+ decisionFlipRate: number;
23
25
  projectBaselineSuppressions: number | undefined;
24
26
  lowSampleSuppressions: number;
25
27
  categoryCoverage: Partial<Record<FailureRecoveryCategory, number>>;
28
+ policies: Record<HistoricalReplayPolicyName, HistoricalReplayPolicyMetrics>;
29
+ }
30
+ export type HistoricalReplayPolicyName = "current_fixed" | "smoothed_recovery_wording" | "hazard_threshold_candidate";
31
+ export interface HistoricalReplayPolicyMetrics {
32
+ warnings: number;
33
+ falseStopCount: number;
34
+ missedUnrecoveredLoopCount: number;
35
+ warningLeadTimeAttempts: number;
36
+ decisionFlipRate: number;
37
+ categoryCoverage: Partial<Record<FailureRecoveryCategory, number>>;
26
38
  }
27
39
  export declare function evaluateHistoricalReplay(options?: HistoricalReplayOptions): Promise<HistoricalReplayMetrics>;
28
40
  export declare function formatHistoricalReplayMetrics(metrics: HistoricalReplayMetrics): string;
@@ -3,7 +3,7 @@ import { homedir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { extractFailureEpisodesFromTranscriptLines, extractSafeToolResultEventsFromTranscriptLines } from "./failure-episodes.js";
5
5
  import { asRecord, numberField } from "./status-input.js";
6
- import { addFailureEpisodeToRecoveryCounters, blindRetryAggregatesFromCounters, emptyRecoveryBuildCounters, FAILURE_RECOVERY_CATEGORIES, recoveryAggregatesFromCounters, recoveryInsight } from "./recovery-stats.js";
6
+ import { addFailureEpisodeToRecoveryCounters, blindRetryAggregatesFromCounters, emptyRecoveryBuildCounters, FAILURE_RECOVERY_CATEGORIES, recoveryAggregatesFromCounters, recoveryInsight, retryHazardsFromCounters } from "./recovery-stats.js";
7
7
  import { readTranscriptTail } from "./transcript-reader.js";
8
8
  const DEFAULT_MAX_FILES = 1500;
9
9
  const DEFAULT_MAX_BYTES_PER_TRANSCRIPT = 1024 * 1024;
@@ -37,12 +37,41 @@ export function formatHistoricalReplayMetrics(metrics) {
37
37
  `average tool results before warning ${metrics.averageToolResultsBeforeWarning.toFixed(2)}`,
38
38
  `average cost before warning ${formatOptionalCurrencyAverage(metrics.averageCostBeforeWarning)}`,
39
39
  `average duration before warning ${formatOptionalDurationAverage(metrics.averageDurationBeforeWarning)}`,
40
+ `warning lead time ${metrics.warningLeadTimeAttempts.toFixed(2)} attempts`,
41
+ `decision flip rate ${metrics.decisionFlipRate.toFixed(2)}`,
40
42
  `project-baseline suppressions ${metrics.projectBaselineSuppressions === undefined ? "n/a (not replayed)" : metrics.projectBaselineSuppressions}`,
41
43
  `low-sample suppressions ${metrics.lowSampleSuppressions}`,
42
- `category coverage ${formatCategoryCoverage(metrics.categoryCoverage)}`
44
+ `category coverage ${formatCategoryCoverage(metrics.categoryCoverage)}`,
45
+ `policy comparison ${formatPolicyComparison(metrics.policies)}`
43
46
  ].join("; ");
44
47
  }
45
48
  function evaluateHoldout(holdoutEventsBySession, baseline) {
49
+ const current = evaluatePolicy(holdoutEventsBySession, baseline, "current_fixed");
50
+ const smoothed = evaluatePolicy(holdoutEventsBySession, baseline, "smoothed_recovery_wording");
51
+ const hazard = evaluatePolicy(holdoutEventsBySession, baseline, "hazard_threshold_candidate");
52
+ const policies = {
53
+ current_fixed: policyMetricsFromOutcomes(current.outcomes, 0),
54
+ smoothed_recovery_wording: policyMetricsFromOutcomes(smoothed.outcomes, decisionFlipRate(current.outcomes, smoothed.outcomes)),
55
+ hazard_threshold_candidate: policyMetricsFromOutcomes(hazard.outcomes, decisionFlipRate(current.outcomes, hazard.outcomes))
56
+ };
57
+ const currentMetrics = metricsFromOutcomes(holdoutEventsBySession.length, current.outcomes, current.lowSampleSuppressions);
58
+ return {
59
+ ...currentMetrics,
60
+ decisionFlipRate: policies.hazard_threshold_candidate.decisionFlipRate,
61
+ policies
62
+ };
63
+ }
64
+ function evaluatePolicy(holdoutEventsBySession, baseline, policy) {
65
+ const outcomes = [];
66
+ let lowSampleSuppressions = 0;
67
+ for (const events of holdoutEventsBySession) {
68
+ const replay = replaySession(events, baseline, policy);
69
+ lowSampleSuppressions += replay.lowSampleSuppressions;
70
+ outcomes.push(...replay.outcomes);
71
+ }
72
+ return { outcomes, lowSampleSuppressions };
73
+ }
74
+ function metricsFromOutcomes(holdoutSessions, outcomes, lowSampleSuppressions) {
46
75
  let evaluatedFailureEpisodes = 0;
47
76
  let stopTruePositive = 0;
48
77
  let stopTotal = 0;
@@ -50,56 +79,53 @@ function evaluateHoldout(holdoutEventsBySession, baseline) {
50
79
  let missedUnrecoveredLoopCount = 0;
51
80
  let blindRetryTruePositive = 0;
52
81
  let blindRetryTotal = 0;
53
- let lowSampleSuppressions = 0;
54
82
  let warnings = 0;
55
83
  const attemptsBeforeWarning = [];
56
84
  const toolResultsBeforeWarning = [];
57
85
  const costBeforeWarning = [];
58
86
  const durationBeforeWarning = [];
87
+ const warningLeadAttempts = [];
59
88
  const categoryCoverage = {};
60
- for (const events of holdoutEventsBySession) {
61
- const replay = replaySession(events, baseline);
62
- lowSampleSuppressions += replay.lowSampleSuppressions;
63
- for (const outcome of replay.outcomes) {
64
- evaluatedFailureEpisodes += 1;
65
- categoryCoverage[outcome.category] = (categoryCoverage[outcome.category] || 0) + 1;
66
- if (outcome.warningAttempt !== undefined) {
67
- warnings += 1;
68
- attemptsBeforeWarning.push(outcome.warningAttempt);
69
- if (outcome.warningToolResultCount !== undefined) {
70
- toolResultsBeforeWarning.push(outcome.warningToolResultCount);
71
- }
72
- if (outcome.warningCostUsd !== undefined) {
73
- costBeforeWarning.push(outcome.warningCostUsd);
74
- }
75
- if (outcome.warningDurationMs !== undefined) {
76
- durationBeforeWarning.push(outcome.warningDurationMs);
77
- }
89
+ for (const outcome of outcomes) {
90
+ evaluatedFailureEpisodes += 1;
91
+ categoryCoverage[outcome.category] = (categoryCoverage[outcome.category] || 0) + 1;
92
+ if (outcome.warningAttempt !== undefined) {
93
+ warnings += 1;
94
+ attemptsBeforeWarning.push(outcome.warningAttempt);
95
+ warningLeadAttempts.push(Math.max(0, outcome.attemptCount - outcome.warningAttempt));
96
+ if (outcome.warningToolResultCount !== undefined) {
97
+ toolResultsBeforeWarning.push(outcome.warningToolResultCount);
78
98
  }
79
- if (outcome.stopIssued) {
80
- stopTotal += 1;
81
- if (outcome.recovered) {
82
- falseStopCountOnRecoveredEpisodes += 1;
83
- }
84
- else {
85
- stopTruePositive += 1;
86
- }
99
+ if (outcome.warningCostUsd !== undefined) {
100
+ costBeforeWarning.push(outcome.warningCostUsd);
87
101
  }
88
- const unrecoveredLoop = !outcome.recovered && outcome.attemptCount >= 3;
89
- if (unrecoveredLoop && !outcome.stopIssued) {
90
- missedUnrecoveredLoopCount += 1;
102
+ if (outcome.warningDurationMs !== undefined) {
103
+ durationBeforeWarning.push(outcome.warningDurationMs);
91
104
  }
92
- if (outcome.blindRetryWarningIssued) {
93
- blindRetryTotal += 1;
94
- if (!outcome.recovered) {
95
- blindRetryTruePositive += 1;
96
- }
105
+ }
106
+ if (outcome.stopIssued) {
107
+ stopTotal += 1;
108
+ if (outcome.recovered) {
109
+ falseStopCountOnRecoveredEpisodes += 1;
110
+ }
111
+ else {
112
+ stopTruePositive += 1;
113
+ }
114
+ }
115
+ const unrecoveredLoop = !outcome.recovered && outcome.attemptCount >= 3;
116
+ if (unrecoveredLoop && !outcome.stopIssued) {
117
+ missedUnrecoveredLoopCount += 1;
118
+ }
119
+ if (outcome.blindRetryWarningIssued) {
120
+ blindRetryTotal += 1;
121
+ if (!outcome.recovered) {
122
+ blindRetryTruePositive += 1;
97
123
  }
98
124
  }
99
125
  }
100
126
  return {
101
- sessionsEvaluated: holdoutEventsBySession.length,
102
- holdoutSessions: holdoutEventsBySession.length,
127
+ sessionsEvaluated: holdoutSessions,
128
+ holdoutSessions,
103
129
  evaluatedFailureEpisodes,
104
130
  warnings,
105
131
  stopPrecisionOnUnrecoveredEpisodes: stopTotal > 0 ? roundRate(stopTruePositive / stopTotal) : undefined,
@@ -115,12 +141,13 @@ function evaluateHoldout(holdoutEventsBySession, baseline) {
115
141
  : 0,
116
142
  averageCostBeforeWarning: averageOrUndefined(costBeforeWarning),
117
143
  averageDurationBeforeWarning: averageOrUndefined(durationBeforeWarning),
144
+ warningLeadTimeAttempts: averageOrZero(warningLeadAttempts),
118
145
  projectBaselineSuppressions: undefined,
119
146
  lowSampleSuppressions,
120
147
  categoryCoverage
121
148
  };
122
149
  }
123
- function replaySession(events, baseline) {
150
+ function replaySession(events, baseline, policy) {
124
151
  const active = new Map();
125
152
  const outcomes = [];
126
153
  let lowSampleSuppressions = 0;
@@ -158,7 +185,7 @@ function replaySession(events, baseline) {
158
185
  episode.attemptCount += 1;
159
186
  episode.maxBlindRunCount = Math.max(episode.maxBlindRunCount, episode.blindRunCount);
160
187
  episode.meaningfulInterventionSinceFailure = false;
161
- const currentState = replayDecisionState(episode);
188
+ const currentState = replayDecisionState(episode, baseline, policy);
162
189
  if (currentState !== "Healthy" && episode.warningAttempt === undefined) {
163
190
  episode.warningAttempt = episode.attemptCount;
164
191
  episode.warningToolResultCount = toolResultCount;
@@ -181,7 +208,21 @@ function replaySession(events, baseline) {
181
208
  }
182
209
  return { outcomes, lowSampleSuppressions };
183
210
  }
184
- function replayDecisionState(episode) {
211
+ function replayDecisionState(episode, baseline, policy) {
212
+ const fixedState = fixedReplayDecisionState(episode);
213
+ if (policy !== "hazard_threshold_candidate") {
214
+ return fixedState;
215
+ }
216
+ const insight = recoveryInsight(baseline, episode.category, episode.attemptCount);
217
+ if (fixedState === "Stop" && insight?.kind === "usually_recovers") {
218
+ return "Careful";
219
+ }
220
+ if (fixedState === "Careful" && insight?.kind === "usually_unrecovered") {
221
+ return "Stop";
222
+ }
223
+ return fixedState;
224
+ }
225
+ function fixedReplayDecisionState(episode) {
185
226
  if (episode.maxBlindRunCount >= 3 || episode.attemptCount >= 3) {
186
227
  return "Stop";
187
228
  }
@@ -210,7 +251,8 @@ function baselineFromEpisodes(episodes) {
210
251
  }
211
252
  return {
212
253
  failureRecovery: recoveryAggregatesFromCounters(counters),
213
- blindRetry: blindRetryAggregatesFromCounters(counters)
254
+ blindRetry: blindRetryAggregatesFromCounters(counters),
255
+ retryHazards: retryHazardsFromCounters(counters)
214
256
  };
215
257
  }
216
258
  async function readEpisodes(files, maxBytesPerTranscript) {
@@ -401,6 +443,9 @@ function formatOptionalDurationAverage(value) {
401
443
  function averageOrUndefined(values) {
402
444
  return values.length > 0 ? Number((values.reduce((total, value) => total + value, 0) / values.length).toFixed(2)) : undefined;
403
445
  }
446
+ function averageOrZero(values) {
447
+ return values.length > 0 ? Number((values.reduce((total, value) => total + value, 0) / values.length).toFixed(2)) : 0;
448
+ }
404
449
  function formatCategoryCoverage(coverage) {
405
450
  const parts = FAILURE_RECOVERY_CATEGORIES.flatMap((category) => {
406
451
  const count = coverage[category] || 0;
@@ -408,6 +453,57 @@ function formatCategoryCoverage(coverage) {
408
453
  });
409
454
  return parts.length > 0 ? parts.join(", ") : "none";
410
455
  }
456
+ function policyMetricsFromOutcomes(outcomes, decisionFlipRateValue) {
457
+ let warnings = 0;
458
+ let falseStopCount = 0;
459
+ let missedUnrecoveredLoopCount = 0;
460
+ const warningLeadAttempts = [];
461
+ const categoryCoverage = {};
462
+ for (const outcome of outcomes) {
463
+ categoryCoverage[outcome.category] = (categoryCoverage[outcome.category] || 0) + 1;
464
+ if (outcome.warningAttempt !== undefined) {
465
+ warnings += 1;
466
+ warningLeadAttempts.push(Math.max(0, outcome.attemptCount - outcome.warningAttempt));
467
+ }
468
+ if (outcome.stopIssued && outcome.recovered) {
469
+ falseStopCount += 1;
470
+ }
471
+ if (!outcome.recovered && outcome.attemptCount >= 3 && !outcome.stopIssued) {
472
+ missedUnrecoveredLoopCount += 1;
473
+ }
474
+ }
475
+ return {
476
+ warnings,
477
+ falseStopCount,
478
+ missedUnrecoveredLoopCount,
479
+ warningLeadTimeAttempts: averageOrZero(warningLeadAttempts),
480
+ decisionFlipRate: decisionFlipRateValue,
481
+ categoryCoverage
482
+ };
483
+ }
484
+ function decisionFlipRate(reference, candidate) {
485
+ const total = Math.min(reference.length, candidate.length);
486
+ if (total === 0) {
487
+ return 0;
488
+ }
489
+ let flips = 0;
490
+ for (let index = 0; index < total; index += 1) {
491
+ const left = reference[index];
492
+ const right = candidate[index];
493
+ if (!left || !right) {
494
+ continue;
495
+ }
496
+ if (left.stopIssued !== right.stopIssued || left.warningAttempt !== right.warningAttempt) {
497
+ flips += 1;
498
+ }
499
+ }
500
+ return roundRate(flips / total);
501
+ }
502
+ function formatPolicyComparison(policies) {
503
+ return Object.entries(policies)
504
+ .map(([name, metrics]) => `${name} false Stops ${metrics.falseStopCount}, missed unrecovered loops ${metrics.missedUnrecoveredLoopCount}, warning lead time ${metrics.warningLeadTimeAttempts.toFixed(2)}, decision flip rate ${metrics.decisionFlipRate.toFixed(2)}, category coverage ${formatCategoryCoverage(metrics.categoryCoverage)}`)
505
+ .join(" | ");
506
+ }
411
507
  function roundRate(value) {
412
508
  return Number(value.toFixed(4));
413
509
  }