Repository navigation
ios: past-end requests keep their end; no requests past a wall end (#35, #38) - #47
Conversation
…go to review (#35) - A server band request whose span reaches past a marked end has no capture request (GapPlanner.reachesPastEnd): the coverage map records nothing past an end, so its bar stayed at 0 % and "I can't get there" was the only way out. Ground past a limit end is still recorded, so a ground request there stays capturable. It goes to review, like a request beyond capture. - A past_end request that ends without its end marked again no longer leaves that side without an end. Skipped, the end it cleared comes back with its kind and mark time. Met, the end moves on to the far edge of the ground the request showed, still unexplored (GapPlanner.endAfterPastEnd), so the next past_end request asks for the 2 m after it instead of the ground at the meter. - ServerGapTests: aBandRequestPastAMarkedEndIsNotACaptureRequest, aMetPastEndRequestMovesItsEndOn. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
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. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
Cells seen before an end was set stay in the coverage map, and the lagging-band and see-behind tasks read them: after "Can't get there" put the right end 6 in from the meter on device run 2, the walk kept asking to tilt up around 7 ft right and to tilt down at 5 ft 3 in right. Past an end nothing is observed (coveredFraction) or skipped (markSkipped), so the task could never fill and "Can't get there" didn't clear it. laggingBand, hiddenNearCamera and the see-behind check now count only cells between the ends. GuidancePlannerTests.noCameraTaskPastAMarkedEnd. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 067f413363
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if let leftEnd, min(span.x, span.y) < feet(leftEnd) - tolerance { past.append(.left) } | ||
| if let rightEnd, max(span.x, span.y) > feet(rightEnd) + tolerance { past.append(.right) } |
There was a problem hiding this comment.
Treat an exact tolerance gap as past the end
When a server band span extends exactly 0.01 ft beyond a marked end, these strict comparisons still build a capture request. However, fraction(of:coveredBy:) and the ported server logic count gaps >= 0.01 ft as missing, so coverage clipped at the end can never satisfy that request and the homeowner must skip it manually. Use the same inclusive tolerance boundary here (and account for the exported end's rounding) that request settlement uses.
Useful? React with 👍 / 👎.
…s past (#35) aRequestSpanIsReadInTheServersFeet asked for ground 0.02 ft past an unexplored end to show it isn't met. Past the end it now has no capture request, so the test checks that, and reads the shortfall from a request planned without the end. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The server added the `battery` object type (issue #27) after this branch's last CI run, and vendoredCopiesMatchServer fails on every t3/ios-mvf run until the copy is refreshed. One enum value and its description; the app doesn't export batteries yet. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Current PR #47 is |
|
Read-only review note for #47: |
…uests Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # ios/HouseScanKit/Tests/HouseScanKitTests/JSONSchemaValidatorTests.swift
|
I checked the new |
|
I merged the current |
|
Answering the caretaker's packet question, as the packet writer's owner. An inferred end must not become a homeowner mark. The spec ( As written, Please:
"Can't get there" and "Wall ends here" during the walk are different: the homeowner stood there and tapped, so those stay marks. |
|
@AidenJohnston Follow-up after merge at |
Resolves the GapPlanner/ScanEngine conflicts with #47: the selector now passes limitEnds, matches requests by view with a tolerance (same band and need, reach within 0.1 m, 80% span overlap), and publishes how many views it will actually raise as state.followUps. 'Show my result' shows only when more than one view is left. Co-authored-by: Cursor <cursoragent@cursor.com>
Brings in PRs #37, #41, #47, #48 and #51, 8604928 (result schema from t3/server 9e42970) and d0ff1be (the walk asks for the wall to 4.5 ft). Resolved: - Server requests: S3's plan(for:leftEnd:rightEnd:limitEnds:) with the item first carried into the walk's s (walkRequest), in the three call sites. - AR result: S3's in-scene result with occlusion (#41), drawn along the answer's wall (ResultPresentation.wall, else the walk's); publishWall redraws it after refreshing the result's wall. The auto-merge had put that redraw inside WallFrame's static geometry helper. - JSONSchemaValidatorTests: S3's text; the hashes match the vendored files. - Wall height: a 3D-map wall cell counts as covered once Map3DCoverage.wallHeight reaches wallWalkHeight, as S3's camera cells now do; the exported out_ft under map3d is still Map3DCoverage.wallHeight. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Branches from
t3/ios-mvfat 75dea41, which includes 3c7b83a ("end the wall where the phone is"). That commit changes where a walk end lands and refuses photos taken past an unexplored end. It doesn't touch the gap loop or the lag and see-behind tasks, so both issues still happen at its head.#35: past-end requests
What was wrong
past_enditem clears that end. The gap screen has no way to mark the end again, so the request always ended with that side cleared.past_endrequest was planned fromleftEnd ?? 0, which asks for the ground at the meter instead of the 2 m after the end.Fix
GapPlanner.reachesPastEnd: a band request that reaches past a marked end gets no capture request, and it goes to review the same wayisBeyondCapturedoes. Ground past a limit end is still capturable, since the map records it there. A span that ends within 0.01 ft of an end counts as reaching the end, not going past it.plan(for:leftEnd:rightEnd:limitEnds:)takes the limit ends, and the engine's three callers passmap.limitEnds.ScanEngine.settleClearedEnd, run fromafterGapResolved: if the past-end request ends without its end marked again:GapPlanner.endAfterPastEnd).When the end was marked again (
settlePastEnd), nothing changes.Not in this PR: the gap screen still shows no "Wall ends here" and no end question during a past-end request. The engine already accepts both (
markWallEnd,answerWallEnd), but the controls are UI work.#38: walk guidance past a wall end
What was wrong:
laggingBandandhiddenNearCameralook ±1 m around the camera and read cells that were seen before the end was set. Past an end,coveredFractionandmarkSkippedboth ignore cells, so the task could never be met or skipped. This is what device run 2 hit at 2:41–3:38.Fix:
laggingBand,hiddenNearCameraand the see-behind check now count only cells between the ends (isWithinEnds). This is the same filtergroundByMeterDonealready uses.Tests (HouseScanKit)
ServerGapTests.aBandRequestPastAMarkedEndIsNotACaptureRequest: wall, ground and facing requests past an end have no request, ground past a limit end still has one, and a span that ends at the end still has one.ServerGapTests.aMetPastEndRequestMovesItsEndOn: the end moves 2 m on, and the next request asks for the following 2 m instead of the stretch at the meter.GuidancePlannerTests.noCameraTaskPastAMarkedEnd: a lag past the right end no longer asks to tilt down (the walk goes left), and hidden cells past the ends no longer ask to see behind.GroundDepthTests.groundPastALimitEndIsExportedAndSettlesARequestnow passeslimitEnds: [.right].The app has no unit-test target, so the engine's end restore has no direct test. Its placement rule is
endAfterPastEnd, which is covered above. The UI flow's sample answer lists apast_enditem, but reading the autopilot, the band request before it is skipped on the synthetic replay, so the flow likely never reaches the past-end one. I haven't checked that on a run.Also in this PR
aRequestSpanIsReadInTheServersFeet: this test planned a ground request 0.02 ft past an unexplored end to show the request isn't met. Past the end it now gets no request at all, so the test checks that and plans the shortfall case without the end.scene.schema.jsonis refreshed tot3/server074bf1d, which adds thebatteryobject type (No way to mark an existing battery or other box on the wall #27). The server pushed that change after this branch's last CI run, sovendoredCopiesMatchServernow fails on everyt3/ios-mvfrun. If Sam refreshes it first, this commit can be dropped.Fixes #35
Fixes #38
🤖 Generated with Claude Code