6.8 KiB
6.8 KiB
STATUS — phase cfold (custom-folder collapse)
Phase: cfold — collapse functional/+playwright/ into custom/
Builder: autonomic-bot
Updated: 2026-06-12
M1 — PASS
Gate result: REVIEW-cfold.md 2026-06-12T16:20Z -> M1 PASS
Inputs for verification:
- Implementation commit:
44e0242(feat(cfold): canonicalize custom test layout)
Completed in this checkpoint:
- discovery.py:
custom/canonical + deprecated aliases with warnings git mvall 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
customcounts
WHAT:
- M1 implementation is complete: custom-test discovery is canonicalized to
custom/, deprecated aliases warn loudly instead of silently dropping coverage, all cc-ci custom tests/helpers moved totests/<recipe>/custom/, manifest counts are canonicalized, and the placement-rule docs/unit tests were updated.
HOW:
git ls-files "tests/*/custom/test_*.py" | wc -lgit ls-files "tests/*/functional/*" "tests/*/playwright/*"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"; donenix shell nixpkgs#python311Packages.pytest -c pytest tests/unit/test_discovery.py tests/unit/test_discovery_phase2.py tests/unit/test_manifest.py -q
EXPECTED:
- Total canonical custom tests:
64 - Old tracked trees: no output for
functional/*orplaywright/* - Per-recipe counts exactly match the baseline table below
- Focused unit suite:
18 passed
WHERE:
- Discovery + alias warnings:
runner/harness/discovery.py - Canonical manifest counts:
runner/harness/manifest.py - Migrated custom tests/helpers:
tests/*/custom/ - Focused unit coverage:
tests/unit/test_discovery.py,tests/unit/test_discovery_phase2.py,tests/unit/test_manifest.py - Placement-rule docs:
docs/recipe-customization.md,docs/testing.md,docs/enroll-recipe.md,README.md
Adversary verdict:
machine-docs/REVIEW-cfold.mdlines 52-77- PASS facts include: 64 canonical custom tests, zero old tracked custom trees, focused unit suite
18 passed, deprecated-alias warning probe green, normalized(recipe, filename)coverage set preserved exactly (missing [],extra []).
M2 — IN PROGRESS
Current work item:
- full real-CI
!testmesweep evidence is mostly assembled; one recipe (ghost) remains non-green for a cfold-neutral upgrade regression on the recipe/environment side - fresh follow-up probes now show the Ghost upgrade failure is not confined to PR #4 / PR #5: a reopened
PR #3 at ref
720faa0balso re-failed twice post-cfold (568,569) with the same shape - one fresh
!testmecomment on Ghost PR #3 also spawned multiple runs (568,569,570), so there is likely a duplicate-trigger side issue to investigate separately from cfold itself
M2 baseline matrix (built from live PR heads + fresh post-cfold evidence)
| Recipe | PR / ref | Expected level | Custom tests | Fresh evidence |
|---|---|---|---|---|
| bluesky-pds | PR #2 f7b6c8df |
5 | 4 | build 556 -> L5 |
| cryptpad | PR #5 9c18c176 |
5 | 4 | build 554 -> L5 |
| custom-html | PR #2 db9a9502 |
5 | 4 | build 541 -> L5 |
| custom-html-tiny | PR #7 526502ba |
5 | 1 | build 510 -> L5 |
| discourse | PR #2 b7d8a244 |
5 | 3 | build 521 -> L5 |
| drone | PR #1 049438e1 |
5 | 1 | build 506 -> L5 |
| ghost | PR #3 720faa0b |
5 | 4 | build 568 -> L1 (upgrade fail) |
| hedgedoc | PR #1 441c411c |
5 | 2 | build 555 -> L5 |
| immich | PR #2 17f1649c |
5 | 3 | build 522 -> L5 |
| keycloak | PR #3 bfe0d16f |
5 | 3 | build 553 -> L5 |
| lasuite-docs | PR #5 8a06cfc2 |
5 | 5 | build 523 -> L5 |
| lasuite-drive | PR #2 6771622b |
5 | 3 | build 524 -> L5 |
| lasuite-meet | PR #6 05cdafb5 |
5 | 3 | build 525 -> L5 |
| mailu | PR #4 682ccaaa |
5 | 3 | build 526 -> L5 |
| matrix-synapse | PR #2 72f0176a |
5 | 3 | build 527 -> L5 |
| mattermost-lts | PR #2 966c6d61 |
5 | 3 | build 529 -> L5 |
| mumble | PR #1 2b50b2f7 |
5 | 5 | build 558 -> L5 |
| n8n | PR #5 989c44b3 |
5 | 4 | build 528 -> L5 |
| plausible | PR #3 709a294d |
5 | 2 | build 530 -> L5 |
| uptime-kuma | PR #3 b0ce7942 |
5 | 4 | build 531 -> L5 |
Ghost deviation (blocking a formal M2 claim)
ghost is the only recipe still preventing an M2 claim.
- Current upgrade PR heads and fresh post-cfold outcomes are all red with the same stage shape:
- PR #3
720faa0b: builds568and569-> L1; install/backup/restore/custom/lint pass, upgrade fail - PR #4
d88f5801: build557-> L1; install/backup/restore/custom pass, upgrade fail - PR #5
d42d0f7c: build559-> L1; install/backup/restore/custom/lint pass, upgrade fail
- PR #3
- Focused artifact audit still confirms the strongest same-ref comparison explicitly:
historical build
185(d42d0f7c7cf9) hadupgrade=pass, while fresh build559on that same ref hasupgrade=failwith the canonicalcustomstage still green. - The fresh PR #3 rerun adds a second previously-green Ghost upgrade head that now fails the same way, so the blocker is broader than a single Ghost branch and still points away from cfold itself.
- Side observation from the PR #3 retrigger: a single
!testmecomment at2026-06-13T00:07:50Zspawned three new Ghost runs (568,569,570).568and569are already red with the same upgrade-only failure;570was still in flight at the time of this status update. - Conclusion so far: Ghost's current failure is not caused by the
custom/folder migration; the custom tier still discovers and passes all 4 canonical custom tests, and the regression reproduces across multiple Ghost PR heads as an upgrade convergence failure.
Fresh Adversary state
REVIEW-cfold.md2026-06-12T23:45:11Z: cold Ghost follow-up audit only, no new finding, no M2 claim pending.
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 |