#668: SourceId collapse — annotate historical sketch, document identity-keyed config refs
0ef2965
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
5511c19
Dependency-Graph: add astrodyn_frame_doc (issue #663 exchange schema; gateway optional via frame-doc feature)
86d0eb0
Renumber requirements contiguously (draft-review renumber)
Old -> new mapping:
101->101 relative state between any two frames
103->102 deterministic composition
105->103 state-preserving restructure
201->201 one pinned convention set
301->301 earliest-possible misuse detection; never silent
303->302 unresolved references detectable, never silently resolved
304->303 structural and semantic integrity by construction
401->401 stable frame identity
403->402 recoverable relationships
501->501 semantically sufficient, extensible classification
601->601 lossless round-trip
603->602 consumer independence
605->603 boundary-crossing state metadata: epoch and origin
701->701 multi-source composition is sound
703->702 runtime-definable frames
704->703 lossless, guarantee-preserving static<->runtime correspondence
906->801 common-case simplicity (group 9xx -> 8xx; groups now 1-8)
Cross-references updated; the ex-RFS-904 label in design guidance dropped
(this commit message is the historical record). IDs freeze on acceptance
per Specification conventions.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0a3e5c3
Consolidate frame spec to 17 requirements; commit history is the changelog
Removed (owned elsewhere): RFS-202 (JEOD_INV RF.04 owns canonical-rotation
consistency; the dual-canonicity nuance — matrix-canonical RNP/IAU writers
vs quaternion-canonical typed path — moved to Common-Pitfalls), RFS-907
(CLAUDE.md Fail-Loudly diagnostic pattern owns message quality).
Reclassified as design guidance: RFS-904 (hot-path cost) moved to the
design-freedoms section per review — a constraint on where checks live,
not a fundamental need.
Merged (no normative content lost):
102->101 full kinematics is part of the relative-state need
104->103 one deterministic-composition row (single parent, unique path,
bit-identical equivalent decompositions; #562 rationale kept)
302->301 checked reinterpretation is the operational definition of
301's runtime half
305->304 classification-contradicts-state is one more reject condition
402->401 cross-boundary agreement is what 'stable identity' means
502->501 classification extensibility as a closing clause
604->601 replay is lossless round-trip of an ordered sequence
203->605 epoch + origin are sibling boundary-crossing state metadata
404,702->701 one 'multi-source composition is sound' row (no aliasing,
no impersonation, explicit cross-source declaration)
705->704 extension soundness is the other face of correspondence
Also removed the dated 'Current gaps' snapshot section (duplicates #659)
and the in-page change log (the wiki commit history is the changelog —
Specification.md conventions updated accordingly).
Remaining 17: 101 103 105 / 201 / 301 303 304 / 401 403 / 501 /
601 603 605 / 701 703 704 / 906.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9a53a83
Remove RFS-901/902: instantiations of project-level architecture rules
Review feedback: engine independence and storage-agnostic algebra are
implications of the higher-level architecture (CLAUDE.md non-negotiables,
check_no_bypass_deps.sh, bevy_parity), not frame-system needs. Added to
'Not restated here' as candidates for a future astrodyn-level architecture
spec; the frame-level determinism need they gestured at stays pinned by
RFS-104. Group 9xx retitled Performance and usability.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
53b8ea5
RFS-605: simplify to integrated / derived / injected state
Review feedback: classify the state, not the frame. The triad replaces
the environmental/dynamic frame vocabulary (whose carve-outs existed
precisely because origin is per-write, not per-frame) and the definitions
section now defines the three origins directly.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
79e656a
Remove RFS-602: mechanism, not need
Self-describing exchange is a design device; the needs it serves are
covered by RFS-201 (pinned conventions), RFS-301 (never silent), and
RFS-603 (consumer independence). Preserved as recommended design guidance
under design freedoms.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c727ddd
RFS-303: state needs, drop the two-tier mechanism
Review feedback: the two-tier severity split was design leakage. Rewritten
to the two irreducible needs — resolution misses observable as data
(companion to RFS-401), and no silent resolution to a wrong frame or
default. Call-site severity policy is left to design.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
698ac98
Spec is a draft under review: remove rules owned elsewhere, drop ceremony
Remove RFS-903 (f64) and RFS-905 (no-unsafe) — enforced by workspace
lints/compiler — and replace the 8xx withdrawal stub with a compact 'Not
restated here' section covering both rule families. Mark the spec Draft
(conventions bind on acceptance), collapse the change log to the initial
draft entry.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2bdd4b9
Withdraw RFS-801..803: motivated entirely by JEOD-fidelity obligation
The JEOD parity / staged-semantics / invariant-traceability requirements
are captured and enforced elsewhere (CLAUDE.md non-negotiables, Tier 3 CI,
JEOD_INV catalog + invariant_coverage.rs). Group 8xx collapses to a
withdrawal stub (IDs reserved per Specification conventions); RFS-802's
eager-vs-lazy-evaluation conclusion is preserved non-normatively under
design freedoms.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
de4ed12
Add Specification section + reference frame system requirements spec
New Specification parent page (requirements-level docs, design-free) and
Spec-Reference-Frame-Requirements: 31 shall-requirements (RFS-101..907)
with rationale, verification approach, and trace links, distilled from
issue #659 and the June 2026 design exploration. Home.md gains a
Specifications index section.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c5d0a9e
Correct drifted code snippets on the Bevy-Adapter page
Audited the moved snippets against current astrodyn_bevy source. Structural
content (7 AstrodynSet variants, set ordering, the 21 system names, AstrodynPlugin,
the C-suffix/planet-phantom convention) was accurate; the detailed Rust was
early-design fiction that had drifted. Fixed:
- Component wrappers now wrap the typed siblings actually in src/components/state.rs
(TranslationalStateTyped<PlanetInertial<P>>, RotationalStateTyped<SelfRef>, …);
dropped the bogus `(T, PhantomData<P>)` shape — the phantom rides inside the typed.
- gravity_computation_system / integration_system: replaced fictional signatures
that called astrodyn_gravity::compute_all_gravity / astrodyn_dynamics::integrate_step
(which also violated the three-layer rule) with the real shape — generic <P: Planet>,
*C components, delegating to the gateway astrodyn::run_gravity_stage /
astrodyn::integrate_body. The integration skeleton is marked simplified and points
to the source file.
- Multi-stage integration: removed the non-existent IntegrationState resource /
IntegrationMethod enum; documented the real mechanism (IntegratorTypeC component,
IntegrationDtR resource, GaussJacksonStateC / LsodeStateC multistep state).
- Spawn guidance: corrected the "no bundle struct" claim — PlanetBundle<P> / SunBundle
are Bundles; bodies spawn via VehicleConfig::spawn_bevy.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f1283fd
Split Bevy/ECS material out of Strategy into a Bevy-Adapter page
Strategy is now engine-neutral end to end; all Bevy/ECS specifics live on a new
Bevy-Adapter page documenting astrodyn_bevy as one host of the astrodyn pipeline.
New page (Bevy-Adapter.md): "Why Bevy for the reference adapter", the JEOD->ECS
mapping, Bevy component wrappers, the FixedUpdate/AstrodynSet schedule, and
AstrodynPlugin composition — moved verbatim from Strategy with host-framing intro.
Strategy.md (section numbers kept stable; ECS-titled sections repurposed):
- Drop §1 "Why Bevy?" (moved).
- §2 "ECS Architecture Mapping" -> "From JEOD's Architecture to the Pipeline":
engine-neutral decomposition (managers->stage functions, hierarchies->focused
types, pointer trees->arena trees, dispatch->enums, call order->PIPELINE_ORDER);
ECS realization pointed to the adapter page.
- §3.8 "Bevy Components" -> "Host storage" pointer.
- §4 "System Pipeline" -> "Pipeline Stages": engine-neutral stage list + order,
with Bevy/runner realizations linked out.
- §5 "Plugin Architecture" -> "Workspace Structure and Layering": crate map and
three-layer rule stay; plugin composition replaced with a host-wiring pointer.
Fixed stale #portability-goal anchor -> #engine-independence.
Home.md: add Bevy-Adapter to the nav. Integration-Groups.md: repoint the
Strategy §4 link to the new §4 + the adapter's execution-schedule section. All
cross-page anchors verified.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f8657a8
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>
8d21c71
Reframe Strategy/Architecture around engine independence
Present astrodyn as an engine-agnostic physics library: the physics has zero
sim-framework dependence, and Bevy ECS (astrodyn_bevy) and the arena runner
(astrodyn_runner) are two interchangeable drivers among possible hosts. Name
the JEOD↔Trick physics coupling explicitly as the mistake being avoided, and
demote the prior "Bevy is the production target / chosen runtime / single
source of truth" framing to "one driver layered on top of astrodyn".
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0c50d26
Add 6 pages migrated from CLAUDE.md
Promotes the wiki stubs staged in PR #592 (`claude-md-lean` branch) onto
the live wiki. Each page captures detail that previously lived in
`CLAUDE.md` but doesn't need to be in an AI agent's context on every
interaction: extract_* regen workflows, the full JEOD→ECS class
crosswalk, the CI job matrix, etc.
- Architecture — three-layer rule, runner-vs-bevy split, enforcement
- CI — full job matrix, per-crate test commands
- Common-Pitfalls — full catalog of subtle gotchas
- Environment — JEOD_HOME / extract_* / NESC / kernels
- JEOD-ECS-Mapping — pipeline → AstrodynSet + DynBody → components
- JEOD-Invariant-Workflow — catalog process + negative-test convention
`CLAUDE.md` links to each of these.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
72ec291
Migrate JEOD source/verification content from CLAUDE.md to wiki
CLAUDE.md was trimming back to rules/conventions only; this PR receives
the migrated content per the wiki-for-non-crate-docs convention
(reaffirmed 2026-05-14).
- New page: JEOD-Source-Data — directory tree of ../jeod, hot files,
what numerical test vectors are extractable, the three parsability
tiers of Modified_data Python files, and the per-crate extract_*
binary catalog. Material formerly in CLAUDE.md "JEOD Source
Navigation" and "JEOD Verification Data".
- Tier3-Regeneration expanded with: the explicit `docker run`
invocation (formerly in CLAUDE.md), the log_state_ASCII.csv column
layout, and the Trick DRAscii silent-variable-drop pitfall callout.
Removes the "see CLAUDE.md for the explicit invocation" cross-
reference now that the page is self-contained.
- Home.md: link to JEOD-Source-Data added under "Architecture and
contributor docs"; Tier3-Regeneration description expanded to note
it now includes the explicit Docker invocation.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
858b1a4
Remove stale 'mirrors docs/AUDIT_2026-05.md' note
The in-repo copy has been deleted (per the non-Rust-crate docs-in-wiki
convention reaffirmed 2026-05-14); this page is now the sole copy.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bb22d31
Retire audit finding M-09; non-crate docs convention is wiki-first
Annotated M-09 as closed wontfix per the project convention that
non-Rust-crate docs (architecture notes, contributor primers, audit
reports, design discussions) live in the wiki, not docs/. Convention
reaffirmed in conversation 2026-05-14; #501 closed wontfix.
M-10 (per-crate README stubs) remains valid — those are Rust-crate
docs surfaced on crates.io and the convention does not apply.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
46821b6
Add Audit-2026-05 page (comprehensive findings audit)
Mirrors docs/AUDIT_2026-05.md in the repo. Companion tracker: #487.
Distinguishes from the existing Audit-Findings page (capability gaps
derived from the JEOD coverage matrix) — this audit is a comprehensive
review across architecture, type-system rigor, error handling, JEOD
invariants, testing, performance, dependencies, and CI.
5 High + 12 Medium findings filed as sub-issues (#488–#503, #508)
under label audit-2026-05. Includes a 10-item risk register, a
12-item strengths-worth-preserving inventory, and a 1.0-readiness
roadmap.
Linked from Home.md under "Pre-release audit" alongside the capability
audit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6a17a3d
Cross-link Earth-Moon investigation page to filed issues #464, #465, #466
1967c9c
Add Earth–Moon Performance Investigation page
First-cut perf report from the #447 toolkit (landed in PR #462).
Captures Phase A baselines (perf-runner + criterion + pprof
flamegraphs + tier3 wall-clock), Phase B per-phase drilldown,
Phase C candidate inventory (C1..C8 with ROI estimates).
Target: halve the tier3 earth_moon_clem runtime — 17 min → ≤8.5 min,
83 µs/step → ≤40 µs/step. Top-3 candidates: C5 (per-step Epoch
cache), C1+C2 (flat-storage SH coefficients + Gottlieb helpers),
C3 (hoist vector3_transform out of the kernel). Cumulative
bit-identical estimate is 20-35% step-time reduction; reaching the
2× target needs either C8 (RK4 sub-stage reuse, bit-identity-risky)
or an algorithmic change to the Gottlieb recursion.
419750e
Re-anchor wiki to 7619f2f and prune resolved audit items
Refresh the audit anchor from 0f9213e (May 8) to 7619f2f (May 10) and
align numbers and PR references with the current tree.
Audit-Findings: drop the strikethrough closed entries (B1.1, B1.2, B1.8,
B1.9, B2.3) from the bucket-1 / bucket-2 sections; keep a brief closure
summary at the top so the historical record is preserved without bloat.
Bucket 1 is now 6 open items, bucket 2 is 3 open items.
Strategy: invariant catalog stats (118 -> 287 rows, 10 -> 19 sections,
86 -> ~460 source tag sites with the current enforced/partial/structural/
deferred/n/a breakdown). Add the post-0f9213e workstreams to the
Post-Phase-8 list: parity follow-ons (#414/#406/#415/#416), typed-gateway
discontinuation (#397/#398/#410), gateway-only physics deps (#390/#404),
include_bytes! data bundling (#144/#403), and mass-tree wildcard typing /
typed body_mass (#396/#417, #408/#409).
Type-System: bump last-updated date and extend the Follow-on PRs trail
through #417, calling out #397 (untyped construction discontinuation),
#398/#410 (round-trip property tests), #408/#409 (typed body_mass) and
#396/#417 (KinematicNodeState.trans).
JEOD-Capability-Matrix: anchor + invariant row count + tier3/parity
function totals (~337 -> ~378; 215/122/30 -> 196/141/41); call out the
reinstated dyncomp_run6 parity wrapper (#416) on RUN_6B.
JEOD-Sim-Coverage / Home: anchor refresh.
0163b26
Revert "Restore dev-dep edges in dependency graph mermaid"
This reverts commit 29ee6496e5e80964d5d2ac613c23137413e8a204.
c871296
Restore dev-dep edges in dependency graph mermaid
The previous regeneration dropped the dashed dev-dep edges. They're
the load-bearing channel by which physics crates' own Tier 2 / Tier 3
tests reach JEOD fixture loaders in astrodyn_verif_jeod, and they're
the only place the back-edge invariant (verif crate as dev-dep on
each physics crate) is visually documented. Solid = regular dep,
dashed |dev| = [dev-dependencies] entry.
29ee649
Regenerate dependency graph after verif gateway-only switch
`astrodyn_verif_jeod` and `astrodyn_verif_parity` now depend on
`astrodyn` and only `astrodyn` for physics — same gateway-only
contract that already applied to `astrodyn_runner` and `astrodyn_bevy`.
The "verification crates may reach around the gateway" exception is
gone; the bypass-check CI lint now scans both verif crates.
The diagram drops every dashed-arrow direct-physics edge from the
verif crates and replaces them with a single `→ astrodyn` edge each.
Dev-dep edges from physics crates back to `astrodyn_verif_jeod` (for
its JEOD fixture parsers) remain — those support owner-crate unit /
Tier 2 / Tier 3 tests that live in each crate's own `tests/`.
c584dad
Regenerate dependency graph after astrodyn_runner / astrodyn_bevy gateway-only switch
`astrodyn_runner` now depends on `astrodyn` and only `astrodyn`; the 7
direct physics deps and 2 dev-deps are gone. `astrodyn_bevy`'s 2
physics dev-deps are gone as well. Both consumers are now structurally
gated by `scripts/check_no_bypass_deps.sh` in CI.
Also corrects a stale `astrodyn_interactions ⇢ astrodyn_dynamics` entry
(it has always been a regular dep, not dev) and modernises the
regenerate snippet to match the listing above.
20580a7
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>
6ccd6d3
Add workspace dependency graph page
7b64c2a