@telora/daemon 0.24.10 → 0.24.11

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 (54) hide show
  1. package/build-info.json +2 -2
  2. package/dist/composition/runtime-delivery-advance-context.d.ts.map +1 -1
  3. package/dist/composition/runtime-delivery-advance-context.js +22 -0
  4. package/dist/composition/runtime-delivery-advance-context.js.map +1 -1
  5. package/dist/composition/verification-context.d.ts.map +1 -1
  6. package/dist/composition/verification-context.js +23 -1
  7. package/dist/composition/verification-context.js.map +1 -1
  8. package/dist/focus/focus-poller-auto-advance.d.ts +7 -0
  9. package/dist/focus/focus-poller-auto-advance.d.ts.map +1 -1
  10. package/dist/focus/focus-poller-auto-advance.js +9 -33
  11. package/dist/focus/focus-poller-auto-advance.js.map +1 -1
  12. package/dist/focus/unarmed-advance-hold.d.ts +61 -0
  13. package/dist/focus/unarmed-advance-hold.d.ts.map +1 -0
  14. package/dist/focus/unarmed-advance-hold.js +73 -0
  15. package/dist/focus/unarmed-advance-hold.js.map +1 -0
  16. package/dist/prompt-sections/persona-sections.d.ts +8 -4
  17. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  18. package/dist/prompt-sections/persona-sections.js +13 -7
  19. package/dist/prompt-sections/persona-sections.js.map +1 -1
  20. package/dist/queries/deliveries/issues.d.ts.map +1 -1
  21. package/dist/queries/deliveries/issues.js +1 -0
  22. package/dist/queries/deliveries/issues.js.map +1 -1
  23. package/dist/queries/focuses/focus-discovery.d.ts.map +1 -1
  24. package/dist/queries/focuses/focus-discovery.js +1 -0
  25. package/dist/queries/focuses/focus-discovery.js.map +1 -1
  26. package/dist/queries/focuses/focuses.d.ts.map +1 -1
  27. package/dist/queries/focuses/focuses.js +1 -0
  28. package/dist/queries/focuses/focuses.js.map +1 -1
  29. package/dist/queries/verification/verification.js +1 -1
  30. package/dist/queries/workflow-transitions/workflows.d.ts.map +1 -1
  31. package/dist/queries/workflow-transitions/workflows.js +1 -0
  32. package/dist/queries/workflow-transitions/workflows.js.map +1 -1
  33. package/dist/testing/fixtures/index.js +1 -1
  34. package/dist/testing/fixtures/shortfall-rework-hold-deps.d.ts.map +1 -1
  35. package/dist/testing/fixtures/shortfall-rework-hold-deps.js +1 -0
  36. package/dist/testing/fixtures/shortfall-rework-hold-deps.js.map +1 -1
  37. package/dist/testing/fixtures/verification-deps.d.ts.map +1 -1
  38. package/dist/testing/fixtures/verification-deps.js +3 -1
  39. package/dist/testing/fixtures/verification-deps.js.map +1 -1
  40. package/dist/types/index.js +1 -1
  41. package/dist/verify/engine/verification-deps.d.ts +7 -0
  42. package/dist/verify/engine/verification-deps.d.ts.map +1 -1
  43. package/dist/verify/engine/verification-deps.js +1 -1
  44. package/dist/verify/engine/verification-engine.d.ts.map +1 -1
  45. package/dist/verify/engine/verification-engine.js +4 -2
  46. package/dist/verify/engine/verification-engine.js.map +1 -1
  47. package/dist/verify/gate-config/verification-config.js +1 -1
  48. package/dist/verify/gate-verdicts/gate-run-registry.js +1 -1
  49. package/dist/verify/run-selection/default-on-guards.js +1 -1
  50. package/dist/verify/run-selection/unarmed-unattributed.d.ts +89 -0
  51. package/dist/verify/run-selection/unarmed-unattributed.d.ts.map +1 -0
  52. package/dist/verify/run-selection/unarmed-unattributed.js +95 -0
  53. package/dist/verify/run-selection/unarmed-unattributed.js.map +1 -0
  54. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: 27 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/verify/gate-verdicts/gate-run-registry.ts
2
+ // Pinned by: 28 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/verify/gate-verdicts/gate-run-registry.ts
3
3
  // PINNED-BY-END
