.omo/evidence/20260801-runtime-fallback-status-drift/README.md
This change affects the OpenCode-connected runtime-fallback hook when OpenCode emits a session.status event whose status type is retry. The intended behavior is immediate fallback classification and dispatch for Free usage exceeded, subscribe to Go. Session error handling, fallback chain selection, prompt replay, and the first-prompt watchdog remain otherwise unchanged.
The drift fix shares the existing model-core runtime-fallback retryable regex set with both status-path classifiers. The auto-retry extractor retains its additional retrying in, usage limit, and limit reached signals.
bun test packages/omo-opencode/src/hooks/runtime-fallback packages/model-corefocused-tests-summary.txtbun run typechecktypecheck-after-install.txtinitial-verification-failure.txtbun testfull-tests-summary.txtinitial-verification-failure.txtbun installbun-install-summary.txtbash scripts/lib/common.sh --self-check from /Users/yeongyu/local-workspaces/omo/.agents/skills/opencode-qaopencode-qa-common-self-check.txtbash scripts/sse-hook-probe.sh --self-test from the opencode-qa skill directoryopencode-sse-hook-probe.txtbun .omo/evidence/20260801-runtime-fallback-status-drift/runtime-fallback-hook-probe.tsruntime-fallback-hook-probe.tsruntime-fallback-hook-probe.txtsession.created followed by the exact mocked session.status retry event through its public event handler, and assert one immediate abort plus one fallback prompt dispatch to openai/gpt-5.4.opencode-before.txtopencode-after.txt21932.git_master fields to the touched test fixture.bun install restored the worktree package links.origin/dev, the full suite passed: 12,665 tests, 3 expected skips, 0 failures.server.connected from /event.Free usage exceeded, subscribe to Go immediately, recorded one abort, and dispatched one prompt using openai/gpt-5.4 with the persisted user text.The deterministic tests cover both classifier seams named in issue #6538 and the consumer behavior that previously returned through the non-matching diagnostic path. The shared-array identity test prevents the OpenCode status fallback list from becoming a separate copy again. The model-core extractor now consumes the same canonical array directly, so future additions to that runtime-fallback set automatically reach both status checks.
The public hook probe exercises the real runtime-fallback module boundary and dispatch flow, not only a standalone regex. The SSE probe separately proves OpenCode lifecycle event plumbing in an isolated harness. The unchanged live DB count demonstrates that QA did not pollute the user's OpenCode state.
full-tests-summary.txt.Low. The change broadens the auto-retry status extractor to every pattern already accepted by the runtime-fallback session-error classifier. This is intentional drift prevention, and focused plus full-suite coverage found no behavior regressions. A provider can still introduce a new retry phrase not represented in the canonical pattern set, which would continue to use the existing non-matching diagnostic until classified.