feat: operate ChatGPT's new page layout, and fix the related defects #79
No reviewers
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
x/ego-chat!79
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/new-layout-port"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Fixes #77 on top of the fail-fast step (#78). Ego Chat now operates ChatGPT's new page layout, and this PR also fixes the related defects found while diagnosing it.
ChatGPT's new page layout. The driver now operates both layouts. Details are live-read on 2026-09-24/25.
[role="textbox"]inside[data-composer-layout]. The textarea it shows for about two seconds while hydrating counts as still loading.[data-turn-key], and each message unit is split by role.[data-thread-scroll-footer].tail-v2. It matches atail-v1head across layouts by message ID, assistant role and non-blank text.attachment_capture_unsupported_layout.Pro ladder, in the user's order: GPT-6 Pro, then Latest at Extra High (
latest_extra_high, effort stateextra_high_fallback), then GPT-5.6 Sol Pro, then a stop. The planned rung's answer (gpt-6/gpt-5-6-thinking) is silent in downgrade notifications, and a pause convergence accepts it.Nothing sent, said plainly. Every exchange carries
delivery.state(not_sent/confirmed/unknown) and onedelivery.nextAction, and supervision reports the send state. One page reason repeating for ten minutes stops aspre_send_stalledinstead of retrying for 90 minutes. SKILL.md and the MCP instructions tell hosts what to do for each action.Related defects:
model-policy.jsonis read again whenever it changes.broker-statusshowsloadedAtandstale.ego_ensure_model_policyandui-checkused to stop asbound_task_space_identity_changedafter every Ego Lite restart. They now recover the Space through verify and try once more. Their caller timeouts cover all three runs.repin_unboundmode that never composes. The binding must have recorded no Send. No other exchange on it may be running or may have sent, although abandoned attempts with no Send evidence are accepted. Otherwise the exchange stops at once ascreate_once_repin_blockedorcreate_once_repin_failed, both proven pre-Send stops.g-p-<id>andg-p-<id>-<title>. A binding stored in the plain form treated its own page as another chat and opened a new tab on every retry: 128 tabs, about 23 GB in Ego Lite. The driver now identifies a conversation by project and conversation ID, reports the recorded form, and reuses an open tab of the conversation.Verification
npm test: 1522 tests, 1521 pass, 1 skipped.npm run test:ego-monitor148/148.npm run lintclean. A3K fixture regenerated.latest_extra_highwith atail-v2head.responseModelSlugnull because the page's response was gone. That led to the page-read fallback. The next exchange recordedgpt-5-6-thinking, with no downgrade alert.LATEST_ROUTE_LABELS);create_once_repin_failedinstead of retrying;reviewStopWorkflowId, so supervision still reports it as sent.Residual risk, stated in TECH.md: if an abandoned attempt did deliver without the broker seeing it, re-pinning its binding starts a second conversation.