diff --git a/.claude/skills/screenshots/SKILL.md b/.claude/skills/screenshots/SKILL.md index 266c92a..cc8b5a0 100644 --- a/.claude/skills/screenshots/SKILL.md +++ b/.claude/skills/screenshots/SKILL.md @@ -37,6 +37,21 @@ term`, which says nothing about the cause. Check with `pgrep -f shots.rb` before starting one; a backgrounded rig reported as finished is not proof, and two of them overlapping is what filed a set of empty Vision Pro rooms. +**A second Xcode can swap the simulators out from under the one you build +with.** `xcode-select` picks the `xcodebuild` and `simctl`, but the machinery +that runs every simulator — `com.apple.pkg.XcodeSystemResources`, with +CoreSimulatorService in it — is system-wide, and it is whichever Xcode last +installed its components. With the 27.1 beta installed beside 27.0, it was +27.1. The iOS 27.0 simulators' `backboardd` then aborted in Metal +(`MTLSimDevice newTextureWithDescriptor`) after a few launches and +rotations. The run died as `Test crashed with signal kill`, twice in a row, +in a different shot each time, with the app's own code blameless. The old +code crashed the same way. Check `pkgutil --pkg-info +com.apple.pkg.XcodeSystemResources` before a shoot. If it is not the release +you build with, reinstall that release's package +(`sudo installer -pkg /Contents/Resources/Packages/XcodeSystemResources.pkg -target /`), +then `simctl shutdown all` and restart CoreSimulatorService. + **A stuck app survives `kill -9`.** A run killed mid-flight can leave the app being traced by an orphaned `debugserver`, `ps` showing `SX`; every later Mac run then fails with `Failed to terminate space.hiraku.tortoiseblocks:`, diff --git a/App/Views/CLAUDE.md b/App/Views/CLAUDE.md index f3a0338..bb4922e 100644 --- a/App/Views/CLAUDE.md +++ b/App/Views/CLAUDE.md @@ -144,10 +144,15 @@ worse. Taking either `ToolbarSpacer` away changed nothing. `CanvasViewToggle` therefore offers the words and then the icons, through `ViewThatFits`, each form `fixedSize` so it can never be squeezed into an ellipsis. What that gives, measured: the words on the 13-inch landscape (both languages), on the Mac (in -Japanese) and the phone's sheet (in English), and English on the 11-inch -landscape; the icons in portrait on -both iPads and for Japanese on the 11-inch landscape. Judge a change here on -the 11-inch, in portrait and in Japanese: that is the narrowest case. +Japanese) and in the phone's sheet (in English). The icons in portrait on both +iPads, and for Japanese on the 11-inch landscape. English on the 11-inch +landscape sits on the boundary. A freshly opened document with blocks in it +showed the words throughout. An empty one showed them until its first block, +then switched to the icons and stayed there — presumably the toolbar offers a +hair less once its buttons change state, though that was not pinned down. +That one-time flip was looked at and accepted +rather than engineered away. Judge a change here on the 11-inch, in portrait +and in Japanese (the narrowest cases), and from an empty document. **26's glass is not used on any surface of ours, and that was tested rather than assumed** (#79). All three candidates were built and looked at, and all diff --git a/App/Views/ContentView.swift b/App/Views/ContentView.swift index 1112d84..55c6d4c 100644 --- a/App/Views/ContentView.swift +++ b/App/Views/ContentView.swift @@ -465,11 +465,14 @@ struct CanvasToolbar: ToolbarContent { /// fixed one after it was what ran out: taking each away changed nothing. /// /// So the words are offered first and the icons second, and `ViewThatFits` -/// takes whichever the toolbar has room for. The toolbar is a little stingier -/// than `fixedSize` would suggest: the 11-inch's landscape column fits the -/// English words but not 「キャンバス」, so Japanese gets the icons there. The -/// 13-inch landscape keeps the words in both languages. VoiceOver reads -/// "Canvas" and "Code" either way. +/// takes whichever the toolbar has room for. The 13-inch landscape keeps the +/// words in both languages. The 11-inch landscape column is the boundary: it +/// never fits 「キャンバス」, and it fits the English words only until the +/// toolbar's own state changes. An empty document shows "Canvas | Code", and +/// the first block — which is when ⟳ comes on — turns them into the icons for +/// good. That flip was seen and accepted: it happens once, and nothing is cut +/// or hidden either side of it. VoiceOver reads "Canvas" and "Code" either +/// way. struct CanvasViewToggle: View { @Binding var showsCode: Bool diff --git a/Tools/film/previews.rb b/Tools/film/previews.rb index 6a4552f..11c03e3 100644 --- a/Tools/film/previews.rb +++ b/Tools/film/previews.rb @@ -151,7 +151,10 @@ def record_vision(profile, raw) FileUtils.rm_rf(raw) FileUtils.mkdir_p(raw) - 3.times do |attempt| + # Five tries, where the screenshot rig makes three: the sheet failing to + # come up is the same flake there, but here it once failed three launches + # running, and the run after that needed three. + 5.times do |attempt| # Reinstalled every time: visionOS restores an app's windows, and a launch # that inherits the last one's opens a second set on top. Film.simctl("terminate", udid, Film::BUNDLE_ID) @@ -187,7 +190,7 @@ def record_vision(profile, raw) warn(" an empty room on attempt #{attempt + 1} (ink #{measured.round(4)}), relaunching") end - abort("vision never came up with a sheet after three attempts") + abort("vision never came up with a sheet after five attempts") end def compose_vision(profile, raw) diff --git a/appstore/screenshots/ios/en-US/1_iphone_star_blocks.png b/appstore/screenshots/ios/en-US/1_iphone_star_blocks.png index 4f97827..50e735b 100644 Binary files a/appstore/screenshots/ios/en-US/1_iphone_star_blocks.png and b/appstore/screenshots/ios/en-US/1_iphone_star_blocks.png differ diff --git a/appstore/screenshots/ios/en-US/1_star_canvas.png b/appstore/screenshots/ios/en-US/1_star_canvas.png index 16c5160..74c3c9a 100644 Binary files a/appstore/screenshots/ios/en-US/1_star_canvas.png and b/appstore/screenshots/ios/en-US/1_star_canvas.png differ diff --git a/appstore/screenshots/ios/en-US/2_iphone_star_canvas.png b/appstore/screenshots/ios/en-US/2_iphone_star_canvas.png index dd812ba..3b210d3 100644 Binary files a/appstore/screenshots/ios/en-US/2_iphone_star_canvas.png and b/appstore/screenshots/ios/en-US/2_iphone_star_canvas.png differ diff --git a/appstore/screenshots/ios/en-US/2_spiral_canvas.png b/appstore/screenshots/ios/en-US/2_spiral_canvas.png index d600797..937b1a9 100644 Binary files a/appstore/screenshots/ios/en-US/2_spiral_canvas.png and b/appstore/screenshots/ios/en-US/2_spiral_canvas.png differ diff --git a/appstore/screenshots/ios/en-US/3_iphone_spiral_code.png b/appstore/screenshots/ios/en-US/3_iphone_spiral_code.png index f85aa06..ea2abfa 100644 Binary files a/appstore/screenshots/ios/en-US/3_iphone_spiral_code.png and b/appstore/screenshots/ios/en-US/3_iphone_spiral_code.png differ diff --git a/appstore/screenshots/ios/en-US/3_spiral_code.png b/appstore/screenshots/ios/en-US/3_spiral_code.png index da3e676..b5a8f51 100644 Binary files a/appstore/screenshots/ios/en-US/3_spiral_code.png and b/appstore/screenshots/ios/en-US/3_spiral_code.png differ diff --git a/appstore/screenshots/ios/en-US/4_tree_canvas.png b/appstore/screenshots/ios/en-US/4_tree_canvas.png index ea7d254..411cd39 100644 Binary files a/appstore/screenshots/ios/en-US/4_tree_canvas.png and b/appstore/screenshots/ios/en-US/4_tree_canvas.png differ diff --git a/appstore/screenshots/ios/ja/1_star_canvas.png b/appstore/screenshots/ios/ja/1_star_canvas.png index c3e97fa..edf30c3 100644 Binary files a/appstore/screenshots/ios/ja/1_star_canvas.png and b/appstore/screenshots/ios/ja/1_star_canvas.png differ diff --git a/appstore/screenshots/ios/ja/2_iphone_star_canvas.png b/appstore/screenshots/ios/ja/2_iphone_star_canvas.png index fd36ba0..a4b6eb4 100644 Binary files a/appstore/screenshots/ios/ja/2_iphone_star_canvas.png and b/appstore/screenshots/ios/ja/2_iphone_star_canvas.png differ diff --git a/appstore/screenshots/ios/ja/2_spiral_canvas.png b/appstore/screenshots/ios/ja/2_spiral_canvas.png index e75616d..30107e3 100644 Binary files a/appstore/screenshots/ios/ja/2_spiral_canvas.png and b/appstore/screenshots/ios/ja/2_spiral_canvas.png differ diff --git a/appstore/screenshots/ios/ja/3_iphone_spiral_code.png b/appstore/screenshots/ios/ja/3_iphone_spiral_code.png index 9a0ea0d..3079e38 100644 Binary files a/appstore/screenshots/ios/ja/3_iphone_spiral_code.png and b/appstore/screenshots/ios/ja/3_iphone_spiral_code.png differ diff --git a/appstore/screenshots/ios/ja/3_spiral_code.png b/appstore/screenshots/ios/ja/3_spiral_code.png index 2e10f1f..472d581 100644 Binary files a/appstore/screenshots/ios/ja/3_spiral_code.png and b/appstore/screenshots/ios/ja/3_spiral_code.png differ diff --git a/appstore/screenshots/ios/ja/4_tree_canvas.png b/appstore/screenshots/ios/ja/4_tree_canvas.png index 1600f7a..fc24c28 100644 Binary files a/appstore/screenshots/ios/ja/4_tree_canvas.png and b/appstore/screenshots/ios/ja/4_tree_canvas.png differ diff --git a/appstore/screenshots/macos/en-US/1_star_canvas.png b/appstore/screenshots/macos/en-US/1_star_canvas.png index 736b6df..31f706f 100644 Binary files a/appstore/screenshots/macos/en-US/1_star_canvas.png and b/appstore/screenshots/macos/en-US/1_star_canvas.png differ diff --git a/appstore/screenshots/macos/en-US/2_spiral_canvas.png b/appstore/screenshots/macos/en-US/2_spiral_canvas.png index acf1efa..0f8be5f 100644 Binary files a/appstore/screenshots/macos/en-US/2_spiral_canvas.png and b/appstore/screenshots/macos/en-US/2_spiral_canvas.png differ diff --git a/appstore/screenshots/macos/en-US/3_spiral_code.png b/appstore/screenshots/macos/en-US/3_spiral_code.png index 9c14d5a..0023494 100644 Binary files a/appstore/screenshots/macos/en-US/3_spiral_code.png and b/appstore/screenshots/macos/en-US/3_spiral_code.png differ diff --git a/appstore/screenshots/macos/en-US/4_tree_canvas.png b/appstore/screenshots/macos/en-US/4_tree_canvas.png index a6fd9f9..4cc867c 100644 Binary files a/appstore/screenshots/macos/en-US/4_tree_canvas.png and b/appstore/screenshots/macos/en-US/4_tree_canvas.png differ diff --git a/appstore/screenshots/macos/ja/1_star_canvas.png b/appstore/screenshots/macos/ja/1_star_canvas.png index 79e54e9..1394ec1 100644 Binary files a/appstore/screenshots/macos/ja/1_star_canvas.png and b/appstore/screenshots/macos/ja/1_star_canvas.png differ diff --git a/appstore/screenshots/macos/ja/2_spiral_canvas.png b/appstore/screenshots/macos/ja/2_spiral_canvas.png index 7bdadfe..850cc07 100644 Binary files a/appstore/screenshots/macos/ja/2_spiral_canvas.png and b/appstore/screenshots/macos/ja/2_spiral_canvas.png differ diff --git a/appstore/screenshots/macos/ja/3_spiral_code.png b/appstore/screenshots/macos/ja/3_spiral_code.png index d9a7543..fbf41d4 100644 Binary files a/appstore/screenshots/macos/ja/3_spiral_code.png and b/appstore/screenshots/macos/ja/3_spiral_code.png differ diff --git a/appstore/screenshots/macos/ja/4_tree_canvas.png b/appstore/screenshots/macos/ja/4_tree_canvas.png index 6724519..f1b0059 100644 Binary files a/appstore/screenshots/macos/ja/4_tree_canvas.png and b/appstore/screenshots/macos/ja/4_tree_canvas.png differ diff --git a/docs/Screenshot.png b/docs/Screenshot.png index 562a809..7737f2e 100644 Binary files a/docs/Screenshot.png and b/docs/Screenshot.png differ diff --git a/site/shots/ipad-en-2.png b/site/shots/ipad-en-2.png index ddc1cae..b84dc33 100644 Binary files a/site/shots/ipad-en-2.png and b/site/shots/ipad-en-2.png differ diff --git a/site/shots/ipad-en-3.png b/site/shots/ipad-en-3.png index 6e035cb..7b927cf 100644 Binary files a/site/shots/ipad-en-3.png and b/site/shots/ipad-en-3.png differ diff --git a/site/shots/ipad-en-4.png b/site/shots/ipad-en-4.png index 12ae7bb..03dec17 100644 Binary files a/site/shots/ipad-en-4.png and b/site/shots/ipad-en-4.png differ diff --git a/site/shots/ipad-ja-2.png b/site/shots/ipad-ja-2.png index 4c89364..8808a7b 100644 Binary files a/site/shots/ipad-ja-2.png and b/site/shots/ipad-ja-2.png differ diff --git a/site/shots/ipad-ja-3.png b/site/shots/ipad-ja-3.png index 362697b..233d9bc 100644 Binary files a/site/shots/ipad-ja-3.png and b/site/shots/ipad-ja-3.png differ diff --git a/site/shots/ipad-ja-4.png b/site/shots/ipad-ja-4.png index a1daf80..cb131c7 100644 Binary files a/site/shots/ipad-ja-4.png and b/site/shots/ipad-ja-4.png differ diff --git a/site/shots/mac-en-3.png b/site/shots/mac-en-3.png index cf36459..2695858 100644 Binary files a/site/shots/mac-en-3.png and b/site/shots/mac-en-3.png differ diff --git a/site/shots/mac-ja-3.png b/site/shots/mac-ja-3.png index 2bf9562..93d8338 100644 Binary files a/site/shots/mac-ja-3.png and b/site/shots/mac-ja-3.png differ