Skip to content

History / Frame Tree ECS Native

Revisions

  • #668: SourceId collapse — annotate historical sketch, document identity-keyed config refs

    Test User committed Jun 7, 2026
  • 664: RefFrameKind removed (required FrameUid is the taxonomy); FrameUidC/FrameUidIndexR/FrameEpochC + Bevy doc IO on Frame-Tree-ECS-Native; frame-doc feature edges on Dependency-Graph

    Test User committed Jun 7, 2026
  • Strip implementation-phase framing from the wiki Remove the phased-development narrative so the docs present astrodyn as a finished engine-agnostic library rather than an in-progress phased port: - Delete Strategy.md §8 "Implementation Phases" (~340 lines), renumber the remaining sections (9->8, 10->9) and the TOC; no external page linked the old anchors. - Drop forward-looking phase framing ("across phases", "bite in Phase 8+") and "phase history" link blurbs (Home, Architecture, Capability-Matrix). - Rewrite inline "Phase N" provenance breadcrumbs to plain wording across Type-System, Numerical-Differences, Audit-Findings, Audit-2026-05, Frame-Tree-ECS-Native, and JEOD-Capability-Matrix. Preserved non-roadmap uses: the `Phase::` Rust enum, Apollo's "12-phase mass tree", "ephemeris phase", and the self-contained perf-study/design work-stage labels (Phase A/B/C/D). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    Test User committed May 30, 2026
  • Refresh wiki for astrodyn rebrand and re-anchor against current HEAD Sweep of all 13 wiki pages after the workspace rename (`bevy_jeod` → `astrodyn` / `astrodyn_*`, `JeodPlugin` / `JeodSet` → `AstrodynPlugin` / `AstrodynSet`) and the 90+ follow-up PRs that landed since the original audit anchor (`587e2e7`, April 2026). **Mechanical** - Crate-name renames: `jeod_<x>` → `astrodyn_<x>` for every workspace member, plus `bevy_jeod` (root crate) → `astrodyn_bevy` (Bevy adapter) / `astrodyn` (gateway) per context. - URL renames: `simnaut/bevy_jeod` → `simnaut/astrodyn`. - Type renames: `JeodPlugin` / `JeodSet` → `AstrodynPlugin` / `AstrodynSet` (#392). - Test-path corrections: `crates/astrodyn_runner/tests/tier3_*.rs` → `crates/astrodyn_verif_jeod/tests/tier3_*.rs` after the #387 fixture redistribution; parity siblings under `crates/astrodyn_verif_parity/tests/`. **Re-anchored to `0f9213e` (May 8, 2026)** - `Home.md` headers updated; landing-page bullets refreshed; added pointers for Dependency-Graph, Frame-Tree-ECS-Native (now landed), and Variable-Server (design-only). - `Audit-Findings.md`: marked B1.1 (#198), B1.2 (#199), B1.8 (#205), B1.9 (#206), B2.3 (#210) closed inline; summary table now shows open / closed split (5 of 51 closed). - `JEOD-Capability-Matrix.md` + `JEOD-Sim-Coverage.md`: re-anchored; ~10 SIM rows promoted from "not covered" to "covered" or "partial" (SIM_ref_attach, SIM_removable_body_action, SIM_ground_contact, RUN_attach_to_ref_frame, SIM_lvlh_init); SIM_verif_attach_detach test list expanded; mission-benchmark paths corrected (BCH.01/03/05/06/07); coverage totals recomputed. - `Type-System.md`: example paths corrected; added `SelfPlanet` and the Vehicle/Planet phantom (Act 5) subsection from #332/#343/#344; `<SelfRef>` / `<SelfPlanet>` discipline + lint (TS.01 / #356) documented; §5.1 cheat sheet promotes wired diagnostics (#303/#306/#332/#343/#344/#353); §6 expands bypass-constructor ban (#388); Quat::new snippet fixed. - `Strategy.md`: rewrote three-layer description and dep-graph prose to put `astrodyn` (root gateway) → `astrodyn_bevy` adapter + parallel `astrodyn_runner` harness; rewrote §4 schedule against the 7-variant `AstrodynSet`; updated frame-tree component description; added "Post-Phase-8 ongoing work" subsection enumerating #387/#392/#362/#268/#263/#280/#360/#389/#395/#388/ #390/#399/#400/#401. - `Frame-Tree-ECS-Native.md`: status banner — migration is complete (#280, #263); PRs 1–5 marked LANDED in §13; appendix workstreams flagged with their landing PRs (#308 mass-tree, attach paths, #357/#358/#363 simplifications, #350 CoM offset). - `Variable-Server.md`: status banner — design-only, not implemented; preserved as the contract a future implementation should hold itself to. - `Tier3-Regeneration.md`: tier3 paths corrected; added `bevy_parity_*` superset note pointing at #389. - `Numerical-Differences.md`: tier3 paths corrected; closed-issue references reworded (#13/#27/#114). - `Integration-Groups.md`, `Dependency-Graph.md`, `Earth-Lighting-Validation.md`: targeted path/URL fixes; technical content already current. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    @spencer702 spencer702 committed May 9, 2026
  • Appendix A: Open work register Enumerates every item the design doc flags as unimplemented or deliberately deferred, mapped against open tracker issues so nothing falls on the floor when implementation begins. Coverage: - A.1 Items delivered by #268's PR sequence (no separate trackers needed). - A.2 Items #268 enables but doesn't deliver — typed state via #263 (handled in PR 5 of the migration). - A.3 Articulated-bodies extension items (Section 15) — most untracked; lists what needs new issues. - A.4 Deliberately out-of-scope items with rationale (joint primitives, slosh, IK, sensor frames, etc.). - A.5 PR-implementation-time decisions (Reflect derives, naming, diagnostic wording, etc.) — no trackers needed. - A.6 Adjacent open issues that may close together with the articulated-bodies extensions (#198, #206, #199, #163, #65). - A.7 Summary: five distinct workstreams need new trackers (mass-tree migration; composite-rigid-body propagation; Bevy attach/detach momentum conservation + ballistic subtree; integrator reset on attach (NEW from JEOD precedent); joint-kinematics driver). Cross-checked all open issues. Existing trackers found: - #263 (typed state) - #198 + #206 (kinematic-only attach to a frame, JEOD's attach_to_frame path) - #199 (body-action lifecycle, attach/detach API surface) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    Test User committed May 3, 2026
  • Sections 15.3/15.4: incorporate JEOD precedents 15.3 force/torque routing — large course-correction: JEOD's stable model is composite-rigid-body integration: only the root integrates, children are kinematic via DynBody::propagate_state (dyn_body_propagate_state.cc:526–600). Zero joint, spring, damper, or constraint primitives in stable code. The experimental constraints model exists but its README explicitly identifies it as an unfinished fuel-slosh stub (constrained pendulums for fluid in tanks), not general articulation. This narrows the design considerably: the algorithm choice ('Featherstone or composite-rigid-body?') has a default answer (composite-rigid-body, per JEOD). General-purpose joint dynamics are out of JEOD's scope; mission code uses ExternalForceC / ExternalTorqueC. Slosh-style constrained pendulums become a separate experimental module if needed. Risk drops from medium to low-medium — the dynamics issue becomes a JEOD port, not fresh design. 15.4 attach/detach — new gap surfaced: JEOD's attach (dyn_body_attach.cc:854–862) and detach (dyn_body_detach.cc:271–273) end with reset_integrators() — the comment is explicit that 'attachment may cause a jolt to state integration.' Multi-stage integrators (GJ, ABM4) carry per-body bootstrap state that becomes invalid on topology change. Today's Bevy adapter does NOT reset integrator state on attach/detach; this is a real gap that needs to land alongside the combine_states_at_attach port. Also resolves the 'messages vs immediate Commands' sub-question: messages are fine because staging_system runs before JeodSet::Integration; the atomicity contract is between steps, not within commands. Updates Section 15 summary table risk/status columns and clarifies 'Constraint / joint forces' deliberate-non-goal to cite JEOD's experimental slosh model as the precedent for any future work. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    Test User committed May 3, 2026
  • Section 15.2: follow JEOD precedent — separate mass + frame trees JEOD maintains three independent TreeLinks instances (RefFrame, MassBody, MassPoint) and couples them via an explicit back-pointer (BodyRefFrame::mass_point). The separation is operational too: DynBody::attach_to does a full mass+frame attach, while attach_to_frame does a kinematic-only attach with no mass coupling. This case (a body riding a parent frame without contributing to the parent's mass) is exactly what would break if mass and frame shared a single ChildOf relation. Updates Section 15.2 to flip the earlier 'reuse ChildOf first cut' lean: the recommendation is now to follow JEOD — frame tree on ChildOf, mass tree on a separate MassChildOf relation, coupling via an optional MassPointRef back-pointer on the body's frame entity. Two attach paths in the Bevy adapter mirror JEOD's two attach APIs. The Section 7 FrameStorage trait pattern has a direct MassStorage analogue, so the algorithm sharing story extends cleanly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    Test User committed May 3, 2026
  • Add Section 15: Articulated-bodies extension Sketches plausibility for mass/inertia composition, force/torque routing, and attach/detach at runtime under the ECS-native shape, so reviewers can confirm #268 doesn't paint future dynamics work into a corner. Per topic, captures: status today (runner-only / partial / absent), ECS-native shape under #268, open questions, risk level, and which existing test would protect the port (tier3_mass_attach_detach, the future bevy_parity_mass_attach_detach). Headline findings: - 15.1 (kinematic chains): solved by #268 directly; no new infrastructure beyond what the migration lands. - 15.2 (mass composition): mechanical port of jeod_dynamics::MassTree to ECS hierarchy; the FrameStorage trait pattern from Section 7 has a direct MassStorage analogue. - 15.3 (force/torque routing through chains): largest gap; not in runner or Bevy; would land as fresh code on top of the ECS hierarchy in a separate dynamics issue. - 15.4 (attach/detach): frame-tree half collapses to one-line ChildOf reparenting; mass-tree + momentum-conservation halves port from existing runner code. Updates Section 14's mass-tree bullet to point at Section 15. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    Test User committed May 2, 2026
  • Adopt FrameStorage trait in Section 7 Section 7 originally said 'do not introduce a FrameStorage trait' and 'the prototype declined to introduce one'. The follow-on trait experiment (commit 2b0a8ab on study/268-frame-tree-ecs-native) showed the trait pays off: ~80 lines of duplicated tree-walking collapse to ~25 lines of trait methods + a one-line delegation, all 4 prototype parity tests stay bit-identical, two new unit tests in jeod_frames assert the shared algorithm matches the arena's inherent methods. Updates Section 7 to commit to the trait (with explicit notes on mission-code invisibility and what stays per-consumer), and PR 1's scope in Section 13 to include the trait + its impls + tests. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    Test User committed May 2, 2026
  • Add Frame-Tree-ECS-Native design doc for issue #268 Architectural design for the long-term ECS-native frame-tree shape: frames are entities, state lives as components, cross-frame operations expose as Bevy SystemParams. Includes the 5-PR migration sequencing, the #263 typed-state tie-in, the Tier 3 risk register, and the before/after diff demonstrated by the prototype branch study/268-frame-tree-ecs-native (PR #269). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    Test User committed May 2, 2026