instar 1.3.993 → 1.3.995

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.
@@ -73,14 +73,39 @@ export interface RunRoundInput {
73
73
  /** Max resume attempts on transient failures; defaults to 3. */
74
74
  maxResumeAttempts?: number;
75
75
  /**
76
- * Test hook: shell out to verify per-item artifacts. Defaults to a
77
- * real `gh pr view` shell-out via SafeGitExecutor. Tests inject a
78
- * stub. The function returns the set of itemIds whose artifact
79
- * is verified merged-on-main-with-CI-green.
76
+ * Seam for verifying per-item artifacts. Defaults to the REAL git-backed
77
+ * `verifyMergedItemsViaGit`; tests inject a stub.
78
+ *
79
+ * It returns the three-state verdict deliberately — `verified` /
80
+ * `regressed` / `unverifiable`. A flat `Set<string>` cannot express "I
81
+ * could not check", so every item merely absent from it reads as
82
+ * not-merged, and this runner would respawn a child to redo work that may
83
+ * already be done. See the verdict handling in `runRound` below.
84
+ *
85
+ * HISTORY: this defaulted to a no-op that returned an EMPTY SET
86
+ * unconditionally, documented in place as "production callers should pass
87
+ * a real one". No production caller ever did. The consequence was that the
88
+ * all-items-merged stop condition could never fire, `outcome: 'complete'`
89
+ * was unreachable, and a round whose items were all merged still spawned a
90
+ * child to redo them. The default is now the real verifier precisely so a
91
+ * caller cannot forget: a seam whose default silently reports "nothing
92
+ * verified" is indistinguishable, to its caller, from "nothing is merged".
93
+ */
94
+ verifyMergedItems?: (childIds: string[]) => Promise<MergedVerificationResult>;
95
+ /**
96
+ * Canonical-main ref for the merge-base check. Defaults to the resolved
97
+ * canonical ref (see `resolveCanonicalMainRef`), which matters on a
98
+ * fork-origin agent home where `origin/main` does not contain the merge
99
+ * commit and every healthy item would otherwise read as regressed.
80
100
  */
81
- verifyMergedItems?: (childIds: string[]) => Promise<Set<string>>;
101
+ mergeBaseBranch?: string;
82
102
  }
