7.4 KiB
Actual aircraft controller native fixture
aircraft-control, aircraft-cancel and aircraft-translate are separate opt-in, Workbench-only Chat outcomes for the actual production controller. The frozen first aircraft-control source passed native-2026-09-19-123439-aircraft-controller: 37 assertions, one completion and zero captured script/runtime or engine errors. The raw log shows the actual post-spawn qualifier, one controller/order/engine start, original pilot, fuel consumption, approximately eight-metre hover, physical contact landing and engine-off COMPLETE. This is an isolated local mechanism, not HQ dispatch or multiplayer qualification. The frozen cancellation variant also passed 124915: 39 assertions and zero captured errors. One actual Cancel at 5.08964m retained control for 13.15s through stable landing and engine-off CANCELLED, with 908 actor/helicopter callbacks and the unchanged 250958ms absolute deadline. The 130038 translation variant now passes 38 clean native assertions using the changed controller. Its immutable 3.3096m requested movement yields 2.91183m actual displacement and 0.399235m final target error, followed by grounded engine-off COMPLETE. Earlier powered-flight and powered-translate experiments use their own control implementation; their results remain separate.
ERR_NativeAircraftControlProbe(ERR_GameMode mode), int Tick(float now) and void Stop() form the Chat integration interface. Tick returns 0 while running, 1 only on success and -1 on failure. The parent Chat harness selects -errSmoke 1 -errSmokeOutcome aircraft-control, -errSmokeOutcome aircraft-cancel or -errSmokeOutcome aircraft-translate, constructs once at its dedicated step 220, calls Tick using native world time, and stops on every failure or mode shutdown. The runner requires at least 420 seconds while the fixture itself has a 300-second absolute native-world deadline. The controller command is additionally bounded by its own unchanged 240-second maximum. The fixture does not install a production scheduler or HQ dispatch.
The fixture searches only the existing bounded local/refinement/airport candidates using the established 40-metre clearance gates. It allocates exactly one vanilla unarmed Mi-8, one empty vanilla enemy group and one original pilot through the native primary pilot compartment. It allows one initial dynamic-physics wake and waits for actual ground settling. No transform, velocity, health, fuel or signal writes occur. No engine calls are made by the fixture.
It then invokes the actual ERR_AircraftFlightEnvelope.Qualify against the already spawned aircraft and pilot. A missing certificate fails; there is no positive fallback. The actual ERR_AircraftFlight.Start must accept that fresh, exact-instance certificate. Scoped Workbench callbacks invoke the controller before the native actor callback and after the native helicopter callback, retaining both original super calls. Core's independent powered-flight fixture is inactive for this outcome. The controller's original ownership, deadline, signed-input, clearance, altitude, drift, tilt, hover and landing rules remain authoritative.
All outcomes require unchanged order token and original pilot/aircraft/group/seat, exactly one command and observed engine start, one initial wake, sustained delivery of both native callbacks, a measured fuel decrease, physical ground contact with low speed and angular motion, and engine off. The normal outcome additionally requires COMPLETE and zero cancellation requests; it rejects CANCELLED, FAILED and RELINQUISHED. The normal controller command must perform its own five-second hover and two-second ground hold; the fixture does not manufacture stage completion. Regular logs include state, reason, height, original-home drift, velocity, contact, engine and measured fuel consumption.
The cancellation outcome sends exactly one real Cancel only after observing CLIMB, no native ground contact and a height of at least five metres relative to the immutable qualification home. It records the original token, actual absolute controller deadline and both callback counts. Cancel must immediately enter LANDING without becoming terminal. The fixture then requires additional actor and helicopter callbacks while still airborne in LANDING, the unchanged token/deadline throughout, and its own continuous two-second observation of the same physical grounded predicate before SHUTDOWN. Tick gaps or lost ground stability reset that observation. Only CANCELLED with one request and every retained-control/landing proof can pass. A normal completion, never-issued request, duplicate request, changed deadline, missing post-cancel hooks, fault or relinquishment is rejected. A Workbench-only read-only getter exposes the actual deadline; it does not override or mutate any production method/state. No additional aircraft, forced descent, engine call, timestamp extension or synthetic controller state is introduced. Stop does not issue a second Cancel after the deliberate request.
The translation outcome calls the actual StartTranslation with the original qualified home as an absolute horizontal target before takeoff. It does not choose a target after seeing how the helicopter drifts. Production refuses movement beyond 4.05m from the real stable hover origin and never retargets. The fixture independently observes the immutable target/origin, unchanged deadline and five-second physical target hold; at completion it additionally requires a nontrivial initial distance of 1.75–4.05m, at least one metre of measured horizontal displacement, final target error at most 0.75m, the controller's actual TranslationProven, and the usual original-aircraft grounded engine-off COMPLETE. Too little natural drift produces a useful refusal/failure, not synthetic movement. This remains a bounded local translation/landing experiment, not a route, transport task or HQ response. The independent Core four-metre translation archive is prior mechanism evidence, not a pass for this new production path.
These three physical objects are exclusively fixture-owned: they are deliberately not registered with generic mission cleanup. Stop first removes the active hook target and releases the controller. It deletes only still-unclaimed original objects after exact mission context, player occupancy, faction and original group checks. A captured vehicle or changed pilot/group is preserved. Before the pilot request, an empty fixture-created group with no assigned faction remains disposable if faction initialization failed. On a failed test, disposal of its unclaimed airborne fixture is test cleanup, not evidence of successful production cancellation or safe landing. World teardown without a valid game/player-manager context performs no object deletion. Explicit native loss/capture cases remain separate future experiments.
python3 tests/test_native_aircraft_control.py executes the actual acceptance and disposal policy bodies against adversarial combinations and verifies the integration has no physical shortcuts, substitute controller, global mission ownership, or weakened hooks. These source tests do not prove native callback behavior, flight, multiplayer, HQ integration, or performance. The translation path now has its own clean native archive; full release acceptance remains pending.