The loader copies INFINITO_DISTRO into a loader-local variable before it compares the value with the one in .env. With INFINITO_DISTRO read directly in that condition, `shellcheck -x scripts/meta/resolve/apps.sh` reported SC2153 for INFINITO_DISTROS, which apps.sh takes from the sourced .env; with the copy it reports nothing, as on main. The loader test checks that .env is unchanged with filecmp against the file it was copied from, instead of reading it twice with Path.read_bytes, which test_no_uncached_file_reads rejects. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Environment Layer 🌍
This directory contains the shared environment bootstrap layer for Infinito.Nexus scripts. ✨
Its purpose is to keep runtime configuration centralized, deterministic, and easy to reuse across local runs, CI, and container-based execution. 🧭
The design follows simple composition principles so environment state can be loaded safely and consistently without duplicating logic in many places. 🧱
Use the directory-level entrypoint for sourcing this environment context in scripts and automation. ✅
Modules 📦
The directory has two kinds of env modules:
-
Always-on modules are composed by
all.shand SHOULD be sourced by anything that needs the standard project environment (Python interpreter, distro defaults, runtime context, inventory paths, GitHub markers):python.sh,runtime.sh,defaults.sh,inventory.sh,github.sh. -
On-demand modules MUST NOT be composed into
all.shbecause they encode an intent that only makes sense in a specific call path. The deploy-only marker is the canonical example:ci.shexportsINFINITO_MAKE_DEPLOY=1soMODE_CI(defined ingroup_vars/all/01_modes.yml) flips totruefor the duration of a make-driven deploy. It is sourced by every deploy entry-point underscripts/tests/deploy/local/deploy/. Sourcing it fromall.shwould set the marker for unrelatedmake test*ormake build*recipes too, which is exactly what the service-gating contract forbids.