Five reports from the running GUI: a lost control, a colour, a dialog and a name - #13
Merged
Merged
Conversation
…anel A step row was a horizontal stack, and such a panel hands every child its full desired width and lets the overflow run past its container. Measured on the default 1040 window before the change: the row wanted 439 logical px where the middle column had 331, so the unit list ended mid word and the remove button was laid out 108 px beyond the column, underneath the opaque result panel. That was not a cosmetic fault. The remove button is the only control that takes a step off, and it was never painted, so a step could be added and then not removed. At these column proportions the row first fits in a window about 1400 logical px wide, which is neither the default nor anything the window's own minimum allows. A grid alone does not fix it either: after the kind picker and the remove button there are about 160 px left for an editor that needs 277. So the kind picker heads the step and the editor sits under it, with the remove button spanning the card because it removes the step rather than the row it sits on. The editors keep a wrap panel underneath as the floor, so a longer label in another language wraps instead of clipping. Measured after, by UIA rectangle against the column edge, with the longest unit label selected: nothing crosses the boundary at the default size or at the window's minimum width. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ntrol Two faults on one button, and one template fixes both. It carried its accent as a local Background, and the stock template repaints a NAMED PART of itself on hover. A template part is not the control, so the local value never competed with it: the one findable control on the screen dropped to grey the moment the pointer arrived, which reads as disabled rather than as hovered. It now has its own template, which paints state as a veil over whatever fill the usage sets. That is what lets one template serve both an accent Start and a red Stop without a palette entry that exists only to be a shade of another one. Measured by pixel on a live window: at rest #4CC2FF, which is the accent token itself, and on hover #63C9FE, so the luminance rises by 9.8 instead of falling. Stop used to sit at the bottom of the in-flight block, under the speed and jump rows. The control that ENDS what the panel is doing was the last thing on it, three groups away from the one that started it. It is now the same button: one place for the action, told apart by the label AND by the fill turning to the failure red, never by colour alone. Content, tooltip and enabled state moved into the style, because a local value outranks a trigger and the running state would otherwise never have shown. Connecting and stopping stay neither Start nor Stop: the button reads Start and is disabled, since a session that has not begun cannot be stopped and one already closing cannot be stopped twice. The status line names both. The guard is on the trap rather than on the appearance, since a local value would leave a button that looks right and cannot stop a session. Its revert probe was seen red: writing Content back onto the element fails the theory case that names Content. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…her language The confirm box in front of clearing the history was a native MessageBox, and being a light-grey window on a dark app was the smaller of its two faults. WINDOWS labels those buttons: an English interface answered Tak and Nie, and no translation key of ours was involved at all (rule 15). The app now labels its own answers, and names them after what they do rather than leaving a Yes that says nothing about the question it answers. One window, two shapes. A QUESTION offers a named affirmative beside a cancel, and anything other than the affirmative is a no, which is what makes it safe in front of something irreversible (rule 7). A NOTICE has one way out and nothing to answer. Both are opened through static helpers, so a caller cannot forget the owner or half-configure the shape. Focus starts on the answer that changes nothing, so a stray Enter cannot confirm what the reader has not got to yet. The destructive answer wears the same failure red as the session Stop control, with the wording carrying the meaning either way. Sized by measurement rather than by eye. Sizing to content stopped 60 px short of fitting, because a FluentWindow carries a minimum height of its own. Removing the extended title bar changed nothing, which ruled the frame out, and adding 300 px to the message grew the window by only 200, which showed the floor. Both shapes were then rendered from the running app and looked at. The three dialogs in App.xaml.cs stay native, and the comment there says why: each reports that the strings, the startup path or the dispatcher has failed, which is to say the very things a themed window needs in order to draw. A guard keeps that boundary, with a canary on the count so losing one of them silently is a change somebody has to look at. Its revert probe was seen red. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The block under a result was headed "what this date tests", and so is the line a preset author writes about their own scenario. Both appeared in one output, saying different things, and the reader had to pick which to believe. The age-of-majority preset showed it plainly. On one birth date it computes the day before an eighteenth birthday, which happened to be a Sunday, so under a heading claiming to say what the date tests it answered "weekend - not a business day" - two lines under an explains line that said the date tests an age boundary. Both were true. Only one was what the tester came for. So the computed block is now "what this date lands on", which is what it holds: what the ARITHMETIC landed on, often incidental to the question. The preset keeps "what this date tests", because that is what it is. The block itself is unchanged and still earns its place - for 3 July under the federal calendar the metadata reads "business day no" and "holiday no", and only this block explains that pair by naming an observed holiday. The calendar is now named beside those marks, in both surfaces. "Weekend - not a business day" reads like a fact and is a judgement: the same Sunday is a business day under a calendar whose weekend falls on Friday and Saturday. It is stated whether or not any calendar mark fired, because their ABSENCE is the same file's judgement. The GUI needed the calendar to travel with the result rather than be read off the picker, or a note could describe one calendar while the marks beside it came from another, so the calc payload gained metadata.calendar. That closes a gap of its own: the text output has named the calendar beside its verdict all along and the machine output named it nowhere. Additive, so no schema version. The site's transcripts were updated with it, including the attribution line the tool now prints, since a transcript that does not match the tool is a lie in a quiet font. Verified on the running window, and both revert probes were seen red. Co-Authored-By: Claude Opus 5 <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.
Five things reported from the running GUI. Two of them turned out to be one
change, one turned out to be a functional loss rather than a cosmetic fault,
and one turned out to be two different claims sharing a name.
Gates 12/12. Rust 432 to 435, C# 373 to 386, harness 146 PASS / 0 FAIL. Every
slice was verified on a live window by UIA rectangle and by pixel, and every
guard added here had its revert probe seen red.
The step row could add a step it could not remove
Reported as a clipped dropdown. Measured on the default 1040 window: the row
wanted 439 logical px where the column had 331, so the unit list ended mid
word and the remove button was laid out 108 px beyond the column, underneath
the opaque result panel. That button is the only control that takes a step
off, and it was never painted. At these column proportions the row first fits
in a window about 1400 logical px wide, which is neither the default nor
anything the window's own minimum allows.
A grid alone does not fix it: after the kind picker and the remove button
there are about 160 px left for an editor that needs 277. The kind picker now
heads the step and the editor sits under it, spanning the card, with a wrap
panel underneath as the floor for a longer label in another language.
Measured after, with the longest unit label selected: nothing crosses the
column boundary at the default size or at the window's minimum width.
The primary action lost its colour, and was not the stop control
Two faults on one button, and one template fixes both.
It carried its accent as a local Background, and the stock template repaints
a NAMED PART of itself on hover. A template part is not the control, so the
local value never competed with it, and the one findable control on the
screen dropped to grey the moment the pointer arrived. It now has its own
template, which paints state as a veil over whatever fill the usage sets.
That is what lets one template serve both an accent Start and a red Stop
without a palette entry that exists only to be a shade of another one.
Measured by pixel on a live window: at rest #4CC2FF, which is the accent
token itself, and on hover #63C9FE, so luminance rises by 9.8 instead of
falling.
Stop used to sit at the bottom of the in-flight block, under the speed and
jump rows, so the control that ENDS what the panel is doing was the last
thing on it. It is now the same button, told apart by the label AND by the
fill turning to the failure red, never by colour alone. Content, tooltip and
enabled state moved into the style, because a local value outranks a trigger
and the running state would otherwise never have shown. The guard is on that
trap rather than on the appearance.
The app answered in a language it does not speak
The confirm box in front of clearing the history was a native MessageBox, and
being a light-grey window on a dark app was the smaller of its two faults.
WINDOWS labels those buttons, in the system language, so an English interface
answered in Polish and no translation key of ours was involved at all.
One window, two shapes. A question offers a named affirmative beside a
cancel, and anything other than the affirmative is a no. A notice has one way
out. Focus starts on the answer that changes nothing. The destructive answer
wears the same failure red as the session Stop control.
Sized by measurement rather than by eye: sizing to content stopped 60 px
short of fitting, and removing the extended title bar changed nothing, which
ruled the frame out, while adding 300 px to the message grew the window by
only 200, which showed a minimum height carried by the window type itself.
The three dialogs in App.xaml.cs stay native, and the comment there says why:
each reports that the strings, the startup path or the dispatcher has failed,
which is to say the very things a themed window needs in order to draw. A
guard keeps that boundary, with a canary on the count.
Two different claims stopped sharing one name
The block under a result was headed "what this date tests", and so is the line
a preset author writes about their own scenario. Both appeared in one output,
saying different things.
The age-of-majority preset showed it plainly. On one birth date it computes
the day before an eighteenth birthday, which happened to be a Sunday, so
under a heading claiming to say what the date tests it answered "weekend -
not a business day", two lines under an explains line that said the date
tests an age boundary. Both were true. Only one was what the tester came for.
The computed block is now "what this date lands on", which is what it holds.
The preset keeps "what this date tests", because that is what it is. The
block itself is unchanged and still earns its place: for 3 July under the
federal calendar the metadata reads "business day no" and "holiday no", and
only this block explains that pair by naming an observed holiday.
The calendar is now named beside those marks in both surfaces, because
"weekend - not a business day" reads like a fact and is a judgement. It is
stated whether or not any calendar mark fired, since their ABSENCE is the
same file's judgement. The GUI needed the calendar to travel with the result
rather than be read off the picker, so the calc payload gained
metadata.calendar. That closes a gap of its own: the text output has named
the calendar beside its verdict all along and the machine output named it
nowhere. Additive, so no schema version. The site's transcripts were updated
with it, since a transcript that does not match the tool is a lie in a quiet
font.
Not in this branch
The app's window background resolves to the toolkit's own colour rather than
the palette token the views name, and only the calculator view paints the
token, because its own root sets it. So the two modules of one app have
different backgrounds and nobody decided that. Measured by pixel, left alone
here: it is a change to the whole app's appearance rather than one of the
five reports.
🤖 Generated with Claude Code