@telora/daemon 0.22.189 → 0.22.208

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 (189) hide show
  1. package/build-info.json +6 -3
  2. package/dist/backends/index.d.ts.map +1 -1
  3. package/dist/backends/index.js +2 -0
  4. package/dist/backends/index.js.map +1 -1
  5. package/dist/completion/completion-fact-readers.d.ts +35 -0
  6. package/dist/completion/completion-fact-readers.d.ts.map +1 -0
  7. package/dist/completion/completion-fact-readers.js +70 -0
  8. package/dist/completion/completion-fact-readers.js.map +1 -0
  9. package/dist/completion/event-dep-defaults.d.ts +27 -0
  10. package/dist/completion/event-dep-defaults.d.ts.map +1 -0
  11. package/dist/completion/event-dep-defaults.js +30 -0
  12. package/dist/completion/event-dep-defaults.js.map +1 -0
  13. package/dist/completion/event-phases.d.ts.map +1 -1
  14. package/dist/completion/event-phases.js +5 -13
  15. package/dist/completion/event-phases.js.map +1 -1
  16. package/dist/completion/event.d.ts +32 -0
  17. package/dist/completion/event.d.ts.map +1 -1
  18. package/dist/completion/event.js +31 -25
  19. package/dist/completion/event.js.map +1 -1
  20. package/dist/completion/session-hold.d.ts +13 -1
  21. package/dist/completion/session-hold.d.ts.map +1 -1
  22. package/dist/completion/session-hold.js +18 -0
  23. package/dist/completion/session-hold.js.map +1 -1
  24. package/dist/completion/team-phase.d.ts.map +1 -1
  25. package/dist/completion/team-phase.js +1 -0
  26. package/dist/completion/team-phase.js.map +1 -1
  27. package/dist/completion/unclaimed-migration-notice-phase.d.ts +97 -0
  28. package/dist/completion/unclaimed-migration-notice-phase.d.ts.map +1 -0
  29. package/dist/completion/unclaimed-migration-notice-phase.js +270 -0
  30. package/dist/completion/unclaimed-migration-notice-phase.js.map +1 -0
  31. package/dist/directive/directive-executor.d.ts.map +1 -1
  32. package/dist/directive/directive-executor.js +1 -20
  33. package/dist/directive/directive-executor.js.map +1 -1
  34. package/dist/focus/focus-executor.d.ts +1 -0
  35. package/dist/focus/focus-executor.d.ts.map +1 -1
  36. package/dist/focus/focus-executor.js +18 -17
  37. package/dist/focus/focus-executor.js.map +1 -1
  38. package/dist/focus/focus-team-state.js +1 -1
  39. package/dist/focus/listener-spawn.d.ts.map +1 -1
  40. package/dist/focus/listener-spawn.js +5 -20
  41. package/dist/focus/listener-spawn.js.map +1 -1
  42. package/dist/focus/listener-state.d.ts.map +1 -1
  43. package/dist/focus/listener-state.js +1 -0
  44. package/dist/focus/listener-state.js.map +1 -1
  45. package/dist/focus/listener.d.ts +1 -0
  46. package/dist/focus/listener.d.ts.map +1 -1
  47. package/dist/focus/listener.js +9 -0
  48. package/dist/focus/listener.js.map +1 -1
  49. package/dist/focus/migration-claim-pass.d.ts +50 -0
  50. package/dist/focus/migration-claim-pass.d.ts.map +1 -0
  51. package/dist/focus/migration-claim-pass.js +234 -0
  52. package/dist/focus/migration-claim-pass.js.map +1 -0
  53. package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
  54. package/dist/focus/pending-spawn-pass-deps.js +2 -1
  55. package/dist/focus/pending-spawn-pass-deps.js.map +1 -1
  56. package/dist/focus/team-actionable-work.d.ts +21 -0
  57. package/dist/focus/team-actionable-work.d.ts.map +1 -1
  58. package/dist/focus/team-actionable-work.js +3 -0
  59. package/dist/focus/team-actionable-work.js.map +1 -1
  60. package/dist/git/types.d.ts.map +1 -1
  61. package/dist/git/types.js +2 -1
  62. package/dist/git/types.js.map +1 -1
  63. package/dist/loops/llm-client.d.ts.map +1 -1
  64. package/dist/loops/llm-client.js +11 -1
  65. package/dist/loops/llm-client.js.map +1 -1
  66. package/dist/migrations/migration-claim-lifecycle.d.ts +166 -0
  67. package/dist/migrations/migration-claim-lifecycle.d.ts.map +1 -0
  68. package/dist/migrations/migration-claim-lifecycle.js +198 -0
  69. package/dist/migrations/migration-claim-lifecycle.js.map +1 -0
  70. package/dist/migrations/migration-held-set.d.ts +171 -0
  71. package/dist/migrations/migration-held-set.d.ts.map +1 -0
  72. package/dist/migrations/migration-held-set.js +295 -0
  73. package/dist/migrations/migration-held-set.js.map +1 -0
  74. package/dist/migrations/migration-inventory.d.ts +187 -0
  75. package/dist/migrations/migration-inventory.d.ts.map +1 -0
  76. package/dist/migrations/migration-inventory.js +253 -0
  77. package/dist/migrations/migration-inventory.js.map +1 -0
  78. package/dist/migrations/migration-manifest.d.ts +114 -0
  79. package/dist/migrations/migration-manifest.d.ts.map +1 -0
  80. package/dist/migrations/migration-manifest.js +295 -0
  81. package/dist/migrations/migration-manifest.js.map +1 -0
  82. package/dist/prompt/team-prompt-base.js +1 -1
  83. package/dist/prompt-sections/migration-numbering-section.d.ts +58 -0
  84. package/dist/prompt-sections/migration-numbering-section.d.ts.map +1 -0
  85. package/dist/prompt-sections/migration-numbering-section.js +70 -0
  86. package/dist/prompt-sections/migration-numbering-section.js.map +1 -0
  87. package/dist/prompt-sections/migration-numbering-state.d.ts +30 -0
  88. package/dist/prompt-sections/migration-numbering-state.d.ts.map +1 -0
  89. package/dist/prompt-sections/migration-numbering-state.js +24 -0
  90. package/dist/prompt-sections/migration-numbering-state.js.map +1 -0
  91. package/dist/prompt-sections/unclaimed-migration-section.d.ts +38 -0
  92. package/dist/prompt-sections/unclaimed-migration-section.d.ts.map +1 -0
  93. package/dist/prompt-sections/unclaimed-migration-section.js +57 -0
  94. package/dist/prompt-sections/unclaimed-migration-section.js.map +1 -0
  95. package/dist/queries/claim-pass-focuses.d.ts +19 -0
  96. package/dist/queries/claim-pass-focuses.d.ts.map +1 -0
  97. package/dist/queries/claim-pass-focuses.js +72 -0
  98. package/dist/queries/claim-pass-focuses.js.map +1 -0
  99. package/dist/queries/daemon-connection.d.ts.map +1 -1
  100. package/dist/queries/daemon-connection.js +1 -0
  101. package/dist/queries/daemon-connection.js.map +1 -1
  102. package/dist/queries/focus-discovery.d.ts +25 -2
  103. package/dist/queries/focus-discovery.d.ts.map +1 -1
  104. package/dist/queries/focus-discovery.js +16 -9
  105. package/dist/queries/focus-discovery.js.map +1 -1
  106. package/dist/queries/focus-unclaimed-migration.d.ts +146 -0
  107. package/dist/queries/focus-unclaimed-migration.d.ts.map +1 -0
  108. package/dist/queries/focus-unclaimed-migration.js +266 -0
  109. package/dist/queries/focus-unclaimed-migration.js.map +1 -0
  110. package/dist/queries/live-focus-branches.d.ts +32 -0
  111. package/dist/queries/live-focus-branches.d.ts.map +1 -0
  112. package/dist/queries/live-focus-branches.js +66 -0
  113. package/dist/queries/live-focus-branches.js.map +1 -0
  114. package/dist/queries/migration-claims.d.ts +25 -0
  115. package/dist/queries/migration-claims.d.ts.map +1 -0
  116. package/dist/queries/migration-claims.js +79 -0
  117. package/dist/queries/migration-claims.js.map +1 -0
  118. package/dist/queries/schemas.d.ts +2 -0
  119. package/dist/queries/schemas.d.ts.map +1 -1
  120. package/dist/queries/schemas.js +6 -0
  121. package/dist/queries/schemas.js.map +1 -1
  122. package/dist/queries/shared.js +1 -1
  123. package/dist/session/session-lineage.d.ts.map +1 -1
  124. package/dist/session/session-lineage.js +3 -0
  125. package/dist/session/session-lineage.js.map +1 -1
  126. package/dist/shell/heartbeat-metadata.d.ts +48 -2
  127. package/dist/shell/heartbeat-metadata.d.ts.map +1 -1
  128. package/dist/shell/heartbeat-metadata.js +80 -3
  129. package/dist/shell/heartbeat-metadata.js.map +1 -1
  130. package/dist/shell/heartbeat.d.ts +13 -0
  131. package/dist/shell/heartbeat.d.ts.map +1 -1
  132. package/dist/shell/heartbeat.js +31 -10
  133. package/dist/shell/heartbeat.js.map +1 -1
  134. package/dist/shell/mcp-resolution.js +1 -1
  135. package/dist/shell/mcp-resolution.js.map +1 -1
  136. package/dist/shell/migration-held-set-publish.d.ts +170 -0
  137. package/dist/shell/migration-held-set-publish.d.ts.map +1 -0
  138. package/dist/shell/migration-held-set-publish.js +172 -0
  139. package/dist/shell/migration-held-set-publish.js.map +1 -0
  140. package/dist/shell/worker-pidfile.d.ts.map +1 -1
  141. package/dist/shell/worker-pidfile.js +1 -0
  142. package/dist/shell/worker-pidfile.js.map +1 -1
  143. package/dist/spawn/helpers.d.ts.map +1 -1
  144. package/dist/spawn/helpers.js +1 -0
  145. package/dist/spawn/helpers.js.map +1 -1
  146. package/dist/spawn/lead-launch.d.ts.map +1 -1
  147. package/dist/spawn/lead-launch.js +1 -0
  148. package/dist/spawn/lead-launch.js.map +1 -1
  149. package/dist/spawn/lead-process-ownership.d.ts.map +1 -1
  150. package/dist/spawn/lead-process-ownership.js +1 -0
  151. package/dist/spawn/lead-process-ownership.js.map +1 -1
  152. package/dist/spawn/process-group-kill.d.ts.map +1 -1
  153. package/dist/spawn/process-group-kill.js +1 -0
  154. package/dist/spawn/process-group-kill.js.map +1 -1
  155. package/dist/spawn/process-spawn.d.ts +18 -1
  156. package/dist/spawn/process-spawn.d.ts.map +1 -1
  157. package/dist/spawn/process-spawn.js +11 -6
  158. package/dist/spawn/process-spawn.js.map +1 -1
  159. package/dist/spawn/prompt-assembly.d.ts +115 -18
  160. package/dist/spawn/prompt-assembly.d.ts.map +1 -1
  161. package/dist/spawn/prompt-assembly.js +121 -2
  162. package/dist/spawn/prompt-assembly.js.map +1 -1
  163. package/dist/spawn/spawn-and-acknowledge.d.ts +61 -0
  164. package/dist/spawn/spawn-and-acknowledge.d.ts.map +1 -0
  165. package/dist/spawn/spawn-and-acknowledge.js +117 -0
  166. package/dist/spawn/spawn-and-acknowledge.js.map +1 -0
  167. package/dist/spawn/spawn-cooldown.js +1 -1
  168. package/dist/spawn/spawn-decision.d.ts +10 -10
  169. package/dist/spawn/spawn-decision.d.ts.map +1 -1
  170. package/dist/spawn/spawn-decision.js +33 -5
  171. package/dist/spawn/spawn-decision.js.map +1 -1
  172. package/dist/templates/claude-md.d.ts +1 -1
  173. package/dist/templates/claude-md.d.ts.map +1 -1
  174. package/dist/templates/claude-md.js +24 -0
  175. package/dist/templates/claude-md.js.map +1 -1
  176. package/dist/testing/fixtures/index.js +1 -1
  177. package/dist/testing/fixtures/migration-namespace-repo.d.ts +63 -0
  178. package/dist/testing/fixtures/migration-namespace-repo.d.ts.map +1 -0
  179. package/dist/testing/fixtures/migration-namespace-repo.js +164 -0
  180. package/dist/testing/fixtures/migration-namespace-repo.js.map +1 -0
  181. package/dist/testing/fixtures/stubborn-lead-process.d.ts.map +1 -1
  182. package/dist/testing/fixtures/stubborn-lead-process.js +1 -0
  183. package/dist/testing/fixtures/stubborn-lead-process.js.map +1 -1
  184. package/dist/types/index.js +1 -1
  185. package/dist/verify/no-own-delta-verdict.d.ts +16 -2
  186. package/dist/verify/no-own-delta-verdict.d.ts.map +1 -1
  187. package/dist/verify/no-own-delta-verdict.js +18 -2
  188. package/dist/verify/no-own-delta-verdict.js.map +1 -1
  189. package/package.json +2 -2
