From 4ae26deb1100155c080d86d6d925d152c001efba Mon Sep 17 00:00:00 2001 From: Merge Sim Date: Wed, 9 Sep 2026 21:47:39 -0700 Subject: [PATCH] Register completed turn duration reliability gate --- config/reliability-gates.jsonc | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/config/reliability-gates.jsonc b/config/reliability-gates.jsonc index bd1b3c20ad6..c58a391470d 100644 --- a/config/reliability-gates.jsonc +++ b/config/reliability-gates.jsonc @@ -10,6 +10,95 @@ } }, "gates": [ + { + "id": "agent-session.completed-turn-duration", + "title": "Completed turn duration survives client recovery and history pagination", + "maturity": "experimental", + "protection": "partial", + "owner": "agent-session-runtime", + "layer": "shared-and-renderer-unit", + "surfaces": ["native chat", "structured agent history", "structured agent subscriptions"], + "platforms": ["macos", "linux", "windows"], + "providers": ["local", "ssh", "remote-runtime", "mobile"], + "coveredPlatforms": ["macos"], + "coveredProviders": ["local"], + "coverageNotes": "Deterministic provider, journal recovery, RPC projection and shared renderer tests run on macOS. Shared logic serves desktop and mobile; these tests do not prove native mobile or real SSH transport. Local/daemon PTY input, geometry and WSL process launch are unaffected.", + "motivatingLinks": ["https://github.com/stablyai/orca/pull/19695"], + "invariant": "An observed completed turn retains the same host-recorded duration and initiating user-message attribution through client reload, settlement retry and loading older history; older clients receive the compatible item carrier.", + "oracle": "Render a host-settled duration without observing completion locally; preserve an exit at 2000 through failed settlement at 60000 and later retry; retain a seven-second older turn beyond 256 submitted turns; prune aliases with removed user items and preserve alias identity during item-only streaming.", + "commands": [ + "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/main/codex/codex-requested-close-turn-timing.test.ts src/main/native-chat/agent-session-wire/structured-agent-session-unexpected-exit.test.ts src/shared/structured-agent-session-turn-timing-retention.test.ts src/shared/structured-agent-session-turn-timing.test.ts src/main/codex/codex-structured-journal-translation-turn-lifecycle.test.ts src/main/runtime/rpc/methods/structured-agent-session-turn-item-capability.test.ts src/renderer/src/components/native-chat/NativeChatMessageList.turn-timing.test.tsx" + ], + "testFiles": [ + "src/main/codex/codex-requested-close-turn-timing.test.ts", + "src/main/native-chat/agent-session-wire/structured-agent-session-unexpected-exit.test.ts", + "src/shared/structured-agent-session-turn-timing-retention.test.ts", + "src/shared/structured-agent-session-turn-timing.test.ts", + "src/main/codex/codex-structured-journal-translation-turn-lifecycle.test.ts", + "src/main/runtime/rpc/methods/structured-agent-session-turn-item-capability.test.ts", + "src/renderer/src/components/native-chat/NativeChatMessageList.turn-timing.test.tsx" + ], + "assertionRefs": [ + { + "file": "src/main/codex/codex-requested-close-turn-timing.test.ts", + "assertions": ["keeps the first exit receipt when retry requestedClose=%s"] + }, + { + "file": "src/main/native-chat/agent-session-wire/structured-agent-session-unexpected-exit.test.ts", + "assertions": [ + "retains the exit receipt through failed settlement and a later loaded retry" + ] + }, + { + "file": "src/shared/structured-agent-session-turn-timing-retention.test.ts", + "assertions": [ + "keeps an older page duration after the recent submission budget fills", + "drops an old alias once rewind removes its user item" + ] + }, + { + "file": "src/renderer/src/components/native-chat/NativeChatMessageList.turn-timing.test.tsx", + "assertions": ["renders a host-settled duration without ever clocking the turn locally"] + } + ], + "evidenceRuns": [ + { + "date": "2026-09-09", + "runner": "local", + "platform": "macos", + "command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/main/codex/codex-requested-close-turn-timing.test.ts src/main/native-chat/agent-session-wire/structured-agent-session-unexpected-exit.test.ts src/shared/structured-agent-session-turn-timing-retention.test.ts src/shared/structured-agent-session-turn-timing.test.ts src/main/codex/codex-structured-journal-translation-turn-lifecycle.test.ts src/main/runtime/rpc/methods/structured-agent-session-turn-item-capability.test.ts src/renderer/src/components/native-chat/NativeChatMessageList.turn-timing.test.tsx", + "result": "passed", + "durationSeconds": 6.29, + "summary": "51 tests passed across seven files at 45036bb52c plus coordinator-owned compatibility/timing/rewind edits; working-state evidence, not final commit signoff." + } + ], + "runtimeBudget": { + "p95Seconds": 30, + "scope": "Deterministic focused tests without an app launch; initial target budget pending CI soak." + }, + "flakeHistory": { + "status": "not-started", + "evidence": "No CI soak history for this combined gate." + }, + "redGreenEvidence": { + "status": "complete", + "evidence": "Before fixes, failed settlement stored 60000 instead of observed 2000 and older-page duration was undefined instead of seven seconds after 257 submissions. The focused regressions pass after fixes." + }, + "performanceBudget": { + "required": true, + "evidence": "No polling, process fanout or new timer. Alias retention follows loaded user items plus 256 recent records; lookup uses a Set, removal/reset prunes aliases, and item-only stream batches retain the submission array identity." + }, + "knownGaps": [ + "This deterministic gate does not launch Electron or prove a full app restart; exact-head manual screenshots are separate PR evidence.", + "Native mobile, live SSH/relay transport and Windows/Linux execution are not exercised by this command.", + "Accumulated-history wall-clock profiling and CI soak remain unmeasured." + ], + "promotionCriteria": [ + "Complete CI soak without unexplained flakes and retain the value-based retry, pagination and rendering oracles." + ], + "demotionRule": "Keep experimental until soak and platform evidence support promotion; do not relax value or identity assertions to hide failures." + }, + { "id": "agent-session.history-forward-read-budget", "title": "Journal catch-up reads only the next page and one lookahead row",