@telora/daemon 0.19.74 → 0.19.82

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 (102) hide show
  1. package/build-info.json +5 -3
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +23 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/focus-executor.d.ts.map +1 -1
  6. package/dist/focus-executor.js +40 -5
  7. package/dist/focus-executor.js.map +1 -1
  8. package/dist/focus-merge.js +3 -3
  9. package/dist/focus-merge.js.map +1 -1
  10. package/dist/focus-prompt-builder.d.ts.map +1 -1
  11. package/dist/focus-prompt-builder.js +4 -1
  12. package/dist/focus-prompt-builder.js.map +1 -1
  13. package/dist/prompt-contradictions.d.ts +55 -0
  14. package/dist/prompt-contradictions.d.ts.map +1 -0
  15. package/dist/prompt-contradictions.js +114 -0
  16. package/dist/prompt-contradictions.js.map +1 -0
  17. package/dist/prompt-listing.d.ts +19 -0
  18. package/dist/prompt-listing.d.ts.map +1 -1
  19. package/dist/prompt-listing.js +49 -0
  20. package/dist/prompt-listing.js.map +1 -1
  21. package/dist/prompt-sections/execution-sections.d.ts +3 -2
  22. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  23. package/dist/prompt-sections/execution-sections.js +70 -97
  24. package/dist/prompt-sections/execution-sections.js.map +1 -1
  25. package/dist/prompt-sections/role-sections.js +2 -2
  26. package/dist/prompt-sections/role-sections.js.map +1 -1
  27. package/dist/queries/context-assembly.d.ts +14 -4
  28. package/dist/queries/context-assembly.d.ts.map +1 -1
  29. package/dist/queries/context-assembly.js +14 -4
  30. package/dist/queries/context-assembly.js.map +1 -1
  31. package/dist/queries/deliveries.d.ts +30 -0
  32. package/dist/queries/deliveries.d.ts.map +1 -1
  33. package/dist/queries/deliveries.js.map +1 -1
  34. package/dist/queries/focuses.d.ts +0 -7
  35. package/dist/queries/focuses.d.ts.map +1 -1
  36. package/dist/queries/focuses.js +0 -9
  37. package/dist/queries/focuses.js.map +1 -1
  38. package/dist/queries/index.d.ts +1 -1
  39. package/dist/queries/index.d.ts.map +1 -1
  40. package/dist/queries/index.js +1 -1
  41. package/dist/queries/index.js.map +1 -1
  42. package/dist/resolvers/escalation-answers.d.ts +40 -0
  43. package/dist/resolvers/escalation-answers.d.ts.map +1 -1
  44. package/dist/resolvers/escalation-answers.js +54 -35
  45. package/dist/resolvers/escalation-answers.js.map +1 -1
  46. package/dist/resolvers/shared/wiki.d.ts +27 -0
  47. package/dist/resolvers/shared/wiki.d.ts.map +1 -1
  48. package/dist/resolvers/shared/wiki.js +39 -0
  49. package/dist/resolvers/shared/wiki.js.map +1 -1
  50. package/dist/spawn/delivered-manifest.d.ts +42 -0
  51. package/dist/spawn/delivered-manifest.d.ts.map +1 -0
  52. package/dist/spawn/delivered-manifest.js +64 -0
  53. package/dist/spawn/delivered-manifest.js.map +1 -0
  54. package/dist/spawn/process-spawn.d.ts +9 -0
  55. package/dist/spawn/process-spawn.d.ts.map +1 -1
  56. package/dist/spawn/process-spawn.js +8 -1
  57. package/dist/spawn/process-spawn.js.map +1 -1
  58. package/dist/spawn/prompt-assembly.d.ts +28 -1
  59. package/dist/spawn/prompt-assembly.d.ts.map +1 -1
  60. package/dist/spawn/prompt-assembly.js +16 -7
  61. package/dist/spawn/prompt-assembly.js.map +1 -1
  62. package/dist/spawn/shared.d.ts +27 -3
  63. package/dist/spawn/shared.d.ts.map +1 -1
  64. package/dist/spawn/spawn-decision.d.ts +50 -0
  65. package/dist/spawn/spawn-decision.d.ts.map +1 -1
  66. package/dist/spawn/spawn-decision.js +114 -38
  67. package/dist/spawn/spawn-decision.js.map +1 -1
  68. package/dist/spawner/lifecycle.js +3 -3
  69. package/dist/spawner/lifecycle.js.map +1 -1
  70. package/dist/spawner/resolution.js +3 -3
  71. package/dist/spawner/resolution.js.map +1 -1
  72. package/dist/types/config.d.ts +44 -0
  73. package/dist/types/config.d.ts.map +1 -1
  74. package/dist/verification-baseline.d.ts +112 -0
  75. package/dist/verification-baseline.d.ts.map +1 -0
  76. package/dist/verification-baseline.js +264 -0
  77. package/dist/verification-baseline.js.map +1 -0
  78. package/dist/verification-config.d.ts +53 -0
  79. package/dist/verification-config.d.ts.map +1 -0
  80. package/dist/verification-config.js +72 -0
  81. package/dist/verification-config.js.map +1 -0
  82. package/dist/verification-default-on.d.ts +87 -0
  83. package/dist/verification-default-on.d.ts.map +1 -0
  84. package/dist/verification-default-on.js +186 -0
  85. package/dist/verification-default-on.js.map +1 -0
  86. package/dist/verification-deterministic.d.ts +56 -0
  87. package/dist/verification-deterministic.d.ts.map +1 -0
  88. package/dist/verification-deterministic.js +123 -0
  89. package/dist/verification-deterministic.js.map +1 -0
  90. package/dist/verification-engine.d.ts +22 -15
  91. package/dist/verification-engine.d.ts.map +1 -1
  92. package/dist/verification-engine.js +79 -65
  93. package/dist/verification-engine.js.map +1 -1
  94. package/dist/verification-failure-parser.d.ts +48 -0
  95. package/dist/verification-failure-parser.d.ts.map +1 -0
  96. package/dist/verification-failure-parser.js +102 -0
  97. package/dist/verification-failure-parser.js.map +1 -0
  98. package/dist/verification-feedback.d.ts +58 -0
  99. package/dist/verification-feedback.d.ts.map +1 -0
  100. package/dist/verification-feedback.js +110 -0
  101. package/dist/verification-feedback.js.map +1 -0
  102. package/package.json +2 -2
