Conversation
…ellant budget - TwoBurnOrbitTransfer.hohmannTransferWithPlaneChange folds an inclination change into the cheaper burn (burn 2 when raising, burn 1 when lowering) as a single law-of-cosines impulse and reports the assignment - PropellantBudget adds Tsiolkovsky helpers (massAfterBurn, propellantUsed, deltaVRemaining) for tracking a delta-V budget across a burn sequence - Tests cover the canonical LEO-GEO 28.5 deg case, lowering-transfer assignment, pure plane change, and Tsiolkovsky round trips
…windows Coarse-then-fine scan over a search window for the launch time whose achievable orbital plane best matches a target RAAN, with drift-aware matching via meanRaanAt for satellites that regress over the window.
…kStateVector Add groundTrackStateVector: a closed-form TEME state builder that places a satellite at perigee directly over a geodetic sub-point on an orbit of a given shape and inclination, moving North/South. Feed it to rv2tle to fit SGP4 mean elements. The fitted ground track passes within ~10-40 m of the target vs the old OrbitFinder search's ~2.8 km tolerance, with no iterative SGP4 loop. This retires and deletes OrbitFinder (the Inc/RAAN ground-track rotation search) and its test; LaunchWindowFinder's physical cross-check is re-pointed at the new primitive. Two subtleties handled: - Position is built on the WGS84 ellipsoid so it round-trips through eci2lla (which is geodetic, unlike the spherical lla2eci). - Eccentricity is floored at 1e-3: an exactly-circular state has an undefined eccentricity vector, so the downstream osculating-to-mean fit can decompose it to an argument of latitude inconsistent with the position (a grid sweep diverged in 37/290 near-circular cases, worst ~20000 km; the floor -> 0/290).
Adds a TT_C_ANTENNA SensorType and a TtcAntenna sensor class for telemetry, tracking, and command dishes (DSN, SCN, ESTRACK, Galileo).
Horizons pads header labels before the colon for column alignment (e.g. "Output units : KM-S"), which an exact 'Label:' prefix match missed. Match label-then-colon instead and strip spacecraft name suffixes.
A BSTAR of exactly 0.01 formatted to the 9-character " 100000-2", which pushed every later column of TLE line 1 one place right and corrupted the ephemeris type, element number and checksum. Math.log10(0.01) is exact, so the mantissa came back as 0.09999999999999999, tripped the "< 0.1" correction and then rounded up to a six-digit 100000. Round to an integer mantissa first and renormalize on that integer, so the carry cannot widen the field, and saturate the two magnitudes the eight-character field cannot express at all. Non-finite input now formats as an empty field rather than "NaN". Found on NORAD 12833 (COSMOS 1109 DEB).
Main-belt asteroids rendered as real bodies need a type of their own: they are not dwarf planets and not moons, and consumers key hover text, search filtering and selection routing off this enum.
|
Both switch/if chains are exhaustive, so the seed values were dead stores. Declaring the bindings without an initializer lets TypeScript's definite-assignment analysis prove coverage instead.
…ranch The estimate() orbit binding was only ever read inside the block that computes it, so hoisting it to the function body kept a nullable that could never be observed.
ESLint 10 no longer hoists @eslint/js, so it is now declared directly. It also promotes no-useless-assignment into the recommended set; sgp4.ts is exempted because it is a line-by-line port of the AIAA reference implementation whose zero-initialized declarations must stay diffable against the original.
pnpm-workspace.yaml is what anchors the workspace root, not the lockfile. ootk lives inside keeptrack-space as a submodule and pnpm resolves its root by walking up the tree, so without this file every pnpm command run from here silently operated on the parent project instead. package-lock.json is removed and gitignored alongside yarn.lock so a stray npm install cannot reintroduce one. esbuild stays pinned past the dev-server path-traversal advisory via pnpm.overrides, and the default isolated linker works here without any phantom-dependency failures.
pnpm/action-setup runs before actions/setup-node because its cache: 'pnpm' option needs pnpm on PATH first. The npm-audit-action compliance job becomes a plain pnpm audit step, and the node_modules cache keys now hash pnpm-lock.yaml.
pnpm lockfiles carry no root package version, so a release has nothing to bump there. semantic-release still publishes through the npm CLI it vendors.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request introduces a new integration with the official USSF Astro Standards SGP4 WebAssembly (Wasm) wrappers, adds robust TLE exponential formatting, and makes several related improvements and fixes. The most notable changes are the addition of new wrapper classes for SGP4 and SGP4-XP, comprehensive type definitions and error handling for the Wasm interface, and fixes to TLE formatting to prevent field overflow and ensure strict compliance with TLE line length requirements.
USSF Astro Standards SGP4 WebAssembly Integration
Sgp4WasmandSgp4XpWasmclasses to wrap the official USSF Astro Standards SGP4 and SGP4-XP WebAssembly builds, exposing all 19 exported functions as a typed TypeScript API. [1] [2]README.mdinsrc/external/explaining how to obtain and use the Emscripten artifacts, with API mapping and usage notes.src/external/Sgp4Prop*.js).Type Definitions and Error Handling
Sgp4WasmTypes.ts, defining types for satellite keys, propagation records, error codes, and the Emscripten module/FS interface, with human-readable error messages for common failure modes.TLE Formatting and Testing
FormatTle.formatTleExponentialto guarantee an 8-character field, correctly handle edge cases (including exact powers of ten and out-of-range values), and prevent TLE line overflow/corruption.Other Improvements
TT_C_ANTENNA, to theSensorTypeenum.Hill.tsto compareEpochobjects by their raw POSIX seconds, preventing subtle bugs in maneuver filtering.