wicked-crew 0.7.45 → 0.7.47

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 (215) hide show
  1. package/dist/api/capture.d.ts +2 -2
  2. package/dist/api/delivery-index.d.ts +21 -0
  3. package/dist/api/delivery-index.d.ts.map +1 -1
  4. package/dist/api/delivery-index.js +36 -0
  5. package/dist/api/delivery-index.js.map +1 -1
  6. package/dist/api/elicitation-cache.d.ts +12 -0
  7. package/dist/api/elicitation-cache.d.ts.map +1 -1
  8. package/dist/api/elicitation-cache.js +17 -1
  9. package/dist/api/elicitation-cache.js.map +1 -1
  10. package/dist/api/eval-sample.d.ts +6 -6
  11. package/dist/api/governance-steering.d.ts.map +1 -1
  12. package/dist/api/governance-steering.js +1 -0
  13. package/dist/api/governance-steering.js.map +1 -1
  14. package/dist/api/mcp.d.ts +10 -10
  15. package/dist/api/policy-landing.d.ts +55 -0
  16. package/dist/api/policy-landing.d.ts.map +1 -0
  17. package/dist/api/policy-landing.js +174 -0
  18. package/dist/api/policy-landing.js.map +1 -0
  19. package/dist/api/recording.d.ts +228 -0
  20. package/dist/api/recording.d.ts.map +1 -0
  21. package/dist/api/recording.js +1140 -0
  22. package/dist/api/recording.js.map +1 -0
  23. package/dist/api/roster-standing.d.ts.map +1 -1
  24. package/dist/api/roster-standing.js +5 -1
  25. package/dist/api/roster-standing.js.map +1 -1
  26. package/dist/api/routes.d.ts +31 -39
  27. package/dist/api/routes.d.ts.map +1 -1
  28. package/dist/api/routes.js +264 -104
  29. package/dist/api/routes.js.map +1 -1
  30. package/dist/api/run-timing-index.d.ts +17 -0
  31. package/dist/api/run-timing-index.d.ts.map +1 -1
  32. package/dist/api/run-timing-index.js +43 -1
  33. package/dist/api/run-timing-index.js.map +1 -1
  34. package/dist/api/seat-health.d.ts +35 -0
  35. package/dist/api/seat-health.d.ts.map +1 -1
  36. package/dist/api/seat-health.js +72 -0
  37. package/dist/api/seat-health.js.map +1 -1
  38. package/dist/api/seat-standing.d.ts +2 -2
  39. package/dist/api/seat-standing.d.ts.map +1 -1
  40. package/dist/api/seat-standing.js +27 -7
  41. package/dist/api/seat-standing.js.map +1 -1
  42. package/dist/api/server.d.ts +12 -0
  43. package/dist/api/server.d.ts.map +1 -1
  44. package/dist/api/server.js +74 -1
  45. package/dist/api/server.js.map +1 -1
  46. package/dist/api/testing.d.ts +4 -4
  47. package/dist/api/testing.d.ts.map +1 -1
  48. package/dist/api/testing.js +3 -0
  49. package/dist/api/testing.js.map +1 -1
  50. package/dist/api/watch-routes.d.ts +30 -0
  51. package/dist/api/watch-routes.d.ts.map +1 -0
  52. package/dist/api/watch-routes.js +104 -0
  53. package/dist/api/watch-routes.js.map +1 -0
  54. package/dist/campaigns/routes.d.ts +2 -2
  55. package/dist/cli/index.d.ts.map +1 -1
  56. package/dist/cli/index.js +4 -1
  57. package/dist/cli/index.js.map +1 -1
  58. package/dist/core/adapter.d.ts +36 -0
  59. package/dist/core/adapter.d.ts.map +1 -1
  60. package/dist/core/adapter.js +177 -5
  61. package/dist/core/adapter.js.map +1 -1
  62. package/dist/core/run-identity.js +1 -1
  63. package/dist/core/run-identity.js.map +1 -1
  64. package/dist/core/walkthrough-root.d.ts +21 -0
  65. package/dist/core/walkthrough-root.d.ts.map +1 -0
  66. package/dist/core/walkthrough-root.js +66 -0
  67. package/dist/core/walkthrough-root.js.map +1 -0
  68. package/dist/decisions/derive.d.ts +79 -0
  69. package/dist/decisions/derive.d.ts.map +1 -0
  70. package/dist/decisions/derive.js +282 -0
  71. package/dist/decisions/derive.js.map +1 -0
  72. package/dist/decisions/events.d.ts +23 -0
  73. package/dist/decisions/events.d.ts.map +1 -0
  74. package/dist/decisions/events.js +22 -0
  75. package/dist/decisions/events.js.map +1 -0
  76. package/dist/decisions/ingest.d.ts +28 -0
  77. package/dist/decisions/ingest.d.ts.map +1 -0
  78. package/dist/decisions/ingest.js +92 -0
  79. package/dist/decisions/ingest.js.map +1 -0
  80. package/dist/decisions/land.d.ts +100 -0
  81. package/dist/decisions/land.d.ts.map +1 -0
  82. package/dist/decisions/land.js +466 -0
  83. package/dist/decisions/land.js.map +1 -0
  84. package/dist/decisions/ledger.d.ts +60 -0
  85. package/dist/decisions/ledger.d.ts.map +1 -0
  86. package/dist/decisions/ledger.js +246 -0
  87. package/dist/decisions/ledger.js.map +1 -0
  88. package/dist/decisions/routes.d.ts +10 -0
  89. package/dist/decisions/routes.d.ts.map +1 -0
  90. package/dist/decisions/routes.js +141 -0
  91. package/dist/decisions/routes.js.map +1 -0
  92. package/dist/decisions/types.d.ts +120 -0
  93. package/dist/decisions/types.d.ts.map +1 -0
  94. package/dist/decisions/types.js +19 -0
  95. package/dist/decisions/types.js.map +1 -0
  96. package/dist/interactive/draft-events.d.ts.map +1 -1
  97. package/dist/interactive/draft-events.js +1 -0
  98. package/dist/interactive/draft-events.js.map +1 -1
  99. package/dist/projects/events.d.ts.map +1 -1
  100. package/dist/projects/events.js +2 -1
  101. package/dist/projects/events.js.map +1 -1
  102. package/dist/projects/state-home-preflight.d.ts.map +1 -1
  103. package/dist/projects/state-home-preflight.js +3 -0
  104. package/dist/projects/state-home-preflight.js.map +1 -1
  105. package/dist/projects/state-home-registry.d.ts.map +1 -1
  106. package/dist/projects/state-home-registry.js +2 -0
  107. package/dist/projects/state-home-registry.js.map +1 -1
  108. package/dist/projects/state-home.d.ts +6 -0
  109. package/dist/projects/state-home.d.ts.map +1 -1
  110. package/dist/projects/state-home.js +28 -1
  111. package/dist/projects/state-home.js.map +1 -1
  112. package/dist/qe/acceptance.d.ts +45 -4
  113. package/dist/qe/acceptance.d.ts.map +1 -1
  114. package/dist/qe/acceptance.js +93 -4
  115. package/dist/qe/acceptance.js.map +1 -1
  116. package/dist/qe/ledger.d.ts +20 -0
  117. package/dist/qe/ledger.d.ts.map +1 -1
  118. package/dist/qe/ledger.js +34 -0
  119. package/dist/qe/ledger.js.map +1 -1
  120. package/dist/qe/walkthrough-acceptance.d.ts +82 -0
  121. package/dist/qe/walkthrough-acceptance.d.ts.map +1 -0
  122. package/dist/qe/walkthrough-acceptance.js +248 -0
  123. package/dist/qe/walkthrough-acceptance.js.map +1 -0
  124. package/dist/skills/base-skill.d.ts.map +1 -1
  125. package/dist/skills/base-skill.js +3 -2
  126. package/dist/skills/base-skill.js.map +1 -1
  127. package/dist/skills/plugin-source.d.ts +19 -1
  128. package/dist/skills/plugin-source.d.ts.map +1 -1
  129. package/dist/skills/plugin-source.js +31 -2
  130. package/dist/skills/plugin-source.js.map +1 -1
  131. package/dist/skills/runtime.d.ts +11 -2
  132. package/dist/skills/runtime.d.ts.map +1 -1
  133. package/dist/skills/runtime.js +29 -1
  134. package/dist/skills/runtime.js.map +1 -1
  135. package/dist/skills/store.d.ts +14 -1
  136. package/dist/skills/store.d.ts.map +1 -1
  137. package/dist/skills/store.js +19 -5
  138. package/dist/skills/store.js.map +1 -1
  139. package/dist/standing-orders/routes.d.ts +4 -4
  140. package/dist/standing-orders/store.d.ts +2 -2
  141. package/dist/watch/checks/check-failed.d.ts +24 -0
  142. package/dist/watch/checks/check-failed.d.ts.map +1 -0
  143. package/dist/watch/checks/check-failed.js +56 -0
  144. package/dist/watch/checks/check-failed.js.map +1 -0
  145. package/dist/watch/checks/deliver-audit.d.ts +19 -0
  146. package/dist/watch/checks/deliver-audit.d.ts.map +1 -0
  147. package/dist/watch/checks/deliver-audit.js +129 -0
  148. package/dist/watch/checks/deliver-audit.js.map +1 -0
  149. package/dist/watch/checks/index.d.ts +8 -0
  150. package/dist/watch/checks/index.d.ts.map +1 -0
  151. package/dist/watch/checks/index.js +19 -0
  152. package/dist/watch/checks/index.js.map +1 -0
  153. package/dist/watch/checks/lag.d.ts +24 -0
  154. package/dist/watch/checks/lag.d.ts.map +1 -0
  155. package/dist/watch/checks/lag.js +55 -0
  156. package/dist/watch/checks/lag.js.map +1 -0
  157. package/dist/watch/checks/quiet-after-claim.d.ts +17 -0
  158. package/dist/watch/checks/quiet-after-claim.d.ts.map +1 -0
  159. package/dist/watch/checks/quiet-after-claim.js +89 -0
  160. package/dist/watch/checks/quiet-after-claim.js.map +1 -0
  161. package/dist/watch/checks/ungated.d.ts +12 -0
  162. package/dist/watch/checks/ungated.d.ts.map +1 -0
  163. package/dist/watch/checks/ungated.js +64 -0
  164. package/dist/watch/checks/ungated.js.map +1 -0
  165. package/dist/watch/emit.d.ts +122 -0
  166. package/dist/watch/emit.d.ts.map +1 -0
  167. package/dist/watch/emit.js +443 -0
  168. package/dist/watch/emit.js.map +1 -0
  169. package/dist/watch/events.d.ts +21 -0
  170. package/dist/watch/events.d.ts.map +1 -0
  171. package/dist/watch/events.js +21 -0
  172. package/dist/watch/events.js.map +1 -0
  173. package/dist/watch/keys.d.ts +15 -0
  174. package/dist/watch/keys.d.ts.map +1 -0
  175. package/dist/watch/keys.js +23 -0
  176. package/dist/watch/keys.js.map +1 -0
  177. package/dist/watch/lanes.d.ts +41 -0
  178. package/dist/watch/lanes.d.ts.map +1 -0
  179. package/dist/watch/lanes.js +73 -0
  180. package/dist/watch/lanes.js.map +1 -0
  181. package/dist/watch/loader.d.ts +47 -0
  182. package/dist/watch/loader.d.ts.map +1 -0
  183. package/dist/watch/loader.js +178 -0
  184. package/dist/watch/loader.js.map +1 -0
  185. package/dist/watch/registry.d.ts +137 -0
  186. package/dist/watch/registry.d.ts.map +1 -0
  187. package/dist/watch/registry.js +530 -0
  188. package/dist/watch/registry.js.map +1 -0
  189. package/dist/watch/ring.d.ts +32 -0
  190. package/dist/watch/ring.d.ts.map +1 -0
  191. package/dist/watch/ring.js +90 -0
  192. package/dist/watch/ring.js.map +1 -0
  193. package/dist/watch/router.d.ts +25 -0
  194. package/dist/watch/router.d.ts.map +1 -0
  195. package/dist/watch/router.js +87 -0
  196. package/dist/watch/router.js.map +1 -0
  197. package/dist/watch/sources.d.ts +42 -0
  198. package/dist/watch/sources.d.ts.map +1 -0
  199. package/dist/watch/sources.js +104 -0
  200. package/dist/watch/sources.js.map +1 -0
  201. package/dist/watch/types.d.ts +110 -0
  202. package/dist/watch/types.d.ts.map +1 -0
  203. package/dist/watch/types.js +6 -0
  204. package/dist/watch/types.js.map +1 -0
  205. package/endpoint-manifest.json +178 -1
  206. package/package.json +3 -2
  207. package/watch/entries/deliver-audit.json +17 -0
  208. package/watch/entries/quiet-after-claim.json +16 -0
  209. package/watch/entries/registry-check-failed.json +12 -0
  210. package/watch/entries/registry-lagging.json +12 -0
  211. package/watch/entries/ungated.json +13 -0
  212. package/dist/api/demo.d.ts +0 -90
  213. package/dist/api/demo.d.ts.map +0 -1
  214. package/dist/api/demo.js +0 -492
  215. package/dist/api/demo.js.map +0 -1
