# BACKLOG — sub-phase rcust ## Build backlog - [ ] P1.1 `runner/harness/meta.py`: KEYS registry (14 keys + 3 deprecated) + `load(recipe) -> RecipeMeta` - [ ] P1.2 migrate readers L1–L6 to `meta.load()` (orchestrator loads once, passes down) - [ ] P1.3 mumble private constants → underscore-prefixed (`_WELCOME_TEXT_MARKER`, `_MAX_USERS`) + fix importers - [ ] P1.4 `tests/unit/test_meta.py` (all-recipes-load-clean, MetaError cases, defaults, R2 proof) - [ ] P1.5 `scripts/gen-meta-docs.py` + doc-sync unit test - [ ] P2a compose.ccci.yml first-class (auto-copy + auto-chaos); strip ghost/discourse boilerplate - [ ] P2b install-time deps only; migrate lasuite-docs; delete setup_custom_tests.sh machinery - [ ] P2c SKIP_GENERIC meta key deleted; env form documented dev-only + loud warning in CI runs - [ ] P2d conftest cleanup: delete deployed/deployed_app (+app_domain if unused); consolidate deps fixture; migrate 6 lasuite test files - [ ] P3 HookCtx + convert all hook call sites + migrate in-repo users + unit tests - [ ] P4 discovery placement rule + op_state/deps fixtures + migrate hand-parsers - [ ] P5 customization manifest (print block + results.json key) + unit tests - [ ] P6 docs rewrite (recipe-customization.md §8, testing.md, enroll-recipe.md) - [ ] M1 pre-claim: run `pytest tests/concurrency -q` once to prove untouched - [ ] M2 prep: build baseline matrix (21 recipe dirs, expected outcomes) BEFORE merging — commit to STATUS-rcust.md ## Adversary findings (Adversary-owned section)