@@ -0,0 +1,63 @@
1
+ /** One migration a branch holds: its ordinal and its tag. */
2
+ export interface FixtureMigration {
3
+ ordinal: string;
4
+ tag: string;
5
+ /**
6
+ * Register the migration in the journal but write NO file.
7
+ *
8
+ * A real state on a hand-registered product -- a file mid-rename, removed
9
+ * with its entry left, or a journal edited ahead of the file -- and the one
10
+ * that shows whether a held set built from filenames alone reports a
11
+ * registered number as free. Ignored by a layout with no journal.
12
+ */
13
+ journalOnly?: boolean;
14
+ }
15
+ /** A branch cut from the shared merge base, and what it adds on top of it. */
16
+ export interface FixtureBranch {
17
+ name: string;
18
+ migrations: readonly FixtureMigration[];
19
+ }
20
+ /** Which declared layout the fixture repo ships. */
21
+ export type FixtureLayout = 'timestamp' | 'sequential';
22
+ export interface MigrationRepoOptions {
23
+ /** Which declared layout the repo ships. Default: 'timestamp'. */
24
+ layout?: FixtureLayout;
25
+ /** Migrations present at the merge base, shared by every branch. Default: one. */
26
+ base?: readonly FixtureMigration[];
27
+ /** Branches cut from the base, created in order. */
28
+ branches?: readonly FixtureBranch[];
29
+ /** Omit the repo's telora.migrations.json entirely (the 'undeclared' state). */
30
+ undeclared?: boolean;
31
+ /** Write a declaration that cannot be parsed (the 'declarationUnreadable' state). */
32
+ malformedDeclaration?: boolean;
33
+ }
34
+ export interface MigrationFixtureRepo {
35
+ /** Absolute path of the repository. */
36
+ repoPath: string;
37
+ /** The branch the fixture leaves checked out (the merge base). */
38
+ baseBranch: string;
39
+ /**
40
+ * Add and commit a migration on `branch` AFTER the fixture was built.
41
+ *
42
+ * For the case the allocator's snapshot cannot see: a branch that moves
43
+ * between a published reading and a claim. The fixture returns to the base
44
+ * branch afterwards, so the working tree is never one of the branches under
45
+ * test.
46
+ */
47
+ advanceBranch(branch: string, migration: FixtureMigration): void;
48
+ /** Delete the temp directory. */
49
+ cleanup(): void;
50
+ }
51
+ /** The merge base's branch name. Every other branch is cut from it. */
52
+ export declare const BASE_BRANCH = "base";
53
+ /**
54
+ * Build a repository whose branches all diverge from ONE merge base, each
55
+ * adding the migrations it holds.
56
+ *
57
+ * Every branch is cut from {@link BASE_BRANCH}, so two of them holding the same
58
+ * ordinal is exactly the 2026-09-22 situation: neither branch's history is
59
+ * wrong, only their combination -- and the fixture leaves the base checked out,
60
+ * so the branches under test are never the working tree.
61
+ */
62
+ export declare function makeMigrationFixtureRepo(options?: MigrationRepoOptions): MigrationFixtureRepo;
63
+ //# sourceMappingURL=migration-namespace-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-namespace-repo.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/migration-namespace-repo.ts"],"names":[],"mappings":"AA8CA,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACzC;AAED,oDAAoD;AACpD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,YAAY,CAAC;AAEvD,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,kFAAkF;IAClF,IAAI,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjE,iCAAiC;IACjC,OAAO,IAAI,IAAI,CAAC;CACjB;AAiBD,uEAAuE;AACvE,eAAO,MAAM,WAAW,SAAS,CAAC;AAmElC;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,oBAAyB,GACjC,oBAAoB,CAgDtB"}
@@ -0,0 +1,164 @@
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/migration-claim-poll-wiring.test.ts,
3
+ // packages/daemon/src/migrations/claim-end-to-end.test.ts,
4
+ // packages/daemon/src/migrations/claim-production-wiring.test.ts,
5
+ // packages/daemon/src/migrations/concurrent-claim-regression.test.ts,
6
+ // packages/daemon/src/migrations/migration-held-set.test.ts,
7
+ // packages/daemon/src/migrations/migration-inventory.test.ts,
8
+ // packages/daemon/src/shell/heartbeat-migration-held-set.test.ts
9
+ // PINNED-BY-END
10
+ /**
11
+ * A REAL git repository whose branches each hold migrations, for exercising the
12
+ * migration-namespace reader against refs that are never checked out.
13
+ *
14
+ * WHY A REAL REPO AND NOT A STUB
15
+ * ------------------------------
16
+ * The reader's whole claim is that it can answer "what does this branch hold?"
17
+ * WITHOUT a checkout -- by reading the object database. A stub that returned an
18
+ * inventory would pin none of that: it could not show that a branch left
19
+ * un-checked-out is still askable, which is the one property the allocator
20
+ * depends on (the daemon never checks out a sibling focus's branch).
21
+ *
22
+ * It also lets the tests show the shape of the defect: two migrations at one
23
+ * number live in DIFFERENTLY NAMED files, so both survive a merge and git
24
+ * reports no conflict. That is why a number has to be claimed before the file
25
+ * exists -- there is nothing for git to catch afterwards.
26
+ *
27
+ * BOTH LIVE LAYOUTS are buildable, because a mechanism that only served
28
+ * generated migrations would serve one product and not the other:
29
+ * - `timestamp`: `supabase/migrations/<14 digits>_<tag>.sql`, no journal
30
+ * (this repo).
31
+ * - `sequential`: `lib/db/migrations/<4 digits>_<tag>.sql` plus a
32
+ * hand-maintained `meta/_journal.json` registering each migration by `idx`
33
+ * and `tag` (Tinker Tailor, where `db:generate` is unusable, so both the
34
+ * file and its journal entry are written by hand -- as they are here).
35
+ *
36
+ * @module testing/fixtures/migration-namespace-repo
37
+ */
38
+ import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
39
+ import { join } from 'node:path';
40
+ import { tmpdir } from 'node:os';
41
+ import { runGitSync } from '../../git/types.js';
42
+ import { MIGRATION_MANIFEST_FILENAME } from '../../migrations/migration-manifest.js';
43
+ const LAYOUTS = {
44
+ timestamp: {
45
+ dir: 'supabase/migrations',
46
+ filePattern: '^(?<ordinal>\\d{14})_(?<tag>.+)\\.sql$',
47
+ scheme: 'timestamp',
48
+ journal: undefined,
49
+ },
50
+ sequential: {
51
+ dir: 'lib/db/migrations',
52
+ filePattern: '^(?<ordinal>\\d{4})_(?<tag>.+)\\.sql$',
53
+ scheme: 'sequential',
54
+ journal: 'lib/db/migrations/meta/_journal.json',
55
+ },
56
+ };
57
+ /** The merge base's branch name. Every other branch is cut from it. */
58
+ export const BASE_BRANCH = 'base';
59
+ function git(repoPath, args) {
60
+ const result = runGitSync(args, repoPath);
61
+ if (!result.success) {
62
+ throw new Error(`fixture git ${args.join(' ')} failed: ${result.error || result.output}`);
63
+ }
64
+ }
65
+ /** Write a migration file, and register it in the journal when the layout has one. */
66
+ function addMigration(repoPath, layout, migration) {
67
+ const spec = LAYOUTS[layout];
68
+ mkdirSync(join(repoPath, spec.dir), { recursive: true });
69
+ if (migration.journalOnly !== true) {
70
+ writeFileSync(join(repoPath, spec.dir, `${migration.ordinal}_${migration.tag}.sql`), `-- ${migration.tag}\nSELECT 1;\n`);
71
+ }
72
+ if (spec.journal === undefined)
73
+ return;
74
+ const journalPath = join(repoPath, spec.journal);
75
+ mkdirSync(join(repoPath, spec.journal.slice(0, spec.journal.lastIndexOf('/'))), {
76
+ recursive: true,
77
+ });
78
+ let document;
79
+ try {
80
+ document = JSON.parse(readFileSync(journalPath, 'utf-8'));
81
+ }
82
+ catch {
83
+ document = { entries: [] };
84
+ }
85
+ // Hand-registered, exactly as the product that cannot run db:generate does it:
86
+ // the idx IS the filename's ordinal.
87
+ document.entries.push({
88
+ idx: Number(migration.ordinal),
89
+ tag: `${migration.ordinal}_${migration.tag}`,
90
+ });
91
+ writeFileSync(journalPath, `${JSON.stringify(document, null, 2)}\n`);
92
+ }
93
+ /** The declaration text this repo ships, or nothing when the fixture omits it. */
94
+ function writeDeclaration(repoPath, layout, options) {
95
+ const spec = LAYOUTS[layout];
96
+ if (options.malformedDeclaration === true) {
97
+ writeFileSync(join(repoPath, MIGRATION_MANIFEST_FILENAME), '{ "dir": ');
98
+ return;
99
+ }
100
+ if (options.undeclared === true)
101
+ return;
102
+ writeFileSync(join(repoPath, MIGRATION_MANIFEST_FILENAME), `${JSON.stringify({
103
+ dir: spec.dir,
104
+ filePattern: spec.filePattern,
105
+ scheme: spec.scheme,
106
+ ...(spec.journal !== undefined ? { journal: { path: spec.journal } } : {}),
107
+ }, null, 2)}\n`);
108
+ }
109
+ /**
110
+ * Build a repository whose branches all diverge from ONE merge base, each
111
+ * adding the migrations it holds.
112
+ *
113
+ * Every branch is cut from {@link BASE_BRANCH}, so two of them holding the same
114
+ * ordinal is exactly the 2026-09-22 situation: neither branch's history is
115
+ * wrong, only their combination -- and the fixture leaves the base checked out,
116
+ * so the branches under test are never the working tree.
117
+ */
118
+ export function makeMigrationFixtureRepo(options = {}) {
119
+ const layout = options.layout ?? 'timestamp';
120
+ const base = options.base ?? [
121
+ { ordinal: layout === 'sequential' ? '0001' : '20260101000000', tag: 'genesis_schema' },
122
+ ];
123
+ const repoPath = mkdtempSync(join(tmpdir(), 'telora-migration-namespace-'));
124
+ git(repoPath, ['init', '--quiet']);
125
+ git(repoPath, ['config', 'user.email', 'fixture@telora.test']);
126
+ git(repoPath, ['config', 'user.name', 'Telora Fixture']);
127
+ git(repoPath, ['config', 'commit.gpgsign', 'false']);
128
+ git(repoPath, ['config', 'core.hooksPath', join(repoPath, '.no-hooks')]);
129
+ writeDeclaration(repoPath, layout, options);
130
+ for (const migration of base)
131
+ addMigration(repoPath, layout, migration);
132
+ git(repoPath, ['add', '-A']);
133
+ git(repoPath, ['commit', '--quiet', '-m', 'the merge base every branch is cut from']);
134
+ git(repoPath, ['branch', '-M', BASE_BRANCH]);
135
+ for (const branch of options.branches ?? []) {
136
+ git(repoPath, ['checkout', '--quiet', '-b', branch.name, BASE_BRANCH]);
137
+ for (const migration of branch.migrations) {
138
+ addMigration(repoPath, layout, migration);
139
+ git(repoPath, ['add', '-A']);
140
+ git(repoPath, [
141
+ 'commit',
142
+ '--quiet',
143
+ '-m',
144
+ `add migration ${migration.ordinal}_${migration.tag}`,
145
+ ]);
146
+ }
147
+ }
148
+ git(repoPath, ['checkout', '--quiet', BASE_BRANCH]);
149
+ return {
150
+ repoPath,
151
+ baseBranch: BASE_BRANCH,
152
+ advanceBranch(branch, migration) {
153
+ git(repoPath, ['checkout', '--quiet', branch]);
154
+ addMigration(repoPath, layout, migration);
155
+ git(repoPath, ['add', '-A']);
156
+ git(repoPath, [
157
+ 'commit', '--quiet', '-m', `add migration ${migration.ordinal}_${migration.tag}`,
158
+ ]);
159
+ git(repoPath, ['checkout', '--quiet', BASE_BRANCH]);
160
+ },
161
+ cleanup: () => rmSync(repoPath, { recursive: true, force: true }),
162
+ };
163
+ }
164
+ //# sourceMappingURL=migration-namespace-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-namespace-repo.js","sourceRoot":"","sources":["../../../src/testing/fixtures/migration-namespace-repo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stubborn-lead-process.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/stubborn-lead-process.ts"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AAEH,OAAO,EAAS,KAAK,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAkBhF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,8BAA8B,CAAC;IACrC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qFAAqF;AACrF,wBAAsB,iBAAiB,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBjF;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAI9D"}
1
+ {"version":3,"file":"stubborn-lead-process.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/stubborn-lead-process.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AAEH,OAAO,EAAS,KAAK,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAkBhF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,8BAA8B,CAAC;IACrC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qFAAqF;AACrF,wBAAsB,iBAAiB,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBjF;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAI9D"}
@@ -5,6 +5,7 @@
5
5
  // packages/daemon/src/spawn/lead-launch.test.ts,
