Repository navigation
Fix four silent drops found by the mobile surface attempt - #232
Merged
Merged
Conversation
canvas_create kept 1440x900 whatever width/height said, gap: 0 warned as off-scale, a scalar chart highlight rendered no emphasis without a warning, and canvas_evaluate said READY while canvas_stress was FRAGILE on the same version.
A passing stress subset could clear a FRAGILE verdict and any edit got past one; highlight: null warned; nested charts went unchecked; detailed evaluate and canvas_diff still rendered at 1440.
snapshot_layout still measured every canvas at 1440x900. Docs: READY rules now name the stress verdict, and screenshot/export/detailed-mode describe their real artboard-size defaults.
2 tasks
This was referenced Nov 1, 2026
Merged
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.
Fixes four defects found while building one phone screen end to end. In each case framesmith dropped something the agent wrote, or two tools contradicted each other, without saying so. All four affect web canvases too.
canvas_createhonourswidthandheightcanvas_createused to discardwidthandheight, so every canvas came out 1440×900 and there was no documented way to make a phone artboard. It now takes both as optional positive integers. Each one defaults on its own (1440 and 900), and the result reports the artboard size.Three tools still measured every canvas at 1440×900 even when it was rendered at its own size, so a 390-wide canvas was laid out inside a 1440 viewport. Detailed-mode
canvas_evaluateandsnapshot_layoutnow lay out at the artboard size.canvas_diffnow defaults to the first canvas's size. Checked against the built server, a 390-wide root moves from x=525 to x=0. Results for a 1440×900 canvas are unchanged.gap: 0is never flaggedgap: 0was reported as off the spacing scale, with a fix suggesting 2px, even though leavinggapunset renders the same and is never flagged. Flush stacks such as divider-separated rows and tab bars are a normal pattern, so the spacing check now skips a gap of exactly 0. Any other off-scale gap, including a negative one, is still reported.Chart
highlightaccepts a single indexhighlight: 5on a chart series used to render no emphasis, without any message. It now means the same as[5], andnullclears it. Any other value, or an entry that is not a whole-number index within the series data, renders no emphasis. Thebatch_designop result carries a warning naming the series, through the same channel as the ignored-shadowwarning. Charts nested inside an inserted subtree are checked too.canvas_evaluaterespects the lastcanvas_stressresultcanvas_evaluatecould say "READY TO PRESENT" whilecanvas_stresswas failing on the same canvas. Eachcanvas_stressrun now records its result per canvas in server memory.canvas_evaluatereturns it as astressfield ({ verdict, warnings, current }), and the directive stays NOT READY after a FRAGILE result until a full CLEAN run replaces it.Two cases might look like they should clear it, and deliberately don't:
Because the result is kept in memory, a server restart forgets it, and the docs say so.
canvas_evaluatenever runs stress itself.Docs
The tool docstrings,
INSTRUCTIONS,GOTCHAS, the init cheatsheet,docs/GUIDELINES.mdand the README all describe the new behaviour. The READY rules everywhere now mention the stress result. Thescreenshotandexportparameter docs now state their real default: they already rendered at the artboard size, but the docs said 1440.Not in this PR
project_evaluatecan still call every screen presentable while a screen has a FRAGILE stress result. That roll-up is advisory and does not decide readiness.canvas_create. Warning about them would mean registering tools with full object schemas instead of plain field lists.Testing
test-silent-drops.tscovers all four fixes, and each group has a check that fails on master.npm run test:fullpasses (105/105),test-discoverability.tspasses (117/117), andtscis clean. I also drove the built server over MCP and checked:highlightwarningsnapshot_layoutat the artboard size