@@ -22,80 +22,30 @@
22
22
  *
23
23
  * @module verification-engine
24
24
  */
25
- import { spawn } from 'node:child_process';
25
+ import { runDeterministicStrategy } from './verification-deterministic.js';
26
+ export { runDeterministicStrategy } from './verification-deterministic.js';
26
27
  import { getPendingVerifications, recordDeliveryVerificationOutcome, verifyInjectionOnPass, emitInwardDriftProposals, } from './queries/verification.js';
27
28
  import { configForProduct } from './config.js';
28
29
  import { authorTargetRestatements as defaultAuthorTargetRestatements, } from './verify-restatement.js';
29
30
  import { fileEscalation as defaultFileEscalation } from './escalations.js';
30
31
  import { getGitDiff } from './assembly-resolvers.js';
31
32
  import { ESCALATION_REASONS, ESCALATION_DISPOSITIONS } from '@telora/daemon-core';
33
+ import { resolveDefaultVerification as defaultResolveDefaultVerification, } from './verification-config.js';
34
+ import { getActiveFocuses, getFocusDeliveries } from './supabase.js';
35
+ import { collectDefaultOnVerifications, markDefaultOnRan, verificationSemaphore, } from './verification-default-on.js';
36
+ import { deliverVerificationFailureFeedback } from './verification-feedback.js';
37
+ import { buildDefaultAttributeFailures, buildResolveVerificationCwd, applyAttribution } from './verification-baseline.js';
38
+ // Re-export the default-on selection + concurrency surface so existing
39
+ // importers (and tests) can reach it through verification-engine.
40
+ export { collectDefaultOnVerifications, verificationSemaphore, VerificationSemaphore, __getVerificationSemaphoreForTests, __resetDefaultOnGuardForTests, __getDefaultOnGuardForTests, __markDefaultOnRanForTests, } from './verification-default-on.js';
32
41
  import { resolveAiInspectionInputs as defaultResolveAiInspectionInputs, } from './ai-inspection-context.js';
33
42
  import { runAiInspection as defaultRunAiInspection, } from './ai-inspection-runner.js';
34
43
  import { buildDefaultSecurityFindingGateDeps, evaluateFindingNoLongerPresent, escalateOnGateFail, } from './security-finding-gate.js';
35
44
  import { callApi } from './queries/shared.js';
36
45
  import { runInstallProbeTick } from './install-probe-tick.js';
