Skip to content

P1022: migrate stale Core test callers and verify main pushes - #1368

Closed
trissim wants to merge 49 commits into
mainfrom
work/queue-toad-fix--P1022
Closed

trissim wants to merge 49 commits into
mainfrom
work/queue-toad-fix--P1022

Conversation

@trissim

@trissim trissim commented Oct 30, 2026 •

Copy link
Copy Markdown

Summary

13 files, +173/-125 relative to main c72556c285cde225a1ab63ba9ad1762f03852ddf. Sixteen commits are visible because the seven original checkpoints and their rebased equivalents both remain ancestors: the published history was retained so this update could use a normal fast-forward push without a force-push. Current head: e65569ef0e86b2e6d36d1f9e2aee211083d2c5b8.

P1022 repairs retired Core/history callers and restores main-push verification. This is a source delivery, not a green-suite or resolved-hang claim.

Read-work ownership

Before: VisibleReadMarking kept an optional private worker; tests called a deleted .marking facade. The first public rename still left None duplicating the existing NothingToRead answer.

After: public read_worker starts as NothingToRead, which is finished and has an awaitable no-work wait(). Real ReadWork installs Textual's worker. mark_visible asks only .is_finished. All seven related accesses use that operation; there is no nullable guard, compatibility alias or shadow marking flag. Unrelated ACP-log input reading remains separate.

IDEN-3: fact=no painted-read operation; at=src/toad/widgets/message_notifications.py:106; derive=the existing NothingToRead member; by=initialize that value and call the shared operation surface. Paper1 §1 and Theorems 4.6/4.7: renaming an outside encoding does not remove it.

Navigation and exact painted-read behavior

The partial-paint test still checks the initial painted set exactly against each message's ledger membership, then separately waits for each previously unread message after navigating to its text. The send-back's test-owned capture_range replacement, restore_reader_ranges transaction and request_preparation call are deleted. It now uses real page scrolling and the existing layout/navigation owners, then history.reveal_message_head and show_fragment.

The divider case waits on the read operation while proving LAST remains unread. Peer replacement intercepts HistoryViews.mark_page_read, preserving the captured page identity, and uses CommandTarget.named for pending counts. Hidden refresh preserves main's RouteSelection.root_is_current no-read probe and settled-reader wait.

test used to build its own reader range
then congratulated navigation for reaching it

Core declarations replace retired facades

Before After
Deleted seen_sequences and local forwarding helpers ReadLedger.cursor(...).for_conversation(...), exact declared unread state
SessionRevision.observe(None) NoSessionObservation()
Unsealed context tuple and invented turn identity Captured ContextManifestPage, actual private registry entry, TurnId.mint()
Deleted WireHistory.messages/source/style facades Fragment message and page loader owners
Bare peer target CommandTarget.named("peer")
Old bus log bytes and chat status views.latest_sequence() and thread_status

Main already owns Checkout(project) and the NativeContextData migration; both are retained. The redundant Checkout import from replaying the old checkpoint was removed. Legitimate MessagePage.messages records are not deleted merely because their attribute spelling matches the retired facade.

Annotation identity versus mounted navigation

The context-tree case uses the real workspace application and ContextExplorer. Same-section reconciliation still requires native cursor/scroll retention. A correction moving model labels into the human section retires the old native row; the surviving detail selection must rebind to the exact corrected short annotation, not manufacture cursor navigation across a retired row. This is the commander-approved contract.

Main-push CI

Adds push on main, event-correct checkout/base/head expressions, and cancel-in-progress: ${{ github.event_name != 'push' }}. Current main's six-way sharding is retained; main pushes are not cancelled by later pushes.

Evidence and remaining acceptance

  • Original three failures reproduced on main: 3 failed / 33.4 seconds / RC1.
  • 3001ecc75: 6 passed / 3 failed / 112.86 seconds / RC1; all original three passed.
  • 3e7dac514: 6 passed / 6 failed / 209.74 seconds / RC1.
  • fe378600c: all twelve outcomes retained, 9 passed / 3 failed. Original three passed. Remaining failures were partial-paint, context-tree correction, and peer replacement; subsequent source corrections address them but have not been rerun.
  • Current head: git diff --check clean; whole-tree .marking search has zero hits. Partial-paint has zero calls to the rejected range/preparation methods. Targeted NRA AST owner/consumer reproof completed with zero parse omissions, including Textual's worker owner. Dynamic binding is not proved by that syntax result.
  • Current main was fetched/rebased; hidden-refresh conflict resolved preserving both owners' changes. Local head equals git ls-remote at publication; hosted PR readback confirms the exact same head and MERGEABLE.
  • No author test batch at this head, per the latest order. Integration/hosted execution still owns acceptance.
  • The original 120-second tests/conftest.py:93 parent wait remains unqualified. Passing narrow selections did not establish that child hang's cause or removal.
  • No installed application/live provider acceptance is claimed.