6
6
  // packages/daemon/src/spawn/one-shot-process-ownership.test.ts,
7
7
  // packages/daemon/src/spawn/process-group-kill.test.ts,
8
+ // packages/daemon/src/spawn/spawn-and-acknowledge.test.ts,
8
9
  // packages/daemon/src/spawn/spawn-team-process-ownership.test.ts,
9
10
  // packages/daemon/src/spawn/untracked-lead-sweep.test.ts
10
11
  // PINNED-BY-END
@@ -1 +1 @@
1
- {"version":3,"file":"stubborn-lead-process.js","sourceRoot":"","sources":["../../../src/testing/fixtures/stubborn-lead-process.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,uFAAuF;AACvF,6DAA6D;AAC7D,iEAAiE;AACjE,mDAAmD;AACnD,kEAAkE;AAClE,0DAA0D;AAC1D,oEAAoE;AACpE,2DAA2D;AAC3D,gBAAgB;AAEhB;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAC;AAEhF,MAAM,iBAAiB,GAAG;;;;CAIzB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;4CAKwB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;CAG5E,CAAC;AAUF,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAS,GAAG,MAAM;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;QACxD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAmC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvG,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACvC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;AAC1C,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,qBAAqB,CAAC,IAAkB;IACtD,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"stubborn-lead-process.js","sourceRoot":"","sources":["../../../src/testing/fixtures/stubborn-lead-process.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,uFAAuF;AACvF,6DAA6D;AAC7D,iEAAiE;AACjE,mDAAmD;AACnD,kEAAkE;AAClE,0DAA0D;AAC1D,6DAA6D;AAC7D,oEAAoE;AACpE,2DAA2D;AAC3D,gBAAgB;AAEhB;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAC;AAEhF,MAAM,iBAAiB,GAAG;;;;CAIzB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;4CAKwB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;CAG5E,CAAC;AAUF,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAS,GAAG,MAAM;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;QACxD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAmC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvG,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACvC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;AAC1C,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,qBAAqB,CAAC,IAAkB;IACtD,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -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: 215 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/types/index.ts
2
+ // Pinned by: 224 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/types/index.ts
3
3
  // PINNED-BY-END
4
4
  /**
5
5
  * Domain-specific type re-exports.
@@ -12,9 +12,23 @@
12
12
  * it exactly as on any recorded verdict -- its state follows from what its own
13
13
  * commits earned, and it is never stranded waiting on a run that must not happen.
14
14
  *
15
+ * Only a PASSING verdict is carried, and the asymmetry is the point. A pass is
16
+ * safe to carry: the focus added nothing, so it cannot have broken anything of
17
+ * its own. A failure is not, because the run that recorded it judged the whole
18
+ * tip -- every foreign commit since the focus's own work included -- so the
19
+ * failure may be a sibling's, and the very foreign commits being carried over
20
+ * may already have FIXED it. Carrying it anyway leaves no path back to green:
21
+ * each later foreign-only tip carries the same stale failure and no run is ever
22
+ * dispatched. Measured on focus 406cfd99, 2026-09-23/24: a run at 2f322c040
23
+ * failed on one foreign test; ea29a7949 -- the sibling commit that FIXES that
24
+ * test -- carried the failure, and e2c2d8985 carried it again, while the stage
25
+ * was green (1578 passed, 0 failed) at both.
26
+ *
15
27
  * Anything short of proof -- an own or unattributed commit since the judged
16
- * ancestor, no judged ancestor within the search depth, an unreadable read --
17
- * carries nothing, and the dispatch runs the gate as before.
28
+ * ancestor, a judged ancestor that did not pass, no judged ancestor within the
29
+ * search depth, an unreadable read -- carries nothing, and the dispatch runs the
30
+ * gate as before. That is the same posture git/focus-own-delta.ts takes on a read
31
+ * it cannot make: fail toward judging, never toward asserting a state unproven.
18
32
  *
19
33
  * @module verify/no-own-delta-verdict
20
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"no-own-delta-verdict.d.ts","sourceRoot":"","sources":["../../src/verify/no-own-delta-verdict.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAExG;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,MAAwB,CAAC;AAElE,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACxD,qEAAqE;IACrE,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACtE,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,sBAAsB,CAAC;CACxD;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA+BhC"}
1
+ {"version":3,"file":"no-own-delta-verdict.d.ts","sourceRoot":"","sources":["../../src/verify/no-own-delta-verdict.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAExG;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,MAAwB,CAAC;AAElE,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACxD,qEAAqE;IACrE,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACtE,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,sBAAsB,CAAC;CACxD;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAgChC"}
@@ -16,9 +16,23 @@
16
16
  * it exactly as on any recorded verdict -- its state follows from what its own
17
17
  * commits earned, and it is never stranded waiting on a run that must not happen.
18
18
  *
19
+ * Only a PASSING verdict is carried, and the asymmetry is the point. A pass is
20
+ * safe to carry: the focus added nothing, so it cannot have broken anything of
21
+ * its own. A failure is not, because the run that recorded it judged the whole
22
+ * tip -- every foreign commit since the focus's own work included -- so the
23
+ * failure may be a sibling's, and the very foreign commits being carried over
24
+ * may already have FIXED it. Carrying it anyway leaves no path back to green:
25
+ * each later foreign-only tip carries the same stale failure and no run is ever
26
+ * dispatched. Measured on focus 406cfd99, 2026-09-23/24: a run at 2f322c040
27
+ * failed on one foreign test; ea29a7949 -- the sibling commit that FIXES that
28
+ * test -- carried the failure, and e2c2d8985 carried it again, while the stage
29
+ * was green (1578 passed, 0 failed) at both.
30
+ *
19
31
  * Anything short of proof -- an own or unattributed commit since the judged
20
- * ancestor, no judged ancestor within the search depth, an unreadable read --
21
- * carries nothing, and the dispatch runs the gate as before.
32
+ * ancestor, a judged ancestor that did not pass, no judged ancestor within the
33
+ * search depth, an unreadable read -- carries nothing, and the dispatch runs the
34
+ * gate as before. That is the same posture git/focus-own-delta.ts takes on a read
35
+ * it cannot make: fail toward judging, never toward asserting a state unproven.
22
36
  *
23
37
  * @module verify/no-own-delta-verdict
24
38
  */
@@ -46,6 +60,8 @@ export async function resolveCarriedVerdict(productId, focusId, head, gate, deps
46
60
  if (!found)
47
61
  return null;
48
62
  const { sha: judged, verdict: recorded } = found;
63
+ if (recorded.outcome !== 'passed')
64
+ return null;
49
65
  let ids;
50
66
  try {
51
67
  ids = await deps.listFocusDeliveryIds(focusId);
@@ -1 +1 @@
1
- {"version":3,"file":"no-own-delta-verdict.js","sourceRoot":"","sources":["../../src/verify/no-own-delta-verdict.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,8FAA8F;AAC9F,mEAAmE;AACnE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAuB,MAAM,sBAAsB,CAAC;AAGtG;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;AAqBlE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAiB,EACjB,OAAe,EACf,IAAY,EACZ,IAAuB,EACvB,IAAwB;IAExB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;QAC/D,YAAY;QACZ,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACjD,IAAI,GAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,sBAAsB,CAAC,CACzE,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CACjE,CAAC;IACF,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,UAAU,GAAG,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,iEAAiE;UAClH,kDAAkD,CAAC;IACvD,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE;YACP,GAAG,QAAQ;YACX,GAAG,EAAE,IAAI;YACT,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,UAAU;SACpF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"no-own-delta-verdict.js","sourceRoot":"","sources":["../../src/verify/no-own-delta-verdict.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,8FAA8F;AAC9F,mEAAmE;AACnE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAuB,MAAM,sBAAsB,CAAC;AAGtG;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;AAqBlE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAiB,EACjB,OAAe,EACf,IAAY,EACZ,IAAuB,EACvB,IAAwB;IAExB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;QAC/D,YAAY;QACZ,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACjD,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,GAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,sBAAsB,CAAC,CACzE,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CACjE,CAAC;IACF,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,UAAU,GAAG,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,iEAAiE;UAClH,kDAAkD,CAAC;IACvD,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE;YACP,GAAG,QAAQ;YACX,GAAG,EAAE,IAAI;YACT,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,UAAU;SACpF;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telora/daemon",
3
- "version": "0.22.189",
3
+ "version": "0.22.208",
4
4
  "description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
5
5
  "type": "module",
6
6
  "bin": {
@@ -38,7 +38,7 @@
38
38
  "//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.",
39
39
  "dependencies": {
40
40
  "@telora/daemon-core": "^0.2.99",
41
- "@telora/mcp-products": "^0.22.159",
41
+ "@telora/mcp-products": "^0.22.165",
42
42
  "commander": "^14.0.3",
43
43
  "yaml": "^2.4.0",
44
44
  "zod": "^4.3.6"