3.9 KiB
JOURNAL — phase cfold
2026-06-11 — Phase cfold start
Investigation findings
Pre-existing test layout:
- 60 files in
functional/subdirs across 20 recipes - 4 files in
playwright/subdirs (cryptpad, custom-html, uptime-kuma) - Helper modules to move:
_discourse.py,_ghost.py,_mailu.py,_mm.py,_mumble_proto.py,drone/functional/__init__.py mailu/test_backup.py,test_restore.py,ops.pyexplicitly addfunctional/to sys.path — need updating tocustom/
Decision: deprecated aliases
Per plan §2 option (RECOMMENDED): keep recognizing functional//playwright/ as deprecated aliases
AND emit a loud one-line warning when a test is found in a deprecated folder. Using warnings.warn()
at import time of discovery or print() directly. Will use print() (stderr) so it shows up in CI
logs without needing to configure warning filters.
Implementation: subdirs = ("custom", "functional", "playwright") — canonical first — and after
finding a test in functional/ or playwright/, emit:
print(f"WARNING [cfold]: test found in deprecated folder '{sub}/' — move to custom/: {path}", flush=True, file=sys.stderr)
This way:
custom/is canonical and gets discovered first- Old folders still work (zero breakage for repo-local tests) but emit a loud warning
- No silent coverage loss possible
2026-06-12 — M1 checkpoint: canonical custom/ layout landed locally
Code/work completed:
runner/harness/discovery.py: canonicalcustom/discovery, deprecated alias warnings, andcustom_subdir_label()normalization helper.runner/harness/manifest.py: custom-test counts now normalize to canonicalcustom.- all cc-ci custom tests/helper modules moved from
tests/<recipe>/{functional,playwright}/intotests/<recipe>/custom/. - helper-import fallout fixed where needed (
tests/mailu/{ops.py,test_backup.py,test_restore.py}). - docs updated to describe
custom/as the canonical layout and explain the alias-compatibility window.
Mechanical move summary:
- 64 custom test files relocated into
custom/ - helper modules relocated too:
_discourse.py,_ghost.py,_mailu.py,_mm.py,_mumble_proto.py,tests/drone/custom/__init__.py
Verification:
nix shell nixpkgs#python312Packages.pytest --command pytest \
tests/unit/test_discovery.py tests/unit/test_discovery_phase2.py tests/unit/test_manifest.py -q
# ..................
# 18 passed in 0.09s
Post-move grep state:
- remaining
functional//playwright/matches in live code are intentional: alias-policy docs, deprecated-folder assertions in the unit tests, and discovery comments describing the alias behavior. - the pre-migration inventory in
BACKLOG-cfold.mdis intentionally unchanged because it is the M1 baseline record the Adversary will compare against.
2026-06-12 — M1 coverage proof assembled
Verification commands + observed outputs:
$ git ls-files "tests/*/custom/test_*.py" | wc -l
64
$ git ls-files "tests/*/functional/*" "tests/*/playwright/*"
# no output
$ for recipe in bluesky-pds cryptpad custom-html custom-html-tiny discourse drone ghost hedgedoc immich keycloak lasuite-docs lasuite-drive lasuite-meet mailu matrix-synapse mattermost-lts mumble n8n plausible uptime-kuma; do count=$(git ls-files "tests/$recipe/custom/test_*.py" | wc -l); printf "%s %s\n" "$recipe" "$count"; done
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
$ nix shell nixpkgs#python311Packages.pytest -c pytest tests/unit/test_discovery.py tests/unit/test_discovery_phase2.py tests/unit/test_manifest.py -q
..................
18 passed in 0.14s
Conclusion: the migrated tree still contains the exact same 64 custom test files with the same
per-recipe cardinality as the pre-cfold baseline in BACKLOG-cfold.md; only the folder paths changed.