Resolution
Inheritance lets a configuration reuse existing choices and override only the parts that differ for a project, while resolution follows those inherited choices and selected resources to determine the effective configuration that a build will render.
Preset order and local choices
Section titled “Preset order and local choices”extends selects one preset or an ordered list, with each preset resolving
its own inherited configuration first. Atlante combines the presets from
left to right, then applies the project configuration as the final layer.
base preset + another preset + project configuration ↓ effective configurationLater layers replace conflicting scalar values, while fields they leave unspecified can retain the values inherited from earlier layers.
What an override changes
Section titled “What an override changes”The following excerpts show only the fields involved in a project override of a local review preset. Other binding fields, such as its template selection and identity, are omitted from these excerpts.
The preset supplies shared values and an initial set of instructions for the reviewer agent:
{ "values": { "project": "shared-project", "language": "TypeScript", "legacyRule": "Prefer callbacks." }, "agents": { "reviewer": { "mission": "Find defects before merge.", "sections": [ { "instructions": ["Review error handling.", "Check public APIs."] } ] } }}The project changes the name and review focus, replaces the sections, and removes a value it no longer needs:
{ "extends": "./packs/review", "values": { "project": "billing-api", "legacyRule": null }, "agents": { "reviewer": { "mission": "Find breaking API changes before merge.", "sections": [ { "instructions": ["Check database migrations."] } ] } }}The effective fields combine inherited values with the project’s overrides, while the removed value disappears from the result:
{ "values": { "project": "billing-api", "language": "TypeScript" }, "agents": { "reviewer": { "mission": "Find breaking API changes before merge.", "sections": [ { "instructions": ["Check database migrations."] } ] } }}The example illustrates four merge rules that apply throughout configuration inheritance, rather than only to agent bindings:
- Objects merge recursively.
- Arrays replace inherited arrays rather than appending to them.
- Scalars replace inherited scalars.
nullremoves an inherited field.
Replacing sections removes the earlier instructions from this reviewer;
it does not add migration checks to the inherited list. Removing a value
also removes it as a possible input, so remaining references to that name
need another value in scope.
From inheritance to native output
Section titled “From inheritance to native output”Preset precedence determines the global configuration and each binding’s inherited fields. Binding-local values then override matching global values only within that binding, so changing the project name for one reviewer leaves other agents and skills unchanged.
Resolution follows selected resources, combines instance content with binding overrides, interpolates values, and validates the result against each binding’s effective template. This produces the canonical document: effective bindings without inheritance instructions or unresolved source selectors. Template composition then renders that input as Markdown, as described in Templates.
atlante validate checks this resolved input without rendering files.
atlante build performs the same checks, then renders and
materializes native output. The same inputs,
including working directory values,
produce the same output. Evaluation assesses the built
harness on defined tasks.