#668: SourceId collapse — annotate historical sketch, document identity-keyed config refs
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
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>
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>
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>
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>
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>
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>
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>
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>