# JOURNAL — sub-phase conc (Builder, append-only) ## 2026-06-10 — bootstrap Read concurrency-restructure-full-plan.md (SSOT) + plan.md §6.1/§7/§9. Oriented on the code: - `runner/harness/lifecycle.py` — recipe flock (l.46), registry (l.65–97), deploy_app registration (l.283), teardown unregister (l.723), three-way janitor (l.726). - `runner/run_recipe_ci.py` — `acquire_recipe_lock` call site (l.843), `fetch_recipe` (l.140, rm-rf + reclone of the shared tree), janitor call sites (l.600 quick, l.932 cold). - `.drone.yml` — recipe-ci step runs `cc-ci-run runner/run_recipe_ci.py` bare (P1 wraps it), `concurrency.limit: 2` (P4 removes). - Greps for P3 fallout: `~/.abra/recipes` referenced in abra.py (recipe_checkout, has_lightweight_version_tags, recipe_head_commit, recipe_versions), generic.py:28, lifecycle.prepull_images, run_recipe_ci (fetch_recipe, snapshot_recipe_tests, comment), warm_reconcile.py:202 (runs OUTSIDE per-run context — keeps default), and tests/ghost+discourse install_steps.sh (`${HOME}/.abra/recipes/...` — these run INSIDE a run and copy compose.ccci.yml into the deploy tree, so they must resolve the per-run dir). - `~/.abra/servers/...` paths are unaffected by design (servers/ is symlinked to the canonical /root/.abra/servers, so both resolutions land on the same file). Working setup: state files on main in this clone; code on branch `restructure/concurrency` via a git worktree at ../cc-ci-conc; test runs on the cc-ci host via /root/builder-clone (`cc-ci-run -m pytest ...`, `nix develop .#lint`).