Part of #72.
mackas project add <name> [--url/--branch | --from <checkout>] creating the workspace directory and writing the pinned config (seeded from currently-effective settings); mackas-<name>-* naming for all three volumes, including a private mackas-<name>-dl — sharing is opt-in via MACKAS_VOLUME_DL_NAME, never a default (see #72); adopt_unique_volume_name()'s now-misleading -dl probe fixed; destroy/clean taught to refuse shared volumes.
This is the backward-compatibility-critical milestone and its regression tests are the compatibility contract — in particular "MACKAS_PROJECT_DIR=meta-ai with no selector still resolves oe-build-*" must be written first and mutation-tested.
Precedence decision (Koen, 2026-09-04): an explicit volume stem always wins over the selector-derived name, but mackas warns once when they disagree. When a pinned project's config sets MACKAS_VOLUME_NAME (or _DL_NAME/_SSTATE_NAME) to something other than the mackas-<name>-* convention the selector would derive, the explicit value is honored — this is the existing precedence chain (defaults → config file → environment → --set) unchanged, not a new rule — but mackas surfaces an informational note (e.g. on status) so an unintentional-looking mismatch doesn't go unnoticed. Rejected: refusing the disagreement outright, because #72's documented migration path B ("keep oe-build-*, no data moves") depends on an explicit stem legitimately disagreeing with the derived name — refusing would break a supported, common choice, not catch a mistake.
Size: M. Risk: high.
Part of #72.
mackas project add <name> [--url/--branch | --from <checkout>]creating the workspace directory and writing the pinned config (seeded from currently-effective settings);mackas-<name>-*naming for all three volumes, including a privatemackas-<name>-dl— sharing is opt-in viaMACKAS_VOLUME_DL_NAME, never a default (see #72);adopt_unique_volume_name()'s now-misleading-dlprobe fixed;destroy/cleantaught to refuse shared volumes.This is the backward-compatibility-critical milestone and its regression tests are the compatibility contract — in particular "
MACKAS_PROJECT_DIR=meta-aiwith no selector still resolvesoe-build-*" must be written first and mutation-tested.Precedence decision (Koen, 2026-09-04): an explicit volume stem always wins over the selector-derived name, but mackas warns once when they disagree. When a pinned project's config sets
MACKAS_VOLUME_NAME(or_DL_NAME/_SSTATE_NAME) to something other than themackas-<name>-*convention the selector would derive, the explicit value is honored — this is the existing precedence chain (defaults → config file → environment → --set) unchanged, not a new rule — but mackas surfaces an informational note (e.g. onstatus) so an unintentional-looking mismatch doesn't go unnoticed. Rejected: refusing the disagreement outright, because #72's documented migration path B ("keepoe-build-*, no data moves") depends on an explicit stem legitimately disagreeing with the derived name — refusing would break a supported, common choice, not catch a mistake.Size: M. Risk: high.