Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .claude/skills/screenshots/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <Xcode>/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:<pid>`,
Expand Down
13 changes: 9 additions & 4 deletions App/Views/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 8 additions & 5 deletions App/Views/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
7 changes: 5 additions & 2 deletions Tools/film/previews.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
Binary file modified appstore/screenshots/ios/en-US/1_iphone_star_blocks.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/en-US/1_star_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/en-US/2_iphone_star_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/en-US/2_spiral_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/en-US/3_iphone_spiral_code.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/en-US/3_spiral_code.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/en-US/4_tree_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/ja/1_star_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/ja/2_iphone_star_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/ja/2_spiral_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/ja/3_iphone_spiral_code.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/ja/3_spiral_code.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/ios/ja/4_tree_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/macos/en-US/1_star_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/macos/en-US/2_spiral_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/macos/en-US/3_spiral_code.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/macos/en-US/4_tree_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/macos/ja/1_star_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/macos/ja/2_spiral_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/macos/ja/3_spiral_code.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified appstore/screenshots/macos/ja/4_tree_canvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site/shots/ipad-en-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site/shots/ipad-en-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site/shots/ipad-en-4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site/shots/ipad-ja-2.png
Binary file modified site/shots/ipad-ja-3.png
Binary file modified site/shots/ipad-ja-4.png
Binary file modified site/shots/mac-en-3.png
Binary file modified site/shots/mac-ja-3.png
Loading