fix: split github contracts from script check
This commit is contained in:
@@ -82,6 +82,20 @@ function deterministicResumeId(taskId: string, prompt: string): string {
|
||||
return `resume_${Bun.SHA256.hash(`unidesk-code-queue-resume:v1\0${taskId}\0${prompt}`, "hex").slice(0, 24)}`;
|
||||
}
|
||||
|
||||
function assertLegacyFrozenWrite(result: { status: number | null; stdout: string; stderr: string; json: JsonRecord | null }, command: string): void {
|
||||
assertCondition(result.status !== 0 && result.json?.ok === false, `${command} should be frozen`, result.json ?? { stdout: result.stdout, stderr: result.stderr });
|
||||
const data = nestedRecord(result.json?.data, []);
|
||||
assertCondition(data.ok === false, `${command} frozen payload should be ok=false`, data);
|
||||
assertCondition(data.frozen === true, `${command} frozen payload should expose frozen=true`, data);
|
||||
assertCondition(data.mutation === false, `${command} frozen payload should be non-mutating`, data);
|
||||
assertCondition(data.degradedReason === "legacy-code-queue-frozen", `${command} should use the legacy frozen reason`, data);
|
||||
assertCondition(data.command === command, `${command} frozen payload should identify the command`, data);
|
||||
const replacement = nestedRecord(data, ["replacement"]);
|
||||
assertCondition(String(replacement.sessionsSteer || "").includes("agentrun v01 sessions steer"), `${command} should point to AgentRun sessions steer`, replacement);
|
||||
const legacy = nestedRecord(data, ["legacy"]);
|
||||
assertCondition(legacy.noDoubleWrite === true, `${command} should document no double-write`, legacy);
|
||||
}
|
||||
|
||||
function assertDryRunPrompt(response: JsonRecord, expectedText: string): void {
|
||||
assertCondition(response.ok === true, "CLI dry-run should succeed", response);
|
||||
const data = nestedRecord(response.data, []);
|
||||
@@ -100,25 +114,26 @@ function assertDryRunPrompt(response: JsonRecord, expectedText: string): void {
|
||||
|
||||
export function runCodeQueueResumeContract(): JsonRecord {
|
||||
const positional = runCli(["codex", "resume", "codex_test_task", "fix the PR conflict", "--dry-run"]);
|
||||
assertDryRunPrompt(positional.json ?? {}, "fix the PR conflict");
|
||||
assertLegacyFrozenWrite(positional, "codex resume");
|
||||
assertCondition(String(positional.json?.command || "").includes("<prompt:redacted>"), "outer command should redact positional resume prompt", positional.json ?? {});
|
||||
assertCondition(!String(positional.json?.command || "").includes("fix the PR conflict"), "outer command must not echo positional resume prompt", positional.json ?? {});
|
||||
|
||||
const stdin = runCli(["codex", "resume", "codex_test_task", "--prompt-stdin", "--dry-run"], "stdin resume prompt\n");
|
||||
assertDryRunPrompt(stdin.json ?? {}, "stdin resume prompt\n");
|
||||
assertLegacyFrozenWrite(stdin, "codex resume");
|
||||
assertCondition(!stdin.stdout.includes("stdin resume prompt"), "frozen resume must not echo stdin prompt", { stdout: stdin.stdout });
|
||||
|
||||
const promptFile = join(tmpdir(), `unidesk-code-queue-resume-${process.pid}.txt`);
|
||||
writeFileSync(promptFile, "file resume prompt", "utf8");
|
||||
try {
|
||||
const fromFile = runCli(["codex", "resume", "codex_test_task", "--prompt-file", promptFile, "--dry-run"]);
|
||||
assertDryRunPrompt(fromFile.json ?? {}, "file resume prompt");
|
||||
assertLegacyFrozenWrite(fromFile, "codex resume");
|
||||
assertCondition(!fromFile.stdout.includes("file resume prompt"), "frozen resume must not echo file prompt", { stdout: fromFile.stdout });
|
||||
} finally {
|
||||
unlinkSync(promptFile);
|
||||
}
|
||||
|
||||
const duplicateSource = runCli(["codex", "resume", "codex_test_task", "positional", "--prompt-stdin", "--dry-run"], "stdin\n");
|
||||
assertCondition(duplicateSource.status !== 0, "duplicate prompt source should fail", duplicateSource.json ?? { stdout: duplicateSource.stdout });
|
||||
assertCondition(String(nestedRecord(duplicateSource.json, ["error"]).message || "").includes("exactly one prompt source"), "duplicate prompt source error should be explicit", duplicateSource.json ?? {});
|
||||
assertLegacyFrozenWrite(duplicateSource, "codex resume");
|
||||
|
||||
const help = runCli(["codex", "help"]);
|
||||
const usage = Array.isArray(nestedRecord(help.json?.data, []).usage) ? nestedRecord(help.json?.data, []).usage as unknown[] : [];
|
||||
@@ -291,7 +306,7 @@ export function runCodeQueueResumeContract(): JsonRecord {
|
||||
return {
|
||||
ok: true,
|
||||
checks: [
|
||||
"resume positional/stdin/file dry-runs",
|
||||
"legacy resume positional/stdin/file dry-runs are frozen",
|
||||
"bounded disclosure and outer command redaction",
|
||||
"non-dry-run sends resumeId and omits prompt from output",
|
||||
"terminal resume accepted with thread reuse metadata",
|
||||
|
||||
Reference in New Issue
Block a user