feat(Flyover): export a static QA atlas - #270
Open
kyleve wants to merge 15 commits into
Open
Conversation
kyleve
commented
Aug 14, 2026
| /// Throws when a settle phase cannot produce a trustworthy capture. | ||
| @MainActor | ||
| func reportIfUnsettled( | ||
| func throwIfUnsettled( |
Owner
Author
There was a problem hiding this comment.
Review focus: this deliberately changes unsettled and starved captures from recorded test issues followed by image generation into typed throws. assertSnapshots still records the thrown error, while the new hosted PNG caller stops immediately and cannot publish that image. Cancellation now follows the same path through CancellationError.
Make the atlas canvas-first with a compact floating dock, command-palette navigation, grouped list rows, and an immersive screenshot inspector. Preserve manifest and deep-link compatibility while keeping secondary review tools available in focused panels.\n\nValidation:\n- ./flyover export --output /tmp/where-flyover-codex --profile phone-light\n- ./test FlyoverTests\n- bash Shared/Flyover/Tools/Tests/flyover_test.sh\n- ./swiftformat --lint\n- JavaScriptCore syntax parse
Resolve the command-runner extraction while preserving Flyover export progress. Adapt accessibility preparation to main's throwing settle behavior.
Run the Flyover shell self-test when its module fixture is present. Keep extracted test-runner contract fixtures independent of module-specific files.
kyleve
commented
Sep 7, 2026
| ) | ||
| } | ||
|
|
||
| private var profileSize: CGSize { |
Owner
Author
There was a problem hiding this comment.
Is this duplicated from anywhere?
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.
Summary
./flyover exportto generate a portable, network-free Where QA atlas from native simulator captures./flyover previewto serve an existing atlas, print a local or LAN URL, and shut down cleanly with Ctrl-C--profileflags are supplied; explicit flags still select only the requested profilesWhereFlyoverWorldWhy
Flyover previously kept the native screen catalog inside the app. This change makes the same registered screens, states, routes, and native renders available as a disposable static artifact.
The refined web shell gives the catalog the hierarchy and interactions of a focused review tool. It preserves native Flyover concepts while adapting navigation, inspection, and density to desktop and mobile browsers.
Product behavior
/orCommand-K. It finds groups, screens, states, and routes and moves focus to a visible result../flyover exportcaptures Phone Light followed by Phone Dark by default. Repeated--profileflags replace those defaults, preserve their first-occurrence order, and remove duplicates../flyover previewvalidates the default export, selects a free port, and prints the local URL.--outputselects another atlas, and--portselects a fixed port../flyover preview --lanprints reachable network URLs for phones and other devices. It warns that LAN preview has no authentication or TLS.Correctness and native parity
Periscope.shared. Web export receives the synthetic world's isolated log system, so export never reads process or user data.manifest.jsmatchesmanifest.json. It also rejects unsupported markers, missing images, extra images, and symbolic links before it binds a port.Architecture
fetch, packages, remote fonts, analytics, or external scripts.Measured Where artifact
phone-lightcurrently exports 5 groups, 50 screens, 108 states, 41 routes, and 108 PNGs. The checked artifact is 75,029,681 bytes and represents 456,924,582 native-scale pixels. A browser check loaded all 50 visible cards after Fit All and all three visible rows in the current list viewport.Compatibility
The feature is DEBUG-only and test-only. It changes no production data, backup, persistence, or release runtime behavior.
schemaVersion: 1remains the artifact boundary.Testing
./test --everything— 2,005 iOS tests and 50 snapshot tests passed on the final atlas tree./test --only 'WhereUISnapshotTests/WhereFlyoverWebExportTests/exportsHostedSmokeAtlas()'— exact two-screen, two-profile hosted PNG matrix passed./test FlyoverTests SnapshotKitTestingTests WhereUITests— 606 focused tests passed during atlas review./test FlyoverTests— 54 tests passed after adding visible-image residency, selection-policy, and two-profile default coveragepython3 -m unittest discover -s Tools/Tests -p 'test_*.py'— 76 tests passedbash Shared/Flyover/Tools/Tests/flyover_test.sh— default and explicit profile selection, production residency paths, and the web selection policy passed./shellcheck./swiftformat --lintShared/Flyover/Web/assets/app.jsgit diff --check./flyover export --output /tmp/where-flyover-codex --profile phone-light— 50 screens, 108 states, 41 routes, 108 valid PNGs./flyover preview --output /tmp/where-flyover-codex— served the 50-screen, 108-image atlas from the printed loopback URLuser-select: none; intentional copy surfaces computed totext; all screenshots useddraggable="false"