Service Cartographer: Inventory Before Runtime Mutation
Useful infrastructure rarely arrives as one obvious system. It arrives as unit files, timers, wrappers, cloned repositories, and small bits of scheduled work. service-cartographer exists so cleanup begins with a map instead of a guess.

Runtime cleanup is a mutation. Inventory is the gate before mutation.
The release gives operators a repeatable way to inspect workflow entrypoints before disabling, moving, or deleting anything.
>_The problem was visibility
Service sprawl does not usually look dramatic while it is forming. A timer is added for one task, a wrapper script for another, a cron entry for a report, a cloned repository for a temporary tool. Each decision is small. The combined surface becomes hard to reason about.
The dangerous moment comes later, when cleanup starts. Without an inventory, an operator is choosing between fear and force: leave everything alone because something might break, or remove things by guesswork and learn from the failure.
>_Build a scanner, not another resident process
service-cartographer is a run-on-demand Python CLI. It has no daemon, no web server, no scheduler, and no always-on state. That constraint is part of the product. A tool built to clarify runtime state should not become another runtime surface to maintain.
service-cartographer scan --format markdown --output service-map.mdThe first release is deliberately conservative. It does not stop units, edit crontabs, delete repositories, upload reports, or phone home. It gathers structure, applies basic classification, and lets the next decision remain explicit.
>_Privacy is part of the release surface
Inventory tools sit close to sensitive systems. A useful report can expose hostnames, home paths, command arguments, env-file names, and accidental credentials if the defaults are careless.
The default path redacts the hostname, shortens home paths, hides env-file values, and masks common credential-looking command fragments. Those controls are not a promise that every possible secret form is recognized. They are the minimum standard for making local workflow maps safer to inspect and share inside a team.
Runtime gate
No resident service was started for this release. The runtime gate is the scan command: run it, keep the report, review the map, then decide whether any actual service should change.
>_What changed
The v0.1.0 release moved the pattern out of a private cleanup moment and into OpenForge. The public surface now includes a repository, a tagged release, packaged artifacts, an OpenForge card, this Chronicle, and a source note that maps the claims without publishing private inventory.
Validation passed through Ruff, pytest, package build, Twine check, and OpenForge readiness status before publication. The result is small by design: a map before the move.