CLI-only concerns of the mikan binary: the argv grammar and the subcommands that run instead of the daemon.
boot.tsresolves argv into aBootPlanwithout side effects, andmain.tsexecutes it. Commander owns option parsing and usage text.mikan migrateis the only subcommand that moves state, and it requires a stopped daemon. Its steps live insrc/migrations/.mikan slackwrites onlyslack.jsonandslack-config-token.json; the daemon applies them on its next start.mikan onboardwrites nothing when cancelled before confirmation, deletes a Slack app it created when onboarding then fails or is declined, and never overwrites or prints an existing custommodels.json.- Shutdown steps in
process-lifecycle.tsrun in order and never skip a later step when an earlier one fails.