Skip to content

ios: beta gets the legend fix and the walk's in-motion audit, report-only - #172

Merged
AidenJohnston merged 3 commits into
betafrom
t3/ci-flake-fixes-beta-2
Sep 27, 2026
Merged

AidenJohnston merged 3 commits into
betafrom
t3/ci-flake-fixes-beta-2

Conversation

@AidenJohnston

Copy link
Copy Markdown
Collaborator

#169 brought the settled-walk audit to beta. Beta didn't have Sam's legend fix yet, so that left the wall map's overlapping legend both unfixed and undetected. This fixes the legend and keeps the walk's in-motion audit, in report-only mode.

Commits

  • 458745a, cherry-picked from 1faa79b (Sam): the wall map's legend wraps instead of overlapping. On the LiDAR replay, the legend squeezed its three entries (end preview, hidden sections, Depth-checked) into one row and drew them over each other. It also inherited the walk controls' animation, so a leaving entry faded over its replacement. This is the "(no element)" contrast failure in run 36307476187. The legend now takes one row only when every entry fits and stacks otherwise, and its entries change without animating. The commit also adds the frozen audit state wallWalk-fullLegend and raises the picker wait in testWholeFlowThroughTheButtons to 30 s. Conflicts resolved by hand:
    • WallTape.swift: Sam's layout, keeping beta's endLeavesOut(_:seen:) call.
    • ScreenStatesUITests.swift: beta's aim states and its list-valued expectations, plus wallWalk-fullLegend and its expectation.
  • d1f2039, cherry-picked from 32f6e71 (ios tests: audit the walk strictly once held and in motion to report; triage of the UI test failures #165): audit the walk in motion too, to report. The strict audit stays on the held walk. The first appearance is also audited, in report-only mode: findings are attached as audit-wallWalk-moving and printed as AUDIT lines, as with HOUSESCAN_AUDIT_REPORT_ONLY. That audit caught real bugs that only show mid-transition (1faa79b, b1a2444, 397b6d6), and the frozen every-state audit can't see them.
  • c3aeabe: the autopilot's gate waits four minutes, not two. A test now starts its audit only after <phase>.held appears, and the walk's map check after the audit can wait up to 90 s. At two minutes, a slow runner could let the app leave mid-audit. This answers Greptile's P2 on ios: bring the t3/ios-mvf UI test flake fixes to beta #169.

Not ported: b1a2444

On t3/ios-mvf, the card's reply was one button whose title could change inside the card's animation, so "Can't get there" and "Can't see past it" cross-faded over each other. Beta's card already gives the whole card a new identity per step (.id(replyTask), from the card-replies work), and the reply's title is chosen by the same step. A new title always comes with a new card that swaps in at once, so the port isn't needed.

Testing

In progress on the Mac mini; results follow in a comment.

🤖 Generated with Claude Code

SamGu-NRX and others added 3 commits September 27, 2026 08:22
…alled Simulator

CI run 36307476187 on b90fb8e:

testFullFlowFromLidarReplay failed contrast on the walk for a node with
no element. Its recording shows the map's legend with three entries
(the end preview, hidden sections, Depth-checked) squeezed into one row
and laid over each other, and a leaving entry fading over the one taking
its place: the walk's controls animation (controlsKey) reached into the
map. The legend now takes one row only when every entry fits on a line
and stacks otherwise, and its entries change without animating. A new
audited state, wallWalk-fullLegend, shows all three at once.

testWholeFlowThroughTheButtons missed meter.candidate.0. The picker was
never refused: the app's log shows its main thread took no work for
14.6 s while the Simulator's push daemon spun in a reconnect loop, and
the close-up script resumed where it stopped. The picker would have come
about 17.3 s after the close-up opened, against a 15 s wait; the wait is
now 30 s.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 1faa79b)
The walk's audit in motion caught real bugs that only show mid-transition:
the map legend's entries drawn over each other (1faa79b), the two reply
titles half-drawn over each other (b1a2444) and the translucent reply fill
(397b6d6). Auditing only the held walk would have hidden them. The walk is
now audited on its first appearance as well, report-only: findings are
attached as audit-wallWalk-moving and printed, as with
HOUSESCAN_AUDIT_REPORT_ONLY, and the strict audit stays on the held walk.

Also: LaunchOptions documents <phase>.held, and the LiDAR test's comment
no longer times the walk.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 32f6e71)
… a held screen

