You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Surfaced during CG review of PR 1.6 (resolver Python hygiene, fix/resolver-python-hygiene).
PR 1.6 (currently DRAFT, must-merge-after Light-Heart-Labs#1029) aligns the user-extension loop of scripts/resolve-compose-stack.sh with the built-in loop's structure. After PR 1.6 + PR Light-Heart-Labs#1029 both merge, the user-ext loop will have 5 new behavior paths with zero existing test coverage:
The existing tests/test-resolve-compose-resilient.sh etc. only exercise built-in extensions. Zero fixtures live under data/user-extensions/ for the test suite.
Proposed scope
Add a new test (BATS or shell) that creates a synthetic USER_EXTENSIONS_DIR fixture tree and asserts each of the 5 behaviors:
compose_file from manifest: ext with manifest.yaml → service.compose_file: custom.yaml AND custom.yaml exists → resolver emits -f .../custom.yaml (NOT -f .../compose.yaml)
.disabled skip: ext with compose.yaml.disabled (no plain compose.yaml) → resolver skips silently
compose.local.yaml overlay: ext with both compose.yaml + compose.local.yaml, run with DREAM_MODE=hybrid → resolver emits BOTH -f flags
compose.multigpu.yaml overlay: ext with both compose.yaml + compose.multigpu.yaml, run with gpu_count=2 → resolver emits BOTH
gpu_backends filter: ext with gpu_backends: [nvidia] → resolver SKIPS on GPU_BACKEND=apple; emits on GPU_BACKEND=nvidia
Plus the compat carve-out:
6. manifest-less user-ext: ext with NO manifest, just compose.yaml → resolver still emits -f .../compose.yaml (preserves historical behavior)
Why stacked
PR 1.6 ships without these tests deliberately — the test PR depends on PR 1.6 + PR Light-Heart-Labs#1029 both being merged so the user-ext loop has all 5 features to test. Filing this as a stacked follow-up.
Severity
Medium — landing PR 1.6 + PR Light-Heart-Labs#1029 without tests means future regressions in the user-ext loop have no CI signal.
Source
CG review of PR 1.6 fix/resolver-python-hygiene, batch 1 (2026-04-26).
Context
Surfaced during CG review of PR 1.6 (resolver Python hygiene, fix/resolver-python-hygiene).
PR 1.6 (currently DRAFT, must-merge-after Light-Heart-Labs#1029) aligns the user-extension loop of
scripts/resolve-compose-stack.shwith the built-in loop's structure. After PR 1.6 + PR Light-Heart-Labs#1029 both merge, the user-ext loop will have 5 new behavior paths with zero existing test coverage:compose_filefrom manifest (defaultcompose.yaml).disabledsuffix handling (sibling<base>.disabledfile → skip)compose.local.yamloverlay (gated ondream_mode in (local, hybrid, lemonade))compose.multigpu.yamloverlay (gated ongpu_count > 1)gpu_backendsfilter (added by PR fix(resolver): dedupe override.yml; apply gpu_backends filter to user-extensions Light-Heart-Labs/DreamServer#1029)The existing
tests/test-resolve-compose-resilient.shetc. only exercise built-in extensions. Zero fixtures live underdata/user-extensions/for the test suite.Proposed scope
Add a new test (BATS or shell) that creates a synthetic
USER_EXTENSIONS_DIRfixture tree and asserts each of the 5 behaviors:manifest.yaml→service.compose_file: custom.yamlANDcustom.yamlexists → resolver emits-f .../custom.yaml(NOT-f .../compose.yaml)compose.yaml.disabled(no plaincompose.yaml) → resolver skips silentlycompose.yaml+compose.local.yaml, run withDREAM_MODE=hybrid→ resolver emits BOTH-fflagscompose.yaml+compose.multigpu.yaml, run withgpu_count=2→ resolver emits BOTHgpu_backends: [nvidia]→ resolver SKIPS onGPU_BACKEND=apple; emits onGPU_BACKEND=nvidiaPlus the compat carve-out:
6. manifest-less user-ext: ext with NO manifest, just
compose.yaml→ resolver still emits-f .../compose.yaml(preserves historical behavior)Why stacked
PR 1.6 ships without these tests deliberately — the test PR depends on PR 1.6 + PR Light-Heart-Labs#1029 both being merged so the user-ext loop has all 5 features to test. Filing this as a stacked follow-up.
Severity
Medium — landing PR 1.6 + PR Light-Heart-Labs#1029 without tests means future regressions in the user-ext loop have no CI signal.
Source
CG review of PR 1.6 fix/resolver-python-hygiene, batch 1 (2026-04-26).