ReviewOS

stacks/drone

VTOL: complete bounded wind and back-capture planning

#87
Open chris opened this 9 days ago ·
9 days ago

Parent: #12. This is an unfinished wind and transition-planning gate, not a claim of wind-qualified VTOL support.

Current status

  • Published to origin/main as Chris at 137ed1b, with a normal fast-forward and no coauthors. PR #96 is merged.
  • Exact-commit complete CI passed all five jobs and required steps: 1,982 passed, 41 skipped, zero failed, 502,616 assertions across 225 files. Skips are not executed evidence. The original downloaded archive also verifies 28 compiled VTOL reports with actual outcomes, neutral board outputs and physical actuation disabled. Post-main CI finished failure: native check, workspace-browser, firmware and purge-namespace passed; execution-browser failed during Chrome startup before page visitation. Its native suite passed the same 1,982 tests with 41 skips and zero failures. The original terminal archive is retained, with no network refetch. The original startup artifact is retained under #72; no rerun or passing-control result explains that failure.
  • The owned planner retains capture-time ground velocity/covariance, qualified airflow and copied controller/model state. An explicit 330 m hover/landing plan keeps the 180 m cruise waypoint, original 45-second back request and 25-second landing deadline. It completes calm and declared headwind/tailwind cases. The original direct-capture prototype and unsupported headings/anchors remain planning-limit regressions. Planner, source and budget contract.
  • Six planned wind names each exercise startup/front/cruise/back/landing onset. Crosswind cases retain their distinct planning limits. Unreached wind-facing landing selections remain unexposed, unmatched and CLI exit 1. The original wind-facing transition plans keep their separate completed-route contracts. The common case factory serves Buddy, the copied standalone CLI and /missions.
  • This issue remains open for the requested wind-envelope gate. Seven sampled private traces, a 3 m/s admission ceiling and declared covariance assumptions do not establish a continuous feasible wind/heading/anchor envelope or an interval reachability guarantee. Current bounded case coverage is published; that wider guarantee is not being inferred from passing examples. Estimator assumptions and remaining qualification.
  • Native board execution, measured heading/airframe/energy, HIL, firmware SITL, physical flight and complete recovery envelopes remain separate parent #12 work. The original failed campaigns remain retained as failures.

The original report below records the limits that opened this issue. Candidate and unpublished status in that report refers to that original investigation; the current publication status is stated above.

Original reproduced limits

A predeclared four-case campaign uses createVtolTransitionProfile({ electrical: true }) and the actual shared runtime, raw IMU/GNSS, estimator, controller, mission, authority and independent board leases. World wind begins at 1,000 ms and stays fixed; the route has its existing 20-second departure and 45-second back-transition limits, with 160 virtual seconds overall. Wind and plant truth are never supplied to controller inputs.

On published main f90a68e, calm and 2 m/s headwind complete. A sustained [2, 0, 0] m/s tailwind times out during departure at 20,940 ms; a [0, 2, 0] m/s crosswind breaches the transition envelope during back capture at 41,400 ms. Both failures end with neutral outputs, expired output leases and physical actuation disabled. Neutral airborne outputs do not establish a safe landing.

An unpublished model investigation reproduces a discontinuity at the reverse-flow angle wrap and a reversed vertical damping response when the incidence is naively folded. A candidate directional coefficient corrects those function-level defects while preserving the forward pre-stall trainer curve. In the candidate, the tailwind gets through takeoff and cruise but still reaches the original back-transition deadline at 70,660 ms without confirmed hover or contact. The vehicle brakes roughly 94 m beyond its requested hover anchor and then returns under the existing 3 m/s position-control bound. The full-route regression still fails; no deadline, gain, source, authority or acceptance threshold was relaxed.

The candidate also exposed a separate correlated-recovery defect: clearing the reached rotary-capture state can restart wing braking during reverse position return. Preserving that state restores the original 25-second timeout and 35-second completed-landing outcomes in the two focused recovery cases. This candidate has not passed all qualification gates and is not published on main.

