github cloudposse/atmos v1.231.0-rc.2

pre-release5 hours ago
docs: add focused navigation and a first-class Steps reference @osterman (#3268) ## what
  • Add shared desktop/mobile focused section menus with linked overview titles, sidebar-wide filtering, independent expansion, compact styling, React icons, and section transitions that respect reduced motion; redesign Next Steps around a recommended project and simple topic rows.
  • Promote Steps beside Workflows with a shared overview, complete type catalog, configuration reference, and context-specific guidance; migrate pages to /steps, preserve legacy redirects and release markers, update website references, rename Custom Components, and update the Go documentation inventory test for the shared catalog and initialized registry.

why

  • Make the documentation easier to browse and expose reusable steps directly while preserving existing links, execution-context distinctions, and CI coverage of registered step types.

references

  • Validation: full step package tests, documentation inventory with the race detector, 9 navigation/release-history tests, production documentation build, 59 migrated page redirects, all 14 section overview links, and desktop/mobile browser checks including reduced motion and the redesigned Next Steps page.

Summary by CodeRabbit

  • New Features

    • Added a searchable, section-based documentation sidebar with collapsible menus and clearer navigation.
    • Added a shared Steps reference and catalog covering workflows, custom commands, and lifecycle hooks, including documentation for the tflint step.
    • Reorganized the “Next Steps” guide with topic-based learning paths.
  • Documentation

    • Updated step documentation links to current /steps routes and added guides for step configuration and usage.
    • Made documentation categories collapsed by default.
feat(terraform): treat component mocks as fallbacks for missing state @osterman (#3244) ## what
  • With --use-mocks, !terraform.state and !terraform.output now use the real value when it exists and fall back to the component's mocks only when the referenced state is not provisioned or the output is missing. Precedence: real value → mock → YQ // default → original error.

  • Credential, network, and backend errors still fail; mocks never hide them.

  • New atmos.yaml setting components.terraform.mocks.mode (fallback | always, env ATMOS_COMPONENTS_TERRAFORM_MOCKS_MODE). always keeps the previous hermetic behavior: mocks only, no Terraform init, credentials, or backend reads.

  • --use-mocks is now value-bearing: absent/false = off, bare/true = on with the configured mode, fallback/always = on with a per-run override. It is still accepted only by atmos terraform plan and atmos describe component.

  • The new default is journaled as a config edition entry (2026-10-01, always → fallback), following the components.terraform.init.mode precedent, so projects pinned to an earlier edition keep mocks-only behavior with no changes.

  • An invalid mocks.mode in atmos.yaml fails loudly under --use-mocks instead of silently disabling mocks.

  • Updated the PRD, mocks/flag/YAML-function/configuration/environment-variable docs, Terragrunt migration page (also fixing its incorrect "any command" claim), example README, agent skills, help-text snapshots, defaults snapshot, and atmos.yaml JSON schema. Added a changelog post, a roadmap milestone, and a fix-log record.

  • Bumped github.com/containerd/containerd/v2 to v2.3.6 (go directive 1.26.6 → 1.26.8, which v2.3.6 requires) to fix GO-2026-6597, published 2026-10-01. Atmos reaches the affected package through the OPA SDK, which forced govulncheck into whole-program analysis that exceeds the standard runner's memory and failed the job repo-wide.

why

  • Mocks were meant to fill gaps, but --use-mocks short-circuited every lookup to the mocks map, so a plan against a partly deployed environment showed fake values for components that already had real state.
  • Restricting the fallback to recoverable misses (the same classification YQ // defaults use) keeps real infrastructure problems visible.
  • Bare --use-mocks changes meaning in a released version, so the change is edition-gated to avoid surprising pinned projects.

references

  • Original feature: #2755
  • PRD: docs/prd/terraform-component-mocks.md
  • Changelog: website/blog/2026-10-01-terraform-component-mocks-fallback.mdx

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added configurable Terraform mock modes: fallback prefers real state and outputs, using mocks when values are missing; always uses mocks only.
    • Added mode selection through --use-mocks and Terraform configuration, with clearer validation and command restrictions.
    • Output lookups using . now return all outputs.
  • Bug Fixes

    • AWS browser authentication can complete an in-flight token exchange if the spinner fails.
    • NOTICE generation can reuse its existing tagline when GitHub’s description is unavailable.
  • Documentation

    • Updated mock-mode guidance, examples, migration notes, and CLI help.

🚀 Enhancements

fix(mcp): respect .atmos.d fragments in mcp add/remove (#3269) @aknysh (#3270) ## what
  • atmos mcp add / atmos mcp remove now respect the .atmos.d/ config-fragment convention when choosing which file to edit.
  • When no explicit --config is given and the project already keeps its MCP config in an auto-discovered atmos.d/ or .atmos.d/ fragment (one that declares an mcp: section), that fragment is edited instead of the root atmos.yaml. mcp.enabled (flipped during add self) lands in the same file.
  • When no fragment declares mcp:, behavior is unchanged: the root atmos.yaml is edited. An explicit --config <file> still wins over detection.
  • Command help, embedded markdown, and the atmos mcp add docs now explain which file is edited and the --config escape hatch.

why

  • Fixes #3269. Atmos auto-discovers and deep-merges atmos.d//.atmos.d/ fragments when it loads config, so mcp.servers declared in a fragment are read correctly and show up in atmos mcp list. Only the write path lagged: mcp add always targeted the root atmos.yaml, splitting a modular-config project's MCP configuration across two files and risking duplicate or conflicting mcp.servers entries.
  • The reading convention and the writing convention now agree, so a project that keeps MCP config in a fragment stays consistent after add/remove.

references

  • Closes #3269
  • Fix write-up: docs/fixes/2026-10-04-mcp-add-respects-atmos-d-fragments.md
  • Docs: atmos mcp add

Implementation

  • pkg/config/config_edit.go: new ResolveEditableConfigFileForSection(atmosConfig, override, section) — same precedence as ResolveEditableConfigFile (explicit override wins) but prefers an auto-discovered fragment that already declares the given top-level section before falling back to the root atmos.yaml. Helpers fragmentDeclaringSection / fragmentSearchDirs (current working directory before git root, mirroring mergeDefaultImports precedence) and fileDeclaresTopLevelKey.
  • pkg/mcp/config/config.go: ResolveFile now calls ResolveEditableConfigFileForSection(..., "mcp").

Testing

  • Reproduction test fails before / passes after (pkg/mcp/config), plus fallback and --config-override tests; direct unit tests for the new pkg/config functions (fragment variants atmos.d/.atmos.d, nested, .yml; fallback; override; no-config error; fileDeclaresTopLevelKey edge cases). New functions at 90–100% coverage.
  • End-to-end with the built binary: in a project with atmos.yaml + .atmos.d/mcp.yaml, atmos mcp add <url> --name demo --yes added demo to .atmos.d/mcp.yaml and left atmos.yaml untouched.
  • go build ./..., affected test suites, golangci-lint (0 issues), and cd website && npm run build all pass.

Summary by CodeRabbit

  • New Features

    • atmos mcp add and remove select a configuration file based on where the server is declared. Overwrites target the highest-precedence file declaring that server; new servers go to the highest-precedence file declaring mcp.servers, or the root atmos.yaml if none does.
    • Changes to mcp.enabled go to the highest-precedence file declaring that setting, or the root config if none does.
    • Use --config <file> to explicitly choose a target.
  • Documentation

    • Clarified configuration-file selection, including fragments, and noted that add writes only to the configuration file unless --install is used.
docs(support): point paid support to Atmos Pro and Cloud Posse @osterman (#3262) ## what
  • Updated the "Paid Support" section of atmos support (CLI output and the atmos support docs page) to say paid support is available as part of Atmos Pro, or consulting from Cloud Posse, with links to https://atmos-pro.com and https://cloudposse.com/support.
  • Removed the GitHub Sponsors (Enterprise Tier) link and the sponsorship-tied "30-minute workshops twice a week" wording, and dropped the duplicate support link from the trailing note.
  • Regenerated the atmos support golden snapshot.

why

  • GitHub Sponsors is no longer how paid support is offered; the old text pointed users at the wrong place.

references

  • Not regenerated: the atmos-support.cast screengrab still shows the old text and needs a screengrabs regeneration run.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Updated paid-support information to list Atmos Pro and Cloud Posse Support, with help for Atmos, AWS Reference Architectures, related tools, troubleshooting, and architecture decisions.
    • Added links to the support options and retained the note that paid support includes priority responses.
    • The GitHub Sponsors Enterprise Tier offer and its twice-weekly workshops are no longer listed.

Don't miss a new atmos release

NewReleases is sending notifications on new releases.