v1.223.1-rc.3
Pre-release
Pre-release
test: cover Terraform same-stack dependency order Erik Osterman (Cloud Posse) (@osterman) (#2776)
## what- Add a credential-free eight-component Terraform dependency fixture that mirrors the reported same-stack graph.
- Exercise canonical
component:,name:alias, and legacysettings.depends_ondeclarations throughterraform plan --all --dry-run -s <stack>. - Assert the execution summary contains only the selected stack and every prerequisite completes before its dependent starts.
why
- Prevent the scheduler from again diverging from dependency-list rendering for the
dependencies.components[].nameform addressed by #2755. - Preserve compatibility coverage for canonical and legacy dependency declarations without Terraform, credentials, or state backends.
references
🚀 Enhancements
fix(config): resolve atmos.yaml imports relative to config dir Brian Ojeda (@sgtoj) (#2772)
## what- Top-level
import:entries inatmos.yamlnow resolve relative to the directory containing thatatmos.yaml, not the current working directory. Running a command from a subdirectory no longer breaks imports likeimport: [".atmos/commands/**/*"]. - Anchoring is scoped to config-sourced empty and dot-relative base paths (
"",.,./,..,../…). Bare paths (foo), absolute paths,!cwd, and runtime overrides (ATMOS_BASE_PATH,--base-path, theatmos_base_pathprovider parameter) keep their existing resolution semantics. - Base-path provenance is tracked across multiple
--configfiles and through imported declarations, so a later--configfile's imports anchor to the file that actually declared the effectivebase_path. - Nested imports (local and go-getter adapters) resolve a declared relative
base_pathagainst the importing file's directory via a shared helper.
why
mergeImportsresolved the import base path withfilepath.Abs(base_path), which anchors to the current working directory. With the common empty or dot-relativebase_path(e.g..), runningatmosfrom a nested directory resolvedimport:globs against the subdirectory and failed to find them — for example,atmos.yamlat/repo/acmewithimport: [".atmos/commands/**/*"], invoked from/repo/acme/somepath, looked for.atmos/commandsundersomepath.- Imports should anchor to the atmos root (the directory of the discovered
atmos.yaml), consistent with howbase_pathis resolved for config-file sources. - The change preserves the established source-aware convention (runtime/CLI/env dot paths → CWD; bare paths → git-root search;
!cwd→ CWD), so anchoring is limited to config-sourced empty and dot-relative values.
references
- Fix record:
docs/fixes/2026-07-20-config-imports-relative-to-config-dir.md. - Related base-path work:
docs/prd/base-path-resolution-semantics.md,docs/fixes/2026-03-17-failed-to-find-import-base-path-resolution.md. - Testing:
go build ./...;go test ./pkg/config/... ./internal/exec/... ./cmd/...; the new CWD-independence tests fail on the pre-fix code (import resolves against CWD) and pass after;go test ./pkg/config ./pkg/config/adapters -shuffle=on -count=10for registry isolation.
Summary by CodeRabbit
- Bug Fixes
- Resolved
import:globs and relative import paths relative to the declaring config file’s directory (not the process working directory). - Fixed how imported
base_pathis anchored and prioritized across nested imports and multi-file merges, including correct handling of CWD-anchored (!cwd) behavior and bare/empty base paths. - Improved resilience when nested import base paths can’t be resolved or provenance read fails—continuing without breaking the whole resolve.
- Resolved
- Documentation
- Documented the updated config-relative import behavior and compatibility rules.
- Tests
- Expanded validation for base-path resolution, glob/relative imports, merge precedence, and new error-path scenarios.
fix(version): clarify Git ref version override guidance Erik Osterman (Cloud Posse) (@osterman) (#2775)
## what- Add
ref:<name>andref:mainguidance to invalid--use-versionerrors. - Cover the bare
mainfailure path and update the related blog and implementation documentation.
why
- Branch and tag override support already exists, but the stale hint and format lists made it appear unsupported.
references
- N/A
Summary by CodeRabbit
- New Features
- Added
ref:<name>to--use-versionfor selecting a Git branch or tag, resolved to the latest available build artifact.
- Added
- Documentation
- Updated version-format guidance and “Invalid version format” messaging to include
ref:<name>(along withpr:NNNN,sha:XXXXXXX, and semver). - Refreshed the PRD sections covering security mitigations and testing strategy to reflect the new
refapproach.
- Updated version-format guidance and “Invalid version format” messaging to include
- Bug Fixes
- Improved the invalid version-spec error hint to explicitly show the supported
ref:<name>format.
- Improved the invalid version-spec error hint to explicitly show the supported
- Tests
- Adjusted unit tests to validate the revised error messaging for invalid version input.
fix(terraform): preserve sensitive output types when masking is disabled Erik Osterman (Cloud Posse) (@osterman) (#2770)
## what- Make
--mask=falseopt out of sensitive Terraform/OpenTofu output registration, retaining structured values in generated JSON varfiles. - Add coverage for the default secret-safe
TF_VAR_*path and the disabled-masking compatibility path. - Document the resulting disk-exposure tradeoff.
why
- Environment variables are strings, so untyped structured values cannot retain their object shape when sensitive-output registration routes them through
TF_VAR_*.
references
Closes #2768
Summary by CodeRabbit
- Bug Fixes
- When secret masking is disabled, sensitive Terraform/OpenTofu outputs keep their original structured (object/typed) form.
- Masking/secret-safe handling is applied only when masking is enabled; with masking off, secret-safe
TF_VAR_handling may not apply and values can appear in generated.tfvars.json.
- Documentation
- Added clearer warnings about the behavior and security implications of disabling masking, and improved formatting of a logging-related example.
- Tests
- Added regression coverage for masking-disabled behavior to prevent unintended transformations.
fix(cast): record help output once Erik Osterman (Cloud Posse) (@osterman) (#2774)
## what- Record help casts through the masked I/O stream once, and cover the lifecycle and rendered help output with regression tests.
- Regenerate CLI screengrabs, validate one
USAGEheading per help cast, and add missing MCP help assets.
why
- The help-specific recorder tee duplicated every rendered help block in docs casts.
- Complete, validated screengrabs prevent both duplicate payloads and broken documented embeds.
references
- None.