commits
Shorten sgp4 init by extracting record construction into
orbital_elements helper. Rename find_backtick_close → backtick_close
and find_angle_close → angle_close in mrkdwn parser.
Use Eio.Io for mkdirs calls in lib/tests, and _exn for fuzz crash
safety tests.
Reduces init from 143 to ~50 lines by extracting two helpers for
computing drag coefficients and secular gravity rates.
- Rename Sgp4.sgp4_init to Sgp4.init (E330 redundant module prefix)
- Fix doc style for Spdx.checksum_jsont and Spdx.document (E410)
- Flatten test suites to single pair per E600 convention
- runc/sdnv/sgp4: flatten test suites to single (string * test_case list)
- runc/sdnv/sgp4: update mli to export correct suite type
- sdnv/sgp4: add fuzz.ml runner, update dune to match convention
- ocaml-runc: add missing docstrings to mli
- ocaml-sbom: extract component_jsont_decode to reduce function length
- ocaml-sgp4: add mli docstrings, export suite for test runner
- merlint: fix cram test whitespace
- Change `run` signature to `string -> (string * test_case list) list -> unit`
matching Alcotest's grouping convention
- Fix `_name` bug: pass the name through to Alcotest.run_with_args
- Each fuzz module now exports `let suite = ("name", [test_case ...])`
- Entry points (fuzz.ml) collect suites: `Crowbar.run "pkg" [Fuzz_X.suite]`
- Remove stale `add_test`/`suite` API, keep only `test_case`/`run`
- Remove `let run () = ()` from fuzz_common.ml files
- Update merlint E725 rule to match new `let suite = ("name", ...)` pattern
- Update E725 test fixtures and expected output
- Restore cursor on exit via at_exit in Tty.Progress (fixes TTY corruption)
- Install SIGINT handler in monopam test for clean Ctrl-C
- Add 2s per-iteration timeout and 2s total budget to crowbar
- Group crowbar alcotest output by module prefix ("mdns: foo" → group "mdns")
- Skip fuzz runtest in afl context (enabled_if <> profile afl)
- Add merlint E725: enforce "module: description" fuzz test name convention
Replace the fixed 7-frame-then-poweroff flight sim with a continuous
loop that propagates ISS orbit via SGP4 and streams real lat/lon/alt/velocity
telemetry interleaved with drifting sensor readings, health, and EVR frames.
Expose gsto (Greenwich Sidereal Time at epoch) from Sgp4.state so
consumers can call to_geodetic without replicating the GMST computation.
Convert all packages from:
(source (uri https://tangled.org/handle/repo))
to:
(source (tangled handle/repo))
This uses dune 3.21's native tangled support for cleaner source
declarations. Also removes redundant homepage/bug_reports fields
that are auto-generated from tangled sources.
Comprehensive seed corpus for efficient AFL fuzzing:
Text/Protocol formats:
- cookeio: HTTP cookies (simple, full attributes, multi-value)
- jsonwt: JWT tokens (header, valid token)
- json-logs: JSON strings with escapes
- tomlt: TOML config files
- hostname: Domain names with ports
- xff: X-Forwarded-For headers, CIDR notation
- punycode: ASCII and Unicode domains
- mdns: DNS headers and queries
Binary formats:
- sdnv: RFC 6256 variable-length integers
- hap: HomeKit TLV encoding
- space-packet: CCSDS packet headers
- tc-1/tm-1: Telecommand/Telemetry frames
- sle: Space Link Extension TML headers
- tls: TLS records and handshake messages
- requests: HTTP/1.1 and HTTP/2 frames
Crypto:
- crypto: 32-byte keys
- csrf: CSRF tokens and secrets
- paseto: v3.local prefix and keys
- pbkdf2: passwords and salts
- spake2/srp: authentication parameters
- streaming-aead: keys, nonces, plaintext
Misc:
- sgp4: TLE satellite orbit data
- tty: ASCII, Unicode, ANSI escape sequences
- github-oauth: OAuth parameters
- rate-limit: IPv4/IPv6 addresses
Add crash-safety and correctness fuzz tests covering:
- TLE parsing with malformed input
- SGP4 initialization with edge case values
- Propagation with NaN/Inf detection
- Geodetic conversion
- Pretty-printer safety
- BSTAR scientific notation parsing
- Year boundary handling (Y2K cutoff)
Fix monopam warnings about missing source stanzas and ca-certs parse error.
- Change `run` signature to `string -> (string * test_case list) list -> unit`
matching Alcotest's grouping convention
- Fix `_name` bug: pass the name through to Alcotest.run_with_args
- Each fuzz module now exports `let suite = ("name", [test_case ...])`
- Entry points (fuzz.ml) collect suites: `Crowbar.run "pkg" [Fuzz_X.suite]`
- Remove stale `add_test`/`suite` API, keep only `test_case`/`run`
- Remove `let run () = ()` from fuzz_common.ml files
- Update merlint E725 rule to match new `let suite = ("name", ...)` pattern
- Update E725 test fixtures and expected output
- Restore cursor on exit via at_exit in Tty.Progress (fixes TTY corruption)
- Install SIGINT handler in monopam test for clean Ctrl-C
- Add 2s per-iteration timeout and 2s total budget to crowbar
- Group crowbar alcotest output by module prefix ("mdns: foo" → group "mdns")
- Skip fuzz runtest in afl context (enabled_if <> profile afl)
- Add merlint E725: enforce "module: description" fuzz test name convention
Replace the fixed 7-frame-then-poweroff flight sim with a continuous
loop that propagates ISS orbit via SGP4 and streams real lat/lon/alt/velocity
telemetry interleaved with drifting sensor readings, health, and EVR frames.
Expose gsto (Greenwich Sidereal Time at epoch) from Sgp4.state so
consumers can call to_geodetic without replicating the GMST computation.
Comprehensive seed corpus for efficient AFL fuzzing:
Text/Protocol formats:
- cookeio: HTTP cookies (simple, full attributes, multi-value)
- jsonwt: JWT tokens (header, valid token)
- json-logs: JSON strings with escapes
- tomlt: TOML config files
- hostname: Domain names with ports
- xff: X-Forwarded-For headers, CIDR notation
- punycode: ASCII and Unicode domains
- mdns: DNS headers and queries
Binary formats:
- sdnv: RFC 6256 variable-length integers
- hap: HomeKit TLV encoding
- space-packet: CCSDS packet headers
- tc-1/tm-1: Telecommand/Telemetry frames
- sle: Space Link Extension TML headers
- tls: TLS records and handshake messages
- requests: HTTP/1.1 and HTTP/2 frames
Crypto:
- crypto: 32-byte keys
- csrf: CSRF tokens and secrets
- paseto: v3.local prefix and keys
- pbkdf2: passwords and salts
- spake2/srp: authentication parameters
- streaming-aead: keys, nonces, plaintext
Misc:
- sgp4: TLE satellite orbit data
- tty: ASCII, Unicode, ANSI escape sequences
- github-oauth: OAuth parameters
- rate-limit: IPv4/IPv6 addresses