@@ -76,7 +76,7 @@ export declare const CreateStandingOrderSchema: z.ZodObject<{
76
76
  kind: "finding";
77
77
  severity: "*" | "high" | "medium";
78
78
  };
79
- activeWhen: "away" | "always";
79
+ activeWhen: "always" | "away";
80
80
  }, {
81
81
  action: "hold" | "notify" | "approve";
82
82
  scope: {
@@ -94,7 +94,7 @@ export declare const CreateStandingOrderSchema: z.ZodObject<{
94
94
  kind: "finding";
95
95
  severity: "*" | "high" | "medium";
96
96
  };
97
- activeWhen: "away" | "always";
97
+ activeWhen: "always" | "away";
98
98
  }>;
99
99
  }, "strict", z.ZodTypeAny, {
100
100
  text: string;
@@ -115,7 +115,7 @@ export declare const CreateStandingOrderSchema: z.ZodObject<{
115
115
  kind: "finding";
116
116
  severity: "*" | "high" | "medium";
117
117
  };
118
- activeWhen: "away" | "always";
118
+ activeWhen: "always" | "away";
119
119
  };
120
120
  }, {
121
121
  text: string;
@@ -136,7 +136,7 @@ export declare const CreateStandingOrderSchema: z.ZodObject<{
136
136
  kind: "finding";
137
137
  severity: "*" | "high" | "medium";
138
138
  };
139
- activeWhen: "away" | "always";
139
+ activeWhen: "always" | "away";
140
140
  };
