test(pi): arm delayed prompt proof explicitly

This commit is contained in:
2026-08-26 00:10:22 +08:00
parent 019cbb115a
commit 4b75d201b8
5 changed files with 32 additions and 1 deletions

View File

@@ -74,6 +74,7 @@ type LocalProofProvider = {
releaseChildren(): void;
releaseParents(): void;
releaseAll(): void;
armDelayedPrompt(): void;
armDelayedCompaction(): void;
close(): Promise<void>;
};
@@ -486,6 +487,7 @@ async function startLocalProofProvider(mode: ProofProviderMode): Promise<LocalPr
const held = new Set<HeldProviderResponse>();
let closed = false;
let closeFlight: Promise<void> | null = null;
let delayedPromptArmed = false;
let delayedCompactionArmed = false;
const server: Server = createServer(async (request, response) => {
response.once('error', () => undefined);
@@ -560,7 +562,8 @@ async function startLocalProofProvider(mode: ProofProviderMode): Promise<LocalPr
respondWithText(response, model, 'RESILIENCE_COMPACTION_SUMMARY');
return;
}
if (role === 'parent' && latestUserMessageContains(body, 'BACKGROUND_ACTIVE')) {
if (role === 'parent' && delayedPromptArmed) {
delayedPromptArmed = false;
const entry = { role, response } satisfies HeldProviderResponse;
held.add(entry);
response.once('close', () => held.delete(entry));
@@ -659,6 +662,7 @@ async function startLocalProofProvider(mode: ProofProviderMode): Promise<LocalPr
releaseChildren: () => release('child'),
releaseParents: () => release('parent'),
releaseAll: () => release(),
armDelayedPrompt: () => { delayedPromptArmed = true; },
armDelayedCompaction: () => { delayedCompactionArmed = true; },
close: async () => {
if (closed) return;
@@ -1897,6 +1901,13 @@ export function armFinalAsarResilienceCompactDelay(): { delayMs: number } {
return { delayMs: PROOF_MUTATION_CONFIRMATION_DELAY_MS };
}
export function armFinalAsarResiliencePromptDelay(): { delayMs: number } {
const run = resilienceCompositionRun;
if (!run) throw new Error('PI resilience proof is not running');
run.provider.armDelayedPrompt();
return { delayMs: PROOF_MUTATION_CONFIRMATION_DELAY_MS };
}
export async function restartFinalAsarResilienceOther(): Promise<PiReleaseResilienceStatus> {
const run = resilienceCompositionRun;
if (!run) throw new Error('PI resilience proof is not running');

View File

@@ -90,6 +90,7 @@ import {
} from '../api/coding-composition';
import {
armFinalAsarResilienceCompactDelay,
armFinalAsarResiliencePromptDelay,
abortFinalAsarResilienceTarget,
disposeFinalAsarResilienceTarget,
finishFinalAsarProxyCompositionProof,
@@ -905,6 +906,7 @@ type PiReleaseProofAction =
| 'resilience.start'
| 'resilience.status'
| 'resilience.arm-compact-delay'
| 'resilience.arm-prompt-delay'
| 'resilience.idle-status'
| 'resilience.restart-other'
| 'resilience.dispose-target'
@@ -974,6 +976,9 @@ export async function runPiReleaseProofE2E(action: PiReleaseProofAction) {
if (action === 'resilience.arm-compact-delay') {
return { action, packagedMain, resilience: armFinalAsarResilienceCompactDelay() };
}
if (action === 'resilience.arm-prompt-delay') {
return { action, packagedMain, resilience: armFinalAsarResiliencePromptDelay() };
}
if (action === 'resilience.idle-status') {
return { action, packagedMain, resilience: await getFinalAsarResilienceIdleStatus() };
}