fix(team): prioritize bootstrap launch diagnostics
This commit is contained in:
parent
0742bcc191
commit
caa89b73f9
2 changed files with 62 additions and 8 deletions
|
|
@ -381,11 +381,6 @@ function buildDiagnosticHints(input: {
|
||||||
'Bootstrap submit was rejected because local prompt/bash command queue was not empty.'
|
'Bootstrap submit was rejected because local prompt/bash command queue was not empty.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (textIncludesAny(text, ['no stdin data received in 3s'])) {
|
|
||||||
hints.push(
|
|
||||||
'CLI read empty stdin before bootstrap submit; verify headless teammate runtime flag/env and startup input handling.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (
|
if (
|
||||||
textIncludesAny(text, ['bootstrap_submit_rejected', 'submit rejected by local prompt handler'])
|
textIncludesAny(text, ['bootstrap_submit_rejected', 'submit rejected by local prompt handler'])
|
||||||
) {
|
) {
|
||||||
|
|
@ -401,6 +396,11 @@ function buildDiagnosticHints(input: {
|
||||||
) {
|
) {
|
||||||
hints.push('Parent process timed out waiting for durable bootstrap_submitted evidence.');
|
hints.push('Parent process timed out waiting for durable bootstrap_submitted evidence.');
|
||||||
}
|
}
|
||||||
|
if (textIncludesAny(text, ['no stdin data received in 3s'])) {
|
||||||
|
hints.push(
|
||||||
|
'CLI read empty stdin before bootstrap submit; verify headless teammate runtime flag/env and startup input handling.'
|
||||||
|
);
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
input.livenessKind === 'stale_metadata' ||
|
input.livenessKind === 'stale_metadata' ||
|
||||||
textIncludesAny(text, ['persisted runtime pid is not alive'])
|
textIncludesAny(text, ['persisted runtime pid is not alive'])
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
import { describe, expect, it } from 'vitest';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
buildMemberLaunchDiagnosticsPayload,
|
buildMemberLaunchDiagnosticsPayload,
|
||||||
formatMemberLaunchDiagnosticsPayload,
|
formatMemberLaunchDiagnosticsPayload,
|
||||||
|
getMemberLaunchDiagnosticsErrorMessage,
|
||||||
hasMemberLaunchDiagnosticsDetails,
|
hasMemberLaunchDiagnosticsDetails,
|
||||||
hasMemberLaunchDiagnosticsError,
|
hasMemberLaunchDiagnosticsError,
|
||||||
getMemberLaunchDiagnosticsErrorMessage,
|
|
||||||
} from '@renderer/utils/memberLaunchDiagnostics';
|
} from '@renderer/utils/memberLaunchDiagnostics';
|
||||||
|
import { describe, expect, it } from 'vitest';
|
||||||
|
|
||||||
describe('member launch diagnostics', () => {
|
describe('member launch diagnostics', () => {
|
||||||
it('builds a bounded copy payload from spawn and runtime evidence', () => {
|
it('builds a bounded copy payload from spawn and runtime evidence', () => {
|
||||||
|
|
@ -1180,4 +1179,59 @@ describe('member launch diagnostics', () => {
|
||||||
'Anthropic API error. resolved_behavior_changed:old->new'
|
'Anthropic API error. resolved_behavior_changed:old->new'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('prioritizes durable bootstrap timeout over no-stdin stderr noise', () => {
|
||||||
|
const payload = buildMemberLaunchDiagnosticsPayload({
|
||||||
|
teamName: 'signal-ops',
|
||||||
|
runId: 'run-mailbox-written-no-submit',
|
||||||
|
memberName: 'atlas',
|
||||||
|
spawnEntry: {
|
||||||
|
status: 'error',
|
||||||
|
launchState: 'failed_to_start',
|
||||||
|
hardFailure: true,
|
||||||
|
error:
|
||||||
|
'Teammate process atlas@signal-ops did not submit bootstrap prompt: timed out waiting for bootstrap_submitted; last transport stage: mailbox_bootstrap_written: messageId=bootstrap-atlas-1 Last stderr: Warning: no stdin data received in 3s, proceeding without it.',
|
||||||
|
livenessKind: 'stale_metadata',
|
||||||
|
runtimeDiagnostic: 'persisted runtime pid is not alive',
|
||||||
|
runtimeDiagnosticSeverity: 'warning',
|
||||||
|
updatedAt: '2026-05-19T13:53:36.668Z',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(payload.probableCause).toBe(
|
||||||
|
'Parent process timed out waiting for durable bootstrap_submitted evidence.'
|
||||||
|
);
|
||||||
|
expect(payload.diagnosticHints?.[0]).toBe(
|
||||||
|
'Parent process timed out waiting for durable bootstrap_submitted evidence.'
|
||||||
|
);
|
||||||
|
expect(payload.diagnosticHints).toContain(
|
||||||
|
'CLI read empty stdin before bootstrap submit; verify headless teammate runtime flag/env and startup input handling.'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('prioritizes bootstrap submit rejection over no-stdin stderr noise', () => {
|
||||||
|
const payload = buildMemberLaunchDiagnosticsPayload({
|
||||||
|
teamName: 'signal-ops',
|
||||||
|
runId: 'run-submit-rejected-no-stdin',
|
||||||
|
memberName: 'bob',
|
||||||
|
spawnEntry: {
|
||||||
|
status: 'error',
|
||||||
|
launchState: 'failed_to_start',
|
||||||
|
hardFailure: true,
|
||||||
|
error:
|
||||||
|
'Teammate process bob@signal-ops did not submit bootstrap prompt: timed out waiting for bootstrap_submitted; last transport stage: bootstrap_submit_rejected: submit rejected by local prompt handler retryable=true Last stderr: Warning: no stdin data received in 3s, proceeding without it.',
|
||||||
|
updatedAt: '2026-05-19T13:53:36.668Z',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(payload.probableCause).toBe(
|
||||||
|
'The teammate process observed bootstrap mail, but local prompt submission did not accept the bootstrap turn.'
|
||||||
|
);
|
||||||
|
expect(payload.diagnosticHints?.[0]).toBe(
|
||||||
|
'The teammate process observed bootstrap mail, but local prompt submission did not accept the bootstrap turn.'
|
||||||
|
);
|
||||||
|
expect(payload.diagnosticHints).toContain(
|
||||||
|
'CLI read empty stdin before bootstrap submit; verify headless teammate runtime flag/env and startup input handling.'
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue