@telora/daemon 0.22.290 → 0.22.293

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 (109) hide show
  1. package/README.md +2 -2
  2. package/build-info.json +2 -2
  3. package/dist/backends/index.js +1 -1
  4. package/dist/cli/connect/config-write.d.ts.map +1 -1
  5. package/dist/cli/connect/config-write.js +2 -1
  6. package/dist/cli/connect/config-write.js.map +1 -1
  7. package/dist/composition/execution-spawn-context.d.ts.map +1 -1
  8. package/dist/composition/execution-spawn-context.js +1 -0
  9. package/dist/composition/execution-spawn-context.js.map +1 -1
  10. package/dist/composition/focus-activity-live-sources.d.ts.map +1 -1
  11. package/dist/composition/focus-activity-live-sources.js +3 -0
  12. package/dist/composition/focus-activity-live-sources.js.map +1 -1
  13. package/dist/composition/verify-probe-context.d.ts +7 -0
  14. package/dist/composition/verify-probe-context.d.ts.map +1 -1
  15. package/dist/composition/verify-probe-context.js +55 -3
  16. package/dist/composition/verify-probe-context.js.map +1 -1
  17. package/dist/config/config.d.ts.map +1 -1
  18. package/dist/config/config.js +4 -3
  19. package/dist/config/config.js.map +1 -1
  20. package/dist/config/session-cap.d.ts +89 -0
  21. package/dist/config/session-cap.d.ts.map +1 -0
  22. package/dist/config/session-cap.js +176 -0
  23. package/dist/config/session-cap.js.map +1 -0
  24. package/dist/daemon-state/focus-team-state.d.ts +21 -1
  25. package/dist/daemon-state/focus-team-state.d.ts.map +1 -1
  26. package/dist/daemon-state/focus-team-state.js +36 -1
  27. package/dist/daemon-state/focus-team-state.js.map +1 -1
  28. package/dist/directive/directive-queue.js +1 -1
  29. package/dist/focus/focus-activity-poll-facts.d.ts.map +1 -1
  30. package/dist/focus/focus-activity-poll-facts.js +2 -1
  31. package/dist/focus/focus-activity-poll-facts.js.map +1 -1
  32. package/dist/focus/focus-activity-producers.d.ts +7 -1
  33. package/dist/focus/focus-activity-producers.d.ts.map +1 -1
  34. package/dist/focus/focus-activity-producers.js +19 -7
  35. package/dist/focus/focus-activity-producers.js.map +1 -1
  36. package/dist/focus/focus-activity-record.d.ts.map +1 -1
  37. package/dist/focus/focus-activity-record.js +4 -1
  38. package/dist/focus/focus-activity-record.js.map +1 -1
  39. package/dist/focus/focus-activity-sources.d.ts +4 -0
  40. package/dist/focus/focus-activity-sources.d.ts.map +1 -1
  41. package/dist/focus/focus-activity-sources.js.map +1 -1
  42. package/dist/focus/heartbeat-metadata.d.ts.map +1 -1
  43. package/dist/focus/heartbeat-metadata.js +6 -0
  44. package/dist/focus/heartbeat-metadata.js.map +1 -1
  45. package/dist/index.js +1 -1
  46. package/dist/queries/delivery-gate-state/delivery-gate-holds.d.ts +25 -1
  47. package/dist/queries/delivery-gate-state/delivery-gate-holds.d.ts.map +1 -1
  48. package/dist/queries/delivery-gate-state/delivery-gate-state.d.ts +3 -1
  49. package/dist/queries/delivery-gate-state/delivery-gate-state.d.ts.map +1 -1
  50. package/dist/queries/delivery-gate-state/delivery-gate-state.js.map +1 -1
  51. package/dist/shell/config-hot-reload.d.ts +11 -0
  52. package/dist/shell/config-hot-reload.d.ts.map +1 -1
  53. package/dist/shell/config-hot-reload.js +12 -0
  54. package/dist/shell/config-hot-reload.js.map +1 -1
  55. package/dist/shell/unified-engine-lifecycle.d.ts +8 -1
  56. package/dist/shell/unified-engine-lifecycle.d.ts.map +1 -1
  57. package/dist/shell/unified-engine-lifecycle.js +44 -24
  58. package/dist/shell/unified-engine-lifecycle.js.map +1 -1
  59. package/dist/shell/unified-init.d.ts +5 -1
  60. package/dist/shell/unified-init.d.ts.map +1 -1
  61. package/dist/shell/unified-init.js +2 -2
  62. package/dist/shell/unified-init.js.map +1 -1
  63. package/dist/shell/unified-shell-config.d.ts +2 -1
  64. package/dist/shell/unified-shell-config.d.ts.map +1 -1
  65. package/dist/shell/unified-shell-config.js +9 -3
  66. package/dist/shell/unified-shell-config.js.map +1 -1
  67. package/dist/shell/unified-shell-status.js +1 -1
  68. package/dist/shell/unified-shell-status.js.map +1 -1
  69. package/dist/shell/unified-shell.d.ts.map +1 -1
  70. package/dist/shell/unified-shell.js +2 -1
  71. package/dist/shell/unified-shell.js.map +1 -1
  72. package/dist/spawn/helpers.d.ts.map +1 -1
  73. package/dist/spawn/helpers.js +4 -0
  74. package/dist/spawn/helpers.js.map +1 -1
  75. package/dist/spawn/spawn-decision.d.ts.map +1 -1
  76. package/dist/spawn/spawn-decision.js +4 -0
  77. package/dist/spawn/spawn-decision.js.map +1 -1
  78. package/dist/spawn/team-working-delivery.d.ts +76 -0
  79. package/dist/spawn/team-working-delivery.d.ts.map +1 -0
  80. package/dist/spawn/team-working-delivery.js +76 -0
  81. package/dist/spawn/team-working-delivery.js.map +1 -0
  82. package/dist/testing/fake-npm-registry.d.ts +31 -0
  83. package/dist/testing/fake-npm-registry.d.ts.map +1 -0
  84. package/dist/testing/fake-npm-registry.js +127 -0
  85. package/dist/testing/fake-npm-registry.js.map +1 -0
  86. package/dist/testing/fixtures/index.js +1 -1
  87. package/dist/types/config.d.ts +30 -0
  88. package/dist/types/config.d.ts.map +1 -1
  89. package/dist/types/focus-team-state.d.ts +14 -0
  90. package/dist/types/focus-team-state.d.ts.map +1 -1
  91. package/dist/types/focus-team-state.js.map +1 -1
  92. package/dist/types/index.js +1 -1
  93. package/dist/verify/install-probe/in-repo-publish.d.ts +154 -0
  94. package/dist/verify/install-probe/in-repo-publish.d.ts.map +1 -0
  95. package/dist/verify/install-probe/in-repo-publish.js +183 -0
  96. package/dist/verify/install-probe/in-repo-publish.js.map +1 -0
  97. package/dist/verify/install-probe/install-probe-tick.d.ts +23 -2
  98. package/dist/verify/install-probe/install-probe-tick.d.ts.map +1 -1
  99. package/dist/verify/install-probe/install-probe-tick.js +84 -12
  100. package/dist/verify/install-probe/install-probe-tick.js.map +1 -1
  101. package/dist/verify/install-probe/install-probe.d.ts +16 -0
  102. package/dist/verify/install-probe/install-probe.d.ts.map +1 -1
  103. package/dist/verify/install-probe/install-probe.js +35 -19
  104. package/dist/verify/install-probe/install-probe.js.map +1 -1
  105. package/dist/verify/install-probe/npm-unresolved.d.ts +37 -0
  106. package/dist/verify/install-probe/npm-unresolved.d.ts.map +1 -0
  107. package/dist/verify/install-probe/npm-unresolved.js +63 -0
  108. package/dist/verify/install-probe/npm-unresolved.js.map +1 -0
  109. package/package.json +3 -3
