Rust (stable, 1.98+) process manager on Tokio. Build/test/lint: DEVELOP.md.
make check-- fmt-check + clippy + tests; run before submittingmake fmt-- format; run before committing
src/main.rs-- CLI parsing, TTY/TUI selection, signal handlingsrc/config/-- TOML + plain Procfile parsing, validation, dependency graph, env resolutionsrc/theme/-- terminal light/dark detection, per-background colors,colorparsingsrc/logger/-- domain-free logging: per-tag writers over an ANSI stream or a storesrc/service/-- per-service object: config, color,ServiceStatus, log storesrc/runner/-- orchestration + execution: start order, shutdown, spawn, output pump, readiness, retriessrc/tui/-- ratatui UI: tabs, rendering (view/), log search, event loop
- Library returns typed errors (
thiserror); the binary renders them. - No
unwrap()/expect()(they panic) -- return a typed error or match. - Concurrency: Tokio tasks,
watchfor readiness,CancellationTokenfor shutdown. - Terse comments: doc comments ≤4 lines, inline comments ≤2 lines.
- Env keys/values must be valid UTF-8; non-UTF-8 OS vars are skipped.
- Function order: each struct/enum directly above its
impl. Within animpl: associated consts, public then private static fns, public then private instance fns; free functions last, public before private. Order private items by first-call sequence.