Skip to content

feat(WhereUI): present card estimates as visa stickers - #302

Merged
kyleve merged 2 commits into
mainfrom
codex/visa-sticker-estimates
Sep 1, 2026
Merged

feat(WhereUI): present card estimates as visa stickers#302
kyleve merged 2 commits into
mainfrom
codex/visa-sticker-estimates

Conversation

@kyleve

@kyleve kyleve commented Aug 31, 2026

Copy link
Copy Markdown
Owner

Posted by an AI agent on kve's behalf.

Summary

  • render annual estimates as visa-style endorsements beside recorded day totals on primary location cards
  • size the endorsement at 80% of its original footprint and soften its ink to 92% opacity
  • remove the redundant year while preserving the existing entry stamp and progress bar
  • restack the endorsement below the recorded count when width or Dynamic Type requires it
  • refresh the forecast-bearing light, dark, iPad, contrast, AX5, and accessibility references

Why

The supporting estimate line read as metadata separate from the passport-inspired card. The endorsement makes the forecast feel native to the card without changing forecast calculations or accessibility semantics. This is a focused follow-up to #296.

Review focus

  • sticker scale and legibility over each region's map and security print
  • ViewThatFits behavior at AX5 and narrower widths
  • unchanged rendering when Estimated Time & Planning is disabled

Testing

  • ./swiftformat --lint
  • ./xcstrings --lint
  • ./sf-symbols --lint
  • ./test WhereUITests (479 tests passed)
  • ./test --snapshots --only WhereUISnapshotTests/LocationsViewSnapshotTests (matrix passed)

@kyleve
kyleve merged commit d5385f4 into main Sep 1, 2026
7 checks passed
kyleve pushed a commit that referenced this pull request Sep 6, 2026
…ber 6, 2026) (#308)

## Summary

- Re-verified every open item in all 12 `TODOs.md` files against current
source, after the week's 4 PRs (#301 demo next-launch mode, #302
visa-sticker estimates, #303 deterministic async-capture test, #305
Settings region editor).
- **Nothing closed outright; two items narrowed.** PR #305 gave
`RegionsSettingsView` a `SnapshotProviding` conformance and a
10-reference suite, shrinking the Settings image-coverage item from five
screens to **four**. The `scrolledForYear` half of a namesake-test item
is obsolete — the symbol no longer exists — so that item narrows to
`LocationNamer`.
- **Three small P2s filed from the window's new surface:**
`DeveloperDemoLaunchSheet` snapshots a scrolling `Form` at a fixed
`.phoneLightDark` frame against the full-content rule; PR #302 orphaned
`WhereFormat.locationCardEstimatedDays` (helper + catalog key + test, no
production caller); the `OnboardingGate` doc comment still says the gate
is "Rooted at the trunk's head" after PR #301 prepended the demo step.
- **Corrected five of the August 30 audit's numbers that were wrong at
its own date:** WhereUI was 276 sources / 102 tests (published 274/101);
totals were 695/368 (published 694/368, table summing to 693); test
bundles were **25**, not "26, unchanged" (PR #300's StuffCore removal
had already landed); the settle-floor split is **39** addressable
configurations, not 37 (both prior enumerations missed the Ranking
Animation Lab's 2); and the Method line carried a duplicated sentence.
Also fixed a `WhereShortcuts` count stale since PR #230 (four registered
shortcuts, not five) and two doc citations pointing past the end of
rewritten files.
- Rewrote `MODULE_AUDIT.md` from the refreshed backlog (700 source / 369
test / 49 image-snapshot files; 484 references across 49 suites; 25
bundles) and refreshed the two dated reference counts in
`SnapshotKitTesting/AGENTS.md` (472 → 484), with `./sync-agents` run.

## Why

The weekly `todo-triage` pass keeps the backlog honest: it closes what
shipped, corrects citations the week's diffs moved, files what the new
surface shows, and regenerates the derived audit so the report never
carries claims the tree contradicts. This week's lead finding is about
the audit itself — five published counts were wrong at publication, all
undercounts or stale carries in figures whose text claimed freshness —
so the affected items now record their derivation procedure, not just
the number.

## Review focus

- The four-screens rewrite of the Settings `SnapshotProviding` item in
`Where/TODOs.md` (including the `WhereFlyoverView` nuance: it is
image-pinned by a suite that hosts it directly, without a conformance).
- The 37 → 39 correction in `Shared/SnapshotKitTesting/TODOs.md` — the
Ranking Animation Lab's `settledAtLeast(1.0)` × 2 configurations
predates the August 30 audit, so both prior "re-derived and unchanged"
claims were wrong.
- The three new P2s in `Where/TODOs.md`, each verified against source
before filing.
- The self-correction table at the bottom of `MODULE_AUDIT.md` ("as
published / as corrected" column).

## ⚠️ Breaking changes

None. Documentation and backlog files only; no production code changed.

## Compatibility

Not applicable — no code, build, or CI changes.

## Testing

- Executed on the Linux agent: `./swiftformat --lint` (0/1125),
`./shellcheck` (silent), `./attribution --check` (up to date, 12
credits), `./snapshot-shards check` (plan valid: 49 suites, 13/15/18/3 —
the window's two new suites on the intake shard as designed), Python
tool tests (64 tests, 1 known macOS-only failure), Ruby tool tests (75
runs, the known 12+1 platform failures). The retained-tool failures
match the filed root P1 exactly; no new platform assumption appeared.
- Six read-only verification subagents re-checked every open item with
file:line evidence; every changed verdict and new finding was
spot-checked by hand before publishing. **False alarms rejected rather
than filed** (recorded in the audit): the demo-mode `UserDefaults` latch
as "a mark on the device" (it is the Inspector pattern, one-shot,
DEBUG-only); `DemoDataBuilder`'s convenience `init(now:calendar:)` as a
Core parameter-default violation (an explicit overload on demo fixture
code, not a store API); `DeveloperDemoModeRow` /
`LocationCardEstimateSticker` bare `#Preview`s as coverage debt (both
pinned transitively); RegionsSettings' unlabeled `.combine` (its symbol
is `.accessibilityHidden`, children read as a sentence).
- Skipped (unavailable on the Linux VM, per root `AGENTS.md`): `./test`,
the architecture lint, `./xcstrings --lint`, `./sf-symbols --lint`, and
any simulator or pixel verification. Documentation-only change, so no
test tier applies.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant