Skip to main content

AEROSIM-TS-2

Project task

Detect and classify supported terrain and obstacle contact

The deterministic runtime reports controlled terrain contact, unsafe terrain contact, and solid-object collision using the aligned Rapier collision world.

AEROSIM-TS-2Canonical ID TASK-0002
Verified flow state
Done
Owner
AeroSim Architecture and Delivery
Component
Web flight runtime — Rapier contact adapter and classifier
Repository
corp-v1-aerosim/corp-v1-aerosim

Delivery scope

Normalize Rapier collision events and downward terrain probes into ContactObservation, then classify them with ContactPolicyV1 as NO_CONTACT, CONTROLLED_GROUND_CONTACT, UNSAFE_TERRAIN_IMPACT, or SOLID_OBSTACLE_IMPACT. Classification uses collider category, contact normal, relativeNormalSpeedMps, aircraftUpDotNormal, landingGearContact, and policy thresholds; one eventId is classified once.

Implementation contract

Implementation artifacts

  • applications/web/src/flight/collision/contact-observation.ts
  • applications/web/src/flight/collision/classify-contact.ts
  • applications/web/test/flight/contact-classification.spec.ts

Inputs

  • ContactObservation {eventId,simulationTick,aircraftColliderId,otherColliderId,otherCategory:'terrain'|'obstacle',contactPointWorldM,normalWorld,relativeNormalSpeedMps,aircraftUpDotNormal,landingGearContact} and ContactPolicyV1 thresholds.

Outputs

  • ContactClassification {eventId,simulationTick,kind,reasonCode,contactPointWorldM,normalWorld,relativeNormalSpeedMps}; duplicate eventIds return the previously recorded classification without a second transition.

Failure boundaries

  • Return CONTACT_DATA_INVALID for missing collider IDs, unsupported category, non-unit normal beyond tolerance, or non-finite point/speed/orientation fields; route the session to invalid-state handling rather than classifying safe contact.
  • Return CONTACT_POLICY_INVALID when speed, orientation, or gear thresholds are missing, non-finite, negative, or internally contradictory.
  • Classify threshold equality exactly as documented: speed <= maxLandingNormalSpeedMps and upDot >= minLandingUpDot may be controlled; values beyond either threshold are unsafe.
  • Return CONTACT_TICK_STALE when simulationTick is older than the active physics tick, and CONTACT_EVENT_CONFLICT when a repeated eventId carries different bytes.

Excluded scope

  • Rigid-body impulse resolution, damage modelling, deformable terrain, water contact, runway scoring, boundary-distance policy, and outcome presentation are excluded.

Verification steps

  • Run applications/web/test/flight/contact-classification.spec.ts.
  • Test no-contact, gear-first controlled landing, fuselage terrain strike, excessive descent speed, excessive bank, and obstacle impact fixtures at below/equal/above threshold values.
  • Inject every malformed field, invalid policy, stale tick, exact duplicate, and conflicting duplicate; assert exact kind/reasonCode and exactly-once classification.
  • Assert ContactClassification preserves eventId, tick, point, normal, and speed from the validated observation.

Traceability

Requirements

Dependencies

UI/UX applicability

non_visual

This Task owns technical or behavioral acceptance and does not claim direct visual conformance to the approved UI/UX package.

Acceptance evidence

Verified delivery: application PR #74 reviewed head 716b07d09affcf31325bc095ca4e9063ccbddff5, merged as 3f9e7ef1137f469ca831cf5113201bc57b2e9c78; final whole-wave application head 7f26eca79eadef3171564fc60035e9866c2c848e: publication run 3914 succeeded and integration run 3915 succeeded. Release completion verified on product 1.0.0.0 at GitOps revision 5d3712d89dfbf7dacd993348e55f497d126c7bf9 with Argo Synced/Healthy, exact image digests, authenticated API/database access, and three-world configured-flight acceptance.

Current evidence boundary

No current implementation, acceptance, release, or deployment evidence is claimed for this planned Task. Any prior implementation may be used only as prototype and discovery evidence.