4
4
  const SEMAPHORE_WAIT = { on: 'verification_semaphore' };
5
5
  const SHA_RE = /^[0-9a-f]{7,64}$/i;
@@ -1,5 +1,5 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: 28 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/verify/run-selection/default-on-guards.ts
2
+ // Pinned by: 29 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/verify/run-selection/default-on-guards.ts
3
3
  // PINNED-BY-END
4
4
  /**
5
5
  * The default-on scan's steady-state re-run guards: what a delivery sitting in
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Verify run selection agrees with the spawner about the arm: a delivery on an
3
+ * UN-ARMED focus that no commit is attributed to is not judged.
4
+ *
5
+ * Nothing can run a delivery on an un-armed focus: a null role is inert for
6
+ * every spawn path (supervision/null-role-spawn.ts focusMayRunTeam). A verdict
7
+ * on one that no team ever committed to judges nothing -- its missing commits
8
+ * read as an instrument fault (blind), which routes it back to coding, where the
9
+ * spawner refuses a team, and the teamless advance walks it to verify again.
10
+ * So the arm is read at both doors, by the same rule: here, at verify selection,
11
+ * and in the teamless advance (focus/unarmed-advance-hold.ts), which leaves such
12
+ * a delivery where it is.
13
+ *
14
+ * THE RULE. A candidate is dropped from this tick's dispatch when, together:
15
+ * - its focus reads un-armed: assigned_agent_role_id is an explicit NULL on
16
+ * the focus row this tick read. A focus the read did not return, or a row
17
+ * with no such field, is NOT taken as un-armed -- the drop needs the fact,
18
+ * and without it the candidate is judged exactly as before;
19
+ * - no commit is attributed to the delivery (readAttributedCommit 'none'):
20
+ * no recorded merge-back, no attribute_commit credit, no commit carrying its
21
+ * Telora-Delivery trailer on the focus HEAD or the integration branch.
22
+ * A delivery on an un-armed focus that HAS attributed commits -- an operator
23
+ * stop mid-flight, a lifecycle clear after the work landed -- is still judged:
24
+ * there is work to judge, and its verdict is what review and the merge read.
25
+ * An attribution read that cannot answer ('unknown') keeps the candidate too.
26
+ *
27
+ * Nothing is written: the delivery stays where it is, unjudged, and the next
28
+ * arm (whose team commits under its trailer) is what makes it judgeable. One
29
+ * log line per delivery says so, repeated only after it was selected again.
30
+ *
31
+ * Pinned by unarmed-unattributed.test.ts (this directory).
32
+ *
33
+ * History: docs/daemon/history-verify.md (verify/run-selection/unarmed-unattributed.ts).
34
+ *
35
+ * @module unarmed-unattributed
36
+ */
37
+ import type { PendingVerification } from '../../queries/verification/verification.js';
38
+ import type { getActiveFocuses } from '../../queries/focuses/focus-discovery.js';
39
+ import type { EvidenceLookup } from '../../queries/deliveries/deliveries.js';
40
+ /**
41
+ * Whether any commit is attributed to a delivery: 'found', 'none' (every source
42
+ * was read and none names it), or 'unknown' (a source could not be read).
43
+ */
44
+ export type AttributedCommitRead = 'found' | 'none' | 'unknown';
45
+ /** The delivery an attribution read is about: its own id, focus, product and recorded merge-back. */
46
+ export type AttributedCommitSubject = Pick<PendingVerification, 'deliveryId' | 'focusId' | 'productId' | 'mergeCommitSha'>;
47
+ /** What the selection filter reads. */
48
+ export interface UnarmedSelectionDeps {
49
+ organizationId: string;
50
+ getActiveFocuses: typeof getActiveFocuses;
51
+ readAttributedCommit: (v: AttributedCommitSubject) => Promise<AttributedCommitRead>;
52
+ }
53
+ /**
54
+ * Whether a focus row reads UN-ARMED: an explicit null assigned_agent_role_id,
55
+ * the spawner's own refusal (focusMayRunTeam). A row with no such field is NOT
56
+ * un-armed -- the hold needs the fact. Shared by verify selection and the
57
+ * teamless auto-advance (focus/focus-poller-auto-advance.ts), so the two agree
58
+ * with the spawner about the same row.
59
+ */
60
+ export declare function readsUnarmed(row: {
61
+ assigned_agent_role_id?: string | null;
62
+ }): boolean;
63
+ /** Test-only: forget which skips were logged. */
64
+ export declare function __resetUnarmedSelectionForTests(): void;
65
+ /**
66
+ * `candidates` less every delivery on an un-armed focus that no commit is
67
+ * attributed to (module doc). Order is preserved; a candidate with no focus id
68
+ * is kept.
69
+ */
70
+ export declare function dropUnarmedUnattributed(candidates: readonly PendingVerification[], productId: string, deps: UnarmedSelectionDeps): Promise<PendingVerification[]>;
71
+ /** The reads the production attributed-commit reader composes. */
72
+ export interface AttributedCommitReaderDeps {
73
+ integrationBranch: string;
74
+ /** The focus worktree, or null when the focus has none on this host. */
75
+ resolveWorktreePath: (v: AttributedCommitSubject) => string | null;
76
+ /** The product repo, searched for the integration branch when there is no worktree. */
77
+ resolveRepoPath: (productId: string | null) => string;
78
+ /** The commits on `ref` (in `cwd`) whose Telora-Delivery trailer names `deliveryId`. */
79
+ listTrailerCommits: (cwd: string, ref: string, deliveryId: string) => string[];
80
+ /** The focus's attribute_commit credits (commit sha -> delivery id). */
81
+ readCredits: (v: Pick<AttributedCommitSubject, 'focusId' | 'deliveryId'>) => Promise<EvidenceLookup<ReadonlyMap<string, string>>>;
82
+ }
83
+ /**
84
+ * The production readAttributedCommit: a recorded merge-back, a credit, or a
85
+ * trailer on the focus HEAD or the integration branch is 'found'. Every source
86
+ * empty is 'none' -- unless the credits could not be read, which is 'unknown'.
87
+ */
88
+ export declare function buildAttributedCommitReader(deps: AttributedCommitReaderDeps): UnarmedSelectionDeps['readAttributedCommit'];
89
+ //# sourceMappingURL=unarmed-unattributed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unarmed-unattributed.d.ts","sourceRoot":"","sources":["../../../src/verify/run-selection/unarmed-unattributed.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAM7E;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhE,qGAAqG;AACrG,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,gBAAgB,CAAC,CAAC;AAE3H,uCAAuC;AACvC,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,oBAAoB,EAAE,CAAC,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACrF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAAE,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAErF;AAKD,iDAAiD;AACjD,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAwBD;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAC1C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAwBhC;AAED,kEAAkE;AAClE,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,mBAAmB,EAAE,CAAC,CAAC,EAAE,uBAAuB,KAAK,MAAM,GAAG,IAAI,CAAC;IACnE,uFAAuF;IACvF,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;IACtD,wFAAwF;IACxF,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC/E,wEAAwE;IACxE,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,YAAY,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CACnI;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,0BAA0B,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,CAW1H"}
@@ -0,0 +1,95 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/focus/unarmed-advance-hold.test.ts,
3
+ // packages/daemon/src/verify/run-selection/unarmed-unattributed.test.ts
4
+ // PINNED-BY-END
5
+ import { focusMayRunTeam } from '../../supervision/null-role-spawn.js';
6
+ import { createLogger } from '../../log/daemon-log.js';
7
+ const log = createLogger({ module: 'verification' });
8
+ /**
9
+ * Whether a focus row reads UN-ARMED: an explicit null assigned_agent_role_id,
10
+ * the spawner's own refusal (focusMayRunTeam). A row with no such field is NOT
11
+ * un-armed -- the hold needs the fact. Shared by verify selection and the
12
+ * teamless auto-advance (focus/focus-poller-auto-advance.ts), so the two agree
13
+ * with the spawner about the same row.
14
+ */
15
+ export function readsUnarmed(row) {
16
+ return row.assigned_agent_role_id === null && !focusMayRunTeam(row.assigned_agent_role_id);
17
+ }
18
+ /** Deliveries whose skip was already logged (cleared once the delivery is selected again). */
19
+ const announced = new Set();
20
+ /** Test-only: forget which skips were logged. */
21
+ export function __resetUnarmedSelectionForTests() {
22
+ announced.clear();
23
+ }
24
+ /**
25
+ * The focus ids this tick reads as UN-ARMED (an explicit null role), or null
26
+ * when the focus read failed -- then no focus is known un-armed and nothing is
27
+ * dropped.
28
+ */
29
+ async function readUnarmedFocusIds(productId, deps) {
30
+ try {
31
+ const focuses = await deps.getActiveFocuses(deps.organizationId, productId);
32
+ const unarmed = new Set();
33
+ for (const f of focuses) {
34
+ if (readsUnarmed(f))
35
+ unarmed.add(f.focus_id);
36
+ }
37
+ return unarmed;
38
+ }
39
+ catch (err) {
40
+ log.warn(`[verification] focus arm read failed for product ${productId} -- no candidate is skipped as un-armed this tick:`, err.message);
41
+ return null;
42
+ }
43
+ }
44
+ /**
45
+ * `candidates` less every delivery on an un-armed focus that no commit is
46
+ * attributed to (module doc). Order is preserved; a candidate with no focus id
47
+ * is kept.
48
+ */
49
+ export async function dropUnarmedUnattributed(candidates, productId, deps) {
50
+ if (candidates.length === 0)
51
+ return [];
52
+ const unarmed = await readUnarmedFocusIds(productId, deps);
53
+ if (unarmed === null || unarmed.size === 0) {
54
+ for (const v of candidates)
55
+ announced.delete(v.deliveryId);
56
+ return [...candidates];
57
+ }
58
+ const kept = [];
59
+ for (const v of candidates) {
60
+ if (!v.focusId || !unarmed.has(v.focusId) || (await deps.readAttributedCommit(v)) !== 'none') {
61
+ announced.delete(v.deliveryId);
62
+ kept.push(v);
63
+ continue;
64
+ }
65
+ if (!announced.has(v.deliveryId)) {
66
+ announced.add(v.deliveryId);
67
+ log.info(`[verification] not judging delivery "${v.deliveryName}" (${v.deliveryId}) -- its focus ${v.focusId.slice(0, 8)} `
68
+ + 'is not armed (no assigned agent role, so no team runs) and no commit is attributed to it; '
69
+ + 'it waits for the arm instead of cycling through verify');
70
+ }
71
+ }
72
+ return kept;
73
+ }
74
+ /**
75
+ * The production readAttributedCommit: a recorded merge-back, a credit, or a
76
+ * trailer on the focus HEAD or the integration branch is 'found'. Every source
77
+ * empty is 'none' -- unless the credits could not be read, which is 'unknown'.
78
+ */
79
+ export function buildAttributedCommitReader(deps) {
80
+ return async (v) => {
81
+ if (typeof v.mergeCommitSha === 'string' && v.mergeCommitSha.trim() !== '')
82
+ return 'found';
83
+ const credits = await deps.readCredits(v);
84
+ if (credits.state === 'found' && [...credits.value.values()].includes(v.deliveryId))
85
+ return 'found';
86
+ const worktree = deps.resolveWorktreePath(v);
87
+ if (worktree && deps.listTrailerCommits(worktree, 'HEAD', v.deliveryId).length > 0)
88
+ return 'found';
89
+ const repo = worktree ?? deps.resolveRepoPath(v.productId);
90
+ if (deps.listTrailerCommits(repo, deps.integrationBranch, v.deliveryId).length > 0)
91
+ return 'found';
92
+ return credits.state === 'undetermined' ? 'unknown' : 'none';
93
+ };
94
+ }
95
+ //# sourceMappingURL=unarmed-unattributed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unarmed-unattributed.js","sourceRoot":"","sources":["../../../src/verify/run-selection/unarmed-unattributed.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.24.10",
3
+ "version": "0.24.11",
4
4
  "description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
5
5
  "type": "module",
6
6
  "bin": {
@@ -41,7 +41,7 @@
41
41
  "//testRunner": "Uses Node.js built-in test runner (node:test) via tsx for TypeScript support. The root package uses Vitest; this is a deliberate choice for the daemon package to avoid framework dependencies. Test files live beside the modules they exercise (owner-directory layout); the runner discovers them recursively.",
42
42
  "dependencies": {
43
43
  "@telora/daemon-core": "^0.3.1",
44
- "@telora/mcp-products": "^0.23.6",
44
+ "@telora/mcp-products": "^0.23.7",
45
45
  "commander": "^14.0.3",
46
46
  "yaml": "^2.4.0",
47
47
  "zod": "^4.3.6"