2b82424d7feabfdd84bc78d1e088ed78724cc045
A. A page/site replace lands on the canvas in loadState's deferred deserialize, so apply() returned before the canvas changed and the self-review composed, captured and summarised the PREVIOUS page (the live eval: every review said "the render doesn't match the page I built"). PageContext.whenCanvasSettled() resolves when the requested load really ran; apply() awaits it (bounded, 5 s) and returns the applied fingerprint (from the response tree for replaces). The review checks the live canvas against it right before composing and skips with a plain note otherwise. Header/footer/title come from latestChrome() (refs updated in the same tick), not the modal's one-render-old context. B. Review outcomes are fixed / fine / mismatch / not-applied / skipped and quote the model. An empty patch where the model says the render was not its page is "did not work this time", never "found nothing to fix"; an ask is not a review; ops naming missing nodes are "none could be applied" (applyPatch now counts ops that took effect). E. Pictures from earlier sessions are labelled "saved earlier" and never preselected; a line above the box lists what goes with THIS message; multi-file uploads select every file. Clear chat says it deletes the site's whole conversation for everyone (one thread per site, backend). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Languages
TypeScript
75.6%
JavaScript
12.4%
HTML
8.8%
CSS
2.6%
PHP
0.4%
Other
0.2%