Remaining implementation and acceptance

  • Finish and independently review the full-angle fictional VTOL model, including continuous force/moment response, dissipative unpowered drag, restoring local behavior, zero-flow/broadside limits and declared model provenance. Do not imply measured airframe coefficients.
  • Make bounded back-transition planning account for actual air-relative motion, ground motion, stopping distance, the requested anchor and the finite return/settle budget. Derive observations through the existing qualified measurement/estimator interface, without plant-truth input.
  • Diagnose the crosswind back-transition envelope breach with its actual source epochs, attitude, relative airflow and authority evidence before choosing a controller correction.
  • Complete the unchanged sustained 2 m/s tailwind route regression through fresh hover confirmation, contact, replay and neutral inhibited outputs. Retain the original failure and its finite limits. If the original route is infeasible, explicitly identify that planning limit and design a new validated plan rather than silently extending its deadline.
  • Define the reviewed bounded wind envelope and expected outcomes for headwind, tailwind, both crosswind directions and onset during each phase. Unsupported cases must retain distinct blocked/uncertain/recovery outcomes without automatic retries or a fabricated landing.
  • Keep all existing fault, abort, recovery, electrical/reserve, manual/kill, host-loss, source/reference/clock and legacy fixed-wing behaviors covered. Bind timing-sensitive fixtures to observed public phase events.
  • Expose reviewed wind cases through the shared case factory, native Buddy commands, copied standalone CLI and common stx mission workspace. Preserve actual outcomes and source evidence in reports and docs.
  • Pass native lint/types, the focused actual-runtime suite, independent Spec and Standards reviews and an exact-source complete CI workflow before main publication.

This gate does not establish native controller execution, HIL, firmware SITL, physical VTOL acceptance or autopilot parity. Original failure logs and source snapshots are retained locally; there is no passing full-wind claim.

9 days ago

The limited library milestone is now in draft #88, commit 26c4a1c, as Chris without coauthors. A bounded nonlinear force-balance search inside the original pitch/thrust limits completes the original sustained 2 m/s tailwind regression without extending its back-transition deadline. Calm, headwind and tailwind complete in the fixed campaign; the crosswind case still reaches the envelope guard and remains unsupported.

Final local qualification passes 261 tests / 10,574 assertions across 14 files, native lint and application/runtime/view types, the 90-page docs build, roadmap/parity checks and standalone compilation. Four copied executable reports outside the checkout exactly match Buddy. Independent Spec and Standards reviews are clean after explicit regressions fixed infeasible-pitch fallback and stale rotary capture across a later front/recovery leg. Original failures are retained. The original 25/35-second cases now complete through improved braking; a stricter 20-second case verifies exact deadline expiry with no fabricated contact.

The candidate is pushed as a draft, not to main. It includes #86 callback diagnostics and requires exact combined-source full Linux qualification. Wider wind/heading feasibility, crosswind behavior, phase onset campaigns and named CLI/workspace wind cases remain open here. No physical, HIL, firmware SITL or full wind-support claim.

9 days ago

Implemented the bounded native case exposure slice in draft #89, commit 25ab384, authored and committed as Chris without coauthors. Four shared cases bind declared wind to actual plant exposure: headwind/tailwind must complete the original route and contact; east/west crosswind limits retain their actual blocked back-transition envelope stops without a hover/contact claim. Buddy, copied CLI and the common stx workspace share the same factory. README and VTOL docs describe actual status, exit semantics, exposure evidence and remaining limits.

Native lint/app/runtime/STX types passed. The focused actual-runtime/native CLI/workspace/fixed-wing suite passed 273 tests and 10,690 assertions; docs built 90 pages; roadmap/parity and CLI build passed. Fourteen copied-CLI comparisons passed, including electrical off/on and four byte-identical parent reports. Actual compiled browser QA passed all four outcomes, option clearing, battery on/off and 320/375 px zero-overflow layouts. Independent Spec and Standards reviews are clean, with all nine source/index pins unchanged.

