Configuration
Project state consists of portable configuration in lunapack.yml and generated
resolved state in lunapack-lock.yml. Both documents use schemaVersion: 1 and
are created together by luna init.
Initialization writes only required properties: project schemaVersion,
sources, and packs, plus lock schemaVersion and packs. Later commands
add and canonically serialize properties required by their changes.
lunapack.yml: Owned by the project team. It contains project-relative local and Git sources, requested root packs, project-owned links, and optional string and Boolean variables.lunapack-lock.yml: Owned by LunaPack. It records exact resolved packs and links, provenance, dependency edges, effective targets, and content SHA-256 digests.
Variables can satisfy matching pack parameters but do not persist explicit install input. Commands that change sources or roots validate and update both documents as one recoverable state change.
During luna install, LunaPack prompts for each required parameter that is not
already supplied by an explicit parameter, a composite-pack binding, or a
matching project variable.
Local-source paths must be relative to the project. A Git source requires a repository URL or absolute local filesystem repository path; it may select a branch or commit and a repository-relative subdirectory. Git operations use a configurable timeout from 1 through 300 seconds, with 300 seconds by default.
Git must be available on the process path. LunaPack caches discovered Git metadata
under the workspace .lunapack directory and never stores Git credentials there.
The lock document records the resolved commit used for each Git pack.
Links select regular files from an existing configured source without requiring
an upstream pack.yml. Link intent remains in project configuration; selected
source paths, mapped targets, source identity, optional Git commit, and content
digests remain in lock state. See the Luna Links reference.
Trust storage
Project trust is stored in lunapack.yml. Local-user and global-user trust are
stored outside the repository in user settings. Packs cannot grant themselves
trust through pack.yml; consumers control every persisted trust entry.
A project source or pack declaration is effective only when user settings also
contain its acknowledgement for the canonical project path and exact source
identity. luna trust ... --project writes both records for the current user;
committed project trust alone does not authorize scripts for other users or
fresh automation profiles.
All three scopes support deny.scripts. Any active denial overrides grants and
--scripts run. Project denial uses trust.deny.scripts; user settings use
deny.scripts in the corresponding project or global record. Omission and
explicit false mean no denial. LUNAPACK_USER_PROFILE can select an alternate
profile root for isolated automation; Luna stores settings beneath that root's
.lunapack directory.