@@ -0,0 +1,183 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/integration/in-repo-publish-branch.test.ts,
3
+ // packages/daemon/src/verify/install-probe/in-repo-publish.test.ts
4
+ // PINNED-BY-END
5
+ import { formatUnresolved, pinnedVersion } from './npm-unresolved.js';
6
+ /**
7
+ * The dist-tag a branch-published version carries. NEVER `latest`: a daemon
8
+ * host or developer installing `@telora/<pkg>` without a version must keep
9
+ * getting what /sync released from main.
10
+ */
11
+ export const PENDING_DIST_TAG = 'pending';
12
+ /**
13
+ * The in-repo @telora packages the daemon may publish, in DEPENDENCY ORDER: a
14
+ * consumer is never published before a dependency it needs from the same pass.
15
+ */
16
+ export const IN_REPO_PUBLISHABLE = [
17
+ { name: '@telora/daemon-core', dir: 'packages/daemon-core' },
18
+ { name: '@telora/mcp-products', dir: 'mcp/telora-products' },
19
+ { name: '@telora/daemon', dir: 'packages/daemon' },
20
+ ];
21
+ /**
22
+ * Decide whether a failed probe is ONLY unpublished in-repo versions, and if so
23
+ * what to publish (dependency order) and which package dirs to re-lock. Pure.
24
+ *
25
+ * `workspaceVersion(dir)` reads the `version` of `<worktree>/<dir>/package.json`
26
+ * (null when absent or unreadable).
27
+ */
28
+ export function planInRepoPublish(result, workspaceVersion) {
29
+ if (result.verdict !== 'failed')
30
+ return { kind: 'decline', reason: 'the probe did not fail' };
31
+ const failing = result.packages.filter(p => p.outcome !== 'pass');
32
+ const unreachable = failing.filter(p => p.outcome === 'registry_unreachable');
33
+ if (unreachable.length > 0) {
34
+ return {
35
+ kind: 'decline',
36
+ reason: `not published around: the registry was unreachable for ${unreachable.map(p => p.packageDir).join(', ')}`,
37
+ };
38
+ }
39
+ const wanted = new Map();
40
+ for (const pkg of failing) {
41
+ const unresolved = pkg.unresolved ?? [];
42
+ if (unresolved.length === 0) {
43
+ return { kind: 'decline', reason: `not published around: npm named no package it could not resolve for ${pkg.packageDir}` };
44
+ }
45
+ for (const u of unresolved) {
46
+ const label = formatUnresolved(u);
47
+ const inRepo = IN_REPO_PUBLISHABLE.find(p => p.name === u.name);
48
+ if (!inRepo)
49
+ return { kind: 'decline', reason: `not published around: ${label} is not an in-repo @telora package` };
50
+ const version = pinnedVersion(u.spec);
51
+ if (!version)
52
+ return { kind: 'decline', reason: `not published around: ${label} does not name one version` };
53
+ const onDisk = workspaceVersion(inRepo.dir);
54
+ if (onDisk !== version) {
55
+ return {
56
+ kind: 'decline',
57
+ reason: `not published around: ${label} does not exist on disk (${inRepo.dir} is ${onDisk ?? 'unreadable'})`,
58
+ };
59
+ }
60
+ const prior = wanted.get(u.name);
61
+ if (prior && prior.version !== version) {
62
+ return { kind: 'decline', reason: `not published around: ${u.name} is asked for at ${prior.version} and ${version}` };
63
+ }
64
+ wanted.set(u.name, { name: u.name, dir: inRepo.dir, version });
65
+ }
66
+ }
67
+ const publish = IN_REPO_PUBLISHABLE.flatMap(p => {
68
+ const t = wanted.get(p.name);
69
+ return t ? [t] : [];
70
+ });
71
+ return { kind: 'publish', publish, relock: failing.map(p => p.packageDir) };
72
+ }
73
+ /**
74
+ * The `npm publish` argv for a branch-published version. The dist-tag is fixed
75
+ * here and nowhere else, so no caller can publish a branch version as `latest`.
76
+ */
77
+ export function publishArgs() {
78
+ return ['publish', '--tag', PENDING_DIST_TAG];
79
+ }
80
+ /** The lockfile regeneration argv, run in the consumer's own directory. */
81
+ export function relockArgs() {
82
+ return ['install', '--package-lock-only', '--ignore-scripts', '--prefer-online', '--no-audit', '--no-fund'];
83
+ }
84
+ /** npm's answers that mean the version is already in the registry (a retry after a partial pass). */
85
+ const ALREADY_PUBLISHED = /E409|EPUBLISHCONFLICT|cannot publish over|previously published|already exists/i;
86
+ /**
87
+ * The uncommitted paths that would make a publish ship content branch HEAD does
88
+ * not hold. A published version is irreversible (/sync cannot replace it), so
89
+ * it is built only from committed inputs: nothing under a publish target's
90
+ * directory (its source, manifest, build config) and no consumer manifest,
91
+ * lockfile or .npmrc the re-lock reads may be dirty. Pure.
92
+ */
93
+ export function dirtyPublishInputs(plan, dirty) {
94
+ const underTarget = (p) => plan.publish.some(t => p.startsWith(`${t.dir}/`));
95
+ const consumerInputs = new Set(plan.relock.flatMap(dir => ['package.json', 'package-lock.json', '.npmrc'].map(f => (dir === '.' ? f : `${dir}/${f}`))));
96
+ return dirty.filter(p => underTarget(p) || consumerInputs.has(p));
97
+ }
98
+ const joinPath = (worktreePath, dir) => (dir === '.' ? worktreePath : `${worktreePath}/${dir}`);
99
+ const lockfilePath = (dir) => (dir === '.' ? 'package-lock.json' : `${dir}/package-lock.json`);
100
+ const label = (t) => `${t.name}@${t.version}`;
101
+ /** First line of npm output that reads as an error, for a one-line note. */
102
+ function npmErrorLine(output) {
103
+ const lines = output.split('\n').map(l => l.trim()).filter(Boolean);
104
+ const code = lines.find(l => /\bcode\s+E[A-Z0-9]+/.test(l));
105
+ return (code ?? lines.find(l => /error|ERR!/i.test(l)) ?? lines[lines.length - 1] ?? 'no output').slice(0, 200);
106
+ }
107
+ /**
108
+ * Publish, re-lock and commit, when the plan says the failure is only
109
+ * unpublished in-repo versions. Never throws for an npm or git failure: each is
110
+ * an outcome with a note naming the step and npm's own words (a host with no
111
+ * registry credentials reads as `could not publish ...: ENEEDAUTH`).
112
+ */
113
+ export async function publishAroundUnpublished(input, deps) {
114
+ const { worktreePath, headSha, result, deliveryId } = input;
115
+ const plan = planInRepoPublish(result, dir => deps.readWorkspaceVersion(worktreePath, dir));
116
+ if (plan.kind === 'decline')
117
+ return { kind: 'declined', note: plan.reason };
118
+ const lockfiles = plan.relock.map(lockfilePath);
119
+ const dirty = deps.uncommittedPaths(worktreePath);
120
+ if (dirty === null)
121
+ return { kind: 'deferred', note: 'could not read the focus worktree status; nothing published' };
122
+ const blocking = dirtyPublishInputs(plan, dirty);
123
+ if (blocking.length > 0) {
124
+ const shown = blocking.slice(0, 5).join(', ') + (blocking.length > 5 ? ` (+${blocking.length - 5} more)` : '');
125
+ return { kind: 'deferred', note: `nothing published: uncommitted publish inputs in the focus worktree: ${shown}` };
126
+ }
127
+ const failure = await publishFromCommit(worktreePath, headSha, plan, deps);
128
+ if (failure)
129
+ return failure;
130
+ for (const dir of plan.relock) {
131
+ const r = await deps.runNpm(joinPath(worktreePath, dir), relockArgs());
132
+ if (r.exitCode !== 0) {
133
+ return { kind: 'failed', note: `published ${plan.publish.map(label).join(', ')}; could not re-lock ${dir}: ${npmErrorLine(r.output)}` };
134
+ }
135
+ }
136
+ const published = plan.publish.map(label).join(', ');
137
+ const note = `daemon published ${published} under ${PENDING_DIST_TAG} and locked it`;
138
+ const relocked = deps.uncommittedPaths(worktreePath)?.filter(p => lockfiles.includes(p)) ?? null;
139
+ if (relocked === null)
140
+ return { kind: 'failed', note: `published ${published}; could not read the regenerated lockfiles' status` };
141
+ // Lockfiles that already named the version need no commit: the publish alone resolves them.
142
+ if (relocked.length === 0)
143
+ return { kind: 'resolved', sha: null, published: plan.publish, note };
144
+ const message = `chore(deps): lock ${published} published under the ${PENDING_DIST_TAG} tag`;
145
+ const sha = deps.commitPaths(worktreePath, relocked, message, deliveryId);
146
+ if (!sha)
147
+ return { kind: 'failed', note: `published ${published}; git refused the lockfile commit (${relocked.join(', ')})` };
148
+ return { kind: 'resolved', sha, published: plan.publish, note };
149
+ }
150
+ /**
151
+ * Build and publish each target from a detached checkout of `headSha`, in
152
+ * dependency order. Returns the outcome that stopped it, or null when every
153
+ * target is in the registry.
154
+ */
155
+ async function publishFromCommit(worktreePath, headSha, plan, deps) {
156
+ const snapshot = deps.checkoutCommit(worktreePath, headSha);
157
+ if (!snapshot)
158
+ return { kind: 'deferred', note: `nothing published: could not check out ${headSha.slice(0, 12)} to build from` };
159
+ try {
160
+ for (const target of plan.publish) {
161
+ const committed = deps.readWorkspaceVersion(snapshot.root, target.dir);
162
+ if (committed !== target.version) {
163
+ return { kind: 'deferred', note: `nothing published: ${headSha.slice(0, 12)} holds ${target.dir} at ${committed ?? 'no version'}, not ${target.version}` };
164
+ }
165
+ const cwd = joinPath(snapshot.root, target.dir);
166
+ for (const args of [['run', 'clean', '--if-present'], ['run', 'build']]) {
167
+ const r = await deps.runNpm(cwd, args);
168
+ if (r.exitCode !== 0) {
169
+ return { kind: 'failed', note: `could not build ${label(target)} (npm ${args.join(' ')}): ${npmErrorLine(r.output)}` };
170
+ }
171
+ }
172
+ const pub = await deps.runNpm(cwd, publishArgs());
173
+ if (pub.exitCode !== 0 && !ALREADY_PUBLISHED.test(pub.output)) {
174
+ return { kind: 'failed', note: `could not publish ${label(target)} under ${PENDING_DIST_TAG}: ${npmErrorLine(pub.output)}` };
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ finally {
180
+ snapshot.release();
181
+ }
182
+ }
183
+ //# sourceMappingURL=in-repo-publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-repo-publish.js","sourceRoot":"","sources":["../../../src/verify/install-probe/in-repo-publish.ts"],"names":[],"mappings":"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"}
@@ -24,16 +24,25 @@ import type { DaemonConfig } from '../../types/index.js';
24
24
  import type { getActiveFocuses } from '../../queries/focuses/focus-discovery.js';
25
25
  import type { getFocusDeliveries } from '../../queries/focuses/focuses.js';
26
26
  import { type DeliveryGateState } from '../../queries/delivery-gate-state/delivery-gate-state.js';
27
+ import type { InstallProbeDetail } from '../../queries/delivery-gate-state/delivery-gate-holds.js';
27
28
  import { type InstallProbeResult } from './install-probe.js';
29
+ import type { InRepoPublishOutcome } from './in-repo-publish.js';
28
30
  /** The gate_state guard name the probe reports under. */
29
31
  export declare const INSTALL_PROBE_GUARD = "clean_install_probe";
30
32
  /**
31
33
  * Build the gate_state entry for a probe result. resolution_failed -> a blocking
32
- * condition (holds/surfaces on "Waiting on"); unverifiable (registry unreachable)
34
+ * condition (holds/surfaces on "Waiting on", naming what npm could not resolve
35
+ * under `installProbe`); unverifiable (registry unreachable)
33
36
  * -> a non-blocking WARNING (probe infra, not a delivery failure); pass/skipped
34
37
  * -> null (clear any prior probe gate). Pure -- exported for testing.
35
38
  */
36
- export declare function probeGateState(result: InstallProbeResult, evaluatedAt: string): DeliveryGateState | null;
39
+ export declare function probeGateState(result: InstallProbeResult, evaluatedAt: string, note?: string): DeliveryGateState | null;
40
+ /**
41
+ * What a failed probe waits on: each package@spec npm named, per probed package,
42
+ * and the packages whose failure named none. `note` records what the daemon did
43
+ * about it (install-probe/in-repo-publish.ts). Pure -- exported for testing.
44
+ */
45
+ export declare function installProbeDetail(result: InstallProbeResult, note?: string): InstallProbeDetail;
37
46
  /**
38
47
  * The probe's production gate_state write: WITHOUT changing execution_status
39
48
  * (stays verify) or logging a transition. Passing the same status is idempotent;
@@ -53,6 +62,18 @@ export interface InstallProbeTickDeps {
53
62
  runProbe: (changedFiles: string[], repoPath: string) => Promise<InstallProbeResult>;
54
63
  writeGateState: (deliveryId: string, gateState: DeliveryGateState | null, organizationId: string) => Promise<void>;
55
64
  now: () => string;
65
+ /**
66
+ * Close a failure that is ONLY unpublished in-repo @telora versions: publish
67
+ * them under the pending tag and commit the regenerated lockfiles
68
+ * (in-repo-publish.ts), built from the probed commit `headSha`. Absent, a
69
+ * failed probe just blocks.
70
+ */
71
+ publishAround?: (input: {
72
+ worktreePath: string;
73
+ headSha: string;
74
+ result: InstallProbeResult;
75
+ deliveryId: string;
76
+ }) => Promise<InRepoPublishOutcome>;
56
77
  }
57
78
  /** Test hook to reset the cache. */
58
79
  export declare function __resetInstallProbeCacheForTests(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"install-probe-tick.d.ts","sourceRoot":"","sources":["../../../src/verify/install-probe/install-probe-tick.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,OAAO,EAAE,KAAK,iBAAiB,EAA4B,MAAM,0DAA0D,CAAC;AAC5H,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKvF,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CASxG;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,iBAAiB,GAAG,IAAI,EACnC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,yHAAyH;AACzH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC5E,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACvE,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpF,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnH,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAKD,oCAAoC;AACpC,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAyDjC"}
1
+ {"version":3,"file":"install-probe-tick.d.ts","sourceRoot":"","sources":["../../../src/verify/install-probe/install-probe-tick.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,OAAO,EAAE,KAAK,iBAAiB,EAA4B,MAAM,0DAA0D,CAAC;AAC5H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AACnG,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAKjE,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,iBAAiB,GAAG,IAAI,CAc1B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAShG;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,iBAAiB,GAAG,IAAI,EACnC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,yHAAyH;AACzH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC5E,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACvE,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpF,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnH,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACrJ;AAaD,oCAAoC;AACpC,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AA4DD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAkEjC"}
@@ -1,5 +1,6 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: packages/daemon/src/verify/install-probe/install-probe-tick.test.ts
2
+ // Pinned by: packages/daemon/src/integration/in-repo-publish-branch.test.ts,
3
+ // packages/daemon/src/verify/install-probe/install-probe-tick.test.ts
3
4
  // PINNED-BY-END
4
5
  import { DELIVERY_STATUS } from '@telora/daemon-core';
5
6
  import { configForProduct } from '../../config/config.js';
@@ -12,13 +13,19 @@ const log = createLogger({ module: 'install-probe' });
12
13
  export const INSTALL_PROBE_GUARD = 'clean_install_probe';
13
14
  /**
14
15
  * Build the gate_state entry for a probe result. resolution_failed -> a blocking
15
- * condition (holds/surfaces on "Waiting on"); unverifiable (registry unreachable)
16
+ * condition (holds/surfaces on "Waiting on", naming what npm could not resolve
17
+ * under `installProbe`); unverifiable (registry unreachable)
16
18
  * -> a non-blocking WARNING (probe infra, not a delivery failure); pass/skipped
17
19
  * -> null (clear any prior probe gate). Pure -- exported for testing.
18
20
  */
19
- export function probeGateState(result, evaluatedAt) {
21
+ export function probeGateState(result, evaluatedAt, note) {
20
22
  if (result.verdict === 'failed') {
21
- return { blocking: [{ guardName: INSTALL_PROBE_GUARD, passed: false }], warnings: [], evaluatedAt };
23
+ return {
24
+ blocking: [{ guardName: INSTALL_PROBE_GUARD, passed: false }],
25
+ warnings: [],
26
+ evaluatedAt,
27
+ installProbe: installProbeDetail(result, note),
28
+ };
22
29
  }
23
30
  if (result.verdict === 'unverifiable') {
24
31
  return { blocking: [], warnings: [{ guardName: INSTALL_PROBE_GUARD, passed: false }], evaluatedAt };
@@ -26,6 +33,23 @@ export function probeGateState(result, evaluatedAt) {
26
33
  // pass / skipped -> no probe gate.
27
34
  return null;
28
35
  }
36
+ /**
37
+ * What a failed probe waits on: each package@spec npm named, per probed package,
38
+ * and the packages whose failure named none. `note` records what the daemon did
39
+ * about it (install-probe/in-repo-publish.ts). Pure -- exported for testing.
40
+ */
41
+ export function installProbeDetail(result, note) {
42
+ const failed = result.packages.filter(p => p.outcome === 'resolution_failed');
43
+ const detail = {
44
+ unresolved: failed.flatMap(p => (p.unresolved ?? []).map(u => ({ packageDir: p.packageDir, name: u.name, spec: u.spec }))),
45
+ };
46
+ const unattributed = failed.filter(p => (p.unresolved ?? []).length === 0).map(p => p.packageDir);
47
+ if (unattributed.length > 0)
48
+ detail.unattributedPackageDirs = unattributed;
49
+ if (note)
50
+ detail.note = note;
51
+ return detail;
52
+ }
29
53
  /**
30
54
  * The probe's production gate_state write: WITHOUT changing execution_status
31
55
  * (stays verify) or logging a transition. Passing the same status is idempotent;
@@ -35,12 +59,50 @@ export function probeGateState(result, evaluatedAt) {
35
59
  export async function writeProbeGateState(deliveryId, gateState, organizationId) {
36
60
  await updateDeliveryStatus(deliveryId, DELIVERY_STATUS.VERIFY, undefined, gateState, undefined, { organizationId });
37
61
  }
38
- /** In-memory cache: probe result per (focusId, head SHA). Runs once per branch state. */
62
+ /** In-memory cache: probe per (focusId, head SHA). Probes -- and publishes -- once per branch state. */
39
63
  const probeCache = new Map();
40
64
  /** Test hook to reset the cache. */
41
65
  export function __resetInstallProbeCacheForTests() {
42
66
  probeCache.clear();
43
67
  }
68
+ /**
69
+ * Probe one branch state; when it fails on nothing but unpublished in-repo
70
+ * versions, publish them (deps.publishAround), and re-probe the branch state
71
+ * that produced -- the lockfile commit moves HEAD, so the result is cached under
72
+ * the new head as well. A publish that failed (e.g. no registry credentials on
73
+ * this host) is recorded as the gate entry's note and not retried for this
74
+ * branch state; one that was deferred (its inputs uncommitted) is retried.
75
+ */
76
+ async function probeBranchState(deps, state, counts) {
77
+ const result = await deps.runProbe(state.changed, state.worktreePath);
78
+ counts.probesRun++;
79
+ const cached = await publishAroundFailure(deps, state, counts, result);
80
+ probeCache.set(`${state.focusId}:${state.headSha}`, cached);
81
+ return cached;
82
+ }
83
+ /**
84
+ * When a probed branch state failed, attempt the in-repo publish and, on
85
+ * success, re-probe. A deferred attempt keeps the failed verdict and is marked
86
+ * for retry, so a later tick attempts it again without re-probing.
87
+ */
88
+ async function publishAroundFailure(deps, state, counts, result) {
89
+ const { focusId, worktreePath, headSha, deliveryId } = state;
90
+ if (result.verdict !== 'failed' || !deps.publishAround || !deliveryId)
91
+ return { result };
92
+ const outcome = await deps.publishAround({ worktreePath, headSha, result, deliveryId });
93
+ if (outcome.kind !== 'resolved') {
94
+ log.warn(`[install-probe] Focus ${focusId}: in-repo publish ${outcome.kind}: ${outcome.note}`);
95
+ return outcome.kind === 'deferred' ? { result, note: outcome.note, retryPublish: true } : { result, note: outcome.note };
96
+ }
97
+ const reChanged = outcome.sha ? deps.listChangedFiles(worktreePath, `${state.integrationBranch}..HEAD`) : state.changed;
98
+ const again = await deps.runProbe(reChanged, worktreePath);
99
+ counts.probesRun++;
100
+ const cached = { result: again, note: outcome.note };
101
+ if (outcome.sha)
102
+ probeCache.set(`${focusId}:${outcome.sha}`, cached);
103
+ log.info(`[install-probe] Focus ${focusId}: ${outcome.note}; re-probe ${again.verdict}.`);
104
+ return cached;
105
+ }
44
106
  /**
45
107
  * One install-probe pass over every configured product's active, manifest-
46
108
  * touching verify deliveries. Best-effort per focus/delivery -- a failure never
@@ -73,14 +135,24 @@ export async function runInstallProbeTick(config, deps) {
73
135
  if (touched.length === 0)
74
136
  continue; // no manifest change -> no probe (AC2)
75
137
  const headSha = deps.resolveHeadSha(wt.worktreePath);
76
- const cacheKey = `${focus.focus_id}:${headSha}`;
77
- let result = probeCache.get(cacheKey);
78
- if (!result) {
79
- result = await deps.runProbe(changed, wt.worktreePath);
80
- probeCache.set(cacheKey, result);
81
- counts.probesRun++;
138
+ const state = {
139
+ focusId: focus.focus_id,
140
+ headSha,
141
+ worktreePath: wt.worktreePath,
142
+ changed,
143
+ deliveryId: verifyDeliveries[0]?.id ?? '',
144
+ integrationBranch: pc.integrationBranch,
145
+ };
146
+ let cached = probeCache.get(`${focus.focus_id}:${headSha}`);
147
+ if (!cached) {
148
+ cached = await probeBranchState(deps, state, counts);
149
+ }
150
+ else if (cached.retryPublish) {
151
+ cached = await publishAroundFailure(deps, state, counts, cached.result);
152
+ probeCache.set(`${focus.focus_id}:${headSha}`, cached);
82
153
  }
83
- const gateState = probeGateState(result, deps.now());
154
+ const { result, note } = cached;
155
+ const gateState = probeGateState(result, deps.now(), note);
84
156
  if (result.verdict === 'failed')
85
157
  counts.deliveriesBlocked += verifyDeliveries.length;
86
158
  else if (result.verdict === 'unverifiable')
@@ -1 +1 @@
1
- {"version":3,"file":"install-probe-tick.js","sourceRoot":"","sources":["../../../src/verify/install-probe/install-probe-tick.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,iFAAiF;AACjF,gBAAgB;AA0BhB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAA0B,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AAC5H,OAAO,EAAE,wBAAwB,EAA2B,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAEtD,yDAAyD;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAA0B,EAAE,WAAmB;IAC5E,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACtC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IACtG,CAAC;IACD,mCAAmC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,SAAmC,EACnC,cAAsB;IAEtB,MAAM,oBAAoB,CAAC,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;AACtH,CAAC;AAcD,yFAAyF;AACzF,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEzD,oCAAoC;AACpC,MAAM,UAAU,gCAAgC;IAC9C,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AASD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,IAA0B;IAE1B,MAAM,MAAM,GAA2B,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC;IAC5H,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,OAAqD,CAAC;QAC1D,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,uCAAuC,OAAO,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACzF,SAAS;QACX,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjD,IAAI,CAAC,EAAE;oBAAE,SAAS;gBAClB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC9F,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAC5C,MAAM,CAAC,cAAc,EAAE,CAAC;gBAExB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,QAAQ,CAAC,CAAC;gBACxF,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS,CAAC,uCAAuC;gBAE3E,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;gBACrD,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAChD,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;oBACvD,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACjC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,CAAC;gBAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;oBAAE,MAAM,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,MAAM,CAAC;qBAChF,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc;oBAAE,MAAM,CAAC,sBAAsB,IAAI,gBAAgB,CAAC,MAAM,CAAC;gBAErG,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;oBACjC,IAAI,CAAC;wBACH,iFAAiF;wBACjF,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC;oBACvG,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;oBACtF,CAAC;gBACH,CAAC;gBACD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAChC,GAAG,CAAC,IAAI,CACN,yBAAyB,KAAK,CAAC,QAAQ,kDAAkD;wBACzF,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,gBAAgB,CAAC,MAAM,8BAA8B,CACtG,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"install-probe-tick.js","sourceRoot":"","sources":["../../../src/verify/install-probe/install-probe-tick.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type UnresolvedSpec } from './npm-unresolved.js';
1
2
  /**
2
3
  * Outcome of resolving one workspace package's install from the registry.
3
4
  * - pass -- npm ci --dry-run resolved cleanly (exit 0).
@@ -17,6 +18,12 @@ export interface PackageProbeResult {
17
18
  outcome: ProbeOutcome;
18
19
  /** Short reason (classifier tag or exit note) for gate_state / logs. */
19
20
  detail: string;
21
+ /**
22
+ * resolution_failed: each package@spec npm's output named as unresolvable
23
+ * (npm-unresolved.ts). Empty when npm named none -- a failure the probe
24
+ * cannot attribute to a package, which nothing may publish around.
25
+ */
26
+ unresolved?: UnresolvedSpec[];
20
27
  }
21
28
  /**
22
29
  * Aggregate verdict for the delivery.
@@ -93,4 +100,13 @@ export declare function runInstallProbe(changedFiles: readonly string[], runner:
93
100
  * The isolated cache dir is created once per runner and reused across packages.
94
101
  */
95
102
  export declare function createNpmCiDryRunRunner(repoPath: string): InstallProbeRunner;
103
+ /**
104
+ * Run `npm <args>` in `cwd` and collect combined stdout+stderr. Never rejects: a
105
+ * spawn error or a timeout resolves with a null exit and the error text (the
106
+ * probe classifier reads both as registry_unreachable = infra).
107
+ */
108
+ export declare function spawnNpm(cwd: string, args: string[], env: NodeJS.ProcessEnv, timeoutMs: number): Promise<{
109
+ exitCode: number | null;
110
+ output: string;
111
+ }>;
96
112
  //# sourceMappingURL=install-probe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-probe.d.ts","sourceRoot":"","sources":["../../../src/verify/install-probe/install-probe.ts"],"names":[],"mappings":"AAgCA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAEjF,gCAAgC;AAChC,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,CAAC;AAE1E,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAmBlF;AAkBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAO1F;AAED,sFAAsF;AACtF,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CA2C7B;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAsC5E"}
1
+ {"version":3,"file":"install-probe.d.ts","sourceRoot":"","sources":["../../../src/verify/install-probe/install-probe.ts"],"names":[],"mappings":"AAgCA,OAAO,EAA0C,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAElG;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAEjF,gCAAgC;AAChC,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,CAAC;AAE1E,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAmBlF;AAkBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAO1F;AAED,sFAAsF;AACtF,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAmD7B;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAa5E;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BtD"}
@@ -1,5 +1,6 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: packages/daemon/src/verify/install-probe/install-probe-tick.test.ts,
2
+ // Pinned by: packages/daemon/src/verify/install-probe/in-repo-publish.test.ts,
3
+ // packages/daemon/src/verify/install-probe/install-probe-tick.test.ts,
3
4
  // packages/daemon/src/verify/install-probe/install-probe.test.ts
4
5
  // PINNED-BY-END
5
6
  /**
@@ -27,6 +28,7 @@ import { spawn } from 'node:child_process';
27
28
  import { resolve } from 'node:path';
28
29
  import { mkdtempSync } from 'node:fs';
29
30
  import { tmpdir } from 'node:os';
31
+ import { parseUnresolvedSpecs, formatUnresolved } from './npm-unresolved.js';
30
32
  const MANIFEST_BASENAMES = new Set(['package.json', 'package-lock.json']);
31
33
  /**
32
34
  * Map a set of changed (repo-relative) files to the workspace package dirs whose
@@ -116,15 +118,25 @@ export async function runInstallProbe(changedFiles, runner) {
116
118
  try {
117
119
  const { exitCode, output } = await runner(dir);
118
120
  const outcome = classifyNpmCiFailure(exitCode, output);
119
- result = {
120
- packageDir: dir,
121
- outcome,
122
- detail: outcome === 'pass'
123
- ? 'npm ci --dry-run resolved from registry'
124
- : outcome === 'registry_unreachable'
125
- ? 'registry unreachable (probe infrastructure)'
126
- : `registry could not satisfy manifest/lockfile (exit ${exitCode})`,
127
- };
121
+ if (outcome === 'resolution_failed') {
122
+ const unresolved = parseUnresolvedSpecs(output);
123
+ const named = unresolved.length > 0 ? `: ${unresolved.map(formatUnresolved).join(', ')}` : '';
124
+ result = {
125
+ packageDir: dir,
126
+ outcome,
127
+ detail: `registry could not satisfy manifest/lockfile (exit ${exitCode})${named}`,
128
+ unresolved,
129
+ };
130
+ }
131
+ else {
132
+ result = {
133
+ packageDir: dir,
134
+ outcome,
135
+ detail: outcome === 'pass'
136
+ ? 'npm ci --dry-run resolved from registry'
137
+ : 'registry unreachable (probe infrastructure)',
138
+ };
139
+ }
128
140
  }
129
141
  catch (err) {
130
142
  // A runner that throws (e.g. spawn failed) is infra, not a delivery
@@ -166,8 +178,15 @@ export function createNpmCiDryRunRunner(repoPath) {
166
178
  cacheDir = mkdtempSync(resolve(tmpdir(), 'telora-install-probe-'));
167
179
  return cacheDir;
168
180
  };
169
- return (packageDir) => new Promise((resolvePromise) => {
170
- const cwd = packageDir === '.' ? repoPath : resolve(repoPath, packageDir);
181
+ return (packageDir) => spawnNpm(packageDir === '.' ? repoPath : resolve(repoPath, packageDir), ['ci', '--dry-run', '--no-audit', '--no-fund'], { ...process.env, npm_config_cache: ensureCache(), npm_config_fund: 'false', npm_config_audit: 'false' }, NPM_CI_DRY_RUN_TIMEOUT_MS);
182
+ }
183
+ /**
184
+ * Run `npm <args>` in `cwd` and collect combined stdout+stderr. Never rejects: a
185
+ * spawn error or a timeout resolves with a null exit and the error text (the
186
+ * probe classifier reads both as registry_unreachable = infra).
187
+ */
188
+ export function spawnNpm(cwd, args, env, timeoutMs) {
189
+ return new Promise((resolvePromise) => {
171
190
  let out = '';
172
191
  let settled = false;
173
192
  const finish = (exitCode) => {
@@ -178,22 +197,19 @@ export function createNpmCiDryRunRunner(repoPath) {
178
197
  };
179
198
  let child;
180
199
  try {
181
- child = spawn('npm', ['ci', '--dry-run', '--no-audit', '--no-fund'], {
182
- cwd,
183
- env: { ...process.env, npm_config_cache: ensureCache(), npm_config_fund: 'false', npm_config_audit: 'false' },
184
- });
200
+ child = spawn('npm', args, { cwd, env });
185
201
  }
186
202
  catch (err) {
187
203
  // Spawn itself threw (npm missing) -> infra; surface as non-zero + text.
188
- finish(null);
189
204
  out = `spawn error: ${err.message}`;
205
+ finish(null);
190
206
  return;
191
207
  }
192
208
  const timer = setTimeout(() => {
193
- out += '\nnpm ci --dry-run timed out (ETIMEDOUT, treated as registry unreachable)';
209
+ out += `\nnpm ${args[0] ?? ''} timed out (ETIMEDOUT, treated as registry unreachable)`;
194
210
  child.kill('SIGKILL');
195
211
  finish(null);
196
- }, NPM_CI_DRY_RUN_TIMEOUT_MS);
212
+ }, timeoutMs);
197
213
  child.stdout?.on('data', (d) => { out += d.toString(); });
198
214
  child.stderr?.on('data', (d) => { out += d.toString(); });
199
215
  child.on('error', (err) => { out += `\nspawn error: ${err.message}`; clearTimeout(timer); finish(null); });
@@ -1 +1 @@
1
- {"version":3,"file":"install-probe.js","sourceRoot":"","sources":["../../../src/verify/install-probe/install-probe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-probe.js","sourceRoot":"","sources":["../../../src/verify/install-probe/install-probe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * What npm could not resolve, read from its own output.
3
+ *
4
+ * A failed `npm ci --dry-run` names the package it could not satisfy in one of a
5
+ * few fixed shapes: a registry with no matching version (ETARGET), a registry
6
+ * with no such package or tarball (E404), or a lockfile that no longer satisfies
7
+ * the manifest (EUSAGE "Invalid:" / "Missing:"). This module lifts each named
8
+ * package and the version/range npm asked for, so the probe's gate entry can say
9
+ * WHAT a delivery is waiting on rather than only that it is waiting.
10
+ *
11
+ * Pure: string in, list out. An output that names nothing yields an empty list
12
+ * -- the caller then knows the failure is one it cannot name, never a guess.
13
+ *
14
+ * @module npm-unresolved
15
+ */
16
+ /** One package and the version (or range) npm could not resolve for it. */
17
+ export interface UnresolvedSpec {
18
+ /** Package name, e.g. `@telora/daemon-core`. */
19
+ name: string;
20
+ /** The version or range as npm stated it, e.g. `^0.2.102` or `0.2.102`. */
21
+ spec: string;
22
+ }
23
+ /**
24
+ * Every package@spec npm's output names as unresolvable, deduped and in order of
25
+ * first mention. Empty when the output names none.
26
+ */
27
+ export declare function parseUnresolvedSpecs(output: string): UnresolvedSpec[];
28
+ /**
29
+ * The exact version a spec pins, or null when it is a range this module does not
30
+ * reduce. `0.2.102`, `^0.2.102`, `~0.2.102`, `>=0.2.102`, `v0.2.102` -> `0.2.102`.
31
+ * A compound range (`1.x`, `>=1 <2`, `*`) is NOT reduced: the caller must not
32
+ * act on a version it had to guess.
33
+ */
34
+ export declare function pinnedVersion(spec: string): string | null;
35
+ /** `name@spec` joined for display. */
36
+ export declare function formatUnresolved(u: UnresolvedSpec): string;
37
+ //# sourceMappingURL=npm-unresolved.d.ts.map