f23086171b
Two failure modes found while validating the harness against a scratch config root: Teardown removed $dest unconditionally before restoring the backup, so a second run deleted the user's own file — the first run had already restored it, and a restored original is indistinguishable from an installed demo file except by content. Compare against the source before removing. Setup had the mirror-image bug: run twice without an intervening teardown it backed up its *own* copy, and teardown then "restored" that, leaving demo.md in the user's config permanently. Treat an already-identical destination as a no-op. Also fail fast when bot-bottle is not on PATH. The tape types the real console script, so without it a recording silently captures `command not found` instead of a bottle launching. Refs #540 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>