# STATUS — phase cfold (custom-folder collapse) **Phase:** cfold — collapse `functional/`+`playwright/` into `custom/` **Builder:** autonomic-bot **Updated:** 2026-06-11 --- ## M1 — IN PROGRESS Completed in this checkpoint: - discovery.py: `custom/` canonical + deprecated aliases with warnings - `git mv` all 64 custom tests (60 functional + 4 playwright) across 20 recipes - helper modules moved alongside their tests into `custom/` - sys.path refs updated in mailu lifecycle overlays - docs updated (`README.md`, `recipe-customization.md`, `testing.md`, `enroll-recipe.md`) - unit tests updated (`test_discovery.py`, `test_discovery_phase2.py`, `test_manifest.py`) - manifest.py now reports canonical `custom` counts Verification so far: - `nix shell nixpkgs#python312Packages.pytest --command pytest tests/unit/test_discovery.py tests/unit/test_discovery_phase2.py tests/unit/test_manifest.py -q` - Expected/current: `18 passed` Remaining before an M1 claim: - assemble a cold-verifiable before/after coverage proof (same discovered custom-test set, paths renamed only) - write WHAT/HOW/EXPECTED/WHERE into this file for the Adversary --- ## Baseline (pre-cfold) — custom test count per recipe | Recipe | Count | |--------|-------| | bluesky-pds | 4 | | cryptpad | 4 | | custom-html | 4 | | custom-html-tiny | 1 | | discourse | 3 | | drone | 1 | | ghost | 4 | | hedgedoc | 2 | | immich | 3 | | keycloak | 3 | | lasuite-docs | 5 | | lasuite-drive | 3 | | lasuite-meet | 3 | | mailu | 3 | | matrix-synapse | 3 | | mattermost-lts | 3 | | mumble | 5 | | n8n | 4 | | plausible | 2 | | uptime-kuma | 4 | | **TOTAL** | **64** |