The exact complete Linux workflow is pending: https://github.com/stacksjs/drone/actions/runs/40022090389. This is a feature-branch milestone, not yet a main publication or a whole-issue completion. Broader wind directions/onsets, crosswind completed flight, full-angle/measured-airframe evidence and all physical acceptance remain open. Original source/test/CI failures are retained. No existing controller gain, source guard, tolerance, authority, reserve or finite deadline was relaxed.

9 days ago

Diagnosed the fixed north-facing crosswind failure with actual source epochs, attitude, airflow and saturated actuator evidence. During reverse return at 38 seconds, the aerodynamic yaw moment is approximately -0.729 Nm while opposing rotor yaw is +0.416 Nm and rudder is at its +0.4 rad bound. A separate level-hover worked example leaves -0.736 Nm after full opposing rudder but only +0.470 Nm of rotor yaw while preserving weight support. This is a fictional-model example, not a full feasibility certificate.

Draft #90, commit 18c1ae1, adds two separate explicit wind-facing back-hover plans with the existing vtol-mode.headingRad contract and distinct plan identities. Both east/west 2 m/s crosswind routes complete in 73,140 virtual ms with source-qualified hover, contact, replay and neutral inhibited outputs. The original 131,520 ms / 43.84 Wh budget, route targets, front heading, controller, model, PID gains, source guards, authority and deadlines are unchanged. Original north-facing limit cases retain their exact blocked reports. There is no automatic heading substitution or retry.

Reports bind the declared heading to the actual recorded plan; a real completed run under a different heading cannot qualify under the named plan. Buddy, copied CLI and the common stx workspace expose 20 cases. Requested headings and plan binding are visible; docs explain the control-authority example and the remaining limits.

Native lint/app/runtime/STX types, 279 focused tests with 10,747 assertions, 90-page docs build, roadmap/parity checks and CLI build passed. Twenty-two portable CLI comparisons passed, including eight byte-identical parent reports. Actual compiled browser QA passed the new completed plans and old blocked limit, option clearing, 320/375 px layouts without overflow or errors. Both independent Spec and Standards reviews are clean, including the final wording clarification. Authored and committed as Chris without coauthors.

Exact complete Linux qualification is pending: https://github.com/stacksjs/drone/actions/runs/40024184491. The original regression, diagnostic harness errors, source observations and failure reports are retained. Main publication is pending qualification. Full-angle model, wider wind/onset campaigns, a general feasibility planner and physical/HIL/firmware acceptance remain open under this issue.

9 days ago

New reproduced full-angle model gap in the unfinished #87 gate. On commit 18c1ae1, with unpowered BODY_FRD airflow [+1e-8, 2, 0] versus [-1e-8, 2, 0] m/s, the actual public vtolAerodynamics function has a 0.9555 N force jump. Changing the vertical component from +1e-8 to -1e-8 at zero chordwise speed produces a 4.0768 N vertical-force jump. The external regression was run and fails; the complete input/output matrix and exact model-source hashes are retained. No product file was edited for this probe.

The current fictional v2 curve applies total dynamic pressure, including spanwise flow, to a longitudinal force direction defined by atan2(w, u). That direction is undefined on the spanwise axis, while total pressure stays nonzero. The earlier reverse-flow tests at zero spanwise velocity do not cover this condition. The default fixed-wing model is unchanged by the existing opt-in VTOL extension.

A correction must use a continuous declared three-dimensional or projected flow law, retain dissipative unpowered drag and the forward trainer baseline where promised, cover lateral/zero-flow limits, and requalify the actual runtime/controls/mission/fault/electrical/heading cases. Projecting longitudinal lift/drag/static pitch onto its incident flow plane is one falsifiable candidate; no coefficient, gain or authority change has been selected or published. No hardware or arbitrary-wind acceptance is claimed.

