Repository navigation
Releases: GreyforgeLabs/oremap
Releases · GreyforgeLabs/oremap
Release list
oremap v0.4.0
Renamed
- Renamed from service-cartographer to oremap. This is the first oremap release; 0.3.0 and earlier were released as
service-cartographer. The crate, binary, and library are noworemap, the repository moves toGreyforgeLabs/oremap, help and error text use the program nameoremap, and the Markdown report title is now# oremap Report. - The README banner is now
docs/assets/openforge-oremap.webp; the oldopenforge-service-cartographer.webpwas removed. - JSON reports keep the schema identifier
service-cartographer.report.v1, so existing report consumers keep working unchanged. - Deprecated alias:
cargo installalso installs aservice-cartographerbinary for this release only. It printsservice-cartographer: renamed to oremap; this alias will be removed in the next releaseto stderr, then behaves exactly likeoremap(same output, help text, and exit status). Update scripts and cron entries tooremap.
Changed
- Rewrote the tool in Rust (edition 2024, MSRV 1.88). Apart from the program name and Markdown title (see Renamed), the 0.3.0 command line, help and error text, argparse abbreviation rules, report formats (JSON keys and layout, Markdown, spreadsheet-safe CSV), privacy and redaction rules, incomplete-scan reporting, classifier, report file mode, and exit codes are unchanged. Differential tests compare the binary with the Python 0.3.0 reference on help and usage errors at 13 terminal widths, on fixture scans, and on real-host scans. Apart from
generated_at, the renamed program name and Markdown title, and the deviations below, the output was identical byte for byte. - Measured on the reference host (
docs/benchmarks.md):--version56.56 ms to 1.93 ms; a filesystem-only scan 64.48 ms to 3.68 ms; a full default scan 265.75 ms to 137.12 ms. Peak RSS drops from 17,864 KiB to 2,664 KiB for--versionand from 19,140 KiB to 6,040 KiB for the default scan, where the external tools now set the peak. The installed artifact is one 852,144-byte stripped binary with no interpreter dependency (plus, for this release only, the deprecated alias binary). - Independent read-only queries now run at the same time: the
systemctlversion probe and both unit listings, thecrontabprobe and listing, thegitprobe and repository discovery, and per-repositorygitqueries (up to 8 workers). Results merge in the original order, so items and warnings are unchanged. - Python packaging, the pytest suite, and the Python CI were replaced by Cargo, Rust unit and integration tests, and a Rust CI job (fmt, clippy
-D warnings,test --locked), plus an MSRV job that builds and tests with Rust 1.88.
Intentional deviations from 0.3.0
gitsubprocesses run withGIT_OPTIONAL_LOCKS=0, sogit status --porcelaincan no longer refresh and rewrite a scanned repository's index. Reported branch, dirty count, and status are unchanged.- Several inputs crashed 0.3.0 with a Python traceback. 0.4.0 reports them instead:
- A wrapper directory that exists but cannot be listed is recorded as an
inventory-error: <dir>: <reason>warning. The report is marked incomplete and the exit status is 1. - A
statfailure other than "not found" while reading a modification time (for example a unit file that is a symlink loop) leaveslast_activityempty. A wrapper that disappears between listing andstatis skipped. - An unknown
~userroot (or aHOMEthat cannot be expanded), a report file that cannot be written, and a stdout that cannot be written (for example a closed pipe) each print one line,oremap: error: <reason>, on stderr and exit with status 1. Python printed a traceback, or exited 120 when only the final flush failed. - Non-finite or out-of-range
--timeoutvalues (inf,nan,1e300) mean "no deadline". Python raisedOverflowErrororValueErroronce a subprocess ran.
- A wrapper directory that exists but cannot be listed is recorded as an
- Bytes that are not valid UTF-8 in file names, arguments, the hostname, or tool output are replaced with U+FFFD. 0.3.0 emitted surrogate escapes such as
\udcffin JSON and crashed when writing Markdown or CSV, or when a tool printed invalid UTF-8. - Help and usage text match Python 3.14 argparse, including
COLUMNSand terminal-width wrapping, but are never colorized. Python 3.14 colorizes on a TTY; Python 3.11-3.13 did not. ~userpaths are resolved from/etc/passwdonly, not other NSS sources.
service-cartographer v0.3.0
v0.3.0
- User-systemd collection now carries the two session bus variables needed by
systemctl --user; a live bus integration test covers it. - Requested collector failures mark reports incomplete and return exit 1.
- File timestamps and repository commit age now prompt review instead of retirement. Retirement keywords must be supplied explicitly and cannot override active or dirty state.
- Output files are atomically replaced with private permissions.
See CHANGELOG.md for details.
service-cartographer v0.2.0
Full Changelog: v0.1.0...v0.2.0
service-cartographer v0.1.0
Initial public release of service-cartographer.\n\n- Read-only inventory for systemd units, cron jobs, wrapper scripts, Git repositories, and env-file metadata.\n- Markdown, JSON, and CSV output.\n- Conservative keep/review/retire classification.\n- Privacy defaults that redact hostnames, home paths, credential-looking command arguments, bearer tokens, and env-file values.\n\nValidation: Ruff, pytest, package build, Twine check, and OpenForge readiness status passed.