The stack should be operated through explicit profiles, optional presets, and a systemd user entrypoint.
The repository now includes deployment bridge scripts under scripts/:
aoa-doctoraoa-install-layoutaoa-sync-configsaoa-bootstrap-configsaoa-check-layoutaoa-install-systemdaoa-first-run
For Windows-host orchestration through WSL, the repository also includes:
aoa.ps1aoa-doctor-win.ps1aoa-bootstrap-wsl.ps1
They help bridge from a source checkout into the deployed runtime tree under ${AOA_STACK_ROOT}.
The repository also includes:
aoa-preset-profilesaoa-profile-modulesaoa-profile-endpointsaoa-render-servicesaoa-render-config
These helpers make it easy to see what a preset, profile, or profile-combination will activate before you start it.
aoa-render-services and aoa-render-config are the deeper runtime-truth layer because they come from the composed runtime view rather than just docs or module lists.
You may optionally layer bounded overlays after the canonical module list through AOA_EXTRA_COMPOSE_FILES on Linux or -Overlay on the Windows bridge.
When ${AOA_STACK_ROOT}/Logs/machine-fit/latest/latest.private.json exists, the wrapper scripts also auto-apply its validated_settings and any recommended_overlays that actually touch the currently selected services before compose resolution.
Explicit environment variables still win, and you can disable the auto-apply bridge with AOA_MACHINE_FIT_AUTO_APPLY=false.
The repository also includes these runtime wrappers under scripts/:
aoa-upaoa-downaoa-statusaoa-logsaoa-smokeaoa-wait
They resolve presets and profiles into an ordered compose module list.
On Windows, pwsh -File scripts/aoa.ps1 <command> is the host-facing wrapper that forwards into the same Linux command surface.
You can operate:
- one profile
- several composed profiles
- one or more presets
- presets plus extra profiles
Examples:
aoa-up --profile agentic --profile tools
aoa-up --profile agentic,tools,observability
aoa-up --preset agent-full
aoa-up --preset agent-tools --profile observabilityThe order matters because profile ordering is preserved.
Optional layers such as tools and observability should usually come after the base profile.
Presets expand before direct --profile additions.
Expected pattern:
- one or more presets and profiles resolve to an ordered profile list
- that profile list resolves to an ordered module list
- machine-fit validated settings are applied next when a current machine-fit record exists and auto-apply is enabled
- compose files are applied in that order, with matching machine-fit recommended overlays first and any explicit bounded extra compose overlays appended after them
- the rendered Compose view is inspectable before launch
- systemd user unit becomes the stable operator entrypoint
Until wrappers are installed into the live runtime path, the intended manual shape is:
cd /srv/abyss-stack/Configs
podman compose \
-f compose/modules/10-storage.yml \
-f compose/modules/20-orchestration.yml \
-f compose/modules/30-local-inference.yml \
up -dOptional modules should be layered explicitly rather than assumed.
A first unit skeleton now lives at:
systemd/user/podman-compose-abyss.service
Its expected deployed location is:
~/.config/systemd/user/podman-compose-abyss.service
It assumes the deployed runtime tree exists under:
/srv/abyss-stack/Configs
The wrapper scripts treat the deployed Linux runtime path as distinct from any source checkout path. This is what makes the repository Fedora-first while still usable from Windows-oriented editing workflows.
Truth progression must stay explicit:
source_authoreddeployedtrial_provenlive_available
Do not collapse those states into one word such as "landed".
A source-authored change becomes deployed only after aoa-sync-configs updates /srv/abyss-stack/Configs.
Use python scripts/validate_stack.py --parity-check when repo-managed surfaces should match the deployed Configs mirror.
A profile is a declared set of modules. A module is a declared concern. Nothing should start just because it once happened to live in a giant file.