The explicit heading plans in #90 remain passing bounded cases on v2, with their original fixed-heading negative cases preserved. They do not close this full-angle gate or the parent issue.

9 days ago

The limited wind-model milestone is now published on main at 26c4a1c, following complete exact-head Linux qualification: all five jobs passed, including 1,809 passing backend tests and 11 standalone VTOL reports. The original downloaded archive was retained and checked. PRs #86 and #88 are merged.

The newer explicit heading plans (#90) and named case/workspace work (#89) retain separate pending complete-workflow checks.

A further reviewed fix is in draft #91. The full-angle investigation found another real singularity on the spanwise-flow axis: perturbing chordwise velocity by +/-1e-8 m/s at 2 m/s spanwise flow changed force by 0.9555 N; the corresponding vertical perturbation changed vertical force by 4.0768 N. projected-incidence-v3 projects longitudinal dynamic pressure onto the chord/vertical plane and removes those jumps while retaining lateral/control/rate laws and default fixed-wing behavior. The initial model-only fix exposed actual crosswind controller failures; their original logs are retained. Shared hover control now separates thrust-direction alignment from heading twist, and back braking follows qualified measured aircourse until the existing rotary-capture latch. Requested final headings, source guards, gains, deadlines and neutral latches remain authoritative.

Local qualification: 416 passing tests, 353,947 assertions across 26 files; all native lint/type/docs/roadmap/parity/CLI gates; 24 portable comparisons; actual compiled STX browser checks at 320 px. Six wind cases retain their actual expected outcomes, including blocked fixed-north crosswind cases. Sixteen additional runtime cases apply wind on the first plant step after observed front/cruise/back/landing phase entry. Both independent reviews are clean. A stale electrical example is corrected to the named v3 native campaign, 4.238631 Wh captured at 75,680 ms.

The current exact-source complete Linux workflow is pending, so #91 is not on main yet. General wind/heading feasibility planning, stopping-distance/anchor/return-budget planning, arbitrary wind envelopes, measured full-angle data and physical qualification remain open. This does not close #87 or establish physical landing safety from neutral airborne outputs.

9 days ago

The named-case milestone is now on main at 25ab384 and #89 is merged. Its complete exact-head Linux workflow passed all five jobs, 1,821 backend tests / 500,614 assertions and 15 standalone VTOL reports. The original archive was retained and verified.

The next reviewed milestone is draft #92 (7797296): native Buddy, the copied CLI and the shared STX mission workspace now expose observed front/cruise/back/landing wind onset for all six named cases. Default startup remains 1,000 ms. An actual-runtime 24-case characterization preceded the public selector change. Wind begins at the next 4 ms plant step after observed task entry; the report independently binds that epoch to the recorded task and actual world exposure. Missing, mistimed or reversed wind, an unreached phase, partial completion or a changed final heading cannot qualify the named case.

The fixed north crosswind cases retain a back-envelope stop for startup/front/cruise/back onset, but complete/contact with landing-only onset. This difference is retained in the expected outcome, report and docs. There are no new controller, model, gain, authority/source guard, reserve or deadline changes in this milestone.

Qualification: 159 passing tests / 1,793 assertions across eight relevant files, all native gates and 90-page docs build, 63 CLI portability comparisons, actual compiled browser checks including phase/electrical/profile clearing and 320 px layout without errors, and clean independent Spec/Standards reviews. Default VTOL/fixed-wing reports are byte-identical to the parent v3 binary. Full exact-source Linux CI is pending, so #92 is not on main. All commits are Chris author/committer without coauthors.

General wind/heading feasibility, stopping-distance/anchor/return/settle planning, wider weather, measured coefficients, firmware/HIL/physical qualification and this issue remain open. The pending #90 and #91 milestones retain their own original full-workflow observations.

Sign in to comment on this issue.