A test audits a held screen only once <phase>.held appears, and the walk's
map check after it can wait 90 s; the two-minute gate could expire first on
a slow runner and let the app leave mid-audit (Greptile on #169).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Repo admins can enable using credits for code reviews in their settings.

@coderabbitai

coderabbitai Bot commented Sep 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 2416a7cf-2ffe-4595-a30a-36f93a626da1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the size:M 30-99 effective changed lines. label Sep 27, 2026
@codemetrics-ai

Copy link
Copy Markdown

Note

Review skipped

Codemetrics is installed on this repository, but it hasn't been added to your team yet.

To enable AI code reviews for this repo, go to your dashboard and add house-scanning-master to your team's repositories.

@greptile-apps

greptile-apps Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

[Medium risk] Fixes legend layout and adds in-motion audit for the walk screen.

The PR should not merge until the legend’s crowded inline layout is made to select the stacked fallback reliably.

Fix All in Claude CodeFindings

  1. P1 Crowded legend stays inline ▶
  2. P2 Brief audit findings disappear ▶
Fix with agent prompt
### Issue 1
ios/HouseScan/UI/Camera/WallTape.swift:108-113
When the end preview, hidden sections, and depth label appear together on a narrow screen, the first layout can shrink its spacer and wrap its text while still fitting. `ViewThatFits` can then keep the entries in one HStack instead of stacking them, leaving the legend overlap this change aims to fix. Make the inline layout require enough width for its entries before selecting it.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

### Issue 2
ios/HouseScanUITests/FullFlowUITests.swift:394-395
The new in-motion audit reports only findings seen in at least two passes, six seconds apart. A contrast problem during a brief card or legend transition can appear in the first pass but disappear before the second, producing neither an `audit-wallWalk-moving` finding nor an `AUDIT` line. Keeping first-pass findings in this report-only audit would make those transient problems visible.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
Summary

This PR changes the wall-map legend to select between inline and stacked layouts, adds a frozen full-legend state, reports a walk audit during motion, and extends the autopilot gate and picker waits.

  • The inline legend candidate can still accept a cramped width, so the stacked fallback may not address the overlap.
  • The moving audit can discard findings that occur in only one pass.

Reviews (1) · Last reviewed commit: "ios: the autopilot's gate waits four min..."

Comment on lines +108 to +113
HStack(spacing: 12) {
legendEntries
Spacer(minLength: 0)
depthLabel
}
VStack(alignment: .leading, spacing: 6) { legendEntries; depthLabel }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Crowded legend stays inline When the end preview, hidden sections, and depth label appear together on a narrow screen, the first layout can shrink its spacer and wrap its text while still fitting. ViewThatFits can then keep the entries in one HStack instead of stacking them, leaving the legend overlap this change aims to fix. Make the inline layout require enough width for its entries before selecting it.

Prompt To Fix With AI
This is a comment left during a code review.
Path: ios/HouseScan/UI/Camera/WallTape.swift
Line: 108-113

Comment:
**Crowded legend stays inline** When the end preview, hidden sections, and depth label appear together on a narrow screen, the first layout can shrink its spacer and wrap its text while still fitting. `ViewThatFits` can then keep the entries in one HStack instead of stacking them, leaving the legend overlap this change aims to fix. Make the inline layout require enough width for its entries before selecting it.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Claude Code Fix in Codex

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AX sizes stack, but a narrow default-size footer still chooses a shrinkable HStack that wraps entries instead of failing ViewThatFits. Require inline entries to keep ideal horizontal sizes so the stacked candidate wins when crowded. Verify end preview, hidden/skipped entries and depth label together. Evidence on alpha: ios/HouseScan/UI/Camera/WallTape.swift:108; ios/HouseScan/UI/Camera/WallTape.swift:110. This remains open in the triage for #237.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right: the inline candidate must advertise its ideal width to ViewThatFits; otherwise the proposed width lets the Text children wrap and the HStack is still considered a fit. Applying fixedSize to the whole candidate makes the crowded default-size case select the VStack instead:

Suggested change
HStack(spacing: 12) {
legendEntries
Spacer(minLength: 0)
depthLabel
}
VStack(alignment: .leading, spacing: 6) { legendEntries; depthLabel }
HStack(spacing: 12) {
legendEntries
Spacer(minLength: 0)
depthLabel
}
.fixedSize(horizontal: true, vertical: false)

This preserves the one-row layout when the end-preview, hidden/skipped, and depth-label entries all fit, while forcing the stacked candidate when their ideal widths do not.

Comment thread ios/HouseScanUITests/FullFlowUITests.swift
@AidenJohnston
AidenJohnston merged commit 42661c3 into beta Sep 27, 2026
6 checks passed
AidenJohnston added a commit that referenced this pull request Sep 27, 2026
Ship beta to main: the wall map legend fix and the walk's in-motion audit (#172)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 effective changed lines.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants