Improve base guidance and qualify bounded aircraft route and hidden test lifecycle

This commit is contained in:
2026-09-19 16:41:32 +02:00
parent 6f0e4c5978
commit 5a24eea2f5
192 changed files with 27066 additions and 46 deletions
+49
View File
@@ -0,0 +1,49 @@
# Experimental two-pad aircraft route
The isolated twenty-metre route now has a successful native mechanism run: the [155909 archive](evidence/native-2026-09-19-155909-aircraft-route/report.json) records **38 passing assertions, one completion and zero script/runtime or engine errors** against its captured 192-file addon source snapshot. It reached the immutable destination, held position, landed with actual contact and shut down the original aircraft. This is **not operational HQ dispatch**, a general route capability or multiplayer acceptance. The earlier ninety-second timeout remains archived; the successful run uses the bounded 160-second translation stage within the unchanged 240-second overall lease. Earlier normal, cancellation and four-metre translation archives retain their separate scopes.
## Bound and ownership
`ERR_AircraftRouteEnvelope.QualifyRoute(mode, aircraft, pilot, destination)` accepts only an immutable straight horizontal leg of 18–20.05 metres. The five-centimetre tolerance accommodates initial native settling relative to the fixture's authored twenty-metre endpoint. Destination Y is terrain-derived; callers cannot command an airborne landing altitude. This experimental range is separate from the unchanged original five-metre-target controller.
The qualifier first executes the existing stock Mi-8 health/seat/ground/complete model-and-rotor footprint qualification. It then checks the destination column and the entire rectangle enclosing both endpoints with a forty-metre margin. A native WORLD/ENTS box sweep covers the corridor up to sixty metres, and a separate low ENTS sweep rejects objects across the entire possible landing area. Exclusions contain only the bounded, measured original aircraft/pilot hierarchies. Near-level terrain must remain within 0.3 metres of the starting ground height on a grid no more than two metres apart, covering the route and a twenty-two-metre margin (the eight-metre possible centre deviation plus the existing fourteen-metre pad terrain footprint). The grid is bounded to at most 35×35 samples. This is a sampled terrain qualification, not mathematical proof that no sub-grid hole exists; actual gear contact, attitude and motion still gate landing success. Native obstacle traces are continuous sweeps, not endpoint-only checks. Conservative refusal is expected where the enlarged area is obstructed.
The resulting subclass retains the original envelope's exact-instance, server/mode, two-second native-clock, movement and single-claim guards. It adds no validity setter or alternative Claim implementation. It binds the original home, immutable destination, measured footprint, aircraft and pilot.
`ERR_AircraftRouteFlight.StartRoute(mode, aircraft, originalGroup, pilot, exactSeat, route, token, absoluteDeadline)` is single-use. The class derives from `ERR_AircraftFlight` so both modes use **the same exclusive airframe registry**, original native ownership/health predicates, signed actor-local input proof, engine start, fuel checks, capture behavior and cleanup. It cannot be started through the inherited point-only Start/StartTranslation entry points. There is no second registry, aircraft allocation or permission bypass.
The allocating owner must retain it and call the existing exact-actor `PrepareActions` before native character controls, exact-aircraft `PrepareHelicopter` after native helicopter controls, and `Tick()` regularly until terminal. `Cancel`, `Finished`, `State`, `Reason`, `OrderToken`, translation observations and aircraft identity remain inherited. `Arrived`, `Destination` and `LandingPoint` add read-only observations. There are no production hooks or HQ registrations.
## Flight and cancellation
The native startup and five-second hover sequence is preserved. The route then uses the already proven native autohover/capped 0.03 actor-local cyclic demand and 0.5m/s requested horizontal speed toward its fixed endpoint. Movement and settling now have an experimental 160-second stage bound, clamped to the unchanged absolute overall maximum of 240 seconds. The first ninety-second attempt timed out; the 160-second stage completed in the isolated 155909 run. That result does not establish timing reliability on other routes or workloads. The destination must be held within 0.75 metres, below 0.25m/s horizontal speed and within the original hover constraints for five continuous seconds.
Unlike the original radial-eight-metre mode, the separate route mode limits the aircraft origin to less than eight metres from the **fixed, endpoint-clamped segment**, including its endpoint caps. The pre-translation stages retain the original start-pad eight-metre radius. Relative height remains -3 through 18 metres, with uprightness at least 0.85; both native input callbacks and Tick enforce this envelope and the original deadlines. The original home is never rebased to manufacture progress.
Normal arrival descends onto the immutable destination. Airborne cancellation instead freezes the actual current horizontal landing point once, inside the already qualified corridor. Capped lateral braking/position control continues during descent. Ground contact must be physically stable for two seconds and within 0.75 metres of that landing point before native engine shutdown; ground contact also zeros cyclic demand. Repeated cancellation cannot move the landing point or renew the deadline. Loss of ownership relinquishes without captured-input writes; deadline, capability or geometry faults remain FAILED and do not claim a safe landing or asset availability. This does not guarantee recovery after an arbitrary airborne fault. World/mission teardown retains the existing ownership revocation contract.
## Opt-in native fixture integration
The new WORKBENCH-only `ERR_NativeAircraftRouteProbe` exposes `ERR_NativeAircraftRouteProbe(mode)`, `int Tick(float now)` and `void Stop()`. It enables only when `errSmoke=1` and `errSmokeOutcome=aircraft-route`. Its separate exact-owner hooks delegate native super in the established order. Existing aircraft and Core powered probes remain inactive for this outcome. The probe uses the existing WORKBENCH read-only deadline getter; there is no production state override.
The integrated one-round Chat outcome `aircraft-route` constructs this probe in smoke step230, forwards Tick, requires successful step231 before explicit fixture reset, and calls Stop on failure/teardown. It uses the same bounded 330-second world deadline / at least 420-second hidden-run timeout as other aircraft fixtures. The probe itself has a 300-second deadline and controller operations remain at most 240 seconds. Emit the existing generic completion marker only after Tick returns 1. Do not wire this into normal mission preparation or HQ decisions.
The fixture surveys bounded candidate pads before allocating exactly one Mi-8, one original group and one native-seated pilot. It uses one initial physics wake and no later transform, velocity, health or fuel writes. Post-spawn qualification must succeed independently. Its endpoint is fixed twenty metres east before takeoff. Success requires the actual controller's COMPLETE and Arrived state, the original aircraft/pilot/seat, a measured destination hold, meaningful physical displacement, final target error at most 0.75 metres, real ground contact, engine off, consumed finite fuel and one engine/controller start. Neither CANCELLED nor FAILED qualifies a route. Cleanup clears the test hooks/controller before disposing only unchanged, unclaimed fixture assets; captured entities are preserved. Fixture disposal on failure is explicitly not a successful production cancellation landing.
## Source-local checks
- `python tests/test_aircraft_route_envelope.py` executes actual corridor/hold rules and the survey body with terrain/native trace boundaries substituted. It rejects endpoint overrun, lateral/height/tilt violations, terrain discontinuity samples and either obstacle trace refusal, and verifies the full swept rectangle/exclusion geometry.
- `python tests/test_aircraft_route_policy.py` executes actual route entry/stage/landing/lease methods together with the original cancellation method. It checks immutable destination, interrupted holds, exact target landing, cancellation's frozen landing centre, unchanged deadlines, capture/expiry/geometry refusal and preservation of the complete native startup/tick sequence apart from the new geometry gate.
- `python tests/test_aircraft_route_probe.py` checks actual result policies and finite opt-in fixture/native callback/cleanup boundaries.
These pass alongside the existing aircraft controller/envelope/translation/probe tests. They are source-local regressions with fake native boundaries, not native flight, radio delivery, transport, repeated-sortie or multiplayer evidence. The ordinary mission's lack of authored enemy airframes, no-player HQ tick pause and operational stop/availability contracts remain outside this experimental change.
## Historical timeout and successful bounded follow-up
The [155105 native route archive](evidence/native-2026-09-19-155105-aircraft-route-timeout/report.json) records 36 passing assertions, zero completions and two explicit fixture-failure messages. Corrected route source compiled, the actual aircraft/pilot and full post-spawn corridor qualified, and native input produced stable approximately eight-metre hover followed by physical translation toward the immutable endpoint. Requested distance was 20.2198 metres; at the ninety-second translation deadline, displacement was 12.0775 metres with 8.14241 metres still remaining and 1,546 translation input updates. The actual controller reported FAILED with `bounded flight stage expired`; arrival, destination hold, landing and shutdown were not completed. This is failed-flight evidence, not an accepted route.
The follow-up changes only the route stage bound to `Math.Min(originalDeadline, now + 160000)` and adds WORKBENCH-only read-only telemetry to the existing two-second diagnostic. It reports world position, velocity vector, signed progress along the immutable segment, distance from its endpoint-clamped segment, current landing/destination error, computed world demand, projected forward/aside demand, world basis vectors and remaining stage/overall milliseconds. These demands are recomputed observations of the existing equation, not proof that a native callback consumed that exact sample. The native control equations, gains, ownership, physical envelope, overall 240-second lease and terminal criteria are unchanged. An explicit CORRIDOR accepted log distinguishes full route survey success from earlier candidate-pad checks.
The timeout run's recorded final twenty seconds gained approximately 2.56 metres in radial distance over 20.2 seconds, while reported physical speed was approximately 0.15–0.18m/s. From 8.14 metres remaining, reaching the 0.75-metre acceptance radius at roughly 0.13m/s plus a five-second hold would need about another 62 seconds, before extra proportional braking near the endpoint. Thus 150 seconds would be marginal; 160 seconds leaves only a small route margin. The observed approximately 45-second startup/hover plus a full 160-second leg and an estimated 25-second landing totals approximately 230 seconds, only ten seconds below the unchanged absolute lease. This was the pre-run timing estimate, not the later landing evidence. Further slowdown or longer startup may still legitimately fail; the source does not extend or renew that lease to make the fixture pass.
The [155909 console](evidence/native-2026-09-19-155909-aircraft-route/console.log.txt) records a requested distance of 20.2214 metres from the actual post-hover origin. The destination hold completed at 0.546151 metres error after 2,716 translation updates. Final physical displacement was 20.1261 metres with 0.129942 metres target error. The controller reached COMPLETE with one initial wake, one engine start, one controller start and the original pilot/seat; native assertions required ground contact, engine off and finite fuel consumption. The [runner record](evidence/native-2026-09-19-155909-aircraft-route/runner.json.txt) retains `smoke-completed` and unchanged source across the run. These observations qualify this one newly authored experimental leg only. They do not establish radio-authorized HQ routing, transport loading, repeated sorties, dynamic obstacle avoidance, remote ownership or human piloting.