37
- const DEFAULT_VERIFICATION_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
38
- /**
39
- * Run a configured shell command in the focus's worktree (or the product
40
- * repo path as fallback). Pass = exit 0.
41
- */
42
- export async function runDeterministicStrategy(config, cwd) {
43
- const command = config?.command;
44
- if (typeof command !== 'string' || command.length === 0 || !config) {
45
- return {
46
- outcome: 'escalated',
47
- rationale: 'deterministic strategy missing config.command',
48
- };
49
- }
50
- const timeoutMs = typeof config.timeoutMs === 'number' && config.timeoutMs > 0
51
- ? config.timeoutMs
52
- : DEFAULT_VERIFICATION_TIMEOUT_MS;
53
- return new Promise((resolve) => {
54
- const child = spawn('sh', ['-c', command], {
55
- cwd,
56
- stdio: ['ignore', 'pipe', 'pipe'],
57
- });
58
- let stdout = '';
59
- let stderr = '';
60
- const tail = (buf, max = 4000) => buf.length <= max ? buf : buf.slice(buf.length - max);
61
- child.stdout?.on('data', (chunk) => {
62
- stdout += chunk.toString('utf8');
63
- stdout = tail(stdout);
64
- });
65
- child.stderr?.on('data', (chunk) => {
66
- stderr += chunk.toString('utf8');
67
- stderr = tail(stderr);
68
- });
69
- const timer = setTimeout(() => {
70
- try {
71
- child.kill('SIGKILL');
72
- }
73
- catch { /* ignore */ }
74
- }, timeoutMs);
75
- child.on('error', (err) => {
76
- clearTimeout(timer);
77
- resolve({
78
- outcome: 'failed',
79
- rationale: `deterministic spawn error: ${err.message}`,
80
- stdoutTail: stdout,
81
- stderrTail: stderr,
82
- });
83
- });
84
- child.on('close', (code) => {
85
- clearTimeout(timer);
86
- const passed = code === 0;
87
- resolve({
88
- outcome: passed ? 'passed' : 'failed',
89
- rationale: passed
90
- ? 'deterministic check passed (exit 0)'
91
- : `deterministic check failed (exit ${code})`,
92
- exitCode: code,
93
- stdoutTail: stdout,
94
- stderrTail: stderr,
95
- });
96
- });
97
- });
98
- }
46
+ // ---------------------------------------------------------------------------
47
+ // Strategies
48
+ // ---------------------------------------------------------------------------
99
49
  export async function runBehavioralStrategy() {
100
50
  return {
101
51
  outcome: 'pending',
@@ -174,10 +124,16 @@ const defaultDeps = (config) => {
174
124
  resolveCwd,
175
125
  integrationBranch: config.integrationBranch,
176
126
  securityFindingGate: buildDefaultSecurityFindingGateDeps(),
127
+ resolveDefaultVerification: (c) => defaultResolveDefaultVerification(c),
128
+ getActiveFocuses,
129
+ getFocusDeliveries,
130
+ deliverFailureFeedback: (v, result) => deliverVerificationFailureFeedback(v, result, config.organizationId).then(() => undefined),
131
+ resolveVerificationCwd: buildResolveVerificationCwd(resolveCwd),
132
+ attributeFailures: buildDefaultAttributeFailures(config),
177
133
  };
178
134
  };
179
135
  const STRATEGIES = {
180
- deterministic: (deps, v) => deps.runDeterministic(v.verificationConfig, deps.resolveCwd(v.productId)),
136
+ deterministic: (deps, v) => deps.runDeterministic(v.verificationConfig, (deps.resolveVerificationCwd ?? ((pv) => deps.resolveCwd(pv.productId)))(v), { deliveryId: v.deliveryId, startedAtMs: Date.now() }),
181
137
  behavioral: () => runBehavioralStrategy(),
182
138
  ai_inspection: (deps, v) => runAiInspectionStrategy(deps, v),
183
139
  };
@@ -264,6 +220,28 @@ export async function runVerificationForDelivery(v, deps) {
264
220
  const strategy = STRATEGIES[v.verificationMethod];
265
221
  const strategyResult = await strategy(deps, v);
266
222
  const result = { ...strategyResult };
223
+ // Baseline-diff attribution (deterministic only): a failed HEAD run whose
224
+ // failures ALL pre-exist on the focus base introduced no regression -> demote
225
+ // to 'passed' (the differential gate measures only the focus's delta). Runs
226
+ // BEFORE the pass path so a demotion feeds injection retirement; a null
227
+ // classification (no baseline) leaves the outcome unchanged (all failures gate).
228
+ if (v.verificationMethod === 'deterministic' && result.outcome === 'failed' && deps.attributeFailures) {
229
+ try {
230
+ const classification = await deps.attributeFailures(v, result);
231
+ if (classification) {
232
+ const attributed = applyAttribution(v.deliveryId, classification);
233
+ result.newFailures = attributed.newFailures;
234
+ result.preExisting = attributed.preExisting;
235
+ result.outcome = attributed.outcome;
236
+ result.rationale = attributed.rationale;
237
+ if (attributed.log)
238
+ console.log(attributed.log);
239
+ }
240
+ }
241
+ catch (err) {
242
+ console.warn(`[verification] baseline attribution failed for delivery ${v.deliveryId}:`, err.message);
243
+ }
244
+ }
267
245
  // Pass path FIRST so a verifyInjection failure short-circuits before we
268
246
  // record an outcome that does not match graph state.
269
247
  if (result.outcome === 'passed' && v.injectionNodeId) {
@@ -371,6 +349,16 @@ export async function runVerificationForDelivery(v, deps) {
371
349
  }
372
350
  }
373
351
  await deps.recordOutcome(v.deliveryId, result.outcome);
352
+ // Failure feedback: on a failed deterministic run, write gate_state + inject
353
+ // into the live team. Best-effort -- never let feedback failure crash the tick.
354
+ if (result.outcome === 'failed' && v.verificationMethod === 'deterministic' && deps.deliverFailureFeedback) {
355
+ try {
356
+ await deps.deliverFailureFeedback(v, result);
357
+ }
358
+ catch (err) {
359
+ console.warn(`[verification] failure feedback failed for delivery ${v.deliveryId}:`, err.message);
360
+ }
361
+ }
374
362
  // Drift emission is independent of verdict — a 'passed' inspection can
375
363
  // still observe contradictions to other CRT statements.
376
364
  const inspection = result.inspection;
@@ -398,7 +386,12 @@ export async function runVerificationForDelivery(v, deps) {
398
386
  export async function runVerificationTick(config, deps) {
399
387
  const merged = { ...defaultDeps(config), ...deps };
400
388
  const counts = { checked: 0, passed: 0, failed: 0, pending: 0, escalated: 0 };
389
+ const resolved = merged.resolveDefaultVerification(config);
390
+ // Apply the configured concurrency cap to the shared semaphore so overlapping
391
+ // ticks respect it (safeInterval has no re-entry guard).
392
+ verificationSemaphore.setLimit(resolved.maxConcurrent);
401
393
  for (const product of config.products) {
394
+ const productConfig = configForProduct(config, product);
402
395
  let pending;
403
396
  try {
404
397
  pending = await merged.getPendingVerifications(product.id);
@@ -407,8 +400,26 @@ export async function runVerificationTick(config, deps) {
407
400
  console.warn(`[verification] fetch failed for product ${product.id}:`, err.message);
408
401
  continue;
409
402
  }
410
- for (const v of pending) {
403
+ // Default-on: append deterministic runs for verify deliveries with no
404
+ // explicit method (the whole-repo suite the daemon now owns). Inert when
405
+ // no default command is configured (resolved.enabled === false).
406
+ const explicitIds = new Set(pending.map((p) => p.deliveryId));
407
+ let defaultOn = [];
408
+ try {
409
+ defaultOn = await collectDefaultOnVerifications(productConfig, resolved, explicitIds, merged);
410
+ }
411
+ catch (err) {
412
+ console.warn(`[verification] default-on scan failed for product ${product.id}:`, err.message);
413
+ }
414
+ for (const v of [...pending, ...defaultOn]) {
411
415
  counts.checked += 1;
416
+ // Mark default-on candidates as run BEFORE dispatch so a mid-run failure
417
+ // does not re-enqueue the same 30-min suite on the next tick.
418
+ if (v.verificationOutcome === null && !explicitIds.has(v.deliveryId)) {
419
+ markDefaultOnRan(v.deliveryId);
420
+ }
421
+ // Cap concurrent whole-repo runs across overlapping ticks.
422
+ await verificationSemaphore.acquire();
412
423
  try {
413
424
  const r = await runVerificationForDelivery(v, merged);
414
425
  counts[r.outcome] = (counts[r.outcome] ?? 0) + 1;
@@ -416,6 +427,9 @@ export async function runVerificationTick(config, deps) {
416
427
  catch (err) {
417
428
  console.warn(`[verification] tick failed for delivery ${v.deliveryId}:`, err.message);
418
429
  }
430
+ finally {
431
+ verificationSemaphore.release();
432
+ }
419
433
  }
420
434
  }
421
435
  // Clean-environment install probe (Review Gate Hardening, deferrable): an
@@ -1 +1 @@
1
- {"version":3,"file":"verification-engine.js","sourceRoot":"","sources":["../src/verification-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verification-engine.js","sourceRoot":"","sources":["../src/verification-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Machine-readable failing-test extraction for the two runners this repo uses.
3
+ *
4
+ * The daemon-side verification run (default-on deterministic strategy) produces
5
+ * test output that two consumers need as a normalized SET of failing-test ids:
6
+ * - the failure-feedback loop (gate_state failing-test names, live inject),
7
+ * - baseline-diff attribution (classify HEAD failures new-vs-pre-existing by
8
+ * set-diff against the focus base).
9
+ *
10
+ * Two formats are supported:
11
+ * - vitest `--reporter=json` (root repo): a JSON blob with
12
+ * `testResults[].assertionResults[]`; each assertion has a `status` and a
13
+ * `fullName` / `title` + `ancestorTitles`.
14
+ * - node:test TAP (packages/daemon): `not ok <n> - <description>` lines.
15
+ *
16
+ * `auto` tries JSON first (a leading `{`), then falls back to TAP. All parsers
17
+ * are PURE (no I/O), so they are trivially unit-testable and safe to run on the
18
+ * captured stdout string. A malformed/partial blob yields an empty set rather
19
+ * than throwing -- a failure to PARSE must never mask or crash the run.
20
+ *
21
+ * Ids are stable, comparable strings so a set-diff across two runs is exact:
22
+ * - vitest: `<file> > <fullName>` (fullName already joins ancestor titles)
23
+ * - tap: the trimmed description after `not ok <n> - `
24
+ *
25
+ * @module verification-failure-parser
26
+ */
27
+ export type TestRunner = 'vitest-json' | 'tap' | 'auto';
28
+ /**
29
+ * Extract the set of failing-test ids from a runner's output.
30
+ *
31
+ * @param output Raw stdout captured from the verification command.
32
+ * @param runner Which format to parse; `auto` (default) sniffs JSON then TAP.
33
+ */
34
+ export declare function parseFailingTests(output: string, runner?: TestRunner): Set<string>;
35
+ /**
36
+ * Parse a vitest `--reporter=json` blob. The report may be embedded in other
37
+ * stdout (npm script banners), so we slice from the first `{` to the last `}`
38
+ * and JSON.parse that. Returns an empty set on any parse failure.
39
+ */
40
+ export declare function parseVitestJson(output: string): Set<string>;
41
+ /**
42
+ * Parse node:test / TAP output: `not ok <n> - <description>` lines. A
43
+ * `# ` diagnostic or a `not ok` inside a YAML block is ignored (those do not
44
+ * start at column 0 after trim with the `not ok` token). Ids are the trimmed
45
+ * description; a bare `not ok <n>` with no description falls back to the number.
46
+ */
47
+ export declare function parseTap(output: string): Set<string>;
48
+ //# sourceMappingURL=verification-failure-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-failure-parser.d.ts","sourceRoot":"","sources":["../src/verification-failure-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,UAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,CAY1F;AAgBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAuB3D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAapD"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Machine-readable failing-test extraction for the two runners this repo uses.
3
+ *
4
+ * The daemon-side verification run (default-on deterministic strategy) produces
5
+ * test output that two consumers need as a normalized SET of failing-test ids:
6
+ * - the failure-feedback loop (gate_state failing-test names, live inject),
7
+ * - baseline-diff attribution (classify HEAD failures new-vs-pre-existing by
8
+ * set-diff against the focus base).
9
+ *
10
+ * Two formats are supported:
11
+ * - vitest `--reporter=json` (root repo): a JSON blob with
12
+ * `testResults[].assertionResults[]`; each assertion has a `status` and a
13
+ * `fullName` / `title` + `ancestorTitles`.
14
+ * - node:test TAP (packages/daemon): `not ok <n> - <description>` lines.
15
+ *
16
+ * `auto` tries JSON first (a leading `{`), then falls back to TAP. All parsers
17
+ * are PURE (no I/O), so they are trivially unit-testable and safe to run on the
18
+ * captured stdout string. A malformed/partial blob yields an empty set rather
19
+ * than throwing -- a failure to PARSE must never mask or crash the run.
20
+ *
21
+ * Ids are stable, comparable strings so a set-diff across two runs is exact:
22
+ * - vitest: `<file> > <fullName>` (fullName already joins ancestor titles)
23
+ * - tap: the trimmed description after `not ok <n> - `
24
+ *
25
+ * @module verification-failure-parser
26
+ */
27
+ /**
28
+ * Extract the set of failing-test ids from a runner's output.
29
+ *
30
+ * @param output Raw stdout captured from the verification command.
31
+ * @param runner Which format to parse; `auto` (default) sniffs JSON then TAP.
32
+ */
33
+ export function parseFailingTests(output, runner = 'auto') {
34
+ if (typeof output !== 'string' || output.length === 0)
35
+ return new Set();
36
+ if (runner === 'vitest-json')
37
+ return parseVitestJson(output);
38
+ if (runner === 'tap')
39
+ return parseTap(output);
40
+ // auto: a vitest JSON report is a single JSON object; try it first, then TAP.
41
+ const trimmed = output.trimStart();
42
+ if (trimmed.startsWith('{')) {
43
+ const fromJson = parseVitestJson(output);
44
+ if (fromJson.size > 0)
45
+ return fromJson;
46
+ }
47
+ return parseTap(output);
48
+ }
49
+ /**
50
+ * Parse a vitest `--reporter=json` blob. The report may be embedded in other
51
+ * stdout (npm script banners), so we slice from the first `{` to the last `}`
52
+ * and JSON.parse that. Returns an empty set on any parse failure.
53
+ */
54
+ export function parseVitestJson(output) {
55
+ const ids = new Set();
56
+ const start = output.indexOf('{');
57
+ const end = output.lastIndexOf('}');
58
+ if (start < 0 || end <= start)
59
+ return ids;
60
+ let report;
61
+ try {
62
+ report = JSON.parse(output.slice(start, end + 1));
63
+ }
64
+ catch {
65
+ return ids;
66
+ }
67
+ for (const file of report.testResults ?? []) {
68
+ const fileName = file.name ?? '<unknown>';
69
+ for (const a of file.assertionResults ?? []) {
70
+ if (a.status !== 'failed')
71
+ continue;
72
+ const name = (typeof a.fullName === 'string' && a.fullName.trim().length > 0)
73
+ ? a.fullName
74
+ : [...(a.ancestorTitles ?? []), a.title ?? ''].filter(Boolean).join(' > ');
75
+ ids.add(`${fileName} > ${name}`.trim());
76
+ }
77
+ }
78
+ return ids;
79
+ }
80
+ /**
81
+ * Parse node:test / TAP output: `not ok <n> - <description>` lines. A
82
+ * `# ` diagnostic or a `not ok` inside a YAML block is ignored (those do not
83
+ * start at column 0 after trim with the `not ok` token). Ids are the trimmed
84
+ * description; a bare `not ok <n>` with no description falls back to the number.
85
+ */
86
+ export function parseTap(output) {
87
+ const ids = new Set();
88
+ for (const rawLine of output.split('\n')) {
89
+ const line = rawLine.trim();
90
+ // Match: not ok 12 - some test name (the ` - ` separator is optional)
91
+ const m = /^not ok\s+(\d+)\s*(?:-\s*(.*))?$/.exec(line);
92
+ if (!m)
93
+ continue;
94
+ const desc = (m[2] ?? '').trim();
95
+ // Skip TODO/SKIP directives -- those are not failures.
96
+ if (/#\s*(TODO|SKIP)\b/i.test(desc))
97
+ continue;
98
+ ids.add(desc.length > 0 ? desc : `not ok ${m[1]}`);
99
+ }
100
+ return ids;
101
+ }
102
+ //# sourceMappingURL=verification-failure-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-failure-parser.js","sourceRoot":"","sources":["../src/verification-failure-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,SAAqB,MAAM;IAC3E,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACxE,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE9C,8EAA8E;IAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;IACzC,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAgBD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC;IAC1C,IAAI,MAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAqB,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACpC,MAAM,IAAI,GACR,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9D,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACZ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/E,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,wEAAwE;QACxE,MAAM,CAAC,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,uDAAuD;QACvD,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC9C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Verification-failure feedback loop.
3
+ *
4
+ * When a daemon-side deterministic verification run FAILS, a failure discovered
5
+ * after the team context-switched must not cost a cold respawn. This module:
6
+ * 1. writes gate_state on the delivery row (blocking entry + failing tests +
7
+ * log path) so the dashboard "Waiting on" line surfaces it,
8
+ * 2. injects the failure context into the live team session when one is
9
+ * running (reusing the same leadStdin channel the directive inject uses),
10
+ * 3. leaves the failure in gate_state so the requeue/respawn prompt can carry
11
+ * it when no team is live (rendered by the wake/resume prompt builders).
12
+ *
13
+ * The gate_state write does NOT change execution_status (passes the current
14
+ * `verify` status, idempotent) -- the same pattern install-probe-tick uses.
15
+ *
16
+ * @module verification-feedback
17
+ */
18
+ import { sendMessage } from '@telora/daemon-core';
19
+ import { type DeliveryGateState, type VerificationFailureDetail } from './queries/deliveries.js';
20
+ import { getActiveTeams } from './focus-team-state.js';
21
+ import type { PendingVerification } from './queries/verification.js';
22
+ /** gate_state guard name a deterministic verification failure reports under. */
23
+ export declare const DETERMINISTIC_VERIFICATION_GUARD = "deterministic_verification";
24
+ /** The slice of a StrategyResult the feedback loop needs. */
25
+ export interface VerificationFailureResult {
26
+ logPath?: string;
27
+ exitCode?: number | null;
28
+ stdoutTail?: string;
29
+ stderrTail?: string;
30
+ rationale?: string;
31
+ /** Baseline-diff attribution: NEW failures the focus introduced (the gating set). */
32
+ newFailures?: string[];
33
+ /** Baseline-diff attribution: pre-existing base failures (recorded, non-blocking). */
34
+ preExisting?: string[];
35
+ }
36
+ /** Build the gate_state for a failed deterministic run. Pure -- exported for testing. */
37
+ export declare function buildVerificationFailureGateState(detail: VerificationFailureDetail): DeliveryGateState;
38
+ /** Build the failure message injected into a live team session. Pure -- exported for testing. */
39
+ export declare function buildFailureInjectMessage(deliveryName: string, detail: VerificationFailureDetail): string;
40
+ /** Injected IO for the feedback loop; defaults reach the real implementations. */
41
+ export interface VerificationFeedbackDeps {
42
+ writeGateState: (deliveryId: string, gateState: DeliveryGateState, organizationId: string) => Promise<void>;
43
+ getActiveTeams: typeof getActiveTeams;
44
+ sendMessage: typeof sendMessage;
45
+ now: () => string;
46
+ }
47
+ /**
48
+ * Deliver failure feedback for a failed deterministic verification: write
49
+ * gate_state, and inject into the live team session when one is running (and is
50
+ * a coding team, not a reviewer). Best-effort throughout -- a feedback failure
51
+ * must never crash the verification tick.
52
+ */
53
+ export declare function deliverVerificationFailureFeedback(v: Pick<PendingVerification, 'deliveryId' | 'deliveryName' | 'focusId'>, result: VerificationFailureResult, organizationId: string, deps?: Partial<VerificationFeedbackDeps>): Promise<{
54
+ gateWritten: boolean;
55
+ injected: boolean;
56
+ detail: VerificationFailureDetail;
57
+ }>;
58
+ //# sourceMappingURL=verification-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-feedback.d.ts","sourceRoot":"","sources":["../src/verification-feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAmB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,gFAAgF;AAChF,eAAO,MAAM,gCAAgC,+BAA+B,CAAC;AAE7E,6DAA6D;AAC7D,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,yFAAyF;AACzF,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,yBAAyB,GAAG,iBAAiB,CAOtG;AAED,iGAAiG;AACjG,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAsBzG;AAED,kFAAkF;AAClF,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5G,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAaD;;;;;GAKG;AACH,wBAAsB,kCAAkC,CACtD,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC,EACvE,MAAM,EAAE,yBAAyB,EACjC,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC3C,OAAO,CAAC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAC,CAsCzF"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Verification-failure feedback loop.
3
+ *
4
+ * When a daemon-side deterministic verification run FAILS, a failure discovered
5
+ * after the team context-switched must not cost a cold respawn. This module:
6
+ * 1. writes gate_state on the delivery row (blocking entry + failing tests +
7
+ * log path) so the dashboard "Waiting on" line surfaces it,
8
+ * 2. injects the failure context into the live team session when one is
9
+ * running (reusing the same leadStdin channel the directive inject uses),
10
+ * 3. leaves the failure in gate_state so the requeue/respawn prompt can carry
11
+ * it when no team is live (rendered by the wake/resume prompt builders).
12
+ *
13
+ * The gate_state write does NOT change execution_status (passes the current
14
+ * `verify` status, idempotent) -- the same pattern install-probe-tick uses.
15
+ *
16
+ * @module verification-feedback
17
+ */
18
+ import { DELIVERY_STATUS, sendMessage } from '@telora/daemon-core';
19
+ import { updateDeliveryStatus, } from './queries/deliveries.js';
20
+ import { getActiveTeams } from './focus-team-state.js';
21
+ import { parseFailingTests } from './verification-failure-parser.js';
22
+ /** gate_state guard name a deterministic verification failure reports under. */
23
+ export const DETERMINISTIC_VERIFICATION_GUARD = 'deterministic_verification';
24
+ /** Build the gate_state for a failed deterministic run. Pure -- exported for testing. */
25
+ export function buildVerificationFailureGateState(detail) {
26
+ return {
27
+ blocking: [{ guardName: DETERMINISTIC_VERIFICATION_GUARD, passed: false }],
28
+ warnings: [],
29
+ evaluatedAt: detail.failedAt,
30
+ verification: detail,
31
+ };
32
+ }
33
+ /** Build the failure message injected into a live team session. Pure -- exported for testing. */
34
+ export function buildFailureInjectMessage(deliveryName, detail) {
35
+ const lines = [
36
+ `VERIFICATION FAILED for delivery "${deliveryName}".`,
37
+ '',
38
+ detail.exitCode != null ? `Exit code: ${detail.exitCode}` : 'Exit code: (unknown)',
39
+ detail.logPath ? `Full log: ${detail.logPath}` : 'Full log: (not captured)',
40
+ ];
41
+ if (detail.failingTests.length > 0) {
42
+ lines.push('', `Failing tests (${detail.failingTests.length}):`);
43
+ for (const t of detail.failingTests.slice(0, 50))
44
+ lines.push(`- ${t}`);
45
+ if (detail.failingTests.length > 50) {
46
+ lines.push(`- ... and ${detail.failingTests.length - 50} more (see full log)`);
47
+ }
48
+ }
49
+ else {
50
+ lines.push('', 'Failing tests could not be parsed from the run output -- read the full log.');
51
+ }
52
+ lines.push('', 'Fix the failing tests for the files you changed, then commit. The daemon re-verifies ' +
53
+ 'at the coding -> verify edge -- do NOT run the whole-repo suite yourself.');
54
+ return lines.join('\n');
55
+ }
56
+ const defaultDeps = () => ({
57
+ writeGateState: async (deliveryId, gateState, organizationId) => {
58
+ // Write gate_state WITHOUT changing execution_status (stays verify) -- same
59
+ // idempotent same-status pattern as install-probe-tick.
60
+ await updateDeliveryStatus(deliveryId, DELIVERY_STATUS.VERIFY, undefined, gateState, undefined, { organizationId });
61
+ },
62
+ getActiveTeams,
63
+ sendMessage,
64
+ now: () => new Date().toISOString(),
65
+ });
66
+ /**
67
+ * Deliver failure feedback for a failed deterministic verification: write
68
+ * gate_state, and inject into the live team session when one is running (and is
69
+ * a coding team, not a reviewer). Best-effort throughout -- a feedback failure
70
+ * must never crash the verification tick.
71
+ */
72
+ export async function deliverVerificationFailureFeedback(v, result, organizationId, deps = {}) {
73
+ const d = { ...defaultDeps(), ...deps };
74
+ // Prefer the classified NEW failures (the gating set) when baseline-diff
75
+ // attribution ran; otherwise parse the run output best-effort.
76
+ const failingTests = result.newFailures
77
+ ?? [...parseFailingTests(`${result.stdoutTail ?? ''}\n${result.stderrTail ?? ''}`)];
78
+ const detail = {
79
+ failingTests,
80
+ ...(result.preExisting ? { preExisting: result.preExisting } : {}),
81
+ logPath: result.logPath ?? null,
82
+ exitCode: result.exitCode ?? null,
83
+ failedAt: d.now(),
84
+ };
85
+ const gateState = buildVerificationFailureGateState(detail);
86
+ let gateWritten = false;
87
+ try {
88
+ await d.writeGateState(v.deliveryId, gateState, organizationId);
89
+ gateWritten = true;
90
+ }
91
+ catch (err) {
92
+ console.warn(`[verification] failed to write gate_state for delivery ${v.deliveryId}:`, err.message);
93
+ }
94
+ let injected = false;
95
+ if (v.focusId) {
96
+ const team = d.getActiveTeams().get(v.focusId);
97
+ // Do not retask a live review team (parity with directive inject guard).
98
+ if (team && team.leadStdin && team.sessionType !== 'review') {
99
+ try {
100
+ d.sendMessage(team.leadStdin, buildFailureInjectMessage(v.deliveryName, detail));
101
+ injected = true;
102
+ }
103
+ catch (err) {
104
+ console.warn(`[verification] failed to inject failure to team ${v.focusId}:`, err.message);
105
+ }
106
+ }
107
+ }
108
+ return { gateWritten, injected, detail };
109
+ }
110
+ //# sourceMappingURL=verification-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-feedback.js","sourceRoot":"","sources":["../src/verification-feedback.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telora/daemon",
3
- "version": "0.19.74",
3
+ "version": "0.19.82",
4
4
  "description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
5
5
  "type": "module",
6
6
  "bin": {
@@ -39,7 +39,7 @@
39
39
  "dependencies": {
40
40
  "@telora/daemon": "^0.19.38",
41
41
  "@telora/daemon-core": "^0.2.63",
42
- "@telora/mcp-products": "^0.22.97",
42
+ "@telora/mcp-products": "^0.22.100",
43
43
  "commander": "^14.0.3",
44
44
  "yaml": "^2.4.0",
45
45
  "zod": "^4.3.6"