The tree opened into nothing, and 1003 tests could not see it - #218
Merged
Merged
Conversation
Phase 0 of the fix plan: the probes that need a running Studio. Studio 1007 green, 1003 before - and the four numbers are the point, because every defect below was invisible to every one of them. **Finding 20 is answered by measurement.** A parse error IS marked: a squiggle one character wide, under the first letter of the token, while a missing table is underlined across its whole name. That is why the report said nothing was marked. The fix is the token's length rather than the wiring, and it is NOT in this commit - it belongs with the underline work. **The tree opened into an empty row.** Phase 5 gave a table a placeholder so that it would draw an expander, and the expander opened onto nothing. Two links were missing, one in each direction: - view to model: the row's IsExpanded is bound to the node's in a STYLE setter, and a binding in a style setter does not push back. The row opened; the model never heard; the columns were never read. - model to view: Children was a List, so replacing the placeholder with the columns notified nobody. Every test read Children directly and set IsExpanded itself - which is the ViewModel's side of a binding that only ever worked one way. Both halves are now held by a fixture that says so. **Create was hidden exactly where its only item applies.** Phase 3's two halves contradicted each other: a trigger is created on a table, and the submenu holding that item was not shown on one. **The read-only banner was cut off mid-sentence**, and it had asked to wrap since it was written. The cause is the shape findings 26 and 31 had: text that wraps or trims inside a horizontal StackPanel, which measures its children with infinite width - so it can do neither. A rule now names that shape, and it found four more of it: the export, import and query error banners, and the query read-only banner. An element with a width of its own is exempt, because a width is an edge - which is how the nine settings labels of phase 6 work. **The strikethrough did nothing.** A decoration set from a row style never reaches the cell text, because the cells build their own TextBlocks. What a deleted row actually gets - dimmed, with the warning colour down its left edge - is what the screen shows, and the style that claimed the rest is deleted rather than left saying something untrue. The case records the measurement. What automation could NOT answer: the MCP click prefers the Invoke pattern, which bypasses real pointer routing, so the palette's click-outside and click-to-run and the double click that opens a table's data are unverified. The double click was seen to be broken by the placeholder - the row toggles its own expansion - and the change for it is written but unmeasured. Both need a hand on the mouse. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 0 of the fix plan: the probes that need a running Studio. Studio 1007 green, 1003 before —
and those numbers are the point, because every defect below was invisible to all of them.
What the run confirmed
Every phase-1 answer Studio could show was right: the recent list carried the LSM folder
database, the tree said 7 indexes where it used to say 8, the footer said page 1, the drop
confirmation quoted with straight quotes. The phase-3 menus were all there — Edit ▸ Find and
replace…, View ▸ Database…, a folder offering only Create and Refresh, a connection root offering
Close Database. A table opens into
Id INTEGER,CustomerId INTEGER, … with the NOT NULL names inbold.
Finding 20, answered by measurement
A parse error is marked: a squiggle one character wide, under the first letter of the token —
while a missing table is underlined across its whole name. That is why the report said nothing was
marked. The fix is the token's length, not the wiring, and it is not in this PR.
What the pass broke open
IsExpandedis bound to the node's in a style setter, which does not push back — so the model never heard; andChildrenwas aList, so replacing the placeholder notified nobody. Every test readChildrendirectly and setIsExpandeditself — the ViewModel's side of a binding that only ever worked one wayWhat automation could not answer
The MCP click prefers the Invoke pattern, which bypasses real pointer routing — so the palette's
click-outside and click-to-run (finding 18) and the double click that opens a table's data are
unverified. The double click was seen to be broken by the placeholder (the row toggles its own
expansion); the change for it is written but unmeasured. Both need a hand on the mouse.
🤖 Generated with Claude Code