141
141
  }>;
142
142
  export declare const ParseStandingOrderSchema: z.ZodObject<{
@@ -79,7 +79,7 @@ export declare const StandingOrderRuleSchema: z.ZodObject<{
79
79
  kind: "finding";
80
80
  severity: "*" | "high" | "medium";
81
81
  };
82
- activeWhen: "away" | "always";
82
+ activeWhen: "always" | "away";
83
83
  }, {
84
84
  action: "hold" | "notify" | "approve";
85
85
  scope: {
@@ -97,7 +97,7 @@ export declare const StandingOrderRuleSchema: z.ZodObject<{
97
97
  kind: "finding";
98
98
  severity: "*" | "high" | "medium";
99
99
  };
100
- activeWhen: "away" | "always";
100
+ activeWhen: "always" | "away";
101
101
  }>;
102
102
  export type StandingOrderRule = z.infer<typeof StandingOrderRuleSchema>;
103
103
  export interface StandingOrder {
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `deterministic:check_failed` — a check that keeps throwing or timing out (entry
3
+ * `registry-check-failed`, §4.3, §6).
4
+ *
5
+ * The deterministic lane reports every throw and every timeout as an internal key point. Past
6
+ * `failures` of one entry inside `window_minutes`, one run-less flag for that entry's episode. A
7
+ * failed check never emits "fine": its runs' coverage already says it did not check.
8
+ */
9
+ import { z } from 'zod';
10
+ import type { WatchCheck } from '../types.js';
11
+ declare const Threshold: z.ZodObject<{
12
+ failures: z.ZodNumber;
13
+ window_minutes: z.ZodNumber;
14
+ }, "strict", z.ZodTypeAny, {
15
+ failures: number;
16
+ window_minutes: number;
17
+ }, {
18
+ failures: number;
19
+ window_minutes: number;
20
+ }>;
21
+ type Threshold = z.infer<typeof Threshold>;
22
+ export declare const checkFailedCheck: WatchCheck<Record<string, never>, Threshold>;
23
+ export {};
24
+ //# sourceMappingURL=check-failed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-failed.d.ts","sourceRoot":"","sources":["../../../src/watch/checks/check-failed.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3D,QAAA,MAAM,SAAS;;;;;;;;;EAKJ,CAAC;AACZ,KAAK,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAO3C,eAAO,MAAM,gBAAgB,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,CAqCzE,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * `deterministic:check_failed` — a check that keeps throwing or timing out (entry
3
+ * `registry-check-failed`, §4.3, §6).
4
+ *
5
+ * The deterministic lane reports every throw and every timeout as an internal key point. Past
6
+ * `failures` of one entry inside `window_minutes`, one run-less flag for that entry's episode. A
7
+ * failed check never emits "fine": its runs' coverage already says it did not check.
8
+ */
9
+ import { z } from 'zod';
10
+ const Threshold = z
11
+ .object({
12
+ failures: z.number().int().min(1).max(1_000),
13
+ window_minutes: z.number().int().min(1).max(1_440),
14
+ })
15
+ .strict();
16
+ export const checkFailedCheck = {
17
+ name: 'deterministic:check_failed',
18
+ lane: 'deterministic',
19
+ paramsSchema: z.object({}).strict(),
20
+ thresholdSchema: Threshold,
21
+ evaluate(input, state, _params, t, ctx) {
22
+ const entryId = typeof input.event['entry_id'] === 'string' ? input.event['entry_id'] : null;
23
+ if (entryId === null)
24
+ return [];
25
+ const reason = input.event['reason'] === 'timeout' ? 'timed out' : 'failed';
26
+ const now = ctx.now();
27
+ const windowMs = t.window_minutes * 60_000;
28
+ const ep = state.bag.get(entryId) ?? { times: [], open: null };
29
+ state.bag.set(entryId, ep);
30
+ // A quiet window closes the episode AND clears its flag: the next burst is a new flag.
31
+ const out = [];
32
+ const last = ep.times[ep.times.length - 1];
33
+ if (ep.open !== null && last !== undefined && now - last > windowMs) {
34
+ out.push({ op: 'clear', subject: `check-failed:${entryId}:${ep.open}` });
35
+ ep.open = null;
36
+ }
37
+ ep.times = ep.times.filter((x) => now - x <= windowMs);
38
+ ep.times.push(now);
39
+ if (ep.open !== null || ep.times.length < t.failures)
40
+ return out;
41
+ ep.open = now;
42
+ return [
43
+ ...out,
44
+ {
45
+ op: 'raise',
46
+ subject: `check-failed:${entryId}:${ep.open}`,
47
+ sentence: `The "${entryId}" check ${reason} ${ep.times.length} times in ${t.window_minutes} min, so it is not checking right now.`,
48
+ facts: { entry_id: entryId, failures: ep.times.length, last: reason },
49
+ re: 'registry.check_failed',
50
+ },
51
+ ];
52
+ },
53
+ coverage: () => null,
54
+ describe: (t) => `When one check fails or times out ${t.failures} times within ${t.window_minutes} min`,
55
+ };
56
+ //# sourceMappingURL=check-failed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-failed.js","sourceRoot":"","sources":["../../../src/watch/checks/check-failed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `deterministic:deliver_audit` — entry `deliver-audit` (DES-TRIGGER-REGISTRY-001 §4.3 row 3, TR-W5b).
3
+ *
4
+ * A sequence check over the engine's own facts, nothing parsed: the deliver unit's
5
+ * `deliverLiftEvaluated.outcome`, joined to the same (session, ord, attempt)'s next
6
+ * `repoChecksEvaluated`, with the unit's end (`unitOutputCaptured` or `gateEvaluated` for that ord)
7
+ * closing the window.
8
+ *
9
+ * - `lifted` and the unit ends with NO re-check for that attempt → FINDING high: the tree that ships
10
+ * was moved onto the remote tip and never re-verified. (A re-check that ran and FAILED is not a
11
+ * finding: the engine failed the unit and pushed nothing.) A re-check arriving later clears it.
12
+ * - `skipped` → flag medium at once: the lift could not be decided, so the tree that ships was not
13
+ * re-verified on the remote tip (the deliver script's own rebase stands).
14
+ * - `conflict` / `failed` → flag info: the engine already failed the unit; this only names it.
15
+ * - `unchanged` → nothing.
16
+ */
17
+ import type { WatchCheck } from '../types.js';
18
+ export declare const deliverAuditCheck: WatchCheck<Record<string, never>, Record<string, never>>;
19
+ //# sourceMappingURL=deliver-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliver-audit.d.ts","sourceRoot":"","sources":["../../../src/watch/checks/deliver-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AAiB3D,eAAO,MAAM,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAuGtF,CAAC"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * `deterministic:deliver_audit` — entry `deliver-audit` (DES-TRIGGER-REGISTRY-001 §4.3 row 3, TR-W5b).
3
+ *
4
+ * A sequence check over the engine's own facts, nothing parsed: the deliver unit's
5
+ * `deliverLiftEvaluated.outcome`, joined to the same (session, ord, attempt)'s next
6
+ * `repoChecksEvaluated`, with the unit's end (`unitOutputCaptured` or `gateEvaluated` for that ord)
7
+ * closing the window.
8
+ *
9
+ * - `lifted` and the unit ends with NO re-check for that attempt → FINDING high: the tree that ships
10
+ * was moved onto the remote tip and never re-verified. (A re-check that ran and FAILED is not a
11
+ * finding: the engine failed the unit and pushed nothing.) A re-check arriving later clears it.
12
+ * - `skipped` → flag medium at once: the lift could not be decided, so the tree that ships was not
13
+ * re-verified on the remote tip (the deliver script's own rebase stands).
14
+ * - `conflict` / `failed` → flag info: the engine already failed the unit; this only names it.
15
+ * - `unchanged` → nothing.
16
+ */
17
+ import { z } from 'zod';
18
+ const num = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : null);
19
+ const keyOf = (ord, attempt) => `${ord}:${attempt}`;
20
+ export const deliverAuditCheck = {
21
+ name: 'deterministic:deliver_audit',
22
+ lane: 'deterministic',
23
+ paramsSchema: z.object({}).strict(),
24
+ thresholdSchema: z.object({}).strict(),
25
+ evaluate(input, state) {
26
+ const bag = state.bag.get('deliver') ?? { lifts: new Map(), outcomes: 0 };
27
+ state.bag.set('deliver', bag);
28
+ const e = input.event;
29
+ const ord = num(e['ord']);
30
+ const attempt = num(e['attempt']);
31
+ switch (input.type) {
32
+ case 'deliverLiftEvaluated': {
33
+ if (ord === null || attempt === null)
34
+ return [];
35
+ bag.outcomes++;
36
+ const outcome = typeof e['outcome'] === 'string' ? e['outcome'] : '';
37
+ const re = `deliverLiftEvaluated#${ord}:${attempt}`;
38
+ if (outcome === 'lifted') {
39
+ bag.lifts.set(keyOf(ord, attempt), { ord, attempt, rechecked: false, raised: false });
40
+ return [];
41
+ }
42
+ if (outcome === 'skipped') {
43
+ const note = typeof e['note'] === 'string' && e['note'] !== '' ? ` (${e['note'].slice(0, 160)})` : '';
44
+ return [
45
+ {
46
+ op: 'raise',
47
+ subject: `${ord}:${attempt}:lift-skipped`,
48
+ kind: 'flag',
49
+ severity: 'medium',
50
+ sentence: `The tree that ships was not re-checked on the newest main: the lift was skipped${note}.`,
51
+ facts: { outcome, base_ref: e['baseRef'] ?? null },
52
+ ord,
53
+ attempt,
54
+ re,
55
+ },
56
+ ];
57
+ }
58
+ if (outcome === 'conflict' || outcome === 'failed') {
59
+ const conflicts = Array.isArray(e['conflicts']) ? e['conflicts'].filter((c) => typeof c === 'string').slice(0, 10) : [];
60
+ return [
61
+ {
62
+ op: 'raise',
63
+ subject: `${ord}:${attempt}:lift-${outcome}`,
64
+ kind: 'flag',
65
+ severity: 'info',
66
+ sentence: outcome === 'conflict'
67
+ ? `Delivery stopped: the work would conflict with the newest main${conflicts.length > 0 ? ` in ${conflicts.length} file${conflicts.length === 1 ? '' : 's'}` : ''}. Nothing was pushed.`
68
+ : 'Delivery stopped: moving the work onto the newest main failed part-way. Nothing was pushed.',
69
+ facts: { outcome, conflicts },
70
+ ord,
71
+ attempt,
72
+ re,
73
+ },
74
+ ];
75
+ }
76
+ return [];
77
+ }
78
+ case 'repoChecksEvaluated': {
79
+ if (ord === null || attempt === null)
80
+ return [];
81
+ const lift = bag.lifts.get(keyOf(ord, attempt));
82
+ if (lift === undefined)
83
+ return [];
84
+ lift.rechecked = true;
85
+ // A late re-check resolves a raised finding (passing or failing: either way it ran). Cleared
86
+ // unconditionally — a restart may hold the row open while this life never raised it; a
87
+ // clear naming no row is a no-op in the emitter.
88
+ lift.raised = false;
89
+ return [{ op: 'clear', subject: `${ord}:${attempt}:lift-unverified` }];
90
+ }
91
+ case 'unitOutputCaptured':
92
+ case 'gateEvaluated': {
93
+ if (ord === null)
94
+ return [];
95
+ const out = [];
96
+ for (const lift of bag.lifts.values()) {
97
+ if (lift.ord !== ord || lift.rechecked || lift.raised)
98
+ continue;
99
+ // `gateEvaluated` carries no attempt: it closes every open lift of its unit.
100
+ if (input.type === 'unitOutputCaptured' && attempt !== null && attempt !== lift.attempt)
101
+ continue;
102
+ lift.raised = true;
103
+ out.push({
104
+ op: 'raise',
105
+ subject: `${lift.ord}:${lift.attempt}:lift-unverified`,
106
+ kind: 'finding',
107
+ severity: 'high',
108
+ sentence: 'The work was moved onto the newest main before delivery, and the moved tree was never re-checked.',
109
+ facts: { outcome: 'lifted', rechecked: false },
110
+ ord: lift.ord,
111
+ attempt: lift.attempt,
112
+ re: `deliverLiftEvaluated#${lift.ord}:${lift.attempt}`,
113
+ });
114
+ }
115
+ return out;
116
+ }
117
+ default:
118
+ return [];
119
+ }
120
+ },
121
+ coverage(state) {
122
+ const bag = state.bag.get('deliver');
123
+ if (bag !== undefined && bag.outcomes > 0)
124
+ return { state: 'checked' };
125
+ return { state: 'not_checked', reason: 'nothing was delivered on this run yet' };
126
+ },
127
+ describe: () => 'When delivery moves the work onto the newest main and the moved tree is not re-checked, or the move is skipped, conflicts or fails',
128
+ };
129
+ //# sourceMappingURL=deliver-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliver-audit.js","sourceRoot":"","sources":["../../../src/watch/checks/deliver-audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The check map (DES-TRIGGER-REGISTRY-001 §4.4): name → implementation, the ONE place a check is
3
+ * named. Each crew slice adds one line here (TR-W5b, W6, W7, W9), which is why they land in
4
+ * sequence. An entry naming a check that is not here is refused at load.
5
+ */
6
+ import type { WatchCheck } from '../types.js';
7
+ export declare const SHIPPED_CHECKS: ReadonlyMap<string, WatchCheck>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/watch/checks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAOzD,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The check map (DES-TRIGGER-REGISTRY-001 §4.4): name → implementation, the ONE place a check is
3
+ * named. Each crew slice adds one line here (TR-W5b, W6, W7, W9), which is why they land in
4
+ * sequence. An entry naming a check that is not here is refused at load.
5
+ */
6
+ import { checkFailedCheck } from './check-failed.js';
7
+ import { deliverAuditCheck } from './deliver-audit.js';
8
+ import { lagCheck } from './lag.js';
9
+ import { quietAfterClaimCheck } from './quiet-after-claim.js';
10
+ import { ungatedCheck } from './ungated.js';
11
+ export const SHIPPED_CHECKS = new Map([
12
+ [lagCheck.name, lagCheck],
13
+ [checkFailedCheck.name, checkFailedCheck],
14
+ // TR-W5b
15
+ [deliverAuditCheck.name, deliverAuditCheck],
16
+ [ungatedCheck.name, ungatedCheck],
17
+ [quietAfterClaimCheck.name, quietAfterClaimCheck],
18
+ ]);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/watch/checks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAoC,IAAI,GAAG,CAAqB;IACzF,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAiC,CAAC;IAClD,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAyC,CAAC;IAClE,SAAS;IACT,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAA0C,CAAC;IACpE,CAAC,YAAY,CAAC,IAAI,EAAE,YAAqC,CAAC;IAC1D,CAAC,oBAAoB,CAAC,IAAI,EAAE,oBAA6C,CAAC;CAC3E,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `deterministic:lag` — the registry watching itself (entry `registry-lagging`, §4.3).
3
+ *
4
+ * Fed by the registry's own 30 s tick (and at once when the push ring sheds). Lagging means the
5
+ * ring is over its depth threshold, the bus pull is more than `tail_lag_ms` behind the bus tail, or
6
+ * the ring shed an input since the last tick. One flag per episode, run-less ("for whoever runs
7
+ * studio"); the episode's flag clears when a tick finds the registry caught up.
8
+ */
9
+ import { z } from 'zod';
10
+ import type { WatchCheck } from '../types.js';
11
+ declare const Threshold: z.ZodObject<{
12
+ queue_depth: z.ZodNumber;
13
+ tail_lag_ms: z.ZodNumber;
14
+ }, "strict", z.ZodTypeAny, {
15
+ queue_depth: number;
16
+ tail_lag_ms: number;
17
+ }, {
18
+ queue_depth: number;
19
+ tail_lag_ms: number;
20
+ }>;
21
+ type Threshold = z.infer<typeof Threshold>;
22
+ export declare const lagCheck: WatchCheck<Record<string, never>, Threshold>;
23
+ export {};
24
+ //# sourceMappingURL=lag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lag.d.ts","sourceRoot":"","sources":["../../../src/watch/checks/lag.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,QAAA,MAAM,SAAS;;;;;;;;;EAKJ,CAAC;AACZ,KAAK,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAO3C,eAAO,MAAM,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,CAuCjE,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * `deterministic:lag` — the registry watching itself (entry `registry-lagging`, §4.3).
3
+ *
4
+ * Fed by the registry's own 30 s tick (and at once when the push ring sheds). Lagging means the
5
+ * ring is over its depth threshold, the bus pull is more than `tail_lag_ms` behind the bus tail, or
6
+ * the ring shed an input since the last tick. One flag per episode, run-less ("for whoever runs
7
+ * studio"); the episode's flag clears when a tick finds the registry caught up.
8
+ */
9
+ import { z } from 'zod';
10
+ const Threshold = z
11
+ .object({
12
+ queue_depth: z.number().int().min(1).max(100_000),
13
+ tail_lag_ms: z.number().int().min(1_000).max(3_600_000),
14
+ })
15
+ .strict();
16
+ export const lagCheck = {
17
+ name: 'deterministic:lag',
18
+ lane: 'deterministic',
19
+ paramsSchema: z.object({}).strict(),
20
+ thresholdSchema: Threshold,
21
+ evaluate(_input, state, _params, t, ctx) {
22
+ const s = ctx.stats();
23
+ const bag = state.bag.get('lag') ?? { episode: null, shedSeen: 0 };
24
+ state.bag.set('lag', bag);
25
+ const shedNow = s.shedTotal > bag.shedSeen;
26
+ bag.shedSeen = s.shedTotal;
27
+ const lagging = s.queueDepth >= t.queue_depth || s.tailLagMs > t.tail_lag_ms || shedNow;
28
+ if (lagging && bag.episode === null) {
29
+ bag.episode = ctx.now();
30
+ const why = shedNow
31
+ ? 'it had to drop some low-priority events'
32
+ : s.tailLagMs > t.tail_lag_ms
33
+ ? `it is ${Math.round(s.tailLagMs / 1000)} s behind the event bus`
34
+ : `${s.queueDepth} events are waiting to be checked`;
35
+ return [
36
+ {
37
+ op: 'raise',
38
+ subject: `lag:${bag.episode}`,
39
+ sentence: `Watching is falling behind: ${why}.`,
40
+ facts: { queue_depth: s.queueDepth, queue_hwm: s.queueHwm, shed_total: s.shedTotal, tail_lag_ms: s.tailLagMs },
41
+ re: 'registry.tick',
42
+ },
43
+ ];
44
+ }
45
+ if (!lagging && bag.episode !== null) {
46
+ const subject = `lag:${bag.episode}`;
47
+ bag.episode = null;
48
+ return [{ op: 'clear', subject }];
49
+ }
50
+ return [];
51
+ },
52
+ coverage: () => null,
53
+ describe: (t) => `When ${t.queue_depth} or more events are waiting, watching is more than ${Math.round(t.tail_lag_ms / 1000)} s behind the bus, or an event had to be dropped`,
54
+ };
55
+ //# sourceMappingURL=lag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lag.js","sourceRoot":"","sources":["../../../src/watch/checks/lag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `deterministic:quiet_after_claim` — entry `quiet-after-claim` (DES-TRIGGER-REGISTRY-001 §4.3
3
+ * row 5, TR-W5b).
4
+ *
5
+ * The watchdog's DETECTION frame (`workerStalled`, the `onFrame` tee) after the cursor unit handed
6
+ * back `unitOutputCaptured{stepStatus:"ok"}` — and with no `gateEvaluated` for that unit since — is
7
+ * a contradiction: the step says it is finished, yet nothing moved (R6 "contradicted").
8
+ *
9
+ * The frame carries no attempt and no quiet-start, and a restart never re-arms the watchdog clock,
10
+ * so the subject is `ord:attempt:after-claim` with the attempt from the CLAIM: one finding per
11
+ * claimed attempt however many quiet periods or restarts follow (the key resolves to the row
12
+ * already on the bus). Its gate arriving afterwards clears it. Thresholds stay the watchdog's
13
+ * (`workerStallMinutes`), so this entry has none of its own.
14
+ */
15
+ import type { WatchCheck } from '../types.js';
16
+ export declare const quietAfterClaimCheck: WatchCheck<Record<string, never>, Record<string, never>>;
17
+ //# sourceMappingURL=quiet-after-claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quiet-after-claim.d.ts","sourceRoot":"","sources":["../../../src/watch/checks/quiet-after-claim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiB9C,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAiEzF,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * `deterministic:quiet_after_claim` — entry `quiet-after-claim` (DES-TRIGGER-REGISTRY-001 §4.3
3
+ * row 5, TR-W5b).
4
+ *
5
+ * The watchdog's DETECTION frame (`workerStalled`, the `onFrame` tee) after the cursor unit handed
6
+ * back `unitOutputCaptured{stepStatus:"ok"}` — and with no `gateEvaluated` for that unit since — is
7
+ * a contradiction: the step says it is finished, yet nothing moved (R6 "contradicted").
8
+ *
9
+ * The frame carries no attempt and no quiet-start, and a restart never re-arms the watchdog clock,
10
+ * so the subject is `ord:attempt:after-claim` with the attempt from the CLAIM: one finding per
11
+ * claimed attempt however many quiet periods or restarts follow (the key resolves to the row
12
+ * already on the bus). Its gate arriving afterwards clears it. Thresholds stay the watchdog's
13
+ * (`workerStallMinutes`), so this entry has none of its own.
14
+ */
15
+ import { z } from 'zod';
16
+ export const quietAfterClaimCheck = {
17
+ name: 'deterministic:quiet_after_claim',
18
+ lane: 'deterministic',
19
+ paramsSchema: z.object({}).strict(),
20
+ thresholdSchema: z.object({}).strict(),
21
+ evaluate(input, state) {
22
+ const bag = state.bag.get('quiet') ?? { claims: new Map(), lastOrd: null, seen: 0 };
23
+ state.bag.set('quiet', bag);
24
+ const e = input.event;
25
+ const ord = typeof e['ord'] === 'number' ? e['ord'] : null;
26
+ switch (input.type) {
27
+ case 'unitOutputCaptured': {
28
+ bag.seen++;
29
+ if (ord === null || typeof e['attempt'] !== 'number')
30
+ return [];
31
+ if (e['stepStatus'] !== 'ok') {
32
+ bag.claims.delete(ord);
33
+ return [];
34
+ }
35
+ bag.claims.set(ord, { ord, attempt: e['attempt'], gated: false, raised: false });
36
+ bag.lastOrd = ord;
37
+ return [];
38
+ }
39
+ case 'gateEvaluated': {
40
+ if (ord === null)
41
+ return [];
42
+ const claim = bag.claims.get(ord);
43
+ if (claim === undefined)
44
+ return [];
45
+ claim.gated = true;
46
+ // Clear unconditionally: after a restart the replay rebuilds the claim with `raised: false`
47
+ // (watchdog frames are not replayed), yet the hydrated row may be open. A clear naming no
48
+ // row is a no-op in the emitter (codex on TR-W5b).
49
+ return [{ op: 'clear', subject: `${claim.ord}:${claim.attempt}:after-claim` }];
50
+ }
51
+ case 'workerStalled': {
52
+ bag.seen++;
53
+ // The DETECTION frame carries `quietForMs`; the engine's PTY-path event of the same name
54
+ // carries `stalledSecs` and is not this input.
55
+ if (typeof e['quietForMs'] !== 'number')
56
+ return [];
57
+ const at = ord ?? bag.lastOrd;
58
+ if (at === null)
59
+ return [];
60
+ const claim = bag.claims.get(at);
61
+ if (claim === undefined || claim.gated || claim.raised)
62
+ return [];
63
+ claim.raised = true;
64
+ const minutes = Math.max(1, Math.round(e['quietForMs'] / 60_000));
65
+ return [
66
+ {
67
+ op: 'raise',
68
+ subject: `${claim.ord}:${claim.attempt}:after-claim`,
69
+ sentence: `Says it's finished, but nothing new in ${minutes} min.`,
70
+ facts: { quiet_for_ms: e['quietForMs'] },
71
+ ord: claim.ord,
72
+ attempt: claim.attempt,
73
+ re: `workerStalled#${claim.ord}`,
74
+ },
75
+ ];
76
+ }
77
+ default:
78
+ return [];
79
+ }
80
+ },
81
+ coverage(state) {
82
+ const bag = state.bag.get('quiet');
83
+ if (bag !== undefined && bag.seen > 0)
84
+ return { state: 'checked' };
85
+ return { state: 'not_checked', reason: 'no step has handed back yet' };
86
+ },
87
+ describe: () => "When a step says it's finished but the run then goes quiet past the stall watchdog's threshold",
88
+ };
89
+ //# sourceMappingURL=quiet-after-claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quiet-after-claim.js","sourceRoot":"","sources":["../../../src/watch/checks/quiet-after-claim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `deterministic:ungated` — entry `ungated` (DES-TRIGGER-REGISTRY-001 §4.3 row 2, TR-W5b).
3
+ *
4
+ * A projection of the engine's own `gateEvaluated.ungated` and `ungatedReason` (the entry's filter
5
+ * is empty, so every gate counts toward coverage; only `ungated === true` raises): it computes nothing, and a judge-verified PASS without a floor is gated and
6
+ * never flagged (S5). The engine says such a unit "must be rendered as UNGATED, never as pass", so
7
+ * the flag is a `problem`, never "Finished". `gateEvaluated` carries no attempt; the attempt comes
8
+ * from the unit's `unitOutputCaptured`, emitted before the gate runs (joined).
9
+ */
10
+ import type { WatchCheck } from '../types.js';
11
+ export declare const ungatedCheck: WatchCheck<Record<string, never>, Record<string, never>>;
12
+ //# sourceMappingURL=ungated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ungated.d.ts","sourceRoot":"","sources":["../../../src/watch/checks/ungated.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAY9C,eAAO,MAAM,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CA8CjF,CAAC"}