83
- export type RoundOutcome = 'complete' | 'partially-complete' | 'failed' | 'halted';
103
+ /**
104
+ * `unverifiable` is NOT a soft `partially-complete`. It means the runner could
105
+ * not establish whether the round's work is done, so it has no verdict to
106
+ * record and no basis to redo the work either.
107
+ */
108
+ export type RoundOutcome = 'complete' | 'partially-complete' | 'failed' | 'halted' | 'unverifiable';
84
109
  export interface RunRoundResult {
85
110
  outcome: RoundOutcome;
86
111
  /** Verified-merged itemIds. */
@@ -106,6 +131,23 @@ export interface RunRoundDeps {
106
131
  * Run one round to completion. Caller is expected to preflight first.
107
132
  */
108
133
  export declare function runRound(input: RunRoundInput, deps: RunRoundDeps): Promise<RunRoundResult>;
134
+ /**
135
+ * Resolve the ref that actually holds canonical `main` for this checkout.
136
+ *
137
+ * On a fork-origin agent home `origin/main` does NOT contain the canonical
138
+ * merge commit, so a merge-base check against it reports every healthy item
139
+ * as regressed. Falls back to the documented `origin/main` when `gh` or the
140
+ * remote mapping is unavailable (canonical-origin installs).
141
+ *
142
+ * Lives here rather than in the server layer because BOTH consumers — the
143
+ * lazy reconciler in `routes.ts` and this round runner — need the same
144
+ * resolution, and a core module must not import from `server/`.
145
+ *
146
+ * READ-ONLY: `gh repo view` + `git remote -v` (the latter via
147
+ * SafeGitExecutor.readSync — `remote` is a READONLY_GIT_VERB, shape-checked
148
+ * to list/get-url only).
149
+ */
150
+ export declare function resolveCanonicalMainRef(repoPath: string): string;
109
151
  /**
110
152
  * Three-state outcome. `unverifiable` is NOT a soft `regressed`: it means the
111
153
  * check could not be run at all, and collapsing the two is how a refusal becomes
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRoundExecution.d.ts","sourceRoot":"","sources":["../../src/core/ProjectRoundExecution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,KAAK,EAAc,iBAAiB,EAAe,MAAM,wBAAwB,CAAC;AAKzF,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,gDAAgD;AAChD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAClE;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oFAAoF;IACpF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA2JhG;AAqMD;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,gEAAgE;IAChE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,gFAAgF;IAChF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,uBAAuB,CAC3C,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,iBAAiB;AAC1B;mFACmF;AACnF,eAAe,GAAE,MAAsB,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAmCnC"}
1
+ {"version":3,"file":"ProjectRoundExecution.d.ts","sourceRoot":"","sources":["../../src/core/ProjectRoundExecution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,KAAK,EAAc,iBAAiB,EAAe,MAAM,wBAAwB,CAAC;AAMzF,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,gDAAgD;AAChD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;;;;;;;;;;;OAkBG;IACH,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAE9E;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,oBAAoB,GACpB,QAAQ,GACR,QAAQ,GACR,cAAc,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oFAAoF;IACpF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA0NhG;AAiLD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2ChE;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,gEAAgE;IAChE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,gFAAgF;IAChF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,uBAAuB,CAC3C,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,iBAAiB;AAC1B;mFACmF;AACnF,eAAe,GAAE,MAAsB,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAmCnC"}
@@ -33,10 +33,11 @@
33
33
  * for group signals) targets only the child's group — never reaps
34
34
  * the runner.
35
35
  */
36
- import { spawn } from 'node:child_process';
36
+ import { spawn, execFileSync } from 'node:child_process';
37
37
  import { ProjectRoundLock } from './ProjectRoundLock.js';
38
38
  import { ProjectRoundWorktrees } from './ProjectRoundWorktrees.js';
39
39
  import { SafeGitExecutor } from './SafeGitExecutor.js';
40
+ import { withSyncOp } from './InFlightSyncOpMarker.js';
40
41
  /** Per-spec defaults. Tests dial both down to keep the suite fast. */
41
42
  export const DEFAULT_POLL_INTERVAL_MS = 60_000;
42
43
  export const DEFAULT_SIGTERM_GRACE_MS = 5_000;
@@ -49,7 +50,25 @@ export async function runRound(input, deps) {
49
50
  const pollIntervalMs = input.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
50
51
  const sigtermGraceMs = input.sigtermGraceMs ?? DEFAULT_SIGTERM_GRACE_MS;
51
52
  const maxResumeAttempts = input.maxResumeAttempts ?? DEFAULT_MAX_RESUME_ATTEMPTS;
52
- const verifyMergedItems = input.verifyMergedItems ?? defaultVerifyMergedItems(input.targetRepoPath);
53
+ /**
54
+ * The items that are GENUINELY uncheckable: absent from `verified` for a
55
+ * reason the runner could not establish, AND carrying a merge commit that
56
+ * says work may already have landed.
57
+ *
58
+ * An item with no `mergeCommitOid` is also reported `unverifiable` by the
59
+ * git verifier, but that is not the same claim — it means nothing has landed
60
+ * yet, which is ordinary. Splitting on EVIDENCE rather than on the reason
61
+ * text keeps a reworded message from silently changing control flow.
62
+ *
63
+ * Defined once and used at BOTH decision points. The first draft of this
64
+ * change inlined it at the pre-spawn check only, and the post-exit check
65
+ * kept the old conflation — caught by the test that asserts a fresh round
66
+ * still spawns.
67
+ */
68
+ const uncheckable = (ids, v) => ids.filter((id) => v.unverifiable.has(id) && Boolean(input.tracker.get(id)?.mergeCommitOid));
69
+ const mergeBaseBranch = input.mergeBaseBranch ?? resolveCanonicalMainRef(input.targetRepoPath);
70
+ const verifyMergedItems = input.verifyMergedItems ??
71
+ ((ids) => verifyMergedItemsViaGit(input.targetRepoPath, ids, input.tracker, mergeBaseBranch));
53
72
  const lock = new ProjectRoundLock({ stateDir: deps.stateDir });
54
73
  // Step 1: acquire lock.
55
74
  const acquired = lock.acquire(input.projectId, input.roundIndex);
@@ -112,12 +131,36 @@ export async function runRound(input, deps) {
112
131
  break;
113
132
  }
114
133
  // Compute current stop condition: itemIds verified-merged.
115
- const verified = await verifyMergedItems(lastItemIds);
116
- if (lastItemIds.every((id) => verified.has(id))) {
134
+ const verdict = await verifyMergedItems(lastItemIds);
135
+ if (lastItemIds.every((id) => verdict.verified.has(id))) {
117
136
  outcome = 'complete';
118
137
  mergedItemIds = [...lastItemIds];
119
138
  break;
120
139
  }
140
+ // "I could not check" is not "not done" — but neither is it a reason to
141
+ // stall a round that has simply not been worked yet.
142
+ //
143
+ // `verifyMergedItemsViaGit` reports `unverifiable` for BOTH of these:
144
+ // (a) the item records no mergeCommitOid at all — nothing has landed
145
+ // yet, which is the ordinary state of a fresh round. Spawning is
146
+ // exactly right here.
147
+ // (b) the item DOES record a merge commit, but git could not answer
148
+ // (guard refusal, missing binary, bad ref). Here the work may
149
+ // already be done, and spawning would redo it.
150
+ //
151
+ // They are told apart by EVIDENCE — whether the item carries a
152
+ // mergeCommitOid — not by matching the reason text, which would make a
153
+ // reworded message silently change the control flow.
154
+ const uncheckableWithEvidence = uncheckable(lastItemIds, verdict);
155
+ if (uncheckableWithEvidence.length > 0) {
156
+ outcome = 'unverifiable';
157
+ unmergedItemIds = lastItemIds.filter((id) => !verdict.verified.has(id));
158
+ reason =
159
+ `could not verify ${uncheckableWithEvidence.length} item(s) that DO record a merge commit ` +
160
+ `(${uncheckableWithEvidence.join(', ')}); refusing to respawn work that may already be done, ` +
161
+ 'and recording no round verdict';
162
+ break;
163
+ }
121
164
  // Spawn the autonomous child with stop condition + ids in env.
122
165
  const child = spawnAutonomousChild(input, lastItemIds);
123
166
  const exit = await waitForExitOrPollChange(child, input.tracker, input.projectId, input.roundIndex, lastItemIds, pollIntervalMs, sigtermGraceMs);
@@ -143,13 +186,29 @@ export async function runRound(input, deps) {
143
186
  // Natural exit.
144
187
  if (exit.kind === 'exited' && exit.code === 0) {
145
188
  // Step 6: verify per-item artifacts.
146
- const finalVerified = await verifyMergedItems(lastItemIds);
147
- mergedItemIds = lastItemIds.filter((id) => finalVerified.has(id));
148
- unmergedItemIds = lastItemIds.filter((id) => !finalVerified.has(id));
149
- if (unmergedItemIds.length === 0)
189
+ const final = await verifyMergedItems(lastItemIds);
190
+ mergedItemIds = lastItemIds.filter((id) => final.verified.has(id));
191
+ unmergedItemIds = lastItemIds.filter((id) => !final.verified.has(id));
192
+ const finalUncheckable = uncheckable(unmergedItemIds, final);
193
+ if (unmergedItemIds.length === 0) {
150
194
  outcome = 'complete';
151
- else
195
+ }
196
+ else if (finalUncheckable.length > 0) {
197
+ // At least one item RECORDS a merge commit the runner could not
198
+ // check. `partially-complete` asserts "this genuinely did not land",
199
+ // which that item cannot support — so no verdict is recorded.
200
+ //
201
+ // An item with no merge commit at all, by contrast, genuinely did
202
+ // not land after a clean child exit, and falls through to
203
+ // partially-complete below where it belongs.
204
+ outcome = 'unverifiable';
205
+ reason =
206
+ `child exited 0 but ${finalUncheckable.length} item(s) recording a merge commit ` +
207
+ `could not be checked (${finalUncheckable.join(', ')}); no round verdict recorded`;
208
+ }
209
+ else {
152
210
  outcome = 'partially-complete';
211
+ }
153
212
  break;
154
213
  }
155
214
  // Non-zero exit → resume attempt.
@@ -201,12 +260,19 @@ async function recordOutcome(tracker, projectId, roundIndex, outcome) {
201
260
  const proj = tracker.get(projectId);
202
261
  if (!proj)
203
262
  return;
263
+ // `unverifiable` has NO status. Every other outcome is a verdict the runner
264
+ // actually reached; this one is the absence of one, so the round keeps the
265
+ // status it had and gets asked again later. Mapping it onto `failed` or
266
+ // `partially-complete` would record a conclusion nothing established — the
267
+ // precise move that made a no-op verifier look like a healthy answer.
204
268
  const map = {
205
269
  complete: 'complete',
206
270
  'partially-complete': 'partially-complete',
207
271
  failed: 'failed',
208
272
  halted: 'failed',
209
273
  };
274
+ if (outcome === 'unverifiable')
275
+ return;
210
276
  const newStatus = map[outcome];
211
277
  const completedAt = new Date().toISOString();
212
278
  const rounds = (proj.rounds ?? []).map((r, i) => i === roundIndex ? { ...r, status: newStatus, completedAt } : r);
@@ -315,29 +381,67 @@ function sleep(ms) {
315
381
  return new Promise((resolve) => setTimeout(resolve, ms));
316
382
  }
317
383
  /**
318
- * Real `gh pr view`-backed merged-state verifier. For each child id,
319
- * looks up the child's `prNumber` + `mergeCommitOid` from the tracker
320
- * and runs `git merge-base --is-ancestor <oid> origin/main` to confirm
321
- * the merge is reachable. Tests inject a stub instead.
384
+ * Resolve the ref that actually holds canonical `main` for this checkout.
385
+ *
386
+ * On a fork-origin agent home `origin/main` does NOT contain the canonical
387
+ * merge commit, so a merge-base check against it reports every healthy item
388
+ * as regressed. Falls back to the documented `origin/main` when `gh` or the
389
+ * remote mapping is unavailable (canonical-origin installs).
322
390
  *
323
- * For PR 7's scope, this default is intentionally simple: it only
324
- * confirms reachability of `mergeCommitOid` if the child has one.
325
- * Real CI-green checks via `gh pr view` ship in a follow-up (the
326
- * StageTransitionValidator already performs them for /advance — when
327
- * the merged-state reconciler wires up in the next PR, it'll call
328
- * the validator here too).
391
+ * Lives here rather than in the server layer because BOTH consumers — the
392
+ * lazy reconciler in `routes.ts` and this round runner — need the same
393
+ * resolution, and a core module must not import from `server/`.
394
+ *
395
+ * READ-ONLY: `gh repo view` + `git remote -v` (the latter via
396
+ * SafeGitExecutor.readSync `remote` is a READONLY_GIT_VERB, shape-checked
397
+ * to list/get-url only).
329
398
  */
330
- function defaultVerifyMergedItems(targetRepoPath) {
331
- return async (_childIds) => {
332
- const verified = new Set();
333
- // Best-effort no-op default production callers should pass a
334
- // real verifyMergedItems that calls StageTransitionValidator.
335
- // The point of this default is to avoid a spurious shell-out
336
- // during tests that didn't override it (rare; tests should
337
- // override).
338
- void targetRepoPath;
339
- return verified;
340
- };
399
+ export function resolveCanonicalMainRef(repoPath) {
400
+ const FALLBACK = 'origin/main';
401
+ try {
402
+ // `gh repo view` is a BLOCKING spawn and this runs inside the server
403
+ // process (the auto-advance poller calls runRound). It funnels through
404
+ // withSyncOp so the in-flight marker sees the stall instead of it looking
405
+ // like an unexplained event-loop freeze.
406
+ //
407
+ // In `routes.ts` this callsite sat on the chokepoint lint's frozen
408
+ // baseline — grandfathered, not blessed. Moving it into core made it a NEW
409
+ // violation, and the lint refused it. That refusal is the useful part: it
410
+ // stopped a pre-existing blocking hazard from spreading into a module the
411
+ // round runner calls on every pass.
412
+ const GH_ARGS = ['repo', 'view', '--json', 'nameWithOwner', '-q', '.nameWithOwner'];
413
+ const GH_OPTS = {
414
+ cwd: repoPath,
415
+ encoding: 'utf-8',
416
+ stdio: ['ignore', 'pipe', 'ignore'],
417
+ };
418
+ // The wrap must sit on the SAME LINE as the spawn: the chokepoint lint is a
419
+ // deliberately lexical, same-line matcher (it documents that it cannot prove
420
+ // runtime wrapping — that is the marker's own unit test's job). A cheap
421
+ // signal, not an authority, so it is satisfied literally.
422
+ const ghRepo = withSyncOp(() => execFileSync('gh', GH_ARGS, GH_OPTS)).trim();
423
+ if (!ghRepo)
424
+ return FALLBACK;
425
+ const remotesOut = SafeGitExecutor.readSync(['remote', '-v'], {
426
+ cwd: repoPath,
427
+ operation: 'ProjectRoundExecution.resolveCanonicalMainRef',
428
+ encoding: 'utf-8',
429
+ });
430
+ for (const line of remotesOut.split('\n')) {
431
+ // format: "<name>\t<url> (fetch)"
432
+ const m = /^(\S+)\s+(\S+)\s+\(fetch\)/.exec(line.trim());
433
+ if (!m)
434
+ continue;
435
+ const [, name, url] = m;
436
+ if (url.includes(ghRepo) || url.includes(`${ghRepo}.git`)) {
437
+ return `${name}/main`;
438
+ }
439
+ }
440
+ return FALLBACK;
441
+ }
442
+ catch { /* @silent-fallback-ok: resolving the canonical-main ref is best-effort — gh missing / not-a-gh-repo / git error falls back to the documented `origin/main` default (the prior behavior), which the merge-base gate then re-validates. Not a degradation: it's the conservative default this resolver exists to refine, not replace. */
443
+ return FALLBACK;
444
+ }
341
445
  }
342
446
  /**
343
447
  * Helper exported so callers can wire a SafeGit-backed verifier.
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRoundExecution.js","sourceRoot":"","sources":["../../src/core/ProjectRoundExecution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProjectRoundExecution.js","sourceRoot":"","sources":["../../src/core/ProjectRoundExecution.ts"],"names":[],"mappings":"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"}
@@ -55,8 +55,24 @@ export type ChannelState =
55
55
  | 'unknown';
56
56
  /** Which direction(s) a channel can actually carry traffic — the half-built case made explicit. */
57
57
  export type ChannelDirection = 'bidirectional' | 'send-only' | 'receive-only' | 'none';
58
+ /**
59
+ * Who is on the other end. This exists because "which channel should I use?" is ONE question with
60
+ * two very different answers, and splitting it across two surfaces recreates the arbitrariness this
61
+ * registry was built to remove — a caller would have to already know which list to consult.
62
+ *
63
+ * The distinction is kept as DATA rather than as two registries because the choice between them is
64
+ * itself a routing decision: reaching a peer costs latency, reaching the operator costs their
65
+ * attention. A caller cannot weigh that trade-off if it can only see one side of it.
66
+ */
67
+ export type ChannelAudience =
68
+ /** Another agent. */
69
+ 'peer'
70
+ /** A human operator, on the surface they actually read. */
71
+ | 'user';
58
72
  export interface ChannelDefinition {
59
73
  id: string;
74
+ /** Who is on the other end — see ChannelAudience for why this is data, not two registries. */
75
+ audience: ChannelAudience;
60
76
  /** What it is for, in the operator's terms. */
61
77
  purpose: string;
62
78
  /** When this channel is the right choice over the others. */
@@ -77,6 +93,7 @@ export interface ChannelProbeResult {
77
93
  }
78
94
  export interface ChannelReport extends ChannelProbeResult {
79
95
  id: string;
96
+ audience: ChannelAudience;
80
97
  purpose: string;
81
98
  whenPreferred: string;
82
99
  cost: string;
@@ -1 +1 @@
1
- {"version":3,"file":"channelRegistry.d.ts","sourceRoot":"","sources":["../../src/core/channelRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;;GAGG;AACH,MAAM,MAAM,YAAY;AACtB,mCAAmC;AACjC,SAAS;AACX,4DAA4D;GAC1D,QAAQ;AACV,sFAAsF;GACpF,YAAY;AACd,6FAA6F;GAC3F,yBAAyB;AAC3B,8EAA8E;GAC5E,gBAAgB;AAClB,8EAA8E;GAC5E,SAAS,CAAC;AAEd,mGAAmG;AACnG,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC;AAEvF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,qGAAqG;IACrG,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,gGAAgG;IAChG,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,WAAW,EAAE,MAAM,CAAC;CACrB;AAmBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,SAAS,iBAAiB,EAAE,EACzC,GAAG,GAAE,MAAM,MAAuC,GACjD,OAAO,CAAC,qBAAqB,CAAC,CA4BhC"}
1
+ {"version":3,"file":"channelRegistry.d.ts","sourceRoot":"","sources":["../../src/core/channelRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;;GAGG;AACH,MAAM,MAAM,YAAY;AACtB,mCAAmC;AACjC,SAAS;AACX,4DAA4D;GAC1D,QAAQ;AACV,sFAAsF;GACpF,YAAY;AACd,6FAA6F;GAC3F,yBAAyB;AAC3B,8EAA8E;GAC5E,gBAAgB;AAClB,8EAA8E;GAC5E,SAAS,CAAC;AAEd,mGAAmG;AACnG,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC;AAEvF;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe;AACzB,qBAAqB;AACnB,MAAM;AACR,2DAA2D;GACzD,MAAM,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,8FAA8F;IAC9F,QAAQ,EAAE,eAAe,CAAC;IAC1B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,qGAAqG;IACrG,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,gGAAgG;IAChG,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,WAAW,EAAE,MAAM,CAAC;CACrB;AAmBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,SAAS,iBAAiB,EAAE,EACzC,GAAG,GAAE,MAAM,MAAuC,GACjD,OAAO,CAAC,qBAAqB,CAAC,CAkChC"}
@@ -60,7 +60,13 @@ async function withTimeout(p) {
60
60
  */
61
61
  export async function resolveChannels(definitions, now = () => new Date().toISOString()) {
62
62
  const channels = await Promise.all(definitions.map(async (def) => {
63
- const base = { id: def.id, purpose: def.purpose, whenPreferred: def.whenPreferred, cost: def.cost };
63
+ const base = {
64
+ id: def.id,
65
+ audience: def.audience,
66
+ purpose: def.purpose,
67
+ whenPreferred: def.whenPreferred,
68
+ cost: def.cost,
69
+ };
64
70
  try {
65
71
  const result = await withTimeout(def.probe());
66
72
  // A probe returning a shape we do not recognise is a failed probe, not a healthy channel.
@@ -1 +1 @@
1
- {"version":3,"file":"channelRegistry.js","sourceRoot":"","sources":["../../src/core/channelRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channelRegistry.js","sourceRoot":"","sources":["../../src/core/channelRegistry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"instarChannels.d.ts","sourceRoot":"","sources":["../../src/core/instarChannels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,sBAAsB,CAAC;AAElF,kGAAkG;AAClG,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,WAAW,EAAE,MAAM;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,8FAA8F;IAC9F,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1F;AAeD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,EAAE,CAmErF;AAED,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,QAA0B,CAAC"}
1
+ {"version":3,"file":"instarChannels.d.ts","sourceRoot":"","sources":["../../src/core/instarChannels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,sBAAsB,CAAC;AAElF,kGAAkG;AAClG,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,WAAW,EAAE,MAAM;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,8FAA8F;IAC9F,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1F;AAeD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,EAAE,CAuErF;AAED,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,QAA0B,CAAC"}
@@ -22,6 +22,7 @@ export function buildChannelDefinitions(ctx) {
22
22
  return [
23
23
  {
24
24
  id: 'threadline-relay',
25
+ audience: 'peer',
25
26
  purpose: 'Direct agent-to-agent messaging over the shared relay.',
26
27
  whenPreferred: 'The default for peer work: fastest, and invisible to the operator, so it does not spend their attention.',
27
28
  cost: 'Requires the relay to be connected. Invisible when it fails, which is its main hazard.',
@@ -41,6 +42,7 @@ export function buildChannelDefinitions(ctx) {
41
42
  },
42
43
  {
43
44
  id: 'a2a-telegram',
45
+ audience: 'peer',
44
46
  purpose: 'Agent-to-agent messages carried over the operator-visible Telegram channel, with a marker and anti-loop machinery.',
45
47
  whenPreferred: 'When the exchange should be reviewable by the operator, or as a fallback the relay cannot provide — ONCE its sender is wired.',
46
48
  cost: 'Consumes operator attention; slower; the conversation is visible.',
@@ -49,6 +51,7 @@ export function buildChannelDefinitions(ctx) {
49
51
  },
50
52
  {
51
53
  id: 'mutual-ssh',
54
+ audience: 'peer',
52
55
  purpose: 'Machine-to-machine execution between paired hosts over a restricted SSH endpoint.',
53
56
  whenPreferred: 'Peer work that needs to run ON the other machine rather than be asked for.',
54
57
  cost: 'Requires paired keys and a listening endpoint; heaviest of the three to set up.',
@@ -71,6 +74,7 @@ export function buildChannelDefinitions(ctx) {
71
74
  },
72
75
  {
73
76
  id: 'peer-http',
77
+ audience: 'peer',
74
78
  purpose: "Direct HTTP to a peer agent's own server on this machine.",
75
79
  whenPreferred: 'Last resort when the relay is down and the peer is co-located.',
76
80
  cost: 'Needs a credential for the peer\'s authenticated routes; on-box only.',
@@ -1 +1 @@
1
- {"version":3,"file":"instarChannels.js","sourceRoot":"","sources":["../../src/core/instarChannels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instarChannels.js","sourceRoot":"","sources":["../../src/core/instarChannels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The DIRECT USER channels — the surfaces a human operator actually reads — wired into the same
3
+ * channel registry as the peer channels.
4
+ *
5
+ * WHY THIS EXISTS (2026-07-27, topic 29723). The peer registry answered "which ways of reaching a
6
+ * PEER work right now?". Asked the same question about the operator, the only available answer was
7
+ * `/capabilities` reporting `telegram: { configured: true }`. That is a SETTING, not a STATE: a
8
+ * Telegram whose polling loop died on a 401 four hours ago still reports `configured: true`, because
9
+ * the config file still says so. Reaching for that number during an outage would produce exactly the
10
+ * false confidence the peer registry was built to prevent — one layer over, on the channel that
11
+ * matters most, because it is the one carrying messages to a person.
12
+ *
13
+ * So every probe here reads LIVE RUNTIME STATE and never configuration:
14
+ *
15
+ * - Telegram exposes `getStatus()`, whose `started` field is `this.polling` — whether the loop is
16
+ * running NOW — plus `fatalReason` distinguishing a rejected credential from a dropped network.
17
+ * A comment on its `lastPollError` field says it is kept "so health probes can explain WHY
18
+ * polling stopped". That consumer was never built. This is it.
19
+ *
20
+ * - Slack exposes `isConnected()`, which returns `_connected` — cleared on disconnect. It
21
+ * deliberately does NOT return `started`, which its own source annotates as "ever connected".
22
+ * `started` is the trap: a workspace that connected once at boot and dropped an hour later
23
+ * reports `started === true` forever. Liveness must come from the field that clears.
24
+ *
25
+ * ── THE ROUTING JUDGEMENT THIS ENCODES ─────────────────────────────────────────────────────────
26
+ *
27
+ * `whenPreferred` for a user channel is not merely "when the message is for the operator". A user
28
+ * channel is the ONLY surface that shows what the user genuinely experiences — a proxy cannot. That
29
+ * makes deliberately using it a legitimate REASON to choose it, not just a cost to be minimised.
30
+ * The constitution's "Live-User-Channel Proof Before Done" standard rests on exactly this, and the
31
+ * cost side is real and opposite: operator attention is finite and every automated message competes
32
+ * with the ones that matter. Both halves are recorded so a caller can weigh them.
33
+ */
34
+ import type { ChannelDefinition, ChannelProbeResult } from './channelRegistry.js';
35
+ /**
36
+ * Live Telegram adapter state. Mirrors the subset of `TelegramAdapter.getStatus()` this needs.
37
+ * `null` means the adapter was never constructed on this agent — which is `not-configured`, a
38
+ * distinct verdict from broken, and must never be an omitted row.
39
+ */
40
+ export interface TelegramLiveStatus {
41
+ /** `this.polling` — whether the long-poll loop is running RIGHT NOW. Not "was ever started". */
42
+ started: boolean;
43
+ /** Why polling stopped, when it stopped for a reason the adapter could classify. */
44
+ fatalReason: '401' | 'network' | 'no-usable-bot-token' | null;
45
+ /** Consecutive poll errors. Non-zero while still polling is degraded-but-working, not broken. */
46
+ consecutivePollErrors: number;
47
+ /** Last poll error text, if any. */
48
+ lastError: string | null;
49
+ /** ISO instant polling stopped, when it has. */
50
+ stoppedAt: string | null;
51
+ }
52
+ export interface UserChannelProbeContext {
53
+ /** Live Telegram state, or null when the adapter was never constructed here. */
54
+ telegramStatus: () => TelegramLiveStatus | null;
55
+ /**
56
+ * Whether the Slack socket is up RIGHT NOW (`isConnected()`), or null when no Slack adapter was
57
+ * constructed. Deliberately not `started` — see the module docstring.
58
+ */
59
+ slackConnected: () => boolean | null;
60
+ /** Whether Slack is switched on for this agent at all. Off is not broken. */
61
+ slackEnabled: () => boolean;
62
+ }
63
+ /**
64
+ * Map live Telegram state onto the registry's vocabulary.
65
+ *
66
+ * Extracted and exported so the mapping is testable WITHOUT constructing an adapter — the mapping is
67
+ * where a wrong verdict would come from, so it is the part that must be pinned.
68
+ */
69
+ export declare function telegramStateFrom(status: TelegramLiveStatus | null): ChannelProbeResult;
70
+ /** Map live Slack state onto the registry's vocabulary. Exported for the same reason as above. */
71
+ export declare function slackStateFrom(enabled: boolean, connected: boolean | null): ChannelProbeResult;
72
+ export declare function buildUserChannelDefinitions(ctx: UserChannelProbeContext): ChannelDefinition[];
73
+ //# sourceMappingURL=userChannels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userChannels.d.ts","sourceRoot":"","sources":["../../src/core/userChannels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAElF;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,gGAAgG;IAChG,OAAO,EAAE,OAAO,CAAC;IACjB,oFAAoF;IACpF,WAAW,EAAE,KAAK,GAAG,SAAS,GAAG,qBAAqB,GAAG,IAAI,CAAC;IAC9D,iGAAiG;IACjG,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oCAAoC;IACpC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gDAAgD;IAChD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,gFAAgF;IAChF,cAAc,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,cAAc,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IACrC,6EAA6E;IAC7E,YAAY,EAAE,MAAM,OAAO,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,kBAAkB,CAqDvF;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,kBAAkB,CAyB9F;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,uBAAuB,GAAG,iBAAiB,EAAE,CA6B7F"}