Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
598 commits
Select commit Hold shift + click to select a range
ad91620
beta: merge t3/ios-mvf (e9e405d), PR #10
AidenJohnston Sep 26, 2026
f838eb6
fix(ios): say "AC unit" and spell out lengths for VoiceOver (#25)
AidenJohnston Sep 26, 2026
d3d053c
fix(ios): show "Check clearances" once the scan is sent (#31)
AidenJohnston Sep 26, 2026
e760327
fix(ios): no "Slow down" while the mark tray is open (#26)
AidenJohnston Sep 26, 2026
57a3ae1
fix(ios): spell the measurement's length formatter as a function
AidenJohnston Sep 26, 2026
11878ec
Result: say whether a rule's limit is a minimum or a maximum (B-14)
AidenJohnston Sep 26, 2026
3c7b83a
fix: end the wall where the phone is, and ask for the ground by the m…
SamGu-NRX Sep 26, 2026
75dea41
Merge the field-run fix: wall ends where the phone is
SamGu-NRX Sep 26, 2026
72144a7
Merge t3/ios-mvf into t3/run1-quick-fixes
AidenJohnston Sep 26, 2026
97ee40c
Merge t3/ios-mvf into t3/triage-quick-fixes
AidenJohnston Sep 26, 2026
21e21ce
test(ios): check the minimum's wording, not its unit (B-14)
AidenJohnston Sep 26, 2026
074bf1d
server: an existing battery keeps a new one 3 ft away (issue #27)
SamGu-NRX Sep 26, 2026
3e5446e
ios: past-end requests keep their end, and band requests past an end …
AidenJohnston Sep 26, 2026
afd02c8
experiments: add field test run 2 on build 3.1
AidenJohnston Sep 26, 2026
067f413
ios: the walk asks only for stretches between the wall's ends (#38)
AidenJohnston Sep 26, 2026
792a900
Result: an overlap reads as one, not as clearance (#40)
AidenJohnston Sep 26, 2026
3b27aaf
test(ios): refresh the vendored scene schema to t3/server 074bf1d
AidenJohnston Sep 26, 2026
6ee2874
Vendor the scene schema from t3/server 074bf1d
SamGu-NRX Sep 26, 2026
ff6645b
fix: end the side the phone is on, and no zero-length walls (#24)
AidenJohnston Sep 26, 2026
e4ce503
ios: "I can't get there" moves on to the next requested view (#39)
AidenJohnston Sep 26, 2026
c9a4473
ios: plan the 0.02 ft shortfall request without the end it now reache…
AidenJohnston Sep 26, 2026
e3a3fa9
ios: refresh the vendored scene schema to t3/server 074bf1d
AidenJohnston Sep 26, 2026
feb35a0
Merge pull request #34 from SamGu-NRX/t3/run1-quick-fixes
SamGu-NRX Sep 26, 2026
99e914c
Merge remote-tracking branch 'origin/t3/ios-mvf' into t3/past-end-req…
AidenJohnston Sep 26, 2026
067cec7
Merge remote-tracking branch 'origin/t3/ios-mvf' into t3/triage-quick…
AidenJohnston Sep 26, 2026
5c8c739
Keep wall ends near the phone, and objects on written walls
SamGu-NRX Sep 26, 2026
170d7f2
Merge remote-tracking branch 'origin/t3/ios-mvf' into t3/wall-end-guards
AidenJohnston Sep 26, 2026
0e8a559
Merge remote-tracking branch 'origin/t3/ios-mvf' into t3/wall-end-guards
AidenJohnston Sep 26, 2026
90f94bd
server: count only unseen checks in 'N checks depend on areas the sca…
AidenJohnston Sep 26, 2026
2d33cea
ios: draw the AR result in the scene so people and objects hide it (#41)
AidenJohnston Sep 26, 2026
9e42970
server: fixes from the real-phone run 2 (#44, #45, #42)
SamGu-NRX Sep 26, 2026
d0ff1be
Ask the walk for the wall to 4.5 ft; report and request above it
SamGu-NRX Sep 26, 2026
898cd4e
Merge the walking height: the walk asks for the wall to 4.5 ft
SamGu-NRX Sep 26, 2026
8604928
Vendor the result schema from t3/server 9e42970
SamGu-NRX Sep 26, 2026
3095e20
Hold an aim request while its ground is in view, and pin the field ru…
AidenJohnston Sep 26, 2026
86fd555
server: fixes from the caretaker's review of 9e42970
SamGu-NRX Sep 26, 2026
9edcd4b
Merge #50: name the checks a person must judge in the unseen summary
SamGu-NRX Sep 26, 2026
f173c8a
ios: the review flags marks lying past a wall end (#42)
AidenJohnston Sep 26, 2026
07d8660
beta: merge main (f852207), docs from PR #33
AidenJohnston Sep 26, 2026
2187518
beta: merge t3/server (9edcd4b), PR #11 (with #50)
AidenJohnston Sep 26, 2026
1263338
beta: merge t3/field-test-run2 (afd02c8), PR #46
AidenJohnston Sep 26, 2026
b69db3e
beta: merge t3/scoring-harness (90a71c5), PR #4
AidenJohnston Sep 26, 2026
63d950d
Merge pull request #51 from SamGu-NRX/t3/ar-occlusion
AidenJohnston Sep 26, 2026
cd05d67
Merge pull request #37 from SamGu-NRX/t3/triage-quick-fixes
AidenJohnston Sep 26, 2026
2f193aa
Merge pull request #48 from SamGu-NRX/t3/wall-end-guards
AidenJohnston Sep 26, 2026
d02cc11
Merge pull request #47 from SamGu-NRX/t3/past-end-requests
AidenJohnston Sep 26, 2026
20bf369
ci(ios): cut pull request runs from ~25 min to ~12 min
AidenJohnston Sep 26, 2026
ce90112
Merge origin/t3/ios-mvf into t3/gap-skip-continues (#39)
AidenJohnston Sep 26, 2026
085e0ed
Merge remote-tracking branch 'origin/t3/ios-mvf' into resolve-53
AidenJohnston Sep 26, 2026
73d7b17
Merge remote-tracking branch 'origin/t3/ios-mvf' into resolve-56
AidenJohnston Sep 26, 2026
8064f74
Ask for Motion & Fitness on the onboarding, where it is explained (is…
AidenJohnston Sep 26, 2026
871fb50
A replay launch never asks for permissions, even before its frames load
AidenJohnston Sep 26, 2026
cae4f42
Don't hold an aim request whose stretch is past a marked end
AidenJohnston Sep 26, 2026
45017ba
beta: merge t3/ios-mvf (d02cc11), PR #10 (with #51, #37, #48, #47)
AidenJohnston Sep 27, 2026
2641027
Merge pull request #57 from SamGu-NRX/t3/ios-ci-speed
AidenJohnston Sep 27, 2026
e367161
Merge pull request #53 from SamGu-NRX/t3/marks-past-ends
AidenJohnston Sep 27, 2026
4f1a8c9
CI: fail when a vendored schema can't be compared
SamGu-NRX Sep 27, 2026
3153cca
Merge t3/ios-mvf (#53 and later) into the CI drift fix
SamGu-NRX Sep 27, 2026
9607a48
Onboarding stops at a camera denial, motion permission reports its an…
AidenJohnston Sep 27, 2026
fb4c30e
Replace field-run values in a test and the demo with made-up ones
SamGu-NRX Sep 27, 2026
1b41f6d
CI: fetch the contract branches unless the compared files are checked…
SamGu-NRX Sep 27, 2026
de04c3b
Drop the live packet 1.1 schema comparison; t3/packet retired it
SamGu-NRX Sep 27, 2026
9f10fc1
Read the result's answer, clean spot, nearest failure and view links …
SamGu-NRX Sep 27, 2026
37729cc
Fix the #10 caretaker's findings on the anchor, ground, source and sc…
SamGu-NRX Sep 27, 2026
257a6a7
Map the nearest spot, the rules notice and each check's view into the…
SamGu-NRX Sep 27, 2026
e4f8ef4
Lead the result with the answer and fold the full checks under Details
SamGu-NRX Sep 27, 2026
534813b
Swap the upload headline at once instead of crossfading it
SamGu-NRX Sep 27, 2026
c05f1c2
Show the replay and autopilot badge as a quiet pill
SamGu-NRX Sep 27, 2026
9ee7686
Fill the launch screen with the Canvas colour
SamGu-NRX Sep 27, 2026
4b71161
Merge the engine fixes from the #10 review: anchor turn, ground plane…
SamGu-NRX Sep 27, 2026
47dd609
Result model follows corners; Reduce Motion stops moving things; audi…
SamGu-NRX Sep 27, 2026
ee1087e
Merge the UI fixes from the #10 review: corners in the result model, …
SamGu-NRX Sep 27, 2026
5150321
ios: deflate the text entries in the shared scan zip
AidenJohnston Sep 27, 2026
f232b9f
Retry uploads the server answered 408 or 429
SamGu-NRX Sep 27, 2026
87dd34a
Merge main (f852207) into t3/ios-mvf
SamGu-NRX Sep 27, 2026
02d74f6
ios: show the meter's brand beside the number candidates
SamGu-NRX Sep 27, 2026
916838f
Merge remote-tracking branch 'origin/t3/ios-mvf' into t3/meter-brand
SamGu-NRX Sep 27, 2026
c9a46ac
Give the Details header an explicit button the UI tests can open
SamGu-NRX Sep 27, 2026
74fb280
Show which rules answered and keep the nearest spot at the server's size
SamGu-NRX Sep 27, 2026
0f866a0
Use the system disclosure for Details and keep one filled button
SamGu-NRX Sep 27, 2026
7bc900a
Drive the result screenshots and UI tests from server answer files
SamGu-NRX Sep 27, 2026
b9851e1
Meter close-up: out of focus at 6.68, the eval's current threshold
SamGu-NRX Sep 27, 2026
96fdcaa
beta: assemble current iOS fixes for simulator QA
SamGu-NRX Sep 27, 2026
3599ce5
beta: include walk guidance regression coverage for testing
SamGu-NRX Sep 27, 2026
d9a7759
beta: include onboarding motion permission for testing
SamGu-NRX Sep 27, 2026
0d5286e
beta: exercise refused-view progression with known coverage limitations
SamGu-NRX Sep 27, 2026
bc5a1ac
UI tests: read audit elements from one snapshot, never live
SamGu-NRX Sep 27, 2026
5ce6088
Merge t3/gap-skip-continues (#49) into t3/41-gap-loop-result
AidenJohnston Sep 27, 2026
659e5ae
ios: 44 pt reject target, and the brand lives only beside its number
SamGu-NRX Sep 27, 2026
0a3a05e
Merge remote-tracking branch 'origin/t3/ios-mvf' into t3/meter-brand
SamGu-NRX Sep 27, 2026
00fb017
Show the sample badge as a quiet pill under Replay
SamGu-NRX Sep 27, 2026
b5006fc
ios: "leaves out N ft you walked" only on walk tasks, and on the end …
AidenJohnston Sep 27, 2026
41291e8
AR result: keep the Canvas battery until RealityKit is seen drawing it
AidenJohnston Sep 27, 2026
a4b8b27
ios: card replies name the task, stay under gate coaching, lock after…
AidenJohnston Sep 27, 2026
c4dec62
ios: gate coaching keeps the task card, waits out dark flicker, and s…
AidenJohnston Sep 27, 2026
9b5348b
ios: a follow-up asking for more is a new view; "Show my result" on e…
AidenJohnston Sep 27, 2026
c07bafe
ios: hold "Check clearances" and its tick on the upload screen (#31)
AidenJohnston Sep 27, 2026
4ca919d
ios: name the unexplored end nearer the meter than the spot (#83)
AidenJohnston Sep 27, 2026
5c15da8
ios: name a server request's stretch by its ends, clipped to the wall…
AidenJohnston Sep 27, 2026
9c2a567
Ground band and no-raise; check estimated meter taps; re-fit before t…
AidenJohnston Sep 27, 2026
3cec36d
Merge t3/ios-mvf (b9851e1) into t3/experience-result
SamGu-NRX Sep 27, 2026
9b0acc5
ios: gate coaching keeps the task's second line, refusals keep their …
AidenJohnston Sep 27, 2026
9704867
Aim ring fills as its stretch is captured, and says what it is for
AidenJohnston Sep 27, 2026
94e87b5
Merge the audit's stable element reads (the #24 test flake)
SamGu-NRX Sep 27, 2026
f141a62
Log each meter-anchor correction with its total since the tap
AidenJohnston Sep 27, 2026
6ea58d5
ios: hold a walk aim until it is met or stalls, and ask for the meter…
AidenJohnston Sep 27, 2026
07be67f
Ask the homeowner to confirm the spot before showing the result
SamGu-NRX Sep 27, 2026
d17296b
Never call a spot with no checks a fit or clean
SamGu-NRX Sep 27, 2026
d3b4820
List under Settles only the checks a view settles
SamGu-NRX Sep 27, 2026
06abc43
Size sweep zones by the nearest spot when there is no spot
SamGu-NRX Sep 27, 2026
db80cfb
Build the sample badge as one Text so it passes the Dynamic Type audit
SamGu-NRX Sep 27, 2026
7ca5f5b
Merge commit '0a3a05e200fa42daf002d5fc77687c898935cffa' into codex/be…
SamGu-NRX Sep 27, 2026
44f38ab
Merge commit '5150321a22f540e669755270dd76caa23957d8a4' into codex/be…
SamGu-NRX Sep 27, 2026
a8bd17a
Cap Retry-After at a day so the wait message can't overflow
SamGu-NRX Sep 27, 2026
f14947e
Keep "Can't get there" on screen through the capture gate's coaching
SamGu-NRX Sep 27, 2026
acd3d35
Keep the last completed scans across a relaunch, and stamp each scan
SamGu-NRX Sep 27, 2026
057131b
Merge commit 'f14947eb9bff5b707660c8d873b72e60ba056631' into codex/be…
SamGu-NRX Sep 27, 2026
4c43e44
Merge commit 'b5006fca782aa280caa767e476fd5c62b496a9e2' into codex/be…
SamGu-NRX Sep 27, 2026
2d476ef
Merge commit 'a4b8b2723736b5f2b29c5605569dcdb76c6d8a69' into codex/be…
SamGu-NRX Sep 27, 2026
f84df3a
Merge commit '9c2a5676fff6b31b1eb1e4bde63a5473ae61b5f3' into codex/be…
SamGu-NRX Sep 27, 2026
9f40386
Merge commit 'f141a6212f3bba8c26695bf3cb5cb40ef0f1cf9d' into codex/be…
SamGu-NRX Sep 27, 2026
956744c
Merge commit '5c15da8705ef09bef33a71d1d1dca27deddb7480' into codex/be…
SamGu-NRX Sep 27, 2026
9583b12
Regenerate the Xcode project for the result answer fixtures
SamGu-NRX Sep 27, 2026
72c32f8
Merge the spot confirmation: the homeowner checks the chosen spot bef…
SamGu-NRX Sep 27, 2026
8a9ee81
Show the instruction card's reply without a fade
SamGu-NRX Sep 27, 2026
8ea82c0
Merge #89: read the meter's brand from the close-up
SamGu-NRX Sep 27, 2026
577acc4
Merge keeping the last scan across a relaunch, stamped with its revision
SamGu-NRX Sep 27, 2026
6f5d1aa
Integrate result redesign with beta gap-loop fixes
SamGu-NRX Sep 27, 2026
722df5f
Merge t3/ios-mvf (f14947e) into t3/41-card-replies
AidenJohnston Sep 27, 2026
98d96ca
ios: card words and reply land together, only the scrim eases
AidenJohnston Sep 27, 2026
8487a02
ios: a stalled lagging-band aim gives way, and the aim card's directi…
AidenJohnston Sep 27, 2026
3b80f78
Merge t3/ios-mvf into t3/41-gap-loop-result
AidenJohnston Sep 27, 2026
eec3862
Merge t3/ios-mvf (f14947e) into t3/41-gate-coaching
AidenJohnston Sep 27, 2026
633c26d
ios: gate coaching rides along on the gap request, walk-out requests …
AidenJohnston Sep 27, 2026
a44780a
ios: "Show my result" below the tape at accessibility sizes (#39)
AidenJohnston Sep 27, 2026
1214baa
Merge non-LiDAR AR and aim guidance for beta testing
SamGu-NRX Sep 27, 2026
4be491e
Merge repaired walk guidance for beta testing
SamGu-NRX Sep 27, 2026
6d82e62
Aim ring: hold the completed ring green with its tick for a moment
AidenJohnston Sep 27, 2026
6f7d378
Merge reply-card transition repair for beta testing
SamGu-NRX Sep 27, 2026
44370cb
Merge accessible follow-up controls repair for beta testing
SamGu-NRX Sep 27, 2026
5bc81fb
Merge coaching repairs while preserving beta guidance and replies
SamGu-NRX Sep 27, 2026
d4e008c
UI test: tap only once the element can take the tap
SamGu-NRX Sep 27, 2026
87be505
Merge retained scans and spot confirmation into beta candidate
SamGu-NRX Sep 27, 2026
f35d850
Merge visible aim completion while retaining beta coaching and retent…
SamGu-NRX Sep 27, 2026
6406271
fix(export): send a one-tap AC unit as an assumed 3 ft square
AidenJohnston Sep 27, 2026
1da41b3
feat(review): soft-gate Looks complete and add Not sure to windows
AidenJohnston Sep 27, 2026
1b3229a
ios: the meter-anchor drift log is kept on the device and never rests…
AidenJohnston Sep 27, 2026
38bd756
ios: once RealityKit draws the AR result it keeps it while the batter…
AidenJohnston Sep 27, 2026
d5c403d
ios: a server request names its whole stretch, its ends rounded outward
AidenJohnston Sep 27, 2026
6f20468
ios: ask before a second "Can't get there" ends the scan, and show no…
AidenJohnston Sep 27, 2026
b93bf67
fix(ios): end a side at the phone; confirm and back out of the next wall
AidenJohnston Sep 27, 2026
f07d6c3
Merge reviewed beta follow-ups for anchors and requested spans
SamGu-NRX Sep 27, 2026
da571e2
Merge reviewed AC footprint and feature review follow-ups
SamGu-NRX Sep 27, 2026
4896e0a
Allow the expanded beta UI suite to finish
SamGu-NRX Sep 27, 2026
fbab420
Merge beta into t3/41-target-ring
AidenJohnston Sep 27, 2026
b2c6367
Aim ring: legend keeps to the lane, asks for a whole step, ring count…
AidenJohnston Sep 27, 2026
a9e9b6d
Merge pull request #131 from SamGu-NRX/t3/41-ac-review
AidenJohnston Sep 27, 2026
25f1f45
Merge pull request #132 from SamGu-NRX/t3/41-review-followups
AidenJohnston Sep 27, 2026
450fdf7
Merge remote-tracking branch 'origin/beta' into t3/41-ends-corner
AidenJohnston Sep 27, 2026
aef9bd3
Preserve Aiden beta merge history in the combined candidate
SamGu-NRX Sep 27, 2026
15e18dc
Merge origin/beta (25f1f45) into t3/41-walk-exit
AidenJohnston Sep 27, 2026
057cfd4
ios: an end at the phone out along the wall counts as walked
AidenJohnston Sep 27, 2026
686a1d3
ios: after RealityKit takes over the AR result, it takes it back with…
AidenJohnston Sep 27, 2026
05003e5
ios: the AR result's chevron shows for a spot under the card or the D…
AidenJohnston Sep 27, 2026
5c83ad4
ios: the aim ring's legend sits on the card's solid scrim
AidenJohnston Sep 27, 2026
32fc075
fix(ios): ring on the proposed corner; review follow-ups for #136
AidenJohnston Sep 27, 2026
1e9c6b5
Restore the spot-refusal notice required by the result merge
SamGu-NRX Sep 27, 2026
8b42e13
Aim ring legend: measure the card, move under it when there is no roo…
AidenJohnston Sep 27, 2026
6af4d8f
ios: practice meter, a drawn sample meter for scanning without one
SamGu-NRX Sep 27, 2026
50a2953
Merge commit '5c83ad49efd108874102b75327798ecd4d654f82' into codex/be…
SamGu-NRX Sep 27, 2026
c60e6ff
Merge pull request #136 from SamGu-NRX/t3/41-ends-corner
AidenJohnston Sep 27, 2026
7f3c486
ios: recheck the scan after drawing the practice close-up photo
SamGu-NRX Sep 27, 2026
7724c42
Merge latest aim layout into beta QA follow-ups
SamGu-NRX Sep 27, 2026
76462dc
Preserve latest beta wall-end and corner integration
SamGu-NRX Sep 27, 2026
51184fe
Draw the prototype's fog and live dots over the walk
SamGu-NRX Sep 27, 2026
86da28d
fix(ios): bound an end at the phone by the evidence; settle tracking;…
AidenJohnston Sep 27, 2026
fd50357
fix(ios): refuse object taps that meet the wall under the floor or fa…
AidenJohnston Sep 27, 2026
73d931e
Merge origin/beta (c60e6ff, #136) into t3/41-walk-exit
AidenJohnston Sep 27, 2026
b8b3c37
ios: result marks follow-ups from #110 (heading, AR outline, outline …
AidenJohnston Sep 27, 2026
6bc1df0
Integrate practice meter with beta permissions and mode badges
SamGu-NRX Sep 27, 2026
2c5063d
ios: recover from camera access, keep rejected close-ups off the mete…
AidenJohnston Sep 27, 2026
e085372
ios: preview the walk's moves in onboarding
AidenJohnston Sep 27, 2026
15cbb77
ios: hoist StillCatalog's mutating calls out of #expect
AidenJohnston Sep 27, 2026
94c2e2a
Keep hidden and requested tints in the band, and rag the fog's edges
SamGu-NRX Sep 27, 2026
48d024a
Say in the iOS README where the live fog's rule and dots live
SamGu-NRX Sep 27, 2026
9defff1
Keep narrow unseen cells fogged, move dots exactly on corrections
SamGu-NRX Sep 27, 2026
4606fe2
Merge commit '9defff1' into t3/live-fog-beta
SamGu-NRX Sep 27, 2026
0964ecc
ios: the result card offers no capture once the camera has failed
AidenJohnston Sep 27, 2026
5267a25
Merge reviewed object-tap reach fix into beta candidate
SamGu-NRX Sep 27, 2026
6e8403f
Merge origin/beta into t3/110-result-details-followups
AidenJohnston Sep 27, 2026
88912e5
Merge origin/beta (6bc1df0) into t3/41-walk-exit
AidenJohnston Sep 27, 2026
16ad21b
Split corner-crossing marks, share the ground entry cap, aim at one m…
AidenJohnston Sep 27, 2026
9d0a662
Update aim tests for the contiguous missing run
AidenJohnston Sep 27, 2026
de5357f
ios: "End the scan here?" offers Start over when too little was walke…
AidenJohnston Sep 27, 2026
90b1821
ios: aim ring legend under the card in the chrome's stack, as one Text
AidenJohnston Sep 27, 2026
c8dd2f8
ios: UI test taps scroll to a control below the fold
AidenJohnston Sep 27, 2026
4661682
Merge Aiden beta UI layout and test navigation repairs
SamGu-NRX Sep 27, 2026
4482ab1
test(ios): isolate Practice and restart through result Details
SamGu-NRX Sep 27, 2026
6836db7
Tune the fog, the hidden tint and the dots against the prototype videos
SamGu-NRX Sep 27, 2026
8d9bfd7
test(ios): use synthetic object tap fixtures
SamGu-NRX Sep 27, 2026
5f3f4c0
Merge pull request #135 from SamGu-NRX/t3/41-walk-exit
AidenJohnston Sep 27, 2026
8383eb5
Merge origin/beta into t3/41-ends-corner-2; drop the tracking debounce
AidenJohnston Sep 27, 2026
1d6adb6
test(ios): use synthetic object tap fixtures
SamGu-NRX Sep 27, 2026
b2d80e8
ios: preview the ground tilt at the meter before the walk
AidenJohnston Sep 27, 2026
9a0e275
fix(ios): aim the AR spot checks at the outline for an unclean spot
AidenJohnston Sep 27, 2026
3ec22b2
Skip lagging runs whose aim stretch can't be met
AidenJohnston Sep 27, 2026
e6ffbce
Merge pull request #149 from SamGu-NRX/t3/126-closeup-reduce-motion-r…
AidenJohnston Sep 27, 2026
e7af970
Merge pull request #151 from SamGu-NRX/t3/140-object-tap-reach
AidenJohnston Sep 27, 2026
30487e5
Merge remote-tracking branch 'origin/beta' into HEAD
AidenJohnston Sep 27, 2026
3540c42
Merge current beta recovery and walk-exit fixes into QA candidate
SamGu-NRX Sep 27, 2026
cb66a76
Merge reviewed result actions and AR outline corrections
SamGu-NRX Sep 27, 2026
644beb2
Integrate onboarding moves while retaining Practice accessibility cov…
SamGu-NRX Sep 27, 2026
7bed770
Merge pull request #146 from SamGu-NRX/t3/110-result-details-followups
AidenJohnston Sep 27, 2026
5ec47cb
Merge pull request #154 from SamGu-NRX/t3/129-corner-and-settlement-l…
AidenJohnston Sep 27, 2026
73f3288
Merge pull request #152 from SamGu-NRX/t3/85-onboarding-moves
AidenJohnston Sep 27, 2026
2e46bac
Merge live fog and LiDAR dots into the combined beta candidate
SamGu-NRX Sep 27, 2026
4a5d20c
Preserve beta history and reviewed ground-request stall repair
SamGu-NRX Sep 27, 2026
60c8caf
Merge pull request #147 from SamGu-NRX/t3/41-ends-corner-2
AidenJohnston Sep 27, 2026
af1914e
ios: UI test taps a control past the bottom edge where it is
AidenJohnston Sep 27, 2026
660d7bf
Merge reviewed beta end-position follow-up into demo candidate
SamGu-NRX Sep 27, 2026
f0bf3bf
ios: stamp the commit in the TestFlight job, not a project script phase
AidenJohnston Sep 27, 2026
a0d3341
ios: regenerate the project without the stamp script phase (XcodeGen …
AidenJohnston Sep 27, 2026
b609540
ios: stamp comments name the TestFlight step, not the removed build p…
AidenJohnston Sep 27, 2026
7b85a39
Merge pull request #161 from SamGu-NRX/t3/testflight-stamp
AidenJohnston Sep 27, 2026
5532f22
Merge reviewed test scrolling correction for combined beta QA
SamGu-NRX Sep 27, 2026
6d73fff
Preserve beta TestFlight stamping repair in demo candidate
SamGu-NRX Sep 27, 2026
a4479c0
Merge pull request #155 from SamGu-NRX/t3/41-beta-green
AidenJohnston Sep 27, 2026
2db95af
Preserve beta merge history for the included aim repair
SamGu-NRX Sep 27, 2026
f45fef0
Give the instruction card's reply button a solid fill
SamGu-NRX Sep 27, 2026
3011831
ios tests: audit the walk once the autopilot holds it
AidenJohnston Sep 27, 2026
5ceaa8d
Keep the Practice label visible at large text sizes
SamGu-NRX Sep 27, 2026
ab56e2f
ios: land an AC tap on the ground when its ray meets the wall under t…
AidenJohnston Sep 27, 2026
029050e
Replay: an upper walk that sees the wall above 6.5 ft, and a gap the …
SamGu-NRX Sep 27, 2026
59e0bc0
ios: a corridor's far wall ends the space instead of hiding it (#160)
AidenJohnston Sep 27, 2026
a5e4bf7
ios: say where the space ends on a walk-out request (#164)
AidenJohnston Sep 27, 2026
64b9719
ios: report a far surface the walk went up to as a facing gap (#164)
AidenJohnston Sep 27, 2026
a3c789f
ios: don't capture the gap request in the walk-out log (#164)
AidenJohnston Sep 27, 2026
9228ed4
ios: deflate zip entries through a fixed buffer instead of an input-s…
AidenJohnston Sep 27, 2026
f47f361
ios: stand the AC bracket on the ground, and test the fallback under …
AidenJohnston Sep 27, 2026
6b21236
ios: say which field run found the far wall as a plane (#160)
AidenJohnston Sep 27, 2026
9fc6019
ios tests: say what the held walk shows
AidenJohnston Sep 27, 2026
756cc68
Merge pull request #166 from SamGu-NRX/t3/163-ac-ground-tap
AidenJohnston Sep 27, 2026
a1c2bcf
Merge pull request #169 from SamGu-NRX/t3/ci-flake-fixes-beta
AidenJohnston Sep 27, 2026
473e8fd
Revert "ios: report a far surface the walk went up to as a facing gap…
AidenJohnston Sep 27, 2026
99dc65d
ios: never take the wall's own plane for where the space ends (#160, …
AidenJohnston Sep 27, 2026
1645411
ios: keep a walk-out's "space ends" for the request once shown (#164)
AidenJohnston Sep 27, 2026
381d0d3
ios: hold a plane's ends to the nearest parallel piece's line (#160, …
AidenJohnston Sep 27, 2026
ed1c3af
Merge pull request #168 from SamGu-NRX/t3/164-space-ends
AidenJohnston Sep 27, 2026
6ee8822
Merge remote-tracking branch 'origin/beta' into t3/research-handoff-o…
AidenJohnston Sep 27, 2026
4f530ca
Merge remote-tracking branch 'origin/main' into t3/research-handoff-o…
AidenJohnston Sep 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .github/labels.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@
"color": "b60205",
"description": "Not ready to merge. State what must change before it is ready."
},
{
"name": "full-ui",
"color": "5319e7",
"description": "iOS CI also runs the every-state accessibility audit (about 10 more minutes)."
},
{
"name": "size:XS",
"color": "0e8a16",
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/evals.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Evals

on:
push:
branches: [main]
paths:
- "experiments/evals/**"
- ".github/workflows/evals.yml"
pull_request:
paths:
- "experiments/evals/**"
- ".github/workflows/evals.yml"

permissions:
contents: read

concurrency:
group: evals-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
evals-checks:
name: Evals checks
runs-on: ubuntu-24.04
timeout-minutes: 10
defaults:
run:
working-directory: experiments/evals
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
# Reads tool.uv.required-version from experiments/evals/pyproject.toml.
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
with:
working-directory: experiments/evals
# The datasets are non-commercial and never in git, so CI runs the metric code's unit tests
# (hand-computed cases), lint and format; the result tables are regenerated locally.
- run: uv sync --locked
- run: uv run ruff check .
- run: uv run ruff format --check .
- run: uv run pytest -q
106 changes: 102 additions & 4 deletions .github/workflows/ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,57 @@ name: iOS

on:
push:
branches: [main]
branches: [main, t3/ios-mvf]
paths:
- "ios/**"
- "!ios/**/*.md"
- ".github/workflows/ios.yml"
pull_request:
# ready_for_review: drafts are skipped below, so run once a draft is marked ready.
# labeled: adding full-ui reruns the pull request with the accessibility audit.
types: [opened, synchronize, reopened, ready_for_review, labeled]
paths:
- "ios/**"
- "!ios/**/*.md"
- ".github/workflows/ios.yml"
# Runs every test, the audit included, on any branch.
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ios-${{ github.ref }}
# Adding any label other than full-ui gets a group of its own, so it cannot cancel a real run.
group: ios-${{ github.ref }}${{ github.event.action == 'labeled' && github.event.label.name != 'full-ui' && format('-{0}', github.run_id) || '' }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
ios-build:
name: iOS build
# A free account runs 5 macOS jobs at once, shared by every open pull request, so drafts and
# labels other than full-ui don't take a slot.
if: >-
github.event_name != 'pull_request' ||
(!github.event.pull_request.draft &&
(github.event.action != 'labeled' || github.event.label.name == 'full-ui'))
# macos-26 (arm64) is the newest GA macOS image. The xcode-27 image is still a preview.
runs-on: macos-26
timeout-minutes: 30
# Beta run 36302099002 took 43 minutes before the spot-confirmation and review checks
# were added. Leave room for those checks without dropping the every-state audit.
timeout-minutes: 60
env:
# Newest stable Xcode on macos-26 per images/macos/macos-26-arm64-Readme.md (image 20260907).
DEVELOPER_DIR: /Applications/Xcode_26.6.app/Contents/Developer
# iPhone 17 on iOS 26.5 ships with Xcode 26.6 on macos-26 (images/macos/macos-26-arm64-Readme.md).
SIM_NAME: iPhone 17
SIM_OS: "26.5"
# Homebrew only installs the latest XcodeGen. The release zip gives an exact version,
# and the drift check below needs the same version the committed project was made with.
XCODEGEN_VERSION: 2.46.0
XCODEGEN_SHA256: 4d9e34b62172d645eed6457cac13fc222569974098ef4ee9c3368bedf0196806
# The every-state accessibility audit relaunches the app 65 times (about 10 min). Pull
# requests skip it unless labelled full-ui; pushes and manual runs always include it.
FULL_UI: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'full-ui') }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
Expand All @@ -45,6 +67,45 @@ jobs:
xcodebuild -version
swift --version

# Booting takes 2 to 3 minutes and needs nothing from the build, so it runs alongside the
# steps below; the UI test step waits for it.
- name: Boot the Simulator in the background
run: |
runtime="com.apple.CoreSimulator.SimRuntime.iOS-${SIM_OS//./-}"
udid="$(xcrun simctl list devices available -j \
| jq -r --arg runtime "$runtime" --arg name "$SIM_NAME" \
'(.devices[$runtime] // [])[] | select(.name == $name) | .udid' | head -n 1)"
if [ -z "$udid" ]; then
echo "::error::No $SIM_NAME on iOS $SIM_OS on this runner image. Pick one from the image readme."
xcrun simctl list devices available
exit 1
fi
echo "SIM_UDID=$udid" >> "$GITHUB_ENV"
nohup xcrun simctl bootstatus "$udid" -b > "$RUNNER_TEMP/simulator-boot.log" 2>&1 &

# The package's drift test compares the vendored server schemas with the server's own copies:
# the checkout's files once that branch merges, else the t3/server branch, which the shallow
# checkout leaves out. One of the two is required:
# a failed fetch fails the run, and HOUSESCAN_REQUIRE_UPSTREAM makes the tests fail rather
# than skip, so CI can't go green without comparing. The checkout counts only when it holds
# every compared file: a folder alone isn't enough (main has a server/ without schemas).
- name: Fetch the server contract
run: |
fetch_unless_present() {
local branch="$1"; shift
local missing=0
for file in "$@"; do [ -f "$file" ] || missing=1; done
if [ "$missing" = 0 ]; then
echo "$* are in the checkout; the drift tests read them."
return
fi
if ! git fetch --no-tags --depth=1 origin "+refs/heads/$branch:refs/remotes/origin/$branch"; then
echo "::error::Neither the checkout nor $branch holds $*, so the vendored copies can't be compared."
exit 1
fi
}
fetch_unless_present t3/server server/schemas/scene.schema.json server/schemas/result.schema.json server/tests/fixtures/example-scene.json

- name: Install XcodeGen
run: |
curl -fsSL -o "$RUNNER_TEMP/xcodegen.zip" \
Expand All @@ -69,7 +130,44 @@ jobs:
exit 1
fi

- name: Test HouseScanKit
# The capture logic is a plain Swift package; its tests run on macOS without a Simulator.
env:
HOUSESCAN_REQUIRE_UPSTREAM: "1"
run: swift test --package-path ios/HouseScanKit -Xswiftc -warnings-as-errors

# CI builds once from clean, so the index Xcode keeps for editing is wasted work.
- name: Build
run: >-
xcodebuild -project ios/HouseScan.xcodeproj -scheme HouseScan -configuration Debug
-destination "generic/platform=iOS" CODE_SIGNING_ALLOWED=NO build
-destination "generic/platform=iOS" CODE_SIGNING_ALLOWED=NO COMPILER_INDEX_STORE_ENABLE=NO build

- name: Wait for the Simulator
timeout-minutes: 10
run: |
xcrun simctl bootstatus "$SIM_UDID" -b
echo "Booted $SIM_NAME on iOS $SIM_OS ($SIM_UDID)."

- name: UI test the whole flow in the Simulator
# Replays the committed synthetic wall (ios/HouseScanUITests/Fixtures/synthetic-wall) with
# -autopilot and the bundled sample result.
run: |
skip=()
if [ "$FULL_UI" != "true" ]; then
skip=(-skip-testing:HouseScanUITests/ScreenStatesUITests/testEveryStatePassesTheAccessibilityAudit)
echo "::notice::Skipped the every-state accessibility audit (about 10 min). Add the full-ui label to run it on this pull request."
fi
xcodebuild -project ios/HouseScan.xcodeproj -scheme HouseScan -configuration Debug \
-destination "id=$SIM_UDID" \
-resultBundlePath "$RUNNER_TEMP/HouseScanUITests.xcresult" \
-only-testing:HouseScanUITests "${skip[@]}" \
COMPILER_INDEX_STORE_ENABLE=NO test

- name: Keep UI test screenshots
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: ui-test-results
path: ${{ runner.temp }}/HouseScanUITests.xcresult
if-no-files-found: ignore
retention-days: 7
97 changes: 97 additions & 0 deletions .github/workflows/measure-lab.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Measure lab

on:
push:
branches: [main]
paths:
- "experiments/measure-lab/**"
- ".github/workflows/measure-lab.yml"
pull_request:
paths:
- "experiments/measure-lab/**"
- ".github/workflows/measure-lab.yml"

permissions:
contents: read

concurrency:
group: measure-lab-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
geometry-linux:
name: Measure lab geometry (Linux)
runs-on: ubuntu-24.04
timeout-minutes: 15
container:
# Swift 6.2 is the oldest toolchain the tests compile with (their raw-identifier names need
# it); the app job's Xcode 26.6 ships Swift 6.3. Pinned by digest so a retag can't change
# the compiler under the tests.
image: swift:6.2-noble@sha256:9bea530093ffff8cf6c259991715ee843fe4d0f932e612f7f4b79cca6e00db87
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Show toolchain
run: swift --version

- name: Test
working-directory: experiments/measure-lab/Geometry
run: swift test

app-build:
name: Measure lab app build
# Same image and Xcode as .github/workflows/ios.yml.
runs-on: macos-26
timeout-minutes: 30
env:
DEVELOPER_DIR: /Applications/Xcode_26.6.app/Contents/Developer
XCODEGEN_VERSION: 2.46.0
XCODEGEN_SHA256: 4d9e34b62172d645eed6457cac13fc222569974098ef4ee9c3368bedf0196806
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Show toolchain
run: |
if [ ! -d "$DEVELOPER_DIR" ]; then
echo "::error::$DEVELOPER_DIR is not on this runner image. Pick an installed Xcode from the image readme."
exit 1
fi
xcodebuild -version
swift --version

- name: Install XcodeGen
run: |
curl -fsSL -o "$RUNNER_TEMP/xcodegen.zip" \
"https://github.com/yonaskolb/XcodeGen/releases/download/${XCODEGEN_VERSION}/xcodegen.zip"
echo "${XCODEGEN_SHA256} $RUNNER_TEMP/xcodegen.zip" | shasum -a 256 -c -
unzip -q "$RUNNER_TEMP/xcodegen.zip" -d "$RUNNER_TEMP"
echo "$RUNNER_TEMP/xcodegen/bin" >> "$GITHUB_PATH"

- name: Generate project
run: xcodegen generate --spec experiments/measure-lab/project.yml

- name: Check committed project matches project.yml
run: |
if ! git diff --exit-code -- experiments/measure-lab; then
echo "::error::MeasureLab.xcodeproj differs from project.yml. Run 'make project' in experiments/measure-lab (XcodeGen ${XCODEGEN_VERSION}) and commit the result."
exit 1
fi
untracked="$(git ls-files --others --exclude-standard -- experiments/measure-lab)"
if [ -n "$untracked" ]; then
echo "::error::xcodegen generate wrote files that are not committed. Run 'make project' and commit them."
echo "$untracked"
exit 1
fi

- name: Test geometry on macOS
working-directory: experiments/measure-lab/Geometry
run: swift test

- name: Build
run: >-
xcodebuild -project experiments/measure-lab/MeasureLab.xcodeproj -scheme MeasureLab
-configuration Debug -destination "generic/platform=iOS" CODE_SIGNING_ALLOWED=NO build
45 changes: 45 additions & 0 deletions .github/workflows/meter-closeup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Meter close-up experiment

on:
push:
branches: [main]
paths:
- "experiments/meter-closeup/**"
- ".github/workflows/meter-closeup.yml"
pull_request:
paths:
- "experiments/meter-closeup/**"
- ".github/workflows/meter-closeup.yml"

permissions:
contents: read

concurrency:
group: meter-closeup-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
checks:
name: Meter close-up checks
runs-on: ubuntu-24.04
timeout-minutes: 10
defaults:
run:
working-directory: experiments/meter-closeup
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
with:
working-directory: experiments/meter-closeup
# The unit tests cover the metric code only; the Vision reader needs macOS and the photos.
- run: uv sync --locked
- run: uv run ruff check .
- run: uv run ruff format --check .
- run: uv run pytest -q
# Looks for any transcribed meter identifier in the tracked files. The key stays in a
# repository secret; without it the step fails with an explanation.
- run: uv run python -m meter_eval.leakcheck
env:
METER_HMAC_KEY: ${{ secrets.METER_HMAC_KEY }}
Comment on lines +43 to +45

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 Fork pull requests fail CI

When a fork pull request changes the meter close-up experiment, this workflow runs without the repository secret. METER_HMAC_KEY is empty, and the leak check raises FileNotFoundError because a fresh runner has no local key file. The check therefore fails even when the PR contains no meter identifier. Provide a fork-safe way to run or report this check.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/meter-closeup.yml
Line: 43-45

Comment:
**Fork pull requests fail CI**

When a fork pull request changes the meter close-up experiment, this workflow runs without the repository secret. `METER_HMAC_KEY` is empty, and the leak check raises `FileNotFoundError` because a fresh runner has no local key file. The check therefore fails even when the PR contains no meter identifier. Provide a fork-safe way to run or report this check.

---

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

Fix in Claude Code Fix in Codex

46 changes: 46 additions & 0 deletions .github/workflows/panel-label.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Panel label experiment

on:
push:
branches: [main]
paths:
- "experiments/panel-label/**"
- ".github/workflows/panel-label.yml"
pull_request:
paths:
- "experiments/panel-label/**"
- ".github/workflows/panel-label.yml"

permissions:
contents: read

concurrency:
group: panel-label-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
checks:
name: Panel label checks
runs-on: ubuntu-24.04
timeout-minutes: 10
defaults:
run:
working-directory: experiments/panel-label
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
with:
working-directory: experiments/panel-label
- run: uv sync --locked
- run: uv run ruff check .
- run: uv run ruff format --check .
- run: uv run pytest -q
# Photos of real panels can show addresses and inspection stickers; they stay out of git.
- name: No photos committed
run: |
if git ls-files . | grep -iE '\.(jpe?g|png|heic|webp|tiff?)$'; then
echo "Photos must stay in ~/house-scanning-data/panel, not in the repository." >&2
exit 1
fi
Loading
Loading