Repository navigation
Conversation
daa0c01 to
89b9ccb
Compare
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Locations — Halloween redesign
The same production Locations fixture now uses coordinated paper, ink, typography, and illustrations, with pumpkins placed in reserved card gaps. Region colors, counts, navigation, and controls remain native.
Both are iPhone 17 light, normal Dynamic Type, static-motion captures of the same fixture. Before: 8933889f7165. After: 9c2d68f63c5a. The new layout reserves space for exterior artwork.
| Before | After |
|---|---|
![]() |
![]() |
The PR body also shows the complete production tab in both appearances. These captures do not establish live motion or spoken VoiceOver behavior.
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Regular and compact cards — Halloween redesign
The shared production cards now compose opaque surfaces, document-selected passport marks, native regional information, borders, and bounded exterior illustration. Card layout reserves the artwork gap; the inner card remains the zoom source.
Same iPhone 17 light fixture data and normal Dynamic Type, with static motion. Before: 8933889f7165. After: 9c2d68f63c5a. The new paint bounds and reserved spacing change the fixture's content height.
| Before | After |
|---|---|
![]() |
![]() |
Hosted tests separately verify focus bounds, two push/pop cycles, sheet presentation, and two ranking overtakes. Physical-device drag/deceleration and audible VoiceOver remain unverified.
| category: traits.contentSizeCategory, | ||
| ) | ||
| } | ||
| enforceThemeAccessibility(traits: traits, baseline: accessibleBase) |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Review focus at 9c2d68f63c5a: bundled Standard is complete, Flat inherits Standard, and Halloween inherits Flat. Both root overloads select prepared documents through the same path. Native accessibility constraints apply after resolution and cannot restore explicitly removed ornament.
Please inspect catalog resolution, component capabilities, and the stylesheet boundary. Tests cover complete roots, sparse inheritance, explicit removal, failed resources, cycles, version-1 conversion, and same-ID replacement.
89b9ccb to
0944ce1
Compare
| "modifiers": [ | ||
| { | ||
| "padding": { | ||
| "_0": { |
There was a problem hiding this comment.
"_0" seems like uh, not well abstracted? Neither does the value hardcoding 24.
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
The fixed-padding decoration is gone in 9c2d68f63c5a. Artwork now has typed host-relative placement, finite per-edge paint bounds, and parent-reserved gaps/gutters. Component styles can reference named palette, typography, and surface values. Numeric dimensions are authored theme inputs and pass validation before rendering.
This pass keeps _0 as Swift’s synthesized Codable representation for an unlabeled enum payload. That wire syntax remains verbose; the typed model carries its meaning. The revised Where schema is version 2, while ViewDocument keeps its version-1 vocabulary compatible. The old decoration payloads remain conversion fixtures. This encoding choice is called out in the PR compatibility notes.
| } | ||
|
|
||
| // Resolve theme finishes after shared traits so they retain their depth cues. | ||
| let overrides = WhereThemeOverrides.resolve(theme: theme, traits: traits, base: self) |
There was a problem hiding this comment.
Hmm, not sure at this point "overrides" are the right framing. When using a traditional design tokens framework, all these values come from the theme themselves (which can compose). Thoughts?
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Implemented in 9c2d68f63c5a. Bundled Standard is now a complete theme document; Flat inherits Standard and Halloween inherits Flat. WhereThemeCatalog resolves that chain before root injection, and both root overloads use the same prepared-document path. The separate native Flat/JSON override sequence is removed. Native accessibility constraints still apply after document resolution, and rootless defaults come from canonical Standard.
Complete-root, sparse-inheritance, explicit-removal, same-ID-update, and failed-import tests cover the new boundary. Normal Standard/Flat light/dark references were retained.
4443850 to
8933889
Compare
Prevent invalid icon-grid divisors, geographic coordinates and spans, unbounded fractions, negative dash spacing, and excessive menu stagger. Require opaque matte base colors and preserve solid native paper under Reduce Transparency when an authored color can be translucent. Regressions cover invalid JSON plus valid native zero values, signed map coordinates, meter spans, and opaque custom paper. Update mapping guidance. Validation: ./test --all --review passed all 2,984 iOS tests, including 748 WhereUI tests, with architecture and host checks.
Stop gating decorative background activity on card visibility. Layers own their visibility and scene lifecycle; Locations pauses them for covering sheets. Empty and loading content can now animate its visible background. Hosted regressions distinguish active and static poses on an empty Locations screen and verify host and scene activity stop and restart playback. Validation: ./test --all --review passed, including both hosted regressions.
Resolve complete Standard, derived Flat, and illustrated Halloween through one schema-v2 catalog and prepared rendering path. Preserve saved built-in identities and convert version-1 documents on import. Validate inheritance, named values, component capabilities, resources, and bounded artwork before injection; failed imports keep the accepted theme. Compose document-owned surface treatments and native geographic artwork around native controls and information. Reserve artwork gaps, preserve zoom and focus bounds, and gate motion by visibility, scene, tab, and presentation. Inject a session-only Development selector into the ready app. Remove the Christmas demonstration and retain its compatibility fixture. Validation: the light/dark gate and focused extended comparisons passed; 50 new Halloween captures were inspected. The 3,040-test integration run identified two failures, both corrected and verified by focused reruns. Locations interaction tests cover programmatic scrolling, repeated card navigation, planning sheets, focus bounds, and empty content. Formatting, architecture, symbol, string-catalog, and host checks passed. Development, Beta, and App Store simulator builds passed. Physical-device drag/deceleration, edge gestures, and audible VoiceOver remain unverified.
8933889 to
9c2d68f
Compare
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Elsewhere
Halloween paper, regional colors, restrained edge illustrations, and production tab/navigation chrome.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Your Year
Halloween month surfaces and native calendar meaning. This full-content capture includes the complete year.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Settings
Halloween page and section surfaces with restrained illustration around controls.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Appearance Settings
Halloween now uses the same saved preference as Standard and Flat in every audience. The separate Development preview section is removed. The picker stacks on narrow layouts and reserves each specimen's artwork bounds above its caption. Captions grow with Dynamic Type.
Comparable Appearance fixtures with Halloween applied: iPhone 17, light appearance, normal Dynamic Type, static motion, and full-content sizing. Before: 9c2d68f63c5a; after: e5e23d886480. The old fixture used the session-only override; the current fixture uses the saved theme root.
| Before | After |
|---|---|
![]() |
![]() |
These snapshots establish rendering. They do not establish live gestures or spoken VoiceOver behavior.
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Planned Stays
Halloween shared sheet surfaces; dates, controls, and planning state remain native.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Timeline
Related Halloween paper and ink with native chronological stays and forecast information.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Region Days
Standard migration guard for the themed day-list screen. Existing references remain unchanged.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Region Appearance
Standard migration guard for user-selected region color and symbol controls. Existing references remain unchanged.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
App Icon
The embedded icon preview resolves its intended appearance below the paired SwiftUI/Broadway override. Existing references remain unchanged.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Data Settings
Standard migration guard for themed form sections. Existing references remain unchanged.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Estimated Time gallery
The gallery reuses production forecast surfaces from the selected document. Standard references remain unchanged.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Insights and Accuracy gallery
Standard migration guard for document-driven gallery styling and native review controls.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Personalization gallery
Standard migration guard for the shared personalization specimens.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Places and Year gallery
Standard migration guard for calendar, timeline, and card specimens.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Widgets gallery
The Lock Screen specimen keeps its dark scoped appearance inside a light or dark gallery. The normal publication handoff now carries the saved Halloween identity. Widgets retain their lightweight native views; this change adds no widget artwork. These unchanged captures show the Standard gallery.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Planning Region Picker
Standard migration guard for the native region picker on shared theme surfaces.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Planned Stay Editor
Standard migration guard for native planning inputs and flexible dates on shared theme surfaces.
Production-view snapshot fixtures at 9c2d68f63c5a, iPhone 17, normal Dynamic Type, static motion. Light and dark captures are shown below; scrolling screens use full-content sizing. These images establish rendering, not live gestures or spoken VoiceOver behavior.
| Light | Dark |
|---|---|
![]() |
![]() |
There was a problem hiding this comment.
Posted by an AI agent on Kyle's behalf.
Onboarding theme selection
The shared picker includes Standard, Flat, and Halloween. A selection previews through WhereModel and commits when onboarding completes. It uses the same rendering path as saved Appearance Settings choices.
Comparable Standard fixtures: iPhone 17, light appearance, normal Dynamic Type, static motion, and full-content sizing. Before: 9c2d68f63c5a; after: e5e23d886480.
| Before | After |
|---|---|
![]() |
![]() |
Halloween selected, light · Halloween selected, dark · iPad layout.
The snapshots establish rendering. Preference tests cover preview, commit, relaunch publication, and reset.






































Summary
Standard, Flat, and Halloween now use the same prepared JSON theme pipeline. Standard defines the complete appearance. Flat inherits Standard, and Halloween inherits Flat. The separate native Flat override implementation is removed.
Halloween adds coordinated cream, lavender, and plum surfaces, rounded typography, illustrated card edges, pumpkins in reserved gaps, and moon/vine backgrounds. It covers Locations, Elsewhere, Your Year, Settings, and shared forecast, welcome, privacy, and planning surfaces.
Standard, Flat, and Halloween are ordinary saved choices in Settings → Appearance and onboarding in every app audience. The adaptive picker keeps each card specimen readable on iPhone and reserves its illustration bounds above the caption. Launch and ready content use the same root. Existing widget and App Intents handoffs carry the selected identity to their lightweight native views.
Install this PR on a registered device. The
installablelabel publishes the latest successful branch build. The page identifies its source commit.Product behavior
Architecture
WhereThemeDocumentv2 →WhereThemeCatalog→ResolvedWhereTheme→PreparedWhereThemeDocument→whereBroadwayRoot(themeDocument:)..clearremoves optional visuals. Literal overrides take ownership from inherited references.WhereModelowns the normal device-local preference. Every bundled theme useswhereBroadwayRoot(theme:); supplied documents use the same root modifier. There is no additional preview model or ready-subtree theme override.Compatibility and scope
The existing
WhereThemeidentities remainstandardandalternate. Halloween adds the saved identityhalloween. Unknown identities still fall back to Standard on older builds. Version 1 documents convert on import. The old decoration payloads remain fixtures. New exports use schema version 2. No stored user-data migration is required. Swift’s synthesized Codable enum payloads (including_0) remain the wire representation. Typed named values and host-relative placement carry styling semantics; authored numeric values stay bounded document inputs.Christmas is removed from the demonstration UI. Remote downloading, new widget/extension artwork, and cross-component artwork overlap remain outside this iteration.
Visual review
Production Locations in light and dark appearance, verified with the iPhone 17 fixture at
e5e23d886480. Inspect the opaque card surfaces, native regional information, pumpkins in reserved gaps, and coordinated page artwork.Appearance Settings shows all three saved themes in one adaptive picker. The Halloween specimen reserves space for exterior artwork above its caption. Full-content iPhone 17 light fixture at
e5e23d886480:File-level review comments include the remaining tabs, shared surfaces, and comparable before/after captures.
The images use production views with deterministic fixture data and static motion. They establish rendering, not physical-device gesture or spoken VoiceOver behavior.
Review focus
Document and compatibility → Catalog resolution → Component capabilities → Shared root injection → Navigation and focus regressions.
Independent reviews covered the catalog, all typed patch mappings, component capabilities, app composition, and motion ownership. Fixes preserve named-reference replacement, constrain unsupported host artwork, retain native semantic colors, restore canonical opaque paper under Reduce Transparency, and resolve scoped previews below their mode override. Large-text forecast rows and controls grow vertically. Increased Contrast preserves Flat’s explicitly removed surface wash. A further review covered normal selection and corrected artwork bounds in picker specimens and card comparison fixtures. These fixtures reserve paint bounds without clipping native finishes. Picker captions reserve three lines and grow at larger text sizes. No actionable review findings remain. Device-only limits appear below.
The important boundaries are complete-root validation, sparse inheritance and explicit removal, full-content cache identity, native accessibility precedence, preserved Standard/Flat rendering, and the separation of content, interaction, and paint bounds.
Testing
Validation uses iPhone light/dark first, then broader traits. The full integration results below are from the document migration at
9c2d68f63c5a.The normal-selection update passed 52 focused tests for preferences, publication, intents, model state, prepared resources, catalog replacement, and root equivalence. A subsequent
WhereModelTestsrun passed all five tests, including parameterized Halloween onboarding, launch publication, and reset.The normal-selection update passed all 12 affected light/dark entry points with
--record never. This scope covers the picker, onboarding, shared cards, calendar comparisons, Locations, Elsewhere, Year, and Settings. The 12 existing normal Standard/Flat card panels are pixel-identical. Some older contrast references predated the border and ink floors added in9c2d68f63c5a. Their refreshed panels match those existing accessibility rules.All eight affected extended entry points passed with
./test --no-generate --no-build --only … --record never --review. This scope covers the picker, onboarding, and shared card comparisons across large text, Increased Contrast, Reduce Transparency, accessibility annotations, and iPad layouts. The final picker change also passed its three light/dark guards after rebuilding.Current revision
e5e23d886480also passed serialWhere BetaandWhere App Storesimulator builds:The Development distribution run retrieved and validated the signed archive for the same source SHA. Its IPA release and install-site deployment succeeded. The live install page and manifest match
e5e23d88648089d12359b07b8b78e60506be261d. All five GitHub CI jobs passed. Current formatting, string-catalog lint, architecture rules/lint, and whitespace checks passed.The snapshot inventory fix passed all 36 tests in
test_snapshot_shards.py../snapshot-shards checkaccepts 72 suites and retains strict validation for misplaced test declarations.The migration validation at
9c2d68f63c5aestablished these results:--record never, covering cards, Locations, remaining tabs, and shared surfaces. Existing normal Standard/Flat references were retained../test --skip-host-tests --no-generate --only WhereUISnapshotTests --only ViewDocumentUISnapshotTests --record never --reviewexercised 86 entry points. After fixing the reported rendering issues and inspecting new captures, all ten affected extended entry points passed in a focused--record neverrerun. Coverage includes accessibility annotations, largest Dynamic Type, Increased Contrast, Reduce Transparency, Reduce Motion, and representative iPad layouts../test --all --review --no-generateexecuted 3,040 iOS tests across 23 bundles. It found two failing tests: foreground fixture synchronization and Flat restoring a removed wash under Increased Contrast. Both were corrected.MainTabsTests(3 tests) and the focused stylesheet contrast/surface scope (5 tests, including 10 Flat trait combinations) then passed. The full run also passed host macro tests (28), host helper checks, attribution, architecture rule tests (29), and architecture lint. SnapshotKitTesting reported four expected known issues../test --skip-host-tests --no-generate --only WhereUITests/LocationsViewTests --review: all 4 tests passed, including actual programmatic scrolling with clipping enabled, repeated navigation, focus bounds, and the empty state.mise exec -- tuist xcodebuild build -workspace Stuff.xcworkspace -scheme <scheme> -destination "generic/platform=iOS Simulator"passed serially forWhere Development,Where Beta, andWhere App Store../swiftformat --lint,./sf-symbols --lint,./xcstrings --lint, andgit diff --checkpassed.Hosted checks exercise two card push/pop cycles, planning-sheet presentation/dismissal, two ranking overtakes with normal/reduced motion, settled focus order, tab/foreground transitions, empty Locations, and theme import/replacement failures. Model and hosted-root guards cover saved Halloween selection, onboarding commit/reset, widget publication, intent handoff, and equality between saved-theme and prepared-document rendering.
Remaining device checks: physical-device drag/deceleration, interactive edge gestures, and audible VoiceOver were not exercised. The hosted scroll test checks the native viewport and focus geometry; screenshots establish the visible artwork composition. They do not prove every moving artwork frame.
The migration’s final extended comparison used these separately selectable entry points:
Omit
--no-buildafter any source/resource change and--no-generateafter project input changes.Stack
3/3, based on Broadway integration #461, which consumes ViewDocument #460. This slice activates the shared pipeline in Where and makes Halloween selectable in every app audience.