instar 1.3.585 → 1.3.587
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.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +85 -32
- package/dist/commands/server.js.map +1 -1
- package/dist/core/IntelligenceRouter.d.ts +10 -0
- package/dist/core/IntelligenceRouter.d.ts.map +1 -1
- package/dist/core/IntelligenceRouter.js +37 -3
- package/dist/core/IntelligenceRouter.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +17 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/internalFrameworkDefault.d.ts +50 -0
- package/dist/core/internalFrameworkDefault.d.ts.map +1 -0
- package/dist/core/internalFrameworkDefault.js +72 -0
- package/dist/core/internalFrameworkDefault.js.map +1 -0
- package/dist/core/types.d.ts +18 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/scaffold/templates.js +4 -4
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +41 -3
- package/dist/server/routes.js.map +1 -1
- package/dist/server/stopGate.d.ts +37 -0
- package/dist/server/stopGate.d.ts.map +1 -1
- package/dist/server/stopGate.js +85 -8
- package/dist/server/stopGate.js.map +1 -1
- package/package.json +1 -1
- package/scripts/safe-merge.mjs +68 -5
- package/src/data/builtin-manifest.json +63 -63
- package/src/scaffold/templates.ts +4 -4
- package/upgrades/1.3.586.md +76 -0
- package/upgrades/1.3.587.md +28 -0
- package/upgrades/side-effects/autonomous-run-registration-guarantee.md +40 -0
- package/upgrades/side-effects/provider-fallback-default-policy.md +52 -0
- package/upgrades/side-effects/safe-merge-native-auto-merge.md +92 -0
|
@@ -123,6 +123,43 @@ export interface HotPathInputs {
|
|
|
123
123
|
autonomousStateFile?: string;
|
|
124
124
|
recoveryScriptPath?: string;
|
|
125
125
|
now?: number;
|
|
126
|
+
/**
|
|
127
|
+
* GAP-B (autonomous-run-registration-guarantee D2): the topic this
|
|
128
|
+
* session serves, resolved SERVER-SIDE by inverting
|
|
129
|
+
* `.instar/topic-session-registry.json`'s `topicToSession` map on the
|
|
130
|
+
* session's tmux name (the same inversion the bash stop hook uses). When
|
|
131
|
+
* present, readAutonomousActive checks the CANONICAL per-topic
|
|
132
|
+
* registration `.instar/autonomous/<topicId>.local.md` FIRST.
|
|
133
|
+
*
|
|
134
|
+
* Unresolved (a registry-lookup miss) → undefined. The read then falls
|
|
135
|
+
* back to BOTH legacy single-file paths — NEVER a silent
|
|
136
|
+
* autonomousActive:false (no-silent-fallbacks ratchet).
|
|
137
|
+
*/
|
|
138
|
+
topicId?: string | number;
|
|
139
|
+
/**
|
|
140
|
+
* Agent home root the relative autonomous-state paths resolve against.
|
|
141
|
+
* Defaults to process.cwd() (the agent home the server runs in). Tests
|
|
142
|
+
* inject a tmp dir. The per-topic file lives at
|
|
143
|
+
* `<stateRoot>/.instar/autonomous/<topicId>.local.md`; the two legacy
|
|
144
|
+
* single-files at `<stateRoot>/.instar/autonomous-state.local.md` and
|
|
145
|
+
* `<stateRoot>/.claude/autonomous-state.local.md`.
|
|
146
|
+
*/
|
|
147
|
+
stateRoot?: string;
|
|
126
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* GAP-B D2 — resolve the topic a session serves SERVER-SIDE, mirroring the
|
|
151
|
+
* bash stop hook's inversion of `topic-session-registry.json`'s
|
|
152
|
+
* `topicToSession` (topic→tmux) map keyed on the session's tmux name.
|
|
153
|
+
*
|
|
154
|
+
* The stop-gate hot-path receives the Claude session UUID, not the tmux
|
|
155
|
+
* name, so the caller resolves UUID→tmux first (via the session manager's
|
|
156
|
+
* claudeSessionId record) and passes the tmux name here. Pure + fail-open:
|
|
157
|
+
* any read/parse error → null (the read then uses the legacy fallbacks; a
|
|
158
|
+
* null is the explicit unresolved-topic case, never a silent false).
|
|
159
|
+
*
|
|
160
|
+
* @param registryPath absolute path to topic-session-registry.json
|
|
161
|
+
* @param tmuxSession the session's tmux name (the registry value to invert on)
|
|
162
|
+
*/
|
|
163
|
+
export declare function resolveTopicForTmux(registryPath: string, tmuxSession: string | null | undefined, readFile?: (p: string) => string): string | null;
|
|
127
164
|
export declare function getHotPathState(opts?: HotPathInputs): HotPathState;
|
|
128
165
|
//# sourceMappingURL=stopGate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stopGate.d.ts","sourceRoot":"","sources":["../../src/server/stopGate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"stopGate.d.ts","sourceRoot":"","sources":["../../src/server/stopGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAeH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAS5C,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;AA6CpD,wBAAgB,sBAAsB,CAAC,IAAI,GAAE;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,QAAQ,CAAC;CACnB,GAAG,QAAQ,CAShB;AAED,wBAAgB,OAAO,IAAI,QAAQ,CAElC;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAG5C;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIrD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAI/E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAgBD,MAAM,WAAW,sBAAsB;IACrC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;8DAC0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,sBAA2B,GAAG,OAAO,CA0B7E;AASD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,GAAG,iBAAiB,GAAG,UAAU,CAAC;CACvD;AAED,4EAA4E;AAC5E,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,GAAG,iBAAiB,CAAA;KAAE,CAAC,CAAC;CAC5F;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACzC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,YAAY,GAAG,IAAI,CA0BtB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,GAAG,IAAI,CAyBhI;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;8EAE0E;IAC1E,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAA2C,GACnE,MAAM,GAAG,IAAI,CAcf;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,aAAkB,GAAG,YAAY,CAatE"}
|
package/dist/server/stopGate.js
CHANGED
|
@@ -241,21 +241,98 @@ export function resolveBranchFromCwd(cwd, readFile, exists) {
|
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
243
|
/**
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
244
|
+
* GAP-B D1 — fixed read precedence for autonomousActive. An autonomous run
|
|
245
|
+
* registered per-topic at `.instar/autonomous/<topicId>.local.md` (the
|
|
246
|
+
* canonical path the reaper/revival machinery reads) was previously
|
|
247
|
+
* INVISIBLE to the stop gate, which only ever checked the oldest legacy
|
|
248
|
+
* path. The precedence, applied with the SAME existence check the original
|
|
249
|
+
* function used (consistently across all three):
|
|
250
|
+
*
|
|
251
|
+
* 1. `.instar/autonomous/<topicId>.local.md` (per-topic — canonical;
|
|
252
|
+
* only when a topicId is resolved)
|
|
253
|
+
* 2. `.instar/autonomous-state.local.md` (legacy single-file)
|
|
254
|
+
* 3. `.claude/autonomous-state.local.md` (oldest legacy)
|
|
255
|
+
*
|
|
256
|
+
* autonomousActive:true if ANY exists. The legacy paths are ALWAYS checked
|
|
257
|
+
* as fallbacks — even on an unresolved topic — so a registry-lookup miss
|
|
258
|
+
* can never silently return false (no-silent-fallbacks ratchet, D2).
|
|
259
|
+
*
|
|
260
|
+
* `autonomousStateFile` (the historical test/override seam) still wins:
|
|
261
|
+
* when supplied it is the sole path read, preserving back-compat for
|
|
262
|
+
* existing callers/tests that point at one explicit file.
|
|
263
|
+
*
|
|
264
|
+
* E2E-PAIRING: EXEMPT — a read-path correction to an existing internal
|
|
265
|
+
* gate route (/internal/stop-gate/*); it adds no new route or feature
|
|
266
|
+
* surface that could 503 in prod, so the "feature is alive" E2E does not
|
|
267
|
+
* apply. The full HTTP hot-path (UUID to tmux to topic to per-topic file)
|
|
268
|
+
* is covered by tests/integration/stop-gate-autonomous-topic-resolution.test.ts;
|
|
269
|
+
* the incident-level boot E2E belongs to the registration-guard increment.
|
|
247
270
|
*/
|
|
248
271
|
function readAutonomousActive(opts) {
|
|
249
272
|
if (typeof opts.autonomousActiveOverride === 'boolean') {
|
|
250
273
|
return opts.autonomousActiveOverride;
|
|
251
274
|
}
|
|
252
|
-
const
|
|
253
|
-
|
|
275
|
+
const existsSafe = (file) => {
|
|
276
|
+
try {
|
|
277
|
+
return fs.existsSync(file);
|
|
278
|
+
}
|
|
279
|
+
catch { /* @silent-fallback-ok: GAP-B — a per-PATH stat error is not a registry miss; the precedence chain continues to the next path, never short-circuiting the whole read. */
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
// Back-compat: an explicit single-file override is the sole path read.
|
|
284
|
+
if (opts.autonomousStateFile) {
|
|
285
|
+
return existsSafe(opts.autonomousStateFile);
|
|
286
|
+
}
|
|
287
|
+
const root = opts.stateRoot ?? process.cwd();
|
|
288
|
+
// 1. Per-topic canonical path — ONLY when a topic was resolved. A topicId
|
|
289
|
+
// of undefined/'' means the registry inversion missed (or no session);
|
|
290
|
+
// we fall through to the legacy paths below (the explicit, recorded
|
|
291
|
+
// no-silent-fallback handling for the unresolved-topic case).
|
|
292
|
+
const topicIdStr = opts.topicId === undefined || opts.topicId === null ? '' : String(opts.topicId).trim();
|
|
293
|
+
if (topicIdStr) {
|
|
294
|
+
const perTopic = path.resolve(root, '.instar/autonomous', `${topicIdStr}.local.md`);
|
|
295
|
+
if (existsSafe(perTopic))
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
// 2 + 3. Legacy single-file fallbacks (ALWAYS checked — including on an
|
|
299
|
+
// unresolved topic). Precedence: .instar then .claude.
|
|
300
|
+
const legacyInstar = path.resolve(root, '.instar/autonomous-state.local.md');
|
|
301
|
+
if (existsSafe(legacyInstar))
|
|
302
|
+
return true;
|
|
303
|
+
const legacyClaude = path.resolve(root, '.claude/autonomous-state.local.md');
|
|
304
|
+
if (existsSafe(legacyClaude))
|
|
305
|
+
return true;
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* GAP-B D2 — resolve the topic a session serves SERVER-SIDE, mirroring the
|
|
310
|
+
* bash stop hook's inversion of `topic-session-registry.json`'s
|
|
311
|
+
* `topicToSession` (topic→tmux) map keyed on the session's tmux name.
|
|
312
|
+
*
|
|
313
|
+
* The stop-gate hot-path receives the Claude session UUID, not the tmux
|
|
314
|
+
* name, so the caller resolves UUID→tmux first (via the session manager's
|
|
315
|
+
* claudeSessionId record) and passes the tmux name here. Pure + fail-open:
|
|
316
|
+
* any read/parse error → null (the read then uses the legacy fallbacks; a
|
|
317
|
+
* null is the explicit unresolved-topic case, never a silent false).
|
|
318
|
+
*
|
|
319
|
+
* @param registryPath absolute path to topic-session-registry.json
|
|
320
|
+
* @param tmuxSession the session's tmux name (the registry value to invert on)
|
|
321
|
+
*/
|
|
322
|
+
export function resolveTopicForTmux(registryPath, tmuxSession, readFile = (p) => fs.readFileSync(p, 'utf-8')) {
|
|
323
|
+
if (!tmuxSession)
|
|
324
|
+
return null;
|
|
254
325
|
try {
|
|
255
|
-
|
|
326
|
+
const reg = JSON.parse(readFile(registryPath));
|
|
327
|
+
const t2s = reg.topicToSession ?? {};
|
|
328
|
+
for (const [topicId, sess] of Object.entries(t2s)) {
|
|
329
|
+
if (sess === tmuxSession)
|
|
330
|
+
return topicId;
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
256
333
|
}
|
|
257
|
-
catch {
|
|
258
|
-
return
|
|
334
|
+
catch { /* @silent-fallback-ok: GAP-B — a missing/corrupt registry yields null (unresolved topic), which the read handles EXPLICITLY by checking both legacy paths; it is never coerced to autonomousActive:false. */
|
|
335
|
+
return null;
|
|
259
336
|
}
|
|
260
337
|
}
|
|
261
338
|
export function getHotPathState(opts = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stopGate.js","sourceRoot":"","sources":["../../src/server/stopGate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"stopGate.js","sourceRoot":"","sources":["../../src/server/stopGate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/scripts/safe-merge.mjs
CHANGED
|
@@ -25,8 +25,17 @@
|
|
|
25
25
|
* - `--delete-branch` pass-through; `--deadline-ms` so the caller's timeout
|
|
26
26
|
* and the internal wait can never invert (B24)
|
|
27
27
|
*
|
|
28
|
-
* Usage: node scripts/safe-merge.mjs <PR#> [--admin] [--squash|--merge|--rebase]
|
|
28
|
+
* Usage: node scripts/safe-merge.mjs <PR#> [--auto|--admin] [--squash|--merge|--rebase]
|
|
29
29
|
* [--repo <owner/name>] [--delete-branch] [--deadline-ms <n>]
|
|
30
|
+
*
|
|
31
|
+
* --auto PREFERRED. Arms GitHub native auto-merge and returns immediately —
|
|
32
|
+
* GitHub merges the instant every required check passes, enforcing
|
|
33
|
+
* branch protection itself (no --admin bypass) and never timing out.
|
|
34
|
+
* Requires "Allow auto-merge" enabled on the repo. Exit 5 = armed,
|
|
35
|
+
* exit 0 = merged immediately (checks were already green).
|
|
36
|
+
* --admin Legacy synchronous path: polls for green, re-imposes the required
|
|
37
|
+
* contexts that --admin would bypass, then merges. Use only when the
|
|
38
|
+
* repo has auto-merge disabled.
|
|
30
39
|
* [--match-head-commit <sha>] [--extra-floor <ctx,ctx>]
|
|
31
40
|
* node scripts/safe-merge.mjs --capabilities
|
|
32
41
|
*
|
|
@@ -62,7 +71,7 @@ export const REQUIRED_CONTEXTS_FLOOR = [
|
|
|
62
71
|
];
|
|
63
72
|
|
|
64
73
|
const ALLOWED_FLAGS = new Set([
|
|
65
|
-
'--admin', '--squash', '--merge', '--rebase', '--delete-branch', '--capabilities',
|
|
74
|
+
'--admin', '--auto', '--squash', '--merge', '--rebase', '--delete-branch', '--capabilities',
|
|
66
75
|
]);
|
|
67
76
|
const ALLOWED_VALUE_FLAGS = new Set([
|
|
68
77
|
'--repo', '--deadline-ms', '--match-head-commit', '--extra-floor',
|
|
@@ -72,7 +81,7 @@ const ALLOWED_VALUE_FLAGS = new Set([
|
|
|
72
81
|
* confused caller must fail loudly, not have its intent silently ignored). */
|
|
73
82
|
export function parseArgs(argv) {
|
|
74
83
|
const out = {
|
|
75
|
-
pr: null, repo: DEFAULT_REPO, method: '--merge', admin: false,
|
|
84
|
+
pr: null, repo: DEFAULT_REPO, method: '--merge', admin: false, auto: false,
|
|
76
85
|
deleteBranch: false, deadlineMs: DEFAULT_DEADLINE_MS,
|
|
77
86
|
matchHeadCommit: null, extraFloor: [], capabilities: false,
|
|
78
87
|
};
|
|
@@ -103,6 +112,7 @@ export function parseArgs(argv) {
|
|
|
103
112
|
}
|
|
104
113
|
if (ALLOWED_FLAGS.has(a)) {
|
|
105
114
|
if (a === '--admin') out.admin = true;
|
|
115
|
+
else if (a === '--auto') out.auto = true;
|
|
106
116
|
else if (a === '--delete-branch') out.deleteBranch = true;
|
|
107
117
|
else if (a === '--capabilities') out.capabilities = true;
|
|
108
118
|
else out.method = a; // --squash | --merge | --rebase
|
|
@@ -111,6 +121,10 @@ export function parseArgs(argv) {
|
|
|
111
121
|
throw new UsageError(`unknown flag: ${a} (strict argv — see --capabilities for the contract)`);
|
|
112
122
|
}
|
|
113
123
|
if (!out.capabilities && out.pr === null) throw new UsageError('a PR number is required');
|
|
124
|
+
// --auto (native GitHub auto-merge: GitHub enforces every required check
|
|
125
|
+
// before merging) and --admin (bypass-then-re-impose) are contradictory
|
|
126
|
+
// strategies — refuse the incoherent combo rather than silently pick one.
|
|
127
|
+
if (out.auto && out.admin) throw new UsageError('--auto and --admin are mutually exclusive: --auto relies on GitHub native required-check enforcement, --admin bypasses it');
|
|
114
128
|
return out;
|
|
115
129
|
}
|
|
116
130
|
|
|
@@ -123,8 +137,9 @@ export function capabilities() {
|
|
|
123
137
|
'strict-argv', 'repo-param', 'json-checks', 'head-pinning',
|
|
124
138
|
'required-contexts-cross-check', 'producer-binding', 'floor',
|
|
125
139
|
'reviews-required-refusal', 'classified-exits', 'delete-branch', 'deadline-ms',
|
|
140
|
+
'native-auto-merge',
|
|
126
141
|
],
|
|
127
|
-
exitCodes: { merged: 0, refused: 1, usageOrError: 2, alreadyMerged: 3, closed: 4 },
|
|
142
|
+
exitCodes: { merged: 0, refused: 1, usageOrError: 2, alreadyMerged: 3, closed: 4, autoMergeArmed: 5 },
|
|
128
143
|
};
|
|
129
144
|
}
|
|
130
145
|
|
|
@@ -328,7 +343,7 @@ async function main() {
|
|
|
328
343
|
} catch (e) {
|
|
329
344
|
if (e instanceof UsageError) {
|
|
330
345
|
console.error(`safe-merge: ${e.message}`);
|
|
331
|
-
console.error('usage: node scripts/safe-merge.mjs <PR#> [--admin] [--squash|--merge|--rebase] [--repo <owner/name>] [--delete-branch] [--deadline-ms <n>] [--match-head-commit <sha>] [--extra-floor <ctx,ctx>]');
|
|
346
|
+
console.error('usage: node scripts/safe-merge.mjs <PR#> [--auto|--admin] [--squash|--merge|--rebase] [--repo <owner/name>] [--delete-branch] [--deadline-ms <n>] [--match-head-commit <sha>] [--extra-floor <ctx,ctx>]');
|
|
332
347
|
result({ result: 'error:usage', detail: e.message });
|
|
333
348
|
process.exit(2);
|
|
334
349
|
}
|
|
@@ -370,6 +385,54 @@ async function main() {
|
|
|
370
385
|
process.exit(1);
|
|
371
386
|
}
|
|
372
387
|
|
|
388
|
+
// --- Native auto-merge path (--auto): arm-and-return, no polling ----------
|
|
389
|
+
// GitHub's native auto-merge merges the PR the instant every REQUIRED check
|
|
390
|
+
// passes and the branch is mergeable — and it NEVER bypasses a check (unlike
|
|
391
|
+
// --admin). So the required-context re-imposition this script does manually
|
|
392
|
+
// for the --admin path is enforced by GitHub itself here. We only run the
|
|
393
|
+
// cheap pre-flight above (open, not draft, head not moved), arm auto-merge,
|
|
394
|
+
// confirm it's armed, and exit. No deadline, so it can't time out the way a
|
|
395
|
+
// foreground/background poller does (the failure mode that wedged hot-branch
|
|
396
|
+
// merges: the watcher is killed before slow CI finishes).
|
|
397
|
+
if (args.auto) {
|
|
398
|
+
const autoArgs = ['pr', 'merge', pr, '--repo', repo, args.method, '--auto'];
|
|
399
|
+
if (args.matchHeadCommit) autoArgs.push('--match-head-commit', pinnedHead);
|
|
400
|
+
if (args.deleteBranch) autoArgs.push('--delete-branch');
|
|
401
|
+
console.log(`safe-merge: arming native auto-merge for PR #${pr} (${args.method}, head ${pinnedHead.slice(0, 12)}) — GitHub will merge when all required checks pass...`);
|
|
402
|
+
const a = spawnSync('gh', autoArgs, { encoding: 'utf-8' });
|
|
403
|
+
process.stdout.write(a.stdout ?? '');
|
|
404
|
+
process.stderr.write(a.stderr ?? '');
|
|
405
|
+
if (a.status !== 0 || a.signal) {
|
|
406
|
+
const cls = classifyMergeFailure(a.stderr, a.status, a.signal);
|
|
407
|
+
if (cls === 'already-merged') { result({ result: 'already-merged', pr: Number(pr) }); process.exit(3); }
|
|
408
|
+
if (cls === 'closed') { result({ result: 'closed', pr: Number(pr) }); process.exit(4); }
|
|
409
|
+
result({ result: `refused:auto-arm-${cls}`, raw: cls });
|
|
410
|
+
console.error(`safe-merge: could not arm auto-merge (${cls}). Is "Allow auto-merge" enabled on the repo settings?`);
|
|
411
|
+
process.exit(1);
|
|
412
|
+
}
|
|
413
|
+
// Independent confirmation (B10: never trust the exit code alone). If the
|
|
414
|
+
// checks were ALREADY green, GitHub merges immediately and we report merged.
|
|
415
|
+
try {
|
|
416
|
+
const after = ghJson(['pr', 'view', pr, '--repo', repo, '--json', 'state,mergedAt,autoMergeRequest']);
|
|
417
|
+
if (after.state === 'MERGED' || after.mergedAt) {
|
|
418
|
+
result({ result: 'merged', pr: Number(pr), head: pinnedHead });
|
|
419
|
+
process.exit(0);
|
|
420
|
+
}
|
|
421
|
+
if (after.autoMergeRequest) {
|
|
422
|
+
result({ result: 'auto-merge-armed', pr: Number(pr), head: pinnedHead });
|
|
423
|
+
console.log('safe-merge: auto-merge armed. GitHub will merge when required checks pass — no further action needed.');
|
|
424
|
+
process.exit(5);
|
|
425
|
+
}
|
|
426
|
+
result({ result: 'error:auto-arm-unconfirmed', state: after.state });
|
|
427
|
+
console.error('safe-merge: gh reported success but auto-merge is not armed on re-read. NOT claiming success.');
|
|
428
|
+
process.exit(2);
|
|
429
|
+
} catch (e) {
|
|
430
|
+
result({ result: 'error:auto-confirm-unreadable', detail: String(e.message).slice(0, 300) });
|
|
431
|
+
console.error('safe-merge: could not independently confirm auto-merge was armed. NOT claiming success.');
|
|
432
|
+
process.exit(2);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
373
436
|
// --- Wait for checks to settle (bucket-based, never name-based) ----------
|
|
374
437
|
console.log(`safe-merge: waiting for PR #${pr} checks to finish (deadline ${Math.round(args.deadlineMs / 1000)}s)...`);
|
|
375
438
|
let checksState;
|