Skip to content

fix(browser): wait for durable ChatGPT conversation URLs - #334

Merged
steipete merged 4 commits into
steipete:mainfrom
dbachko:test-oracle-pro-research
Jul 23, 2026
Merged

fix(browser): wait for durable ChatGPT conversation URLs#334
steipete merged 4 commits into
steipete:mainfrom
dbachko:test-oracle-pro-research

Conversation

@dbachko

@dbachko dbachko commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

  • ignore ChatGPT's transient /c/WEB:<request-id> route until the durable conversation URL appears
  • centralize stable conversation URL extraction across response capture, live-tab harvesting, and reattachment
  • cover the transient-to-durable navigation sequence with regression tests

Root cause

ChatGPT can briefly navigate to /c/WEB:<request-id> after submission before replacing it with /c/<conversation-uuid>. Oracle's loose conversation URL matcher accepted the transient route and persisted WEB as the expected conversation ID. The completed assistant turn belonged to the durable UUID, so response capture rejected it as out of scope and continued polling until timeout even though the answer was visible and terminal.

The shared extractor now requires the conversation path segment to end before /, ?, or #, which rejects the colon-delimited transient route. Monitoring continues until the durable URL is available, and reattach/live-tab helpers use the same rule.

This runtime fix is separate from #318, which corrects display and provenance for the bare Pro picker label.

Validation

  • pnpm check
  • focused browser suite: 303 passed, 1 skipped
  • full suite: 1,591 passed, 43 skipped
  • live GPT-5.6 Sol browser run: explicitly selected and verified, completed in 13.5 seconds
  • live Pro browser run: explicitly selected and verified, completed in 16.4 seconds
  • live Pro Deep Research run: completed in 2 minutes 47 seconds and reattached with validated report/transcript artifacts
  • pre-fix stuck GPT-5.6 Sol session: reattached and marked completed with the patched URL scope

No live test clicked ChatGPT's Answer now control.

Fixes #333.

@kesslerio

Copy link
Copy Markdown

Validated this against my real Linux manual-login remote-browser route, rather than direct CDP.

Before this patch, released Oracle 0.16.0 could submit a one-line prompt and save the completed ChatGPT answer in the local transcript, but then kept polling until it marked the session zombie/error.

With commit 2157ab7 on the same persistent signed-in profile and the same oracle serve -> remote-client route:

  • a server-route smoke completed and captured the expected answer in 28.0s;
  • after pinning that build as my temporary local hotfix, the normal remote-client smoke completed and captured the expected answer in 15.3s.

Local validation:

  • pnpm vitest run tests/browser/conversationUrlMonitor.test.ts tests/browser/reattach.test.ts — 21 passed
  • pnpm run build — passed

This fixes the transient-conversation-URL capture failure I was seeing. I will keep the local hotfix until a release contains this commit.

@kesslerio kesslerio left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 — src/browser/reattachability.ts:24 remains outside this PR's shared stable-URL contract.

The broad /(?:^|\/)c\/[^/]+/ check still accepts transient /c/WEB:<request-id> routes as recoverable. As a result, hasRecoverableChatGptConversation() can still approve stale metadata for automatic reopening, even though the new parser rejects that route in response capture and other reattachment helpers.

Please route this gate through isStableConversationUrl() / extractStableConversationIdFromUrl() and add a regression test proving a WEB: URL is not recoverable without a durable conversation id.

@clawsweeper

clawsweeper Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: fix(browser): wait for durable ChatGPT conversation URLs This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@steipete
steipete merged commit 19a0b79 into steipete:main Jul 23, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Browser: completed ChatGPT response is never captured when thinking indicator is absent

3 participants