Skip to content
This repository was archived by the owner on Oct 23, 2026. It is now read-only.

Ride on floor agreement at the wall threshold (#76) - #78

Merged
Jpatching merged 3 commits into
mainfrom
76-ground-agreement-decision
Oct 18, 2026
Merged

Jpatching merged 3 commits into
mainfrom
76-ground-agreement-decision

Conversation

@Jpatching

Copy link
Copy Markdown
Owner

Part of #76. Includes the Slice 1 commit (51372c7), which was only ever on a local main.

Summary

Riding now needs floor agreement: GTA's ground under the rider must belong to the floor the coverage window describes. Previously it had to match the triangles within 0.05 m. Decision record: ADR 0004, new "Floor agreement" section.

 riding tick
   ground = GET_GROUND_Z(rider + 2)
-  |ground - surface| > 0.05 m           -> stop "surface-input-time-unavailable"
+  |ground - surface| > WALL_THRESHOLD   -> stop "floor-agreement-lost"   # 0.3 m, every surface
 mount preparation
   |ground - ground at F6| > 0.05 m      -> refuse   # unchanged: compares GTA ground with itself
combine_skate.js   surfaceObservation()       JS tolerance  = WALL_THRESHOLD
connection.rs      Surface::observation()     Rust tolerance = FLOOR_AGREEMENT (0.3)
GLOSSARY.md        + Floor agreement
AGENTS.md          + cut new branches from a freshly fetched origin/main  (separate commit)

Evidence

  • Before: two 2 m samples drawn as one straight triangle miss real ground by more than 0.05 m. With the old check, ordinary streets would end rides:
    coverage-window: rolling R=8.1 m keeps floor agreement   FAIL (error 0.079 m > 0.05)
    rust: observation(ground = surface + 0.29) passes        FAIL
    script: planter between samples -> "floor-agreement-lost" FAIL (no such reason)
    
    After: python3 scripts/verify.py passes:
    REPORT: interpolation error: R=25.9m 0.037; R=16.2m 0.039; R=8.1m 0.079; R=6.1m 0.110; curb 0.25m 0.125
    PASS: curved ground and curbs keep floor agreement; a planter between samples loses it
    PASS: riding onto a planter between samples loses floor agreement on sampled and authored floors and restores GTA
    test floor_agreement_allows_sampling_error_up_to_the_wall_threshold ... ok   (±0.29 pass, ±0.31 fail)
    PASS: repository gate.
    
  • In-game run: none yet. The owner's in-game check of Slice 1: Mount on a sampled slope through a Coverage window module #76 (slope ride, wall refusal) is still to come, and ADR 0004 stays proposed until then.

Merge Danger

Door: two-way

The change is a tolerance constant on each side plus one dismount reason. Reverting restores the 0.05 m check.

Blast Radius: riding

It affects only when an active ride dismounts. A ride can now continue with a different floor up to 0.3 m away under the rider, such as a low planter. Curbs ride as ramps, so near one the ped can be drawn up to the step height off GTA ground (a known limitation in ADR 0004). Mounting, coverage gaps and authored-surface refresh are unchanged.

🤖 Generated with Claude Code

Jpatching and others added 3 commits October 16, 2026 18:09
F6 without authored SURFACES now samples a 5x5 window (2 m, +/-4 m, from
rider z + 2) through coverageWindow() and uploads 32 triangles on layer 1
via SURFACE_BEGIN/VERTEX -> MOUNT_SURFACE. Non-finite, near-zero and
wall-height (> 0.3 m) samples refuse mount with a stated coverage gap.
Riding out of the fixed window dismounts with "window edge"; a sampled
window is never handed to refreshSurface. The JS flat patch is removed.
Raw samples are written to the private local log for fixture replay.

tests/coverage-window.cjs reports interpolation error against the 0.05 m
riding check: within for curvature radius >= ~16 m; exceeds at ~8 m and
tighter, and for curbs between samples (owner decision pending).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Triangles between 2 m samples miss curved ground by more than the old 0.05 m
ride check (0.079 m at R=8 m, 0.125 m beside a 0.25 m curb), which would end
rides on ordinary streets. Floor agreement now asks which floor the rider is
on: host ground at the rider within the wall threshold (0.3 m) of the
surface, for authored and sampled surfaces alike, in JS surfaceObservation
and Rust Surface::observation. Losing it dismounts with "floor agreement
lost". The mount-preparation check stays at 0.05 m.

Tests: rolling ground down to R=6 m and a 0.25 m curb keep floor agreement;
a 0.5 m planter between samples loses it on sampled and authored floors and
restores GTA; Rust observation passes at 0.29 m and fails at 0.31 m.

Recorded in GLOSSARY.md (Floor agreement) and ADR 0004, including curbs
riding as ramps as a known limitation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Jpatching
Jpatching merged commit dcee5c9 into main Oct 18, 2026
2 checks passed
@Jpatching
Jpatching deleted the 76-ground-agreement-decision branch October 18, 2026 23:21
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant