Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions evidence/primary-selection-gesture-20261006/QUALIFIED.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"scope": "Primary Screen selection lifecycle and original auto-scroll, with real native source Apps/driver/menu. No sole physical/menu cause, installed Toad or latency claim.",
"source_sha256": {
"src/textual/screen.py": "b02f5b4849bbcc8ef911c727e66391fe8593c993a0aacdd31adf5059e7b424be",
"tests/test_primary_selection_gesture.py": "6f7985f2f3ac83b1519bc5d551435ea58c52ebfefa8fb5dba87c2724c2d88685"
},
"keeper_sha256": {
"before.json": "3541646b10b31f7393a22089b3a3a43733b94f9bf1f2f26a6b5995746a29102f",
"after.json": "5ee17648efcc8af82f65032c65301a02ddaf0c85a10e7b7d706d477f528e215b",
"changed-family.log": "a36a608e53a572ab92e218dafd903d58449b3c3809ea2a4afa80236961204da4",
"run-async-final.log": "070a0a1a384f8986bf91c5e6a28d1adb0cf8744a853fe1ce7e8ca4541698f8d4",
"suspension.log": "808dfae1ed8f9fdc74e04e9f4daf48a799b85ea62a74ce685b5f7c7368c58182"
},
"checks": {
"initial_batch": "24 passed, 1 authored startup fixture failure in 26.72s",
"corrected_original_run_async": "1 passed in 1.21s",
"changed_screen_suspension": "1 passed in 1.19s"
},
"preserved": "Frozen a59/2d wheels, menu02 prepared attempt and originals unchanged.",
"provider_inputs": 0,
"installed_changes": 0,
"physical_runs": 0
}
20 changes: 20 additions & 0 deletions evidence/primary-selection-gesture-20261006/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Primary Screen selection gesture

Screen alone admits its pointer selection range on a primary press and ends it on a primary release. Secondary input continues through the original recipient/capture/focus/menu route; it cannot start or end Screen's primary gesture or emit its TextSelected boundary.

The existing primary press offset and pointer range now supply _selecting. Deleted its separate reactive value and writes, including the range-projection assignment which could revive a released gesture. The original press/range watchers stop the existing auto-scroll timer when either custody or range retires; the timer callback borrows the same active gesture. The range remains available after release for copy and layout projection. Screen suspension retires the press too: its release will route to another Screen, so the covered Screen cannot retain auto-scroll custody. Copyable ranges and pending projections remain intact.

Input/TextArea own separate editor selection and capture models; this change concerns Screen's selectable-content range. Toad/visual consumers read _selecting and need no alternate state or API. before.json uses the existing Package AST across native production/tests and read-only Toad production/tests/tools; dynamic external subclasses remain unresolved.

Qualified source App scope:

- A secondary edge drag acquires neither a selection nor its auto-scroll timer.
- Secondary release during a primary drag preserves its range, primary press and completion ownership.
- Actual run_async/HeadlessDriver primary edge movement scrolls through the existing timer; primary release stops it and range projection cannot revive the gesture.
- Right capture/release and a real pushed menu deliver normally while preserving completed primary text.
- Screen suspension stops active primary scrolling; returning retains copyable text without resurrecting the press.
- Existing selection/copy/coalescence and endpoint-retirement checks pass.

Initial batch: 24 passed, one authored run_async fixture failed (26.72s). Source shows its mounted callback preceded resized arrangement; the fixture tried to scroll before its original max_scroll_y was available, so the requested row was not its actual press target. The corrected fixture borrows the existing publication before scrolling and asserts scroll/recipient identity: that exact control passes (1.21s). The separate changed Screen-suspension control passes (1.19s). The production press/move/release correction was unchanged by the fixture repair. Both logs remain preserved. No passing controls were repeated for count.

before.json/after.json: 249 native modules, 466 -> 467 tests, dependency Toad 288 production/403 tests/40 tools, zero omissions. Screen/visual/Toad readers derive activity through the same property; no writer or reactive subscription to Screen._selecting was found. Toad suspension consumers keep their original base behavior. Input/TextArea names are distinct owners, not competing Screen facts. This is a source counterexample; no sole physical/menu causal claim. Frozen a59/2d wheels and the prepared menu02 App remain unchanged. No package, installed pin, provider or physical operation.
Loading
Loading