# Session handoff — Catacomb > Working notes for continuing this work in another session/agent (Copilot, Codex, etc.). > Updated 2026-06-19. Delete or update freely; this is not a tracked spec. ## TL;DR — where things are - Project: **Catacomb** (crate/binary `catacomb`) — one Rust binary that is **both** an egui desktop GUI and an axum web server wrapping `yt-dlp`. See [CLAUDE.md](CLAUDE.md) for the authoritative architecture; [ROADMAP.md](ROADMAP.md) for the plan. - Branch: `main`. Last commit `c12de9c` (command palette); `5f95bdb` and earlier are pushed, **`c12de9c` is committed but NOT yet pushed**. Remote: `https://codeberg.org/anassaeneroi/catacomb.git`. - **Local checkout dir was renamed** `~/code/youtube-backup` → **`~/code/catacomb`** (code dir only; the library/backup dir at `/mnt/InannaBeloved/youtube-backup` is unchanged). Run the server with the right CWD, e.g. `env -C ~/code/catacomb ~/code/catacomb/target/release/catacomb --web 8081`. - Only `HANDOFF.md` is uncommitted now. - The project was **renamed yt-offline → Catacomb** (crate, binary, data paths with migration, UI, docs, repo URLs). See "The rename" below. - A dev web server is usually run on **:8081** against the user's real library. It gets reaped between turns in this sandbox — just relaunch it (see gotchas). ## How to build / run / test ```bash cargo build --release # ~1.5 min (opt-level=3 + thin LTO) → target/release/catacomb cargo test --release # 128 unit + 11 integration (tests/api.rs); no network ./target/release/catacomb --web 8081 # headless web server (what the user uses) ./target/release/catacomb # desktop GUI (default) ``` ### CRITICAL gotchas 1. **The web SPA is one big embedded file** — `src/web_ui/index.html`, baked in at compile time via `include_str!`. **Editing it requires a `cargo build`** to take effect. A JS syntax error there will NOT be caught by `cargo build` (the HTML is just a string), so after every edit: ```bash awk '/