mirror of https://github.com/garrytan/gstack.git
49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
/**
|
|
* plan-ceo-review plan-mode smoke (gate, paid, real-PTY).
|
|
*
|
|
* Asserts: when /plan-ceo-review is invoked in plan mode, the skill reaches
|
|
* a terminal outcome that is either:
|
|
* - 'asked' — skill emitted its Step 0 numbered prompt (scope mode
|
|
* selection, or the routing-injection prompt that runs
|
|
* before Step 0)
|
|
* - 'plan_ready' — skill ran end-to-end and surfaced claude's native
|
|
* "Ready to execute" confirmation
|
|
*
|
|
* FAIL conditions: silent Write/Edit before any prompt, claude crash,
|
|
* timeout.
|
|
*
|
|
* Replaces the SDK-based test that never worked: the SDK's canUseTool
|
|
* interceptor on AskUserQuestion never fires in plan mode because plan
|
|
* mode renders its native confirmation as TTY UI, not via the
|
|
* AskUserQuestion tool. The real PTY harness observes the rendered
|
|
* terminal output directly.
|
|
*
|
|
* See test/helpers/claude-pty-runner.ts for runner internals.
|
|
*/
|
|
|
|
import { describe, test, expect } from 'bun:test';
|
|
import { runPlanSkillObservation } from './helpers/claude-pty-runner';
|
|
|
|
const shouldRun = !!process.env.EVALS && process.env.EVALS_TIER === 'gate';
|
|
const describeE2E = shouldRun ? describe : describe.skip;
|
|
|
|
describeE2E('plan-ceo-review plan-mode smoke (gate)', () => {
|
|
test('reaches a terminal outcome (asked or plan_ready) without silent writes', async () => {
|
|
const obs = await runPlanSkillObservation({
|
|
skillName: 'plan-ceo-review',
|
|
inPlanMode: true,
|
|
timeoutMs: 300_000,
|
|
});
|
|
|
|
if (obs.outcome === 'silent_write' || obs.outcome === 'exited' || obs.outcome === 'timeout') {
|
|
throw new Error(
|
|
`plan-ceo-review plan-mode smoke FAILED: outcome=${obs.outcome}\n` +
|
|
`summary: ${obs.summary}\n` +
|
|
`elapsed: ${obs.elapsedMs}ms\n` +
|
|
`--- evidence (last 2KB visible) ---\n${obs.evidence}`,
|
|
);
|
|
}
|
|
expect(['asked', 'plan_ready']).toContain(obs.outcome);
|
|
}, 360_000);
|
|
});
|