Retained local evidence: /home/ts/.cache/agent-scratch/queue-toad-fix/p1022-publish-owned-navigation.log, p1022-final-source-and-pr.log, p1022-owner-reproof-before.jsonl, p1022-owner-reproof-after.jsonl, and the historical failing-run logs. No proof executable was added to the repository.

Assumed: current declared Core APIs are the integration target; annotation detail and mounted cursor remain separate owners; no additional author test execution is authorized. These assumptions are not substitutes for the outstanding hosted and application run.

trissim and others added 24 commits October 30, 2026 03:02
Core and Toad typed these values weeks ago; the tests kept the old shapes
and have failed on main since:
- ProjectFileLink requires original_root (bb041c3, 10-15)
- terminal_attention.program is a method
- Checkout replaced str worktrees (3af6ec8f42, 10-26)
- PermissionPresentation.admit became for_request (e8099ab, 10-17)
- observations bind through agent_binding
- AssistantMessage.content is ReportedParts; tool call ids are ToolCallId
- 'no saved session' is NoSessionObservation, not observe(None)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbFMSoWgC3ZwKzjT4SwMDu
The cancellation test's fake binding copied AgentBase.matches_agent and
invalidate_observation (toad/agent.py:45,84); it is now an AgentBase member
that implements only the abstract send_prompt. The usage test passes
TerminalAttention, whose static program() reads TERM_PROGRAM, instead of
re-spelling it as a lambda.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbFMSoWgC3ZwKzjT4SwMDu
Under the Vim profile Terminal's own ScrollView arrow bindings gained
hjkl spellings, and NavigationKey preemption scrolled the view instead
of writing j/k/h/l to the child. Terminal now composes textual's
NativeTextKeys (OpenHCSDev/textual#214), so its bindings project in
EditingMode; the hand-written allows_application_commands override is
deleted because the capability derives it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbFMSoWgC3ZwKzjT4SwMDu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbFMSoWgC3ZwKzjT4SwMDu
Carry NoSessionObservation and Checkout call migrations from #1364; delete both seen_sequences test forwarders and inspect conversation cursors directly. Restore main-push verification and its push-specific base/head selection.
Follow declared types in nine stale model tests
…keys

Terminal owns printable keys through NativeTextKeys
…--toad

P1010: derive history Vim scrolling from arrow identities
Replace sidebar worker absence with a nominal unscheduled value
P928: prepare the Neovim artifact the editor launches
P1032: repaint channel members only for changed pins
P1015: give each Toad app its own launch inputs and lifetime
…toad

Consume page-owned message evidence in wire fragments
trissim and others added 11 commits October 30, 2026 14:00
…l main

textual#215 gave KeyDeclaration the KeyDeclarationType metaclass, while
Action also inherits DeclaredFamily's FamilyMeta; neither metaclass
subclasses the other, so `import toad.widget_actions` raises a metaclass
conflict and agent-comms' debt-src/debt-tools die importing the Toad
cutover tools on every head. KeyFamilyMeta(FamilyMeta, KeyDeclarationType)
is the one class both bases require; same lines as toad#1338's fix, so its
merge of main resolves to them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbFMSoWgC3ZwKzjT4SwMDu
Give Action one metaclass with both parents so Toad imports on Textual main
Carry NoSessionObservation and Checkout call migrations from #1364; delete both seen_sequences test forwarders and inspect conversation cursors directly. Restore main-push verification and its push-specific base/head selection.
@trissim
trissim marked this pull request as ready for review October 30, 2026 18:49
Copilot AI balanced review requested due to automatic review settings October 30, 2026 18:49
@trissim
trissim enabled auto-merge October 30, 2026 18:49

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

trissim commented Nov 1, 2026

Copy link
Copy Markdown
Author

Closing as obsolete: this is almost entirely suite migrations, and since #1397 (c5ba1fd) the full suite runs only for release qualification (suite: if: inputs.release_qualification in ci.yml). Its push-on-main CI trigger also goes against main's deliberate pull_request/workflow_dispatch-only CI. The one source change renames a private _read_worker for the tests' benefit and fixes no defect. Stale-backlog pass at Tristan's request.


Generated by Claude Code

@trissim trissim closed this Nov 1, 2026
auto-merge was automatically disabled November 1, 2026 21:34

Pull request was closed

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.

2 participants