Skip to content

feat(website): Sort changelog by release version#1819

Merged
aknysh merged 28 commits intomainfrom
osterman/blog-release-tags
Nov 30, 2025
Merged

feat(website): Sort changelog by release version#1819
aknysh merged 28 commits intomainfrom
osterman/blog-release-tags

Conversation

@osterman
Copy link
Copy Markdown
Member

@osterman osterman commented Nov 29, 2025

what

  • Group blog posts by release version instead of date
  • Sort with "Unreleased" posts first, then versions in descending semver order
  • Display release version as clickable section headers linking to GitHub releases
  • Simplified filter UI to show only tag filtering (removed year-based filtering)

why

Blog posts were out of order by version due to mismatched post dates and release dates. Sorting by semver ensures users see features grouped by the version they can upgrade to.

references

Fixes issues where changelog timeline order didn't match release chronology.

Summary by CodeRabbit

  • New Features

    • Release badges on blog posts and in the TOC (including "Unreleased"); changelog and sidebar now grouped by release with GitHub links; multi-select year/tag filters for the timeline; sidebar collapse state shared site-wide.
  • Documentation

    • Blog front-matter standardized and many posts populated with a release field; release metadata auto-populated for accurate grouping.
  • Style

    • Updated badge, timeline, TOC, sidebar and blog layout styles for spacing, responsiveness and dark-mode.
  • Chores

    • Simplified tag taxonomy for clearer user-facing categories.

✏️ Tip: You can customize this high-level summary in your review settings.

osterman and others added 3 commits November 29, 2025 07:50
- Add `release:` frontmatter to all 44 blog posts with their respective release versions
- Create swizzled BlogPostItem/Header component to display release badges
- Add migration script (website/scripts/update-blog-releases.js) to compute release versions from git history
- Badge links to GitHub release page, shows "Unreleased" for posts not yet in a release

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…rdering

- Group blog posts by release version instead of date
- Show "Unreleased" posts first, then versions in descending semver order
- Display release version as clickable section headers linking to GitHub releases
- Simplified filter UI to show only tag filtering (removed year filter)
- Added semver parsing and comparison utilities for proper version sorting

Fixes issue where blog posts were out of order by version due to mismatched post dates and release dates.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@osterman osterman requested a review from a team as a code owner November 29, 2025 14:40
@github-actions github-actions bot added the size/xl Extra large size PR label Nov 29, 2025
@mergify
Copy link
Copy Markdown

mergify bot commented Nov 29, 2025

Warning

This PR exceeds the recommended limit of 1,000 lines.

Large PRs are difficult to review and may be rejected due to their size.

Please verify that this PR does not address multiple issues.
Consider refactoring it into smaller, more focused PRs to facilitate a smoother review process.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Nov 29, 2025

Dependency Review

✅ No vulnerabilities or license issues found.

Scanned Files

None

…/collapse

Replace instant display:none toggle with CSS transitions for a polished
expand/collapse experience. The sidebar now smoothly slides in/out from
the left while the TOC remains anchored on the right.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@osterman osterman added the no-release Do not create a new release (wait for additional code changes) label Nov 29, 2025
Remove internal code change details and upgrade notes that aren't
relevant to end users. Tone down intro from "major" to minor improvement.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Nov 29, 2025

📝 Walkthrough

Walkthrough

Adds release-aware tooling and UI: many blog posts' frontmatter normalized and release fields added; a script to infer/write release from Git; a build plugin exposing release→permalink map; UI/layout changes to group and display posts by release (changelog, sidebar, TOC, badges); shared sidebar collapse state; styles and a small test fixture tweak.

Changes

Cohort / File(s) Summary
Blog frontmatter edits
website/blog/*.{md,mdx}, website/blog/2025-01-04-nested-backend-maps-support.mdx, website/blog/welcome.md
Converted inline frontmatter to block-style, normalized quoting/dates, and added release metadata across many posts.
Release metadata script
website/scripts/update-blog-releases.js
New Node script that finds each file's first-add commit, resolves tags, and writes release (or unreleased) into frontmatter; emits summary/errors.
Build-time plugin
website/plugins/blog-release-data/index.js, website/docusaurus.config.js
New Docusaurus plugin that scans posts' frontmatter and exposes a permalink→release map via global data; registered in config.
Changelog utils & types
website/src/components/ChangelogTimeline/utils.ts
Added BlogPostFrontMatter/ReleaseGroup types, semver parsing/comparison, grouping by release, multi-filter utilities, and extended tag→class mappings.
Changelog components
website/src/components/ChangelogTimeline/FilterBar.tsx, .../index.tsx, .../TimelineRelease.tsx, .../TimelineEntry.tsx
Switched from year/month to release grouping; FilterBar now supports multi-select years/tags; added TimelineRelease and updated rendering to use cumulative startIndex; minor comment and prop changes.
Changelog styles
website/src/components/ChangelogTimeline/styles.module.css
New/renamed classes for pill filters and release/unreleased tags, dark-mode variants, and layout/connector spacing adjustments.
TOC & release badge
website/src/theme/TOC/index.tsx, .../styles.module.css, website/src/theme/TOC/BlogReleaseBadge.tsx
Swizzled TOC to client-only lazy-load BlogReleaseBadge with unreleased handling and added styles.
Blog layout & TOC placement
website/src/theme/BlogLayout/index.tsx, .../styles.module.css
Wraps BlogLayout with SidebarProvider, moves TOC to a right column, adjusts main width based on shared sidebar collapse state, and updates CSS classes.
Shared sidebar state
website/src/theme/BlogSidebar/context.tsx, .../Desktop/index.tsx, .../Desktop/styles.module.css
New SidebarProvider and useSidebarCollapsed hook; BlogSidebarDesktop consumes shared state (removed local memo/useState); updated collapse behavior/styles.
BlogPost header badge
website/src/theme/BlogPostItem/Header/index.tsx, .../Header/styles.module.css
New swizzled Header forwarding to original; CSS for release badge (stable/unreleased + dark-mode).
BlogSidebar content grouping
website/src/theme/BlogSidebar/Content/index.tsx
Replaced year/month grouping with release-based buckets sourced from plugin global data; renders collapsible release groups and GitHub links for releases.
Release helper & site CSS
website/src/css/custom.css, website/src/css/landing-page.css, website/src/pages/index.js
Mobile/backdrop and hero/link/layout tweaks; responsive/typing container adjustments and sidebar link wrapping changes.
Misc — small edits
website/src/components/ChangelogTimeline/TimelineEntry.tsx, website/src/components/ChangelogTimeline/index.tsx, various style/module updates
Minor comments, prop/import cleanups, and index updated to render TimelineRelease with startIndex.
Test fixture
tests/fixtures/scenarios/empty-dir/.gitignore
.gitignore changed from * to include !.gitignore so the .gitignore file itself is not ignored.

Sequence Diagram(s)

mermaid
sequenceDiagram
actor Dev
participant Script as update-blog-releases.js
participant Files as Blog Files
participant Git
participant Build as Docusaurus Build
participant Plugin as blog-release-data
participant Browser as Client UI

Dev->>Script: run script
Script->>Files: read frontmatter
Script->>Git: git log --follow --diff-filter=A <file>
Git-->>Script: commit SHA or none
Script->>Git: git tag --contains <sha>
Git-->>Script: tags (or none)
Script->>Files: write frontmatter.release (tag or "unreleased")
Script-->>Dev: summary (Updated/Skipped/Errors)

Build->>Plugin: during loadContent, scan posts
Plugin-->>Build: setGlobalData(releaseMap)
Build->>Browser: serve site with global data and frontMatter.release

Browser->>Browser: TOC lazy-loads BlogReleaseBadge (client-only)
Browser->>SidebarContext: toggle collapse (shared state) -> layout re-render

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Focus areas:
    • semver parsing/sorting and "unreleased" ordering in website/src/components/ChangelogTimeline/utils.ts
    • Git command robustness and edge cases in website/scripts/update-blog-releases.js (cross-platform, missing tags)
    • Permalink → release mapping correctness in website/plugins/blog-release-data/index.js and consumption by BlogSidebar/Content
    • Sidebar context/provider correctness and all consumers (BlogLayout, BlogSidebarDesktop, TOC)
    • CSS/layout regressions from TOC relocation and responsive changes

Possibly related PRs

Suggested reviewers

  • aknysh
  • jamengual
  • goruha

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 34.62% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: sorting the changelog by release version instead of date. It's specific, concise, and reflects the primary objective of the PR.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch osterman/blog-release-tags

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between eb965e0 and cc5300d.

📒 Files selected for processing (1)
  • website/blog/2025-10-18-keyring-backends.mdx (2 hunks)
✅ Files skipped from review due to trivial changes (1)
  • website/blog/2025-10-18-keyring-backends.mdx
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Acceptance Tests (windows)
  • GitHub Check: Acceptance Tests (linux)
  • GitHub Check: Acceptance Tests (macos)
  • GitHub Check: Summary

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Nov 29, 2025

📝 Walkthrough

Walkthrough

Standardizes blog post front matter across 40+ posts (YAML structure, date formats, adding release versions), introduces an automated release-tagging script, refactors the changelog timeline from year-based to release-based grouping, implements sidebar collapse functionality with context-based state management, and adds release badges to the TOC.

Changes

Cohort / File(s) Summary
Blog Post Front Matter Standardization
website/blog/2025-01-04-nested-backend-maps-support.mdx, website/blog/2025-10-13-introducing-atmos-auth.md, website/blog/2025-10-15-*, website/blog/2025-10-16-*, website/blog/2025-10-17-*, website/blog/2025-10-18-*, website/blog/2025-10-19-*, website/blog/2025-10-20-*, website/blog/2025-10-21-*, website/blog/2025-10-23-*, website/blog/2025-10-24-*, website/blog/2025-10-26-*, website/blog/2025-10-28-*, website/blog/2025-10-29-*, website/blog/2025-10-30-*, website/blog/2025-10-31-*, website/blog/2025-11-*/, website/blog/welcome.md
Converted inline arrays to YAML block lists for authors/tags, standardized date format to ISO 8601 with time, adjusted string quoting styles, and added release version metadata to frontmatter across 40+ blog posts.
Release Update Automation
website/scripts/update-blog-releases.js
New Node.js script that scans blog posts, computes release versions from git tags, and injects release field into frontmatter; reports per-file outcomes and summary stats.
Test Fixture
tests/fixtures/scenarios/empty-dir/.gitignore
Removed all content from .gitignore file.
Changelog Timeline Filtering
website/src/components/ChangelogTimeline/FilterBar.tsx
Removed year-based filtering UI and related props (years, selectedYear, onYearChange); retained only tag-based filtering.
Changelog Timeline Metadata & Layout
website/src/components/ChangelogTimeline/TimelineEntry.tsx, website/src/components/ChangelogTimeline/TimelineRelease.tsx, website/src/components/ChangelogTimeline/index.tsx, website/src/components/ChangelogTimeline/styles.module.css, website/src/components/ChangelogTimeline/utils.ts
Introduced release-based grouping to replace year-based organization. Added TimelineRelease component, new utilities (groupBlogPostsByRelease, sortByReleaseVersion, filterBlogPostsByTag), updated styles for release tags, and adjusted layout dimensions/positioning.
Blog Layout & Sidebar State Management
website/src/theme/BlogLayout/index.tsx, website/src/theme/BlogLayout/styles.module.css, website/src/theme/BlogSidebar/Desktop/index.tsx, website/src/theme/BlogSidebar/Desktop/styles.module.css, website/src/theme/BlogSidebar/context.tsx
Implemented collapsible sidebar with React context (SidebarProvider, useSidebarCollapsed). Updated BlogLayout to adapt main content width based on sidebar collapse state. Refactored sidebar styling from grid to flex-based layout with smooth transitions.
Blog Post Header & Release Badge
website/src/theme/BlogPostItem/Header/index.tsx, website/src/theme/BlogPostItem/Header/styles.module.css, website/src/theme/TOC/index.tsx, website/src/theme/TOC/styles.module.css
Introduced swizzled Header component and TOC component with release badge rendering. Added styling for release badges (with unreleased state) and updated TOC to display release info above table of contents items.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Areas requiring extra attention:

  • Release versioning logic in website/scripts/update-blog-releases.js — git integration, tag parsing, and fallback handling need verification
  • Sidebar context state management (BlogSidebar/context.tsx and usage in BlogLayout and BlogSidebar/Desktop) — ensure context provider wrapping and hook usage are correct
  • Release grouping and sorting in website/src/components/ChangelogTimeline/utils.ts — verify semantic version comparison and "unreleased" handling
  • Timeline component restructuring — confirm TimelineRelease integration replaces TimelineYear correctly and startIndex alternation logic works as intended
  • Layout responsive behavior — test sidebar collapse/expand on various screen sizes and ensure transitions are smooth

Possibly related PRs

Suggested reviewers

  • aknysh
  • jamengual
  • goruha

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 38.89% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Title clearly summarizes the main objective—organizing changelog by release version instead of date. It's specific and reflects the core change.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch osterman/blog-release-tags

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
website/blog/2025-10-19-chdir-flag.md (1)

219-219: Replace placeholder version with actual release version.

Line 219 references "Atmos vX.X.X" which needs to be updated to match the release version specified in the front matter (v1.195.0).

Apply this diff:

-The `--chdir` flag is available starting in Atmos vX.X.X. To start using it:
+The `--chdir` flag is available starting in Atmos v1.195.0. To start using it:
🧹 Nitpick comments (6)
website/src/components/ChangelogTimeline/styles.module.css (1)

403-419: Release/unreleased tag styling is coherent across light and dark themes

The .tagRelease/.tagUnreleased styles and their dark‑mode overrides fit cleanly with the existing tag system and use appropriate theme variables. This should make release grouping visually distinct without clashing with feature/enhancement tags.

If you later find the badge styles diverging from the TOC/header badges, consider extracting a shared “release badge” palette, but it’s not necessary now.

Also applies to: 485-497

website/src/theme/BlogPostItem/Header/styles.module.css (1)

1-50: Header release badge styles are consistent with the new badge UX

The header badge styles (including .unreleased and dark‑mode variants) look coherent and leverage existing color tokens. With .releaseContainer defaulting to display: none, this safely coexists with the TOC‑based badge while keeping a header‑level hook available if you decide to surface it again.

If the header badge remains unused long‑term, you might later trim .releaseContainer/.releaseBadge here to avoid confusion, but it’s fine to keep for now.

website/src/theme/BlogSidebar/context.tsx (1)

6-29: Context behavior is good; consider aligning setter type with React’s dispatch

The shared SidebarProvider + useSidebarCollapsed pattern is clean, and returning safe defaults outside the provider avoids runtime errors—a good fit for layout code.

One small improvement: your setIsCollapsed type is narrower than React’s actual dispatcher type. To keep typings accurate and allow functional updates if you ever need them, you could define:

interface SidebarContextValue {
  isCollapsed: boolean;
  setIsCollapsed: React.Dispatch<React.SetStateAction<boolean>>;
}

and keep the rest as-is.

website/scripts/update-blog-releases.js (1)

86-89: Consider preserving original frontmatter formatting.

gray-matter.stringify may alter quote styles or key ordering in the original YAML. This could produce noisy diffs if the original formatting was intentional.

website/src/components/ChangelogTimeline/index.tsx (1)

37-61: Consider computing startIndex in useMemo.

Mutating runningIndex during render works here since map is synchronous, but it's a pattern that can confuse future readers. Computing offsets upfront in a memo would be cleaner.

-  // Calculate running index for alternating positions across releases.
-  let runningIndex = 0;
+  // Pre-compute start indices for alternating positions across releases.
+  const startIndices = useMemo(() => {
+    let idx = 0;
+    return groupedItems.map((g) => {
+      const start = idx;
+      idx += g.items.length;
+      return start;
+    });
+  }, [groupedItems]);

   return (
     <div className={styles.changelogTimeline}>
       ...
         <div className={styles.timeline}>
           <div className={styles.timelineLine} aria-hidden="true" />
-          {groupedItems.map((releaseGroup) => {
-            const startIndex = runningIndex;
-            runningIndex += releaseGroup.items.length;
-            return (
-              <TimelineRelease
-                key={releaseGroup.release}
-                releaseGroup={releaseGroup}
-                startIndex={startIndex}
-              />
-            );
-          })}
+          {groupedItems.map((releaseGroup, i) => (
+            <TimelineRelease
+              key={releaseGroup.release}
+              releaseGroup={releaseGroup}
+              startIndex={startIndices[i]}
+            />
+          ))}
website/src/components/ChangelogTimeline/TimelineRelease.tsx (1)

25-33: Consider externalizing the GitHub releases URL.

The hardcoded cloudposse/atmos URL works for this repo, but extracting it to a config or prop would improve reusability if this pattern is adopted elsewhere.

Also, the inline style prop could move to the CSS module for consistency:

-            style={{ textDecoration: 'none', color: 'inherit' }}
+            className={clsx(styles.yearText, styles.yearLink)}

Then in styles.module.css:

.yearLink {
  text-decoration: none;
  color: inherit;
}
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 49caeb9 and c210a36.

📒 Files selected for processing (61)
  • tests/fixtures/scenarios/empty-dir/.gitignore (0 hunks)
  • website/blog/2025-01-04-nested-backend-maps-support.mdx (1 hunks)
  • website/blog/2025-10-13-introducing-atmos-auth.md (1 hunks)
  • website/blog/2025-10-15-atmos-auth-shell.mdx (1 hunks)
  • website/blog/2025-10-15-introducing-atmos-auth-list.md (1 hunks)
  • website/blog/2025-10-15-pager-default-correction.md (1 hunks)
  • website/blog/2025-10-15-provenance-tracking.mdx (1 hunks)
  • website/blog/2025-10-16-command-registry-pattern.md (1 hunks)
  • website/blog/2025-10-17-auth-logout-feature.md (1 hunks)
  • website/blog/2025-10-17-aws-sso-verification-code-display.md (1 hunks)
  • website/blog/2025-10-17-interactive-identity-selection.md (1 hunks)
  • website/blog/2025-10-17-version-list-command.md (1 hunks)
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md (1 hunks)
  • website/blog/2025-10-18-keyring-backends.mdx (1 hunks)
  • website/blog/2025-10-19-chdir-flag.md (1 hunks)
  • website/blog/2025-10-20-auth-console-web-access.md (1 hunks)
  • website/blog/2025-10-21-auth-context-implementation.md (1 hunks)
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md (1 hunks)
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx (1 hunks)
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md (1 hunks)
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md (1 hunks)
  • website/blog/2025-10-26-zero-config-terminal-output.md (1 hunks)
  • website/blog/2025-10-28-pro-instances-api-query-params.md (1 hunks)
  • website/blog/2025-10-29-auth-ux-improvements.mdx (1 hunks)
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx (1 hunks)
  • website/blog/2025-10-30-terraform-provider-development.mdx (1 hunks)
  • website/blog/2025-10-31-component-aware-stack-completion.mdx (1 hunks)
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx (1 hunks)
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx (1 hunks)
  • website/blog/2025-11-07-azure-authentication-support.mdx (1 hunks)
  • website/blog/2025-11-07-disable-identity-authentication.mdx (1 hunks)
  • website/blog/2025-11-08-git-root-discovery.md (1 hunks)
  • website/blog/2025-11-08-helpful-errors.mdx (1 hunks)
  • website/blog/2025-11-08-terminal-themes.mdx (1 hunks)
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx (1 hunks)
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx (1 hunks)
  • website/blog/2025-11-11-atmos-profiles.mdx (1 hunks)
  • website/blog/2025-11-14-comprehensive-version-management-docs.md (1 hunks)
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx (1 hunks)
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx (1 hunks)
  • website/blog/2025-11-14-terraform-command-documentation.mdx (1 hunks)
  • website/blog/2025-11-14-theme-aware-help.mdx (1 hunks)
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md (1 hunks)
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md (1 hunks)
  • website/blog/welcome.md (1 hunks)
  • website/scripts/update-blog-releases.js (1 hunks)
  • website/src/components/ChangelogTimeline/FilterBar.tsx (0 hunks)
  • website/src/components/ChangelogTimeline/TimelineEntry.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/TimelineRelease.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/index.tsx (2 hunks)
  • website/src/components/ChangelogTimeline/styles.module.css (3 hunks)
  • website/src/components/ChangelogTimeline/utils.ts (4 hunks)
  • website/src/theme/BlogLayout/index.tsx (1 hunks)
  • website/src/theme/BlogLayout/styles.module.css (1 hunks)
  • website/src/theme/BlogPostItem/Header/index.tsx (1 hunks)
  • website/src/theme/BlogPostItem/Header/styles.module.css (1 hunks)
  • website/src/theme/BlogSidebar/Desktop/index.tsx (4 hunks)
  • website/src/theme/BlogSidebar/Desktop/styles.module.css (3 hunks)
  • website/src/theme/BlogSidebar/context.tsx (1 hunks)
  • website/src/theme/TOC/index.tsx (1 hunks)
  • website/src/theme/TOC/styles.module.css (1 hunks)
💤 Files with no reviewable changes (2)
  • tests/fixtures/scenarios/empty-dir/.gitignore
  • website/src/components/ChangelogTimeline/FilterBar.tsx
🧰 Additional context used
📓 Path-based instructions (2)
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in the website/ directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style
Keep website code in the website/ directory, follow the existing website architecture and style, and test website changes locally before committing
Keep CLI documentation and website documentation in sync and document new features on the website with examples and use cases

Files:

  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-10-19-chdir-flag.md
  • website/src/components/ChangelogTimeline/TimelineRelease.tsx
  • website/blog/welcome.md
  • website/src/theme/BlogLayout/styles.module.css
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/src/theme/TOC/styles.module.css
  • website/blog/2025-10-17-interactive-identity-selection.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/src/theme/BlogPostItem/Header/styles.module.css
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/src/components/ChangelogTimeline/TimelineEntry.tsx
  • website/scripts/update-blog-releases.js
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/src/theme/BlogSidebar/Desktop/styles.module.css
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/src/theme/BlogPostItem/Header/index.tsx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/src/theme/TOC/index.tsx
  • website/blog/2025-10-17-aws-sso-verification-code-display.md
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/src/theme/BlogSidebar/context.tsx
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-15-pager-default-correction.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/src/theme/BlogLayout/index.tsx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/src/components/ChangelogTimeline/index.tsx
  • website/src/components/ChangelogTimeline/styles.module.css
  • website/blog/2025-10-17-auth-logout-feature.md
  • website/src/theme/BlogSidebar/Desktop/index.tsx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
website/blog/**/*.mdx

📄 CodeRabbit inference engine (CLAUDE.md)

PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Files:

  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
🧠 Learnings (49)
📓 Common learnings
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes
📚 Learning: 2025-10-27T01:54:35.665Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: website/blog/2025-10-26-zero-config-terminal-output.md:6-6
Timestamp: 2025-10-27T01:54:35.665Z
Learning: In the Atmos blog (website/blog/), blog post authors in frontmatter should always be set to the actual committer or PR opener (e.g., "osterman"), not generic organization names like "cloudposse" or "atmos". Authors must exist in website/blog/authors.yml.

Applied to files:

  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/welcome.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-17-auth-logout-feature.md
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Applied to files:

  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/welcome.md
  • website/blog/2025-10-17-interactive-identity-selection.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/scripts/update-blog-releases.js
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/src/theme/TOC/index.tsx
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-15-pager-default-correction.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-17-auth-logout-feature.md
📚 Learning: 2025-11-01T20:24:29.557Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: NOTICE:0-0
Timestamp: 2025-11-01T20:24:29.557Z
Learning: In the cloudposse/atmos repository, the NOTICE file is programmatically generated and should not be manually edited. Issues with dependency license URLs in NOTICE will be resolved when upstream package metadata is corrected.

Applied to files:

  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-09-10T21:17:55.273Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: toolchain/http_client_test.go:3-10
Timestamp: 2025-09-10T21:17:55.273Z
Learning: In the cloudposse/atmos repository, imports should never be changed as per samtholiya's coding guidelines.

Applied to files:

  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
📚 Learning: 2025-09-13T16:39:20.007Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: cmd/markdown/atmos_toolchain_aliases.md:2-4
Timestamp: 2025-09-13T16:39:20.007Z
Learning: In the cloudposse/atmos repository, CLI documentation files in cmd/markdown/ follow a specific format that uses " $ atmos command" (with leading space and dollar sign prompt) in code blocks. This is the established project convention and should not be changed to comply with standard markdownlint rules MD040 and MD014.

Applied to files:

  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/welcome.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to README.md : Update README.md with new commands and features

Applied to files:

  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-01-19T15:49:15.593Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 955
File: tests/snapshots/TestCLICommands_atmos_validate_editorconfig_--help.stdout.golden:0-0
Timestamp: 2025-01-19T15:49:15.593Z
Learning: In future commits, the help text for Atmos CLI commands should be limited to only show component and stack parameters for commands that actually use them. This applies to the example usage section in command help text.

Applied to files:

  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-10-10T23:51:36.597Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1599
File: internal/exec/terraform.go:394-402
Timestamp: 2025-10-10T23:51:36.597Z
Learning: In Atmos (internal/exec/terraform.go), when adding OpenTofu-specific flags like `--var-file` for `init`, do not gate them based on command name (e.g., checking if `info.Command == "tofu"` or `info.Command == "opentofu"`) because command names don't reliably indicate the actual binary being executed (symlinks, aliases). Instead, document the OpenTofu requirement in code comments and documentation, trusting users who enable the feature (e.g., `PassVars`) to ensure their terraform command points to an OpenTofu binary.

Applied to files:

  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-09-24T20:45:40.401Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1475
File: tests/fixtures/scenarios/atmos-auth/stacks/deploy/nonprod.yaml:3-4
Timestamp: 2025-09-24T20:45:40.401Z
Learning: In Atmos stack files, the correct syntax for importing other stack files is `import:` (singular), not `imports:` (plural). All stack files in the Atmos codebase consistently use `import:` followed by a list of paths to import.

Applied to files:

  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain has been updated to follow XDG Base Directory Specification with helper functions GetXDGCacheDir() and GetXDGTempCacheDir() in toolchain/xdg_cache.go, using XDG_CACHE_HOME when set and falling back to ~/.cache/atmos-toolchain, making it consistent with atmos core's XDG compliance.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2024-10-23T22:11:41.077Z
Learnt from: haitham911
Repo: cloudposse/atmos PR: 727
File: internal/exec/path_utils.go:145-146
Timestamp: 2024-10-23T22:11:41.077Z
Learning: In the `atmos` project, the preference is to print relative paths in log messages instead of full paths.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2024-12-11T18:40:12.808Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 844
File: cmd/helmfile.go:37-37
Timestamp: 2024-12-11T18:40:12.808Z
Learning: In the atmos project, `cliConfig` is initialized within the `cmd` package in `root.go` and can be used in other command files.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2025-01-25T15:21:40.413Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 808
File: examples/demo-atmos-cli-imports/atmos.yaml:8-8
Timestamp: 2025-01-25T15:21:40.413Z
Learning: In Atmos, when a directory is specified for configuration loading (e.g., in the `import` section of atmos.yaml), all files within that directory should be treated as Atmos configurations. Do not suggest restricting file extensions in directory-based glob patterns.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!env` is used to retrieve environment variables and assign them to sections in stack manifests. It supports both simple types (string, number, boolean) and complex types (JSON-encoded lists, maps, objects).

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2024-12-01T00:33:20.298Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml:28-32
Timestamp: 2024-12-01T00:33:20.298Z
Learning: In `examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml`, `!exec atmos terraform output` is used in examples to demonstrate its usage, even though `!terraform.output` is the recommended approach according to the documentation.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!include` allows downloading local or remote files from different sources and assigning their contents to sections in stack manifests. It supports various protocols (file, http, git, s3, etc.) and can filter content using YQ expressions.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-09-07T18:07:00.549Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1452
File: cmd/auth_login.go:43-44
Timestamp: 2025-09-07T18:07:00.549Z
Learning: In the atmos project, the identity flag is defined as a persistent flag on the auth root command (cmd/auth.go), making it available to all auth subcommands without needing to be redefined in each individual subcommand.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-07-disable-identity-authentication.mdx
📚 Learning: 2025-06-23T02:14:30.937Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 1327
File: cmd/terraform.go:111-117
Timestamp: 2025-06-23T02:14:30.937Z
Learning: In cmd/terraform.go, flags for the DescribeAffected function are added dynamically at runtime when info.Affected is true. This is intentional to avoid exposing internal flags like "file", "format", "verbose", "include-spacelift-admin-stacks", "include-settings", and "upload" in the terraform command interface, while still providing them for the shared DescribeAffected function used by both `atmos describe affected` and `atmos terraform apply --affected`.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-10-07T00:25:16.333Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1498
File: website/src/components/Screengrabs/atmos-terraform-metadata--help.html:25-55
Timestamp: 2025-10-07T00:25:16.333Z
Learning: In Atmos CLI, subcommands inherit flags from their parent commands via Cobra's command inheritance. For example, `atmos terraform metadata --help` shows `--affected` and related flags inherited from the parent `terraform` command (defined in cmd/terraform.go), even though the metadata subcommand doesn't explicitly define these flags. This is expected Cobra behavior and auto-generated help screengrabs accurately reflect this inheritance.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-09-05T14:57:37.360Z
Learnt from: RoseSecurity
Repo: cloudposse/atmos PR: 1448
File: cmd/ansible.go:26-28
Timestamp: 2025-09-05T14:57:37.360Z
Learning: The Atmos codebase uses a consistent pattern for commands that delegate to external tools: `PersistentFlags().Bool("", false, doubleDashHint)` where doubleDashHint provides help text about using double dashes to separate Atmos options from native command arguments. This pattern is used across terraform, packer, helmfile, atlantis, aws, and ansible commands.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
📚 Learning: 2025-01-25T03:51:57.689Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 934
File: tests/fixtures/scenarios/docs-generate/README.md.gotmpl:99-118
Timestamp: 2025-01-25T03:51:57.689Z
Learning: For the cloudposse/atmos repository, changes to template contents should be handled in dedicated PRs and are typically considered out of scope for PRs focused on other objectives.

Applied to files:

  • website/blog/welcome.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-03-18T12:26:25.329Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 1149
File: tests/snapshots/TestCLICommands_atmos_vendor_pull_ssh.stderr.golden:7-7
Timestamp: 2025-03-18T12:26:25.329Z
Learning: In the Atmos project, typos or inconsistencies in test snapshot files (such as "terrafrom" instead of "terraform") may be intentional as they capture the exact output of commands and should not be flagged as issues requiring correction.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2024-11-12T03:15:15.627Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 775
File: examples/quick-start-advanced/Dockerfile:9-9
Timestamp: 2024-11-12T03:15:15.627Z
Learning: It is acceptable to set `ARG ATMOS_VERSION` to a future version like `1.105.0` in `examples/quick-start-advanced/Dockerfile` if that will be the next release.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2024-11-25T17:17:15.703Z
Learnt from: RoseSecurity
Repo: cloudposse/atmos PR: 797
File: pkg/list/atmos.yaml:213-214
Timestamp: 2024-11-25T17:17:15.703Z
Learning: The file `pkg/list/atmos.yaml` is primarily intended for testing purposes.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
📚 Learning: 2025-11-11T03:47:59.576Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: toolchain/which_test.go:166-223
Timestamp: 2025-11-11T03:47:59.576Z
Learning: In the cloudposse/atmos repo, tests that manipulate environment variables should use testing.T.Setenv for automatic setup/teardown instead of os.Setenv/Unsetenv.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : Use Docusaurus conventions with frontmatter, purpose note, screengrab, usage/examples/arguments/flags sections for CLI command documentation.

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-11-10T03:03:31.505Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-11-10T03:03:31.505Z
Learning: In the Atmos codebase, commands using the `StandardParser` flag pattern (from pkg/flags) do NOT need explicit `viper.BindPFlag()` calls in their code. The StandardParser encapsulates flag binding internally: flags are registered via `parser.RegisterFlags(cmd)` in init(), and bound via `parser.BindFlagsToViper(cmd, v)` in RunE, which internally calls viper.BindPFlag for each flag. This pattern is used throughout Atmos (e.g., cmd/toolchain/get.go, cmd/toolchain/info.go, cmd/toolchain/install.go, cmd/toolchain/path.go). Do not flag missing viper.BindPFlag calls when StandardParser is used.

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
📚 Learning: 2025-04-25T20:54:19.701Z
Learnt from: mcalhoun
Repo: cloudposse/atmos PR: 963
File: website/docs/core-concepts/projects/configuration/stores.mdx:286-286
Timestamp: 2025-04-25T20:54:19.701Z
Learning: For the AWS SSM Parameter Store implementation in Atmos, support for `read_role_arn` and `write_role_arn` options is essential to enable cross-account access, allowing users to run operations like `terraform plan` in multiple accounts while accessing values across keystores. Azure Key Vault would need similar capabilities for cross-tenant/subscription authentication.

Applied to files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
📚 Learning: 2025-11-10T20:03:56.875Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1775
File: pkg/auth/providers/aws/sso_provisioning.go:40-79
Timestamp: 2025-11-10T20:03:56.875Z
Learning: In the Atmos AWS SSO provider (pkg/auth/providers/aws/sso_provisioning.go), the OAuth access token from the AWS SSO device flow is intentionally stored in the `AccessKeyID` field of `AWSCredentials` during authentication. This token is then extracted and used for ListAccounts and ListAccountRoles API calls during identity provisioning. This design reuses the existing `AWSCredentials` type for token transport rather than creating a separate credential type.

Applied to files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Use registry pattern for extensibility and plugin-like architecture (Command Registry, Component Registry, Store Registry). New commands MUST use command registry pattern via CommandProvider interface.

Applied to files:

  • website/blog/2025-10-16-command-registry-pattern.md
📚 Learning: 2025-11-07T14:52:55.217Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1761
File: docs/prd/claude-agent-architecture.md:331-439
Timestamp: 2025-11-07T14:52:55.217Z
Learning: In the cloudposse/atmos repository, Claude agents are used as interactive tools, not in automated/headless CI/CD contexts. Agent documentation and patterns should assume synchronous human interaction.

Applied to files:

  • website/blog/2025-10-20-auth-console-web-access.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes

Applied to files:

  • website/scripts/update-blog-releases.js
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to website/** : Update website documentation in the `website/` directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style

Applied to files:

  • website/scripts/update-blog-releases.js
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-11-08T19:56:18.660Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1697
File: internal/exec/oci_utils.go:0-0
Timestamp: 2025-11-08T19:56:18.660Z
Learning: In the Atmos codebase, when a function receives an `*schema.AtmosConfiguration` parameter, it should read configuration values from `atmosConfig.Settings` fields rather than using direct `os.Getenv()` or `viper.GetString()` calls. The Atmos pattern is: viper.BindEnv in cmd/root.go binds environment variables → Viper unmarshals into atmosConfig.Settings via mapstructure → business logic reads from the Settings struct. This provides centralized config management, respects precedence, and enables testability. Example: `atmosConfig.Settings.AtmosGithubToken` instead of `os.Getenv("ATMOS_GITHUB_TOKEN")` in functions like `getGHCRAuth` in internal/exec/oci_utils.go.

Applied to files:

  • website/blog/2025-11-11-atmos-profiles.mdx
📚 Learning: 2024-11-16T17:30:52.893Z
Learnt from: pkbhowmick
Repo: cloudposse/atmos PR: 786
File: internal/exec/shell_utils.go:159-162
Timestamp: 2024-11-16T17:30:52.893Z
Learning: For the `atmos terraform shell` command in `internal/exec/shell_utils.go`, input validation for the custom shell prompt is not required, as users will use this as a CLI tool and any issues will impact themselves.

Applied to files:

  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : All commands and flags need Docusaurus documentation in website/docs/cli/commands/. Use <dl> for arguments/flags. Build website after changes: cd website && npm run build.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to cmd/**/*.go : Provide comprehensive help text for all commands and flags, include examples in command help, and follow Go's documentation conventions in Cobra command definitions

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2024-12-07T16:16:13.038Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 825
File: internal/exec/helmfile_generate_varfile.go:28-31
Timestamp: 2024-12-07T16:16:13.038Z
Learning: In `internal/exec/helmfile_generate_varfile.go`, the `--help` command (`./atmos helmfile generate varfile --help`) works correctly without requiring stack configurations, and the only change needed was to make `ProcessCommandLineArgs` exportable by capitalizing its name.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain should follow XDG Base Directory Specification like the rest of atmos core, using XDG_CACHE_HOME environment variable when available and falling back to ~/.cache when not set, instead of hardcoding ~/.cache/tools-cache paths.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain XDG compliance implementation is complete with GetXDGCacheDir() and GetXDGTempCacheDir() functions in toolchain/xdg_cache.go, updated installer.go and toolchain_clean.go to use these helpers, and changed cache paths from ~/.cache/tools-cache to ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain when XDG_CACHE_HOME is not set).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: Final XDG Base Directory Specification implementation for atmos toolchain is complete and verified: toolchain/xdg_cache.go provides GetXDGCacheDir() and GetXDGTempCacheDir() functions, all hardcoded ~/.cache/tools-cache paths have been replaced with XDG-compliant paths using ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback), and tests have been updated to expect the new path structure.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: XDG Base Directory Specification compliance implementation for atmos toolchain is complete: created toolchain/xdg_cache.go with GetXDGCacheDir() and GetXDGTempCacheDir() functions, updated toolchain/installer.go and cmd/toolchain_clean.go to use these XDG helpers, and changed all cache paths from hardcoded ~/.cache/tools-cache to XDG-compliant ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2024-10-27T16:59:26.187Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 729
File: internal/exec/help.go:48-51
Timestamp: 2024-10-27T16:59:26.187Z
Learning: In the Atmos CLI help messages, when providing examples that include the version number, use the actual version variable (e.g., `version.Version`) instead of placeholders like `<version>`.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-09-27T20:50:20.564Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1533
File: pkg/config/load.go:585-637
Timestamp: 2025-09-27T20:50:20.564Z
Learning: In the cloudposse/atmos repository, command merging prioritizes precedence over display ordering. Help commands are displayed lexicographically regardless of internal array order, so the mergeCommandArrays function focuses on ensuring the correct precedence chain (top-level file wins) rather than maintaining specific display order.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2024-12-03T04:01:16.446Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx:0-0
Timestamp: 2024-12-03T04:01:16.446Z
Learning: In the `terraform.output.mdx` documentation file (`website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx`), the cache invalidation and cache scope behavior for the `!terraform.output` function are already described.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-10-22T14:55:44.014Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1695
File: pkg/auth/manager.go:169-171
Timestamp: 2025-10-22T14:55:44.014Z
Learning: Go 1.20+ supports multiple %w verbs in fmt.Errorf, which returns an error implementing Unwrap() []error. This is valid and does not panic. Atmos uses Go 1.24.8 and configures errorlint with errorf-multi: true to validate this pattern.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning the error instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning specific error variables (like `ErrWorkflowNoSteps`, `ErrInvalidFromStep`, `ErrInvalidWorkflowStepType`, `ErrWorkflowStepFailed`) instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions while maintaining excellent user-facing error formatting.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
🧬 Code graph analysis (4)
website/src/components/ChangelogTimeline/utils.ts (1)
website/src/components/ChangelogTimeline/index.tsx (1)
  • BlogPostItem (80-80)
website/src/theme/BlogLayout/index.tsx (2)
website/src/theme/BlogSidebar/context.tsx (2)
  • useSidebarCollapsed (22-29)
  • SidebarProvider (13-20)
website/src/theme/BlogSidebar/index.tsx (1)
  • BlogSidebar (10-20)
website/src/components/ChangelogTimeline/index.tsx (3)
website/src/components/ChangelogTimeline/utils.ts (3)
  • extractTags (197-205)
  • filterBlogPostsByTag (238-248)
  • groupBlogPostsByRelease (101-119)
website/src/components/ChangelogTimeline/FilterBar.tsx (1)
  • FilterBar (10-40)
website/src/components/ChangelogTimeline/TimelineRelease.tsx (1)
  • TimelineRelease (11-47)
website/src/theme/BlogSidebar/Desktop/index.tsx (1)
website/src/theme/BlogSidebar/context.tsx (1)
  • useSidebarCollapsed (22-29)
🪛 Biome (2.1.2)
website/src/theme/TOC/index.tsx

[error] 17-17: This hook is being called conditionally, but all hooks must be called in the exact same order in every component render.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)

⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Acceptance Tests (windows)
  • GitHub Check: Summary

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

🧹 Nitpick comments (5)
website/blog/2025-10-15-provenance-tracking.mdx (1)

6-11: Consider adding a category tag for content classification.

The tags are descriptive but don't include a category tag from the guidelines (feature/enhancement/bugfix/contributors). Adding one would improve discoverability and align with the blog post standards.

Consider updating the tags to include a category:

 tags:
   - atmos
+  - feature
   - configuration
   - debugging
   - inheritance
   - dx
website/src/theme/BlogLayout/styles.module.css (1)

5-21: Heavy use of !important flags specificity issues.

Six !important declarations across two classes suggests fighting against existing styles. While this may be necessary for Docusaurus theme overrides, consider whether increasing selector specificity (e.g., combining with parent classes) could achieve the same result more maintainably.

If the !important declarations are unavoidable due to Docusaurus's default theme specificity, consider adding a comment explaining why they're necessary:

+/* Using !important to override Docusaurus default grid layout */
 .mainExpanded {
   flex: 1 1 0 !important;
website/src/theme/BlogPostItem/Header/index.tsx (1)

1-10: Pass-through component seems unnecessary.

This component just forwards props to the original header without modification. Unless there are plans to customize header behavior, you might not need this swizzle layer. However, keeping it for future extensibility is reasonable.

website/src/components/ChangelogTimeline/index.tsx (1)

21-61: Optional: avoid mutating runningIndex inside the render loop

The runningIndex accumulation works, but mutating outer state inside map makes the render a bit less declarative. If you ever want to tidy this up, you could compute startIndex from the group index plus prior lengths, or use reduce to carry the running index explicitly. Behavior-wise this is fine as-is.

website/src/theme/BlogPostItem/Header/styles.module.css (1)

5-50: Header release badge styles are coherent; DRYing could be a future cleanup

Badge styling (including unreleased and dark-mode variants) matches the intended subtle header treatment. If this pattern spreads further, consider centralizing shared release-badge tokens to avoid divergent tweaks between header and TOC, but it's fine as-is.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 49caeb9 and c210a36.

📒 Files selected for processing (61)
  • tests/fixtures/scenarios/empty-dir/.gitignore (0 hunks)
  • website/blog/2025-01-04-nested-backend-maps-support.mdx (1 hunks)
  • website/blog/2025-10-13-introducing-atmos-auth.md (1 hunks)
  • website/blog/2025-10-15-atmos-auth-shell.mdx (1 hunks)
  • website/blog/2025-10-15-introducing-atmos-auth-list.md (1 hunks)
  • website/blog/2025-10-15-pager-default-correction.md (1 hunks)
  • website/blog/2025-10-15-provenance-tracking.mdx (1 hunks)
  • website/blog/2025-10-16-command-registry-pattern.md (1 hunks)
  • website/blog/2025-10-17-auth-logout-feature.md (1 hunks)
  • website/blog/2025-10-17-aws-sso-verification-code-display.md (1 hunks)
  • website/blog/2025-10-17-interactive-identity-selection.md (1 hunks)
  • website/blog/2025-10-17-version-list-command.md (1 hunks)
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md (1 hunks)
  • website/blog/2025-10-18-keyring-backends.mdx (1 hunks)
  • website/blog/2025-10-19-chdir-flag.md (1 hunks)
  • website/blog/2025-10-20-auth-console-web-access.md (1 hunks)
  • website/blog/2025-10-21-auth-context-implementation.md (1 hunks)
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md (1 hunks)
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx (1 hunks)
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md (1 hunks)
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md (1 hunks)
  • website/blog/2025-10-26-zero-config-terminal-output.md (1 hunks)
  • website/blog/2025-10-28-pro-instances-api-query-params.md (1 hunks)
  • website/blog/2025-10-29-auth-ux-improvements.mdx (1 hunks)
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx (1 hunks)
  • website/blog/2025-10-30-terraform-provider-development.mdx (1 hunks)
  • website/blog/2025-10-31-component-aware-stack-completion.mdx (1 hunks)
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx (1 hunks)
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx (1 hunks)
  • website/blog/2025-11-07-azure-authentication-support.mdx (1 hunks)
  • website/blog/2025-11-07-disable-identity-authentication.mdx (1 hunks)
  • website/blog/2025-11-08-git-root-discovery.md (1 hunks)
  • website/blog/2025-11-08-helpful-errors.mdx (1 hunks)
  • website/blog/2025-11-08-terminal-themes.mdx (1 hunks)
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx (1 hunks)
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx (1 hunks)
  • website/blog/2025-11-11-atmos-profiles.mdx (1 hunks)
  • website/blog/2025-11-14-comprehensive-version-management-docs.md (1 hunks)
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx (1 hunks)
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx (1 hunks)
  • website/blog/2025-11-14-terraform-command-documentation.mdx (1 hunks)
  • website/blog/2025-11-14-theme-aware-help.mdx (1 hunks)
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md (1 hunks)
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md (1 hunks)
  • website/blog/welcome.md (1 hunks)
  • website/scripts/update-blog-releases.js (1 hunks)
  • website/src/components/ChangelogTimeline/FilterBar.tsx (0 hunks)
  • website/src/components/ChangelogTimeline/TimelineEntry.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/TimelineRelease.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/index.tsx (2 hunks)
  • website/src/components/ChangelogTimeline/styles.module.css (3 hunks)
  • website/src/components/ChangelogTimeline/utils.ts (4 hunks)
  • website/src/theme/BlogLayout/index.tsx (1 hunks)
  • website/src/theme/BlogLayout/styles.module.css (1 hunks)
  • website/src/theme/BlogPostItem/Header/index.tsx (1 hunks)
  • website/src/theme/BlogPostItem/Header/styles.module.css (1 hunks)
  • website/src/theme/BlogSidebar/Desktop/index.tsx (4 hunks)
  • website/src/theme/BlogSidebar/Desktop/styles.module.css (3 hunks)
  • website/src/theme/BlogSidebar/context.tsx (1 hunks)
  • website/src/theme/TOC/index.tsx (1 hunks)
  • website/src/theme/TOC/styles.module.css (1 hunks)
💤 Files with no reviewable changes (2)
  • tests/fixtures/scenarios/empty-dir/.gitignore
  • website/src/components/ChangelogTimeline/FilterBar.tsx
🧰 Additional context used
📓 Path-based instructions (2)
website/blog/**/*.mdx

📄 CodeRabbit inference engine (CLAUDE.md)

PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in the website/ directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style
Keep website code in the website/ directory, follow the existing website architecture and style, and test website changes locally before committing
Keep CLI documentation and website documentation in sync and document new features on the website with examples and use cases

Files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/blog/2025-10-17-interactive-identity-selection.md
  • website/src/theme/BlogLayout/styles.module.css
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/welcome.md
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/src/theme/TOC/styles.module.css
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-17-aws-sso-verification-code-display.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/src/theme/TOC/index.tsx
  • website/src/theme/BlogPostItem/Header/styles.module.css
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-17-auth-logout-feature.md
  • website/src/components/ChangelogTimeline/TimelineEntry.tsx
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/src/theme/BlogSidebar/Desktop/styles.module.css
  • website/src/theme/BlogSidebar/Desktop/index.tsx
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/src/theme/BlogLayout/index.tsx
  • website/src/theme/BlogPostItem/Header/index.tsx
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/src/theme/BlogSidebar/context.tsx
  • website/src/components/ChangelogTimeline/index.tsx
  • website/src/components/ChangelogTimeline/TimelineRelease.tsx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-15-pager-default-correction.md
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/src/components/ChangelogTimeline/styles.module.css
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/scripts/update-blog-releases.js
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
🧠 Learnings (48)
📓 Common learnings
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).
📚 Learning: 2025-04-25T20:54:19.701Z
Learnt from: mcalhoun
Repo: cloudposse/atmos PR: 963
File: website/docs/core-concepts/projects/configuration/stores.mdx:286-286
Timestamp: 2025-04-25T20:54:19.701Z
Learning: For the AWS SSM Parameter Store implementation in Atmos, support for `read_role_arn` and `write_role_arn` options is essential to enable cross-account access, allowing users to run operations like `terraform plan` in multiple accounts while accessing values across keystores. Azure Key Vault would need similar capabilities for cross-tenant/subscription authentication.

Applied to files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
📚 Learning: 2025-11-10T20:03:56.875Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1775
File: pkg/auth/providers/aws/sso_provisioning.go:40-79
Timestamp: 2025-11-10T20:03:56.875Z
Learning: In the Atmos AWS SSO provider (pkg/auth/providers/aws/sso_provisioning.go), the OAuth access token from the AWS SSO device flow is intentionally stored in the `AccessKeyID` field of `AWSCredentials` during authentication. This token is then extracted and used for ListAccounts and ListAccountRoles API calls during identity provisioning. This design reuses the existing `AWSCredentials` type for token transport rather than creating a separate credential type.

Applied to files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
📚 Learning: 2025-10-27T01:54:35.665Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: website/blog/2025-10-26-zero-config-terminal-output.md:6-6
Timestamp: 2025-10-27T01:54:35.665Z
Learning: In the Atmos blog (website/blog/), blog post authors in frontmatter should always be set to the actual committer or PR opener (e.g., "osterman"), not generic organization names like "cloudposse" or "atmos". Authors must exist in website/blog/authors.yml.

Applied to files:

  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/welcome.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-17-auth-logout-feature.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Applied to files:

  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/welcome.md
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/src/theme/TOC/index.tsx
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-10-15-pager-default-correction.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/scripts/update-blog-releases.js
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-09-13T16:39:20.007Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: cmd/markdown/atmos_toolchain_aliases.md:2-4
Timestamp: 2025-09-13T16:39:20.007Z
Learning: In the cloudposse/atmos repository, CLI documentation files in cmd/markdown/ follow a specific format that uses " $ atmos command" (with leading space and dollar sign prompt) in code blocks. This is the established project convention and should not be changed to comply with standard markdownlint rules MD040 and MD014.

Applied to files:

  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/welcome.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
📚 Learning: 2025-01-25T03:51:57.689Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 934
File: tests/fixtures/scenarios/docs-generate/README.md.gotmpl:99-118
Timestamp: 2025-01-25T03:51:57.689Z
Learning: For the cloudposse/atmos repository, changes to template contents should be handled in dedicated PRs and are typically considered out of scope for PRs focused on other objectives.

Applied to files:

  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/welcome.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-09-10T21:17:55.273Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: toolchain/http_client_test.go:3-10
Timestamp: 2025-09-10T21:17:55.273Z
Learning: In the cloudposse/atmos repository, imports should never be changed as per samtholiya's coding guidelines.

Applied to files:

  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-11-11-atmos-profiles.mdx
📚 Learning: 2025-11-01T20:24:29.557Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: NOTICE:0-0
Timestamp: 2025-11-01T20:24:29.557Z
Learning: In the cloudposse/atmos repository, the NOTICE file is programmatically generated and should not be manually edited. Issues with dependency license URLs in NOTICE will be resolved when upstream package metadata is corrected.

Applied to files:

  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-03-18T12:26:25.329Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 1149
File: tests/snapshots/TestCLICommands_atmos_vendor_pull_ssh.stderr.golden:7-7
Timestamp: 2025-03-18T12:26:25.329Z
Learning: In the Atmos project, typos or inconsistencies in test snapshot files (such as "terrafrom" instead of "terraform") may be intentional as they capture the exact output of commands and should not be flagged as issues requiring correction.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2024-11-12T03:15:15.627Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 775
File: examples/quick-start-advanced/Dockerfile:9-9
Timestamp: 2024-11-12T03:15:15.627Z
Learning: It is acceptable to set `ARG ATMOS_VERSION` to a future version like `1.105.0` in `examples/quick-start-advanced/Dockerfile` if that will be the next release.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2024-11-25T17:17:15.703Z
Learnt from: RoseSecurity
Repo: cloudposse/atmos PR: 797
File: pkg/list/atmos.yaml:213-214
Timestamp: 2024-11-25T17:17:15.703Z
Learning: The file `pkg/list/atmos.yaml` is primarily intended for testing purposes.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
📚 Learning: 2025-11-11T03:47:59.576Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: toolchain/which_test.go:166-223
Timestamp: 2025-11-11T03:47:59.576Z
Learning: In the cloudposse/atmos repo, tests that manipulate environment variables should use testing.T.Setenv for automatic setup/teardown instead of os.Setenv/Unsetenv.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2024-12-01T00:33:20.298Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml:28-32
Timestamp: 2024-12-01T00:33:20.298Z
Learning: In `examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml`, `!exec atmos terraform output` is used in examples to demonstrate its usage, even though `!terraform.output` is the recommended approach according to the documentation.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to README.md : Update README.md with new commands and features

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2024-10-27T16:59:26.187Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 729
File: internal/exec/help.go:48-51
Timestamp: 2024-10-27T16:59:26.187Z
Learning: In the Atmos CLI help messages, when providing examples that include the version number, use the actual version variable (e.g., `version.Version`) instead of placeholders like `<version>`.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-09-27T20:50:20.564Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1533
File: pkg/config/load.go:585-637
Timestamp: 2025-09-27T20:50:20.564Z
Learning: In the cloudposse/atmos repository, command merging prioritizes precedence over display ordering. Help commands are displayed lexicographically regardless of internal array order, so the mergeCommandArrays function focuses on ensuring the correct precedence chain (top-level file wins) rather than maintaining specific display order.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-01-19T15:49:15.593Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 955
File: tests/snapshots/TestCLICommands_atmos_validate_editorconfig_--help.stdout.golden:0-0
Timestamp: 2025-01-19T15:49:15.593Z
Learning: In future commits, the help text for Atmos CLI commands should be limited to only show component and stack parameters for commands that actually use them. This applies to the example usage section in command help text.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-09-07T18:07:00.549Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1452
File: cmd/auth_login.go:43-44
Timestamp: 2025-09-07T18:07:00.549Z
Learning: In the atmos project, the identity flag is defined as a persistent flag on the auth root command (cmd/auth.go), making it available to all auth subcommands without needing to be redefined in each individual subcommand.

Applied to files:

  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-10-22T14:55:44.014Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1695
File: pkg/auth/manager.go:169-171
Timestamp: 2025-10-22T14:55:44.014Z
Learning: Go 1.20+ supports multiple %w verbs in fmt.Errorf, which returns an error implementing Unwrap() []error. This is valid and does not panic. Atmos uses Go 1.24.8 and configures errorlint with errorf-multi: true to validate this pattern.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning the error instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning specific error variables (like `ErrWorkflowNoSteps`, `ErrInvalidFromStep`, `ErrInvalidWorkflowStepType`, `ErrWorkflowStepFailed`) instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions while maintaining excellent user-facing error formatting.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : All commands and flags need Docusaurus documentation in website/docs/cli/commands/. Use <dl> for arguments/flags. Build website after changes: cd website && npm run build.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-06-23T02:14:30.937Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 1327
File: cmd/terraform.go:111-117
Timestamp: 2025-06-23T02:14:30.937Z
Learning: In cmd/terraform.go, flags for the DescribeAffected function are added dynamically at runtime when info.Affected is true. This is intentional to avoid exposing internal flags like "file", "format", "verbose", "include-spacelift-admin-stacks", "include-settings", and "upload" in the terraform command interface, while still providing them for the shared DescribeAffected function used by both `atmos describe affected` and `atmos terraform apply --affected`.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-10-07T00:25:16.333Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1498
File: website/src/components/Screengrabs/atmos-terraform-metadata--help.html:25-55
Timestamp: 2025-10-07T00:25:16.333Z
Learning: In Atmos CLI, subcommands inherit flags from their parent commands via Cobra's command inheritance. For example, `atmos terraform metadata --help` shows `--affected` and related flags inherited from the parent `terraform` command (defined in cmd/terraform.go), even though the metadata subcommand doesn't explicitly define these flags. This is expected Cobra behavior and auto-generated help screengrabs accurately reflect this inheritance.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-10-10T23:51:36.597Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1599
File: internal/exec/terraform.go:394-402
Timestamp: 2025-10-10T23:51:36.597Z
Learning: In Atmos (internal/exec/terraform.go), when adding OpenTofu-specific flags like `--var-file` for `init`, do not gate them based on command name (e.g., checking if `info.Command == "tofu"` or `info.Command == "opentofu"`) because command names don't reliably indicate the actual binary being executed (symlinks, aliases). Instead, document the OpenTofu requirement in code comments and documentation, trusting users who enable the feature (e.g., `PassVars`) to ensure their terraform command points to an OpenTofu binary.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-09-05T14:57:37.360Z
Learnt from: RoseSecurity
Repo: cloudposse/atmos PR: 1448
File: cmd/ansible.go:26-28
Timestamp: 2025-09-05T14:57:37.360Z
Learning: The Atmos codebase uses a consistent pattern for commands that delegate to external tools: `PersistentFlags().Bool("", false, doubleDashHint)` where doubleDashHint provides help text about using double dashes to separate Atmos options from native command arguments. This pattern is used across terraform, packer, helmfile, atlantis, aws, and ansible commands.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes

Applied to files:

  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/scripts/update-blog-releases.js
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : Use Docusaurus conventions with frontmatter, purpose note, screengrab, usage/examples/arguments/flags sections for CLI command documentation.

Applied to files:

  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to website/** : Update website documentation in the `website/` directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style

Applied to files:

  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/scripts/update-blog-releases.js
📚 Learning: 2024-12-03T04:01:16.446Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx:0-0
Timestamp: 2024-12-03T04:01:16.446Z
Learning: In the `terraform.output.mdx` documentation file (`website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx`), the cache invalidation and cache scope behavior for the `!terraform.output` function are already described.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!env` is used to retrieve environment variables and assign them to sections in stack manifests. It supports both simple types (string, number, boolean) and complex types (JSON-encoded lists, maps, objects).

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!include` allows downloading local or remote files from different sources and assigning their contents to sections in stack manifests. It supports various protocols (file, http, git, s3, etc.) and can filter content using YQ expressions.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to cmd/**/*.go : Provide comprehensive help text for all commands and flags, include examples in command help, and follow Go's documentation conventions in Cobra command definitions

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2024-12-07T16:16:13.038Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 825
File: internal/exec/helmfile_generate_varfile.go:28-31
Timestamp: 2024-12-07T16:16:13.038Z
Learning: In `internal/exec/helmfile_generate_varfile.go`, the `--help` command (`./atmos helmfile generate varfile --help`) works correctly without requiring stack configurations, and the only change needed was to make `ProcessCommandLineArgs` exportable by capitalizing its name.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain has been updated to follow XDG Base Directory Specification with helper functions GetXDGCacheDir() and GetXDGTempCacheDir() in toolchain/xdg_cache.go, using XDG_CACHE_HOME when set and falling back to ~/.cache/atmos-toolchain, making it consistent with atmos core's XDG compliance.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain should follow XDG Base Directory Specification like the rest of atmos core, using XDG_CACHE_HOME environment variable when available and falling back to ~/.cache when not set, instead of hardcoding ~/.cache/tools-cache paths.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain XDG compliance implementation is complete with GetXDGCacheDir() and GetXDGTempCacheDir() functions in toolchain/xdg_cache.go, updated installer.go and toolchain_clean.go to use these helpers, and changed cache paths from ~/.cache/tools-cache to ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain when XDG_CACHE_HOME is not set).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: Final XDG Base Directory Specification implementation for atmos toolchain is complete and verified: toolchain/xdg_cache.go provides GetXDGCacheDir() and GetXDGTempCacheDir() functions, all hardcoded ~/.cache/tools-cache paths have been replaced with XDG-compliant paths using ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback), and tests have been updated to expect the new path structure.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: XDG Base Directory Specification compliance implementation for atmos toolchain is complete: created toolchain/xdg_cache.go with GetXDGCacheDir() and GetXDGTempCacheDir() functions, updated toolchain/installer.go and cmd/toolchain_clean.go to use these XDG helpers, and changed all cache paths from hardcoded ~/.cache/tools-cache to XDG-compliant ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Use registry pattern for extensibility and plugin-like architecture (Command Registry, Component Registry, Store Registry). New commands MUST use command registry pattern via CommandProvider interface.

Applied to files:

  • website/blog/2025-10-16-command-registry-pattern.md
📚 Learning: 2025-09-24T20:45:40.401Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1475
File: tests/fixtures/scenarios/atmos-auth/stacks/deploy/nonprod.yaml:3-4
Timestamp: 2025-09-24T20:45:40.401Z
Learning: In Atmos stack files, the correct syntax for importing other stack files is `import:` (singular), not `imports:` (plural). All stack files in the Atmos codebase consistently use `import:` followed by a list of paths to import.

Applied to files:

  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
📚 Learning: 2025-11-08T19:56:18.660Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1697
File: internal/exec/oci_utils.go:0-0
Timestamp: 2025-11-08T19:56:18.660Z
Learning: In the Atmos codebase, when a function receives an `*schema.AtmosConfiguration` parameter, it should read configuration values from `atmosConfig.Settings` fields rather than using direct `os.Getenv()` or `viper.GetString()` calls. The Atmos pattern is: viper.BindEnv in cmd/root.go binds environment variables → Viper unmarshals into atmosConfig.Settings via mapstructure → business logic reads from the Settings struct. This provides centralized config management, respects precedence, and enables testability. Example: `atmosConfig.Settings.AtmosGithubToken` instead of `os.Getenv("ATMOS_GITHUB_TOKEN")` in functions like `getGHCRAuth` in internal/exec/oci_utils.go.

Applied to files:

  • website/blog/2025-11-11-atmos-profiles.mdx
📚 Learning: 2025-11-10T03:03:31.505Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-11-10T03:03:31.505Z
Learning: In the Atmos codebase, commands using the `StandardParser` flag pattern (from pkg/flags) do NOT need explicit `viper.BindPFlag()` calls in their code. The StandardParser encapsulates flag binding internally: flags are registered via `parser.RegisterFlags(cmd)` in init(), and bound via `parser.BindFlagsToViper(cmd, v)` in RunE, which internally calls viper.BindPFlag for each flag. This pattern is used throughout Atmos (e.g., cmd/toolchain/get.go, cmd/toolchain/info.go, cmd/toolchain/install.go, cmd/toolchain/path.go). Do not flag missing viper.BindPFlag calls when StandardParser is used.

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
📚 Learning: 2024-10-23T22:11:41.077Z
Learnt from: haitham911
Repo: cloudposse/atmos PR: 727
File: internal/exec/path_utils.go:145-146
Timestamp: 2024-10-23T22:11:41.077Z
Learning: In the `atmos` project, the preference is to print relative paths in log messages instead of full paths.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2024-12-11T18:40:12.808Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 844
File: cmd/helmfile.go:37-37
Timestamp: 2024-12-11T18:40:12.808Z
Learning: In the atmos project, `cliConfig` is initialized within the `cmd` package in `root.go` and can be used in other command files.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2025-01-25T15:21:40.413Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 808
File: examples/demo-atmos-cli-imports/atmos.yaml:8-8
Timestamp: 2025-01-25T15:21:40.413Z
Learning: In Atmos, when a directory is specified for configuration loading (e.g., in the `import` section of atmos.yaml), all files within that directory should be treated as Atmos configurations. Do not suggest restricting file extensions in directory-based glob patterns.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2024-11-16T17:30:52.893Z
Learnt from: pkbhowmick
Repo: cloudposse/atmos PR: 786
File: internal/exec/shell_utils.go:159-162
Timestamp: 2024-11-16T17:30:52.893Z
Learning: For the `atmos terraform shell` command in `internal/exec/shell_utils.go`, input validation for the custom shell prompt is not required, as users will use this as a CLI tool and any issues will impact themselves.

Applied to files:

  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
🧬 Code graph analysis (3)
website/src/theme/BlogSidebar/Desktop/index.tsx (1)
website/src/theme/BlogSidebar/context.tsx (1)
  • useSidebarCollapsed (22-29)
website/src/components/ChangelogTimeline/TimelineRelease.tsx (2)
website/src/components/ChangelogTimeline/utils.ts (1)
  • ReleaseGroup (45-48)
website/src/components/ChangelogTimeline/TimelineEntry.tsx (1)
  • TimelineEntry (13-60)
website/src/components/ChangelogTimeline/utils.ts (2)
website/src/components/ChangelogTimeline/index.tsx (1)
  • BlogPostItem (80-80)
website/plugins/fetch-latest-release/index.js (1)
  • release (23-23)
🪛 Biome (2.1.2)
website/src/theme/TOC/index.tsx

[error] 17-17: This hook is being called conditionally, but all hooks must be called in the exact same order in every component render.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)

⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Summary

- Replace placeholder 'atmos' author with 'osterman' in 12 blog posts
- Change author from 'Benbentwo' to 'osterman' in auth-tutorials post
- Add missing authors field to authentication-for-workflows post
- Fix release version typo: v1.195.0 → v1.95.0 in version-list-command
- Add biome-ignore comment for conditional hook in TOC component

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@osterman
Copy link
Copy Markdown
Member Author

@coderabbitai full review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Nov 29, 2025

✅ Actions performed

Full review triggered.

Move the conditional require() for useBlogPost to module scope with a
try/catch fallback to a no-op hook. This ensures the hook is always
called unconditionally during component render, complying with React's
Rules of Hooks while still handling the case where the blog plugin may
not be available.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between c210a36 and 5429a15.

📒 Files selected for processing (14)
  • website/blog/2025-01-04-nested-backend-maps-support.mdx (1 hunks)
  • website/blog/2025-10-17-version-list-command.md (1 hunks)
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md (1 hunks)
  • website/blog/2025-10-21-auth-context-implementation.md (1 hunks)
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx (1 hunks)
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md (1 hunks)
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md (1 hunks)
  • website/blog/2025-10-28-pro-instances-api-query-params.md (1 hunks)
  • website/blog/2025-10-29-auth-ux-improvements.mdx (1 hunks)
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx (1 hunks)
  • website/blog/2025-10-31-component-aware-stack-completion.mdx (1 hunks)
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx (1 hunks)
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx (1 hunks)
  • website/src/theme/TOC/index.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
🚧 Files skipped from review as they are similar to previous changes (7)
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-17-version-list-command.md
🧰 Additional context used
📓 Path-based instructions (2)
website/blog/**/*.mdx

📄 CodeRabbit inference engine (CLAUDE.md)

PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in the website/ directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style
Keep website code in the website/ directory, follow the existing website architecture and style, and test website changes locally before committing
Keep CLI documentation and website documentation in sync and document new features on the website with examples and use cases

Files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/src/theme/TOC/index.tsx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
🧠 Learnings (19)
📓 Common learnings
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/src/theme/TOC/index.tsx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-10-27T01:54:35.665Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: website/blog/2025-10-26-zero-config-terminal-output.md:6-6
Timestamp: 2025-10-27T01:54:35.665Z
Learning: In the Atmos blog (website/blog/), blog post authors in frontmatter should always be set to the actual committer or PR opener (e.g., "osterman"), not generic organization names like "cloudposse" or "atmos". Authors must exist in website/blog/authors.yml.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-01-17T00:18:57.769Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 944
File: go.mod:206-206
Timestamp: 2025-01-17T00:18:57.769Z
Learning: For indirect dependencies with license compliance issues in the cloudposse/atmos repository, the team prefers to handle them in follow-up PRs rather than blocking the current changes, as these issues often require deeper investigation of the dependency tree.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-01-25T03:51:57.689Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 934
File: tests/fixtures/scenarios/docs-generate/README.md.gotmpl:99-118
Timestamp: 2025-01-25T03:51:57.689Z
Learning: For the cloudposse/atmos repository, changes to template contents should be handled in dedicated PRs and are typically considered out of scope for PRs focused on other objectives.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-09-10T21:17:55.273Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: toolchain/http_client_test.go:3-10
Timestamp: 2025-09-10T21:17:55.273Z
Learning: In the cloudposse/atmos repository, imports should never be changed as per samtholiya's coding guidelines.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-11-01T20:24:29.557Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: NOTICE:0-0
Timestamp: 2025-11-01T20:24:29.557Z
Learning: In the cloudposse/atmos repository, the NOTICE file is programmatically generated and should not be manually edited. Issues with dependency license URLs in NOTICE will be resolved when upstream package metadata is corrected.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-09-13T16:39:20.007Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: cmd/markdown/atmos_toolchain_aliases.md:2-4
Timestamp: 2025-09-13T16:39:20.007Z
Learning: In the cloudposse/atmos repository, CLI documentation files in cmd/markdown/ follow a specific format that uses " $ atmos command" (with leading space and dollar sign prompt) in code blocks. This is the established project convention and should not be changed to comply with standard markdownlint rules MD040 and MD014.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2024-12-02T21:26:32.337Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 808
File: pkg/config/config.go:478-483
Timestamp: 2024-12-02T21:26:32.337Z
Learning: In the 'atmos' project, when reviewing Go code like `pkg/config/config.go`, avoid suggesting file size checks after downloading remote configs if such checks aren't implemented elsewhere in the codebase.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
📚 Learning: 2025-03-18T12:26:25.329Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 1149
File: tests/snapshots/TestCLICommands_atmos_vendor_pull_ssh.stderr.golden:7-7
Timestamp: 2025-03-18T12:26:25.329Z
Learning: In the Atmos project, typos or inconsistencies in test snapshot files (such as "terrafrom" instead of "terraform") may be intentional as they capture the exact output of commands and should not be flagged as issues requiring correction.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : Use Docusaurus conventions with frontmatter, purpose note, screengrab, usage/examples/arguments/flags sections for CLI command documentation.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-11-07T14:52:55.217Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1761
File: docs/prd/claude-agent-architecture.md:331-439
Timestamp: 2025-11-07T14:52:55.217Z
Learning: In the cloudposse/atmos repository, Claude agents are used as interactive tools, not in automated/headless CI/CD contexts. Agent documentation and patterns should assume synchronous human interaction.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2024-11-22T12:38:33.132Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 768
File: internal/exec/vendor_utils.go:496-513
Timestamp: 2024-11-22T12:38:33.132Z
Learning: In the Atmos project, continue to flag path traversal issues in code reviews but acknowledge when they are expected and acceptable in specific cases.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain has been updated to follow XDG Base Directory Specification with helper functions GetXDGCacheDir() and GetXDGTempCacheDir() in toolchain/xdg_cache.go, using XDG_CACHE_HOME when set and falling back to ~/.cache/atmos-toolchain, making it consistent with atmos core's XDG compliance.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain should follow XDG Base Directory Specification like the rest of atmos core, using XDG_CACHE_HOME environment variable when available and falling back to ~/.cache when not set, instead of hardcoding ~/.cache/tools-cache paths.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain XDG compliance implementation is complete with GetXDGCacheDir() and GetXDGTempCacheDir() functions in toolchain/xdg_cache.go, updated installer.go and toolchain_clean.go to use these helpers, and changed cache paths from ~/.cache/tools-cache to ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain when XDG_CACHE_HOME is not set).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: Final XDG Base Directory Specification implementation for atmos toolchain is complete and verified: toolchain/xdg_cache.go provides GetXDGCacheDir() and GetXDGTempCacheDir() functions, all hardcoded ~/.cache/tools-cache paths have been replaced with XDG-compliant paths using ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback), and tests have been updated to expect the new path structure.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: XDG Base Directory Specification compliance implementation for atmos toolchain is complete: created toolchain/xdg_cache.go with GetXDGCacheDir() and GetXDGTempCacheDir() functions, updated toolchain/installer.go and cmd/toolchain_clean.go to use these XDG helpers, and changed all cache paths from hardcoded ~/.cache/tools-cache to XDG-compliant ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2024-12-03T04:01:16.446Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx:0-0
Timestamp: 2024-12-03T04:01:16.446Z
Learning: In the `terraform.output.mdx` documentation file (`website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx`), the cache invalidation and cache scope behavior for the `!terraform.output` function are already described.

Applied to files:

  • website/blog/2025-01-04-nested-backend-maps-support.mdx
🪛 GitHub Actions: Website Preview Build
website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx

[error] 1-1: Docusaurus static site generation failed for locale 'en'. Can't render static file for pathname(s) due to ReactContextError: 'Hook useBlogPost is called outside the '. Command step likely involved: 'npm run build' for the site.

website/blog/2025-10-24-macos-xdg-cli-conventions.md

[error] 1-1: Docusaurus static site generation failed for locale 'en'. Can't render static file for pathname(s) due to ReactContextError: 'Hook useBlogPost is called outside the '. Command step likely involved: 'npm run build' for the site.

website/blog/2025-10-21-auth-context-implementation.md

[error] 1-1: Docusaurus static site generation failed for locale 'en'. Can't render static file for pathname(s) due to ReactContextError: 'Hook useBlogPost is called outside the '. Command step likely involved: 'npm run build' for the site.

website/src/theme/TOC/index.tsx

[error] 1-1: Docusaurus static site generation failed for locale 'en'. Can't render static file for pathname(s) due to ReactContextError: 'Hook useBlogPost is called outside the '. Command step likely involved: 'npm run build' for the site.

website/blog/2025-01-04-nested-backend-maps-support.mdx

[error] 1-1: Docusaurus static site generation failed for locale 'en'. Can't render static file for pathname(s) due to ReactContextError: 'Hook useBlogPost is called outside the '. Command step likely involved: 'npm run build' for the site.

⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Acceptance Tests (windows)
  • GitHub Check: Summary
🔇 Additional comments (16)
website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx (3)

1-10: Frontmatter is properly standardized and compliant.

All required metadata is present and correctly formatted: filename follows the YYYY-MM-DD pattern, slug, title, authors set to actual committer "osterman", appropriate tags (enhancement, bugfix), and the release field has been added per the PR's objective to sort by version. This looks good.


14-53: Content structure and examples are clear.

Intro, truncate marker, and sectioned content with concrete examples and use cases are all present and follow the established pattern for blog posts in this project.


1-10: Pipeline failure: Investigate the React hook context issue in layout code.

The build is failing with ReactContextError: 'Hook useBlogPost is called outside the <BlogPostProvider>'. This blog post file itself is compliant, but the error suggests that the layout or rendering code (likely in the refactored changelog UI mentioned in the PR objectives) is trying to use the useBlogPost hook outside its provider context. This is likely in the website infrastructure/layout code rather than in this blog post file. Verify that all components rendering blog posts with the new release-based grouping are properly wrapped by the BlogPostProvider.

website/blog/2025-01-04-nested-backend-maps-support.mdx (3)

1-12: Front matter structure aligns with blog standardization.

The YAML list syntax for authors and tags, combined with the new release: v1.198.0 field, follows the standardization pattern described in this PR (grouping posts by release). The reformatting looks solid and is consistent with the blog post metadata updates across the PR.


4-5: Author verification passed—no issues detected.

The author osterman is properly registered in website/blog/authors.yml (line 8, Erik Osterman, Founder @ Cloud Posse). The front matter at lines 4-5 correctly uses YAML list syntax and follows the coding guidelines for blog post authors.


1-12: I'll help you verify this review comment about the Docusaurus build error. Let me start by investigating the blog layout components and checking if the release field is properly handled.
<function_calls>


#!/bin/bash

First, let's explore the website directory structure

echo "=== Website directory structure ==="
fd -t d -d 2 website/ | head -20

echo -e "\n=== Look for blog-related theme/layout files ==="
fd -e tsx -e jsx -e ts -e js -path '/theme/' website/ | grep -i blog

echo -e "\n=== Search for BlogPostProvider component ==="
fd -e tsx -e jsx -e ts -e js website/ | xargs grep -l "BlogPostProvider" 2>/dev/null | head -10


</function_calls>

<function_calls>


#!/bin/bash

Check for other blog posts and their structure

echo "=== Checking other blog posts for 'release' field ==="
fd -e mdx 'website/blog/' | head -10 | while read file; do
echo "---"
echo "File: $file"
head -15 "$file" | head -12
done

echo -e "\n=== Count blog posts with 'release' field ==="
rg "^release:" website/blog/ | wc -l

echo -e "\n=== Show all blog posts with 'release' field ==="
rg -l "^release:" website/blog/


</function_calls>

<function_calls>


#!/bin/bash

Check the website structure and look for BlogPostPage component

echo "=== Find BlogPostPage component ==="
fd -e tsx -e jsx -e ts website/ | xargs grep -l "BlogPostPage" 2>/dev/null

echo -e "\n=== Find useBlogPost hook usage ==="
fd -e tsx -e jsx -e ts website/ | xargs grep -n "useBlogPost" 2>/dev/null | head -20

echo -e "\n=== Check website/src structure ==="
find website/src -type d | sort


</function_calls>

<function_calls>


#!/bin/bash

Get more specific about theme components

echo "=== List all files in website/src/theme ==="
fd -type f website/src/theme/ 2>/dev/null | sort

echo -e "\n=== Check docusaurus config ==="
if [ -f website/docusaurus.config.js ]; then
echo "Found docusaurus.config.js"
wc -l website/docusaurus.config.js
fi

if [ -f website/docusaurus.config.ts ]; then
echo "Found docusaurus.config.ts"
wc -l website/docusaurus.config.ts
fi


</function_calls>

<function_calls>


#!/bin/bash

Search for any hook provider issues or BlogPostProvider setup

echo "=== Search for BlogPost related code ==="
rg -n "useBlogPost|BlogPostProvider" website/src/ -A 3 -B 3

echo -e "\n=== Look for MDX theme configuration ==="
rg -n "mdx|blog" website/docusaurus.config.ts -i | head -20


</function_calls>

<function_calls>


#!/bin/bash

Let's look at what custom theme files exist

echo "=== All custom theme component files ==="
find website/src/theme -type f -name ".tsx" -o -name ".ts" -o -name ".jsx" -o -name ".js" | sort

echo -e "\n=== Check if BlogPostPage exists ==="
fd "BlogPostPage" website/src/


</function_calls>

<function_calls>


#!/bin/bash

Search in Docusaurus theme configuration

echo "=== Check for theme configuration in docusaurus config ==="
head -100 website/docusaurus.config.ts

echo -e "\n=== Look for swizzle or theme customizations ==="
find website/src -type f | xargs grep -l "BlogPostPage|@Docusaurus" 2>/dev/null | head -10


</function_calls>

website/src/theme/TOC/index.tsx (3)

25-44: LGTM on the badge rendering.

Clean separation between unreleased and versioned states. Good call on rel="noopener noreferrer" for the external link.


13-23: Module-scope fallback is solid for plugin availability.

The try/catch here correctly handles the case where the blog plugin isn't installed. The gap is runtime context (BlogPostProvider) on non-blog pages, which the fix above addresses.


52-65: Render logic is clean.

Conditional badge rendering and prop forwarding to TOCItems look good. Once the hook context issue is fixed, this should work as intended.

website/blog/2025-10-24-macos-xdg-cli-conventions.md (4)

4-5: ✅ Author field corrected to actual GitHub username.

Good—this resolves the previous review feedback. The author is now "osterman" (an actual GitHub username) instead of the generic "atmos" placeholder. The name must exist in website/blog/authors.yml, which I'll assume has been verified in the PR workflow.


1-11: Frontmatter structure aligns with PR objectives.

The YAML frontmatter follows the new standardized format introduced in this PR:

  • Multiline blocks for authors and tags
  • ISO 8601 date format with timezone (line 9)
  • New release field set to v1.196.0 (line 10) to support release-based grouping in the changelog UI

The slug, title, and tags are appropriate for a breaking-change announcement about macOS XDG path conventions.


12-15: Content structure follows blog post guidelines.

The markdown body includes:

  • Line 13: Clear introductory summary
  • Line 15: <!--truncate--> marker in the correct position for blog excerpt handling
  • Proper heading hierarchy and organization throughout

Per coding guidelines for website/blog/**/*.mdx files, this structure is correct.


1-11: Based on my verification, I can now provide the rewritten review comment:


Frontmatter structure and formatting are correct. The blog post follows the established pattern used across all recent release notes in the repository—with proper YAML structure, valid author field (osterman), appropriate tags, ISO 8601 date format, and the release field included. The <!--truncate--> marker is present at line 15 as required per coding guidelines.

The file matches the Docusaurus blog configuration (routeBasePath: 'changelog', showReadingTime: true, all posts per page) and aligns with the pattern of other release notes in website/blog/. No actual build error logs were identified to support the original claim of a BlogPostProvider hook failure. The original concern appears to have been speculative rather than based on confirmed pipeline failure.

website/blog/2025-10-21-auth-context-implementation.md (3)

1-10: Frontmatter structure aligns with PR goals. The addition of release: v1.196.0 (line 10) supports the PR's objective to group blog posts by release version for changelog organization. Title, authors, and tags are properly formatted as multiline YAML blocks.


4-5: Author verification confirmed. The author "osterman" (Erik Osterman, Founder @ Cloud Posse) is properly registered in website/blog/authors.yml at line 8, and the frontmatter uses the correct multiline list format with the actual committer's GitHub username rather than a generic organization name. This aligns with the blog's authorship conventions and resolves the previous issue where "atmos" was used.


1-11: The review comment's assertion about this file causing a Docusaurus build failure is not supported by code analysis. The blog post file is correctly formatted with valid YAML frontmatter and a properly-formatted release: v1.196.0 field that matches other blog posts in the PR. The TOC component that uses the useBlogPost hook has proper fallback protection (lines 16-23 in website/src/theme/TOC/index.tsx), making the described React hook error unlikely to originate from this file. If a build failure is occurring, the root cause lies elsewhere in the Docusaurus configuration or build pipeline, not in this blog post's structure or content.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Nov 29, 2025

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (3)
website/src/components/ChangelogTimeline/TimelineRelease.tsx (1)

25-34: Solid implementation with a minor style consistency suggestion.

The external link handling is secure with proper rel attributes. Consider moving the inline style on line 30 into the CSS module alongside yearText for consistency with the rest of the component.

The hardcoded repo URL works fine here since this is the atmos project's own website.

           <a
             href={`https://github.com/cloudposse/atmos/releases/tag/${release}`}
             className={styles.yearText}
             target="_blank"
             rel="noopener noreferrer"
-            style={{ textDecoration: 'none', color: 'inherit' }}
           >

Then add to the CSS module under .yearText or as a modifier class:

.yearText {
  /* existing styles */
  text-decoration: none;
  color: inherit;
}
website/src/components/ChangelogTimeline/index.tsx (1)

37-38: Mutable variable during render is fragile.

Mutating runningIndex inside the map callback works but mixes imperative mutation with React's declarative model. Consider computing indices upfront.

-  // Calculate running index for alternating positions across releases.
-  let runningIndex = 0;
+  // Precompute start indices for alternating positions across releases.
+  const startIndices = useMemo(() => {
+    const indices: number[] = [];
+    let running = 0;
+    groupedItems.forEach((group) => {
+      indices.push(running);
+      running += group.items.length;
+    });
+    return indices;
+  }, [groupedItems]);

Then in the render:

-          {groupedItems.map((releaseGroup) => {
-            const startIndex = runningIndex;
-            runningIndex += releaseGroup.items.length;
-            return (
+          {groupedItems.map((releaseGroup, idx) => (
               <TimelineRelease
                 key={releaseGroup.release}
                 releaseGroup={releaseGroup}
-                startIndex={startIndex}
+                startIndex={startIndices[idx]}
               />
-            );
-          })}
+          ))}
website/scripts/update-blog-releases.js (1)

51-72: Consider documenting git availability requirement.

The script assumes git is available and the repository has been cloned with full history. While reasonable for a maintenance script, you might want to add a brief note in the header comment about these prerequisites.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 49caeb9 and 5429a15.

📒 Files selected for processing (61)
  • tests/fixtures/scenarios/empty-dir/.gitignore (0 hunks)
  • website/blog/2025-01-04-nested-backend-maps-support.mdx (1 hunks)
  • website/blog/2025-10-13-introducing-atmos-auth.md (1 hunks)
  • website/blog/2025-10-15-atmos-auth-shell.mdx (1 hunks)
  • website/blog/2025-10-15-introducing-atmos-auth-list.md (1 hunks)
  • website/blog/2025-10-15-pager-default-correction.md (1 hunks)
  • website/blog/2025-10-15-provenance-tracking.mdx (1 hunks)
  • website/blog/2025-10-16-command-registry-pattern.md (1 hunks)
  • website/blog/2025-10-17-auth-logout-feature.md (1 hunks)
  • website/blog/2025-10-17-aws-sso-verification-code-display.md (1 hunks)
  • website/blog/2025-10-17-interactive-identity-selection.md (1 hunks)
  • website/blog/2025-10-17-version-list-command.md (1 hunks)
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md (1 hunks)
  • website/blog/2025-10-18-keyring-backends.mdx (1 hunks)
  • website/blog/2025-10-19-chdir-flag.md (1 hunks)
  • website/blog/2025-10-20-auth-console-web-access.md (1 hunks)
  • website/blog/2025-10-21-auth-context-implementation.md (1 hunks)
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md (1 hunks)
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx (1 hunks)
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md (1 hunks)
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md (1 hunks)
  • website/blog/2025-10-26-zero-config-terminal-output.md (1 hunks)
  • website/blog/2025-10-28-pro-instances-api-query-params.md (1 hunks)
  • website/blog/2025-10-29-auth-ux-improvements.mdx (1 hunks)
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx (1 hunks)
  • website/blog/2025-10-30-terraform-provider-development.mdx (1 hunks)
  • website/blog/2025-10-31-component-aware-stack-completion.mdx (1 hunks)
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx (1 hunks)
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx (1 hunks)
  • website/blog/2025-11-07-azure-authentication-support.mdx (1 hunks)
  • website/blog/2025-11-07-disable-identity-authentication.mdx (1 hunks)
  • website/blog/2025-11-08-git-root-discovery.md (1 hunks)
  • website/blog/2025-11-08-helpful-errors.mdx (1 hunks)
  • website/blog/2025-11-08-terminal-themes.mdx (1 hunks)
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx (1 hunks)
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx (1 hunks)
  • website/blog/2025-11-11-atmos-profiles.mdx (1 hunks)
  • website/blog/2025-11-14-comprehensive-version-management-docs.md (1 hunks)
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx (1 hunks)
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx (1 hunks)
  • website/blog/2025-11-14-terraform-command-documentation.mdx (1 hunks)
  • website/blog/2025-11-14-theme-aware-help.mdx (1 hunks)
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md (1 hunks)
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md (1 hunks)
  • website/blog/welcome.md (1 hunks)
  • website/scripts/update-blog-releases.js (1 hunks)
  • website/src/components/ChangelogTimeline/FilterBar.tsx (0 hunks)
  • website/src/components/ChangelogTimeline/TimelineEntry.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/TimelineRelease.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/index.tsx (2 hunks)
  • website/src/components/ChangelogTimeline/styles.module.css (3 hunks)
  • website/src/components/ChangelogTimeline/utils.ts (4 hunks)
  • website/src/theme/BlogLayout/index.tsx (1 hunks)
  • website/src/theme/BlogLayout/styles.module.css (1 hunks)
  • website/src/theme/BlogPostItem/Header/index.tsx (1 hunks)
  • website/src/theme/BlogPostItem/Header/styles.module.css (1 hunks)
  • website/src/theme/BlogSidebar/Desktop/index.tsx (4 hunks)
  • website/src/theme/BlogSidebar/Desktop/styles.module.css (3 hunks)
  • website/src/theme/BlogSidebar/context.tsx (1 hunks)
  • website/src/theme/TOC/index.tsx (1 hunks)
  • website/src/theme/TOC/styles.module.css (1 hunks)
💤 Files with no reviewable changes (2)
  • website/src/components/ChangelogTimeline/FilterBar.tsx
  • tests/fixtures/scenarios/empty-dir/.gitignore
🧰 Additional context used
📓 Path-based instructions (2)
website/blog/**/*.mdx

📄 CodeRabbit inference engine (CLAUDE.md)

PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in the website/ directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style
Keep website code in the website/ directory, follow the existing website architecture and style, and test website changes locally before committing
Keep CLI documentation and website documentation in sync and document new features on the website with examples and use cases

Files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/src/components/ChangelogTimeline/TimelineEntry.tsx
  • website/src/components/ChangelogTimeline/TimelineRelease.tsx
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/src/theme/BlogLayout/styles.module.css
  • website/blog/2025-10-17-interactive-identity-selection.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/src/theme/BlogSidebar/Desktop/index.tsx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/src/theme/BlogSidebar/Desktop/styles.module.css
  • website/src/components/ChangelogTimeline/styles.module.css
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/src/components/ChangelogTimeline/index.tsx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/src/theme/BlogPostItem/Header/styles.module.css
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/src/theme/TOC/index.tsx
  • website/src/theme/BlogPostItem/Header/index.tsx
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/src/theme/BlogLayout/index.tsx
  • website/blog/2025-10-15-pager-default-correction.md
  • website/blog/2025-10-17-aws-sso-verification-code-display.md
  • website/scripts/update-blog-releases.js
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/src/components/ChangelogTimeline/utils.ts
  • website/src/theme/TOC/styles.module.css
  • website/blog/2025-10-17-auth-logout-feature.md
  • website/blog/welcome.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/src/theme/BlogSidebar/context.tsx
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-18-keyring-backends.mdx
🧠 Learnings (54)
📓 Common learnings
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).
📚 Learning: 2025-04-25T20:54:19.701Z
Learnt from: mcalhoun
Repo: cloudposse/atmos PR: 963
File: website/docs/core-concepts/projects/configuration/stores.mdx:286-286
Timestamp: 2025-04-25T20:54:19.701Z
Learning: For the AWS SSM Parameter Store implementation in Atmos, support for `read_role_arn` and `write_role_arn` options is essential to enable cross-account access, allowing users to run operations like `terraform plan` in multiple accounts while accessing values across keystores. Azure Key Vault would need similar capabilities for cross-tenant/subscription authentication.

Applied to files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
📚 Learning: 2025-11-10T20:03:56.875Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1775
File: pkg/auth/providers/aws/sso_provisioning.go:40-79
Timestamp: 2025-11-10T20:03:56.875Z
Learning: In the Atmos AWS SSO provider (pkg/auth/providers/aws/sso_provisioning.go), the OAuth access token from the AWS SSO device flow is intentionally stored in the `AccessKeyID` field of `AWSCredentials` during authentication. This token is then extracted and used for ListAccounts and ListAccountRoles API calls during identity provisioning. This design reuses the existing `AWSCredentials` type for token transport rather than creating a separate credential type.

Applied to files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
📚 Learning: 2025-10-27T01:54:35.665Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: website/blog/2025-10-26-zero-config-terminal-output.md:6-6
Timestamp: 2025-10-27T01:54:35.665Z
Learning: In the Atmos blog (website/blog/), blog post authors in frontmatter should always be set to the actual committer or PR opener (e.g., "osterman"), not generic organization names like "cloudposse" or "atmos". Authors must exist in website/blog/authors.yml.

Applied to files:

  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-17-auth-logout-feature.md
  • website/blog/welcome.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2024-11-25T17:17:15.703Z
Learnt from: RoseSecurity
Repo: cloudposse/atmos PR: 797
File: pkg/list/atmos.yaml:213-214
Timestamp: 2024-11-25T17:17:15.703Z
Learning: The file `pkg/list/atmos.yaml` is primarily intended for testing purposes.

Applied to files:

  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2025-09-10T21:17:55.273Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: toolchain/http_client_test.go:3-10
Timestamp: 2025-09-10T21:17:55.273Z
Learning: In the cloudposse/atmos repository, imports should never be changed as per samtholiya's coding guidelines.

Applied to files:

  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2025-11-08T19:56:18.660Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1697
File: internal/exec/oci_utils.go:0-0
Timestamp: 2025-11-08T19:56:18.660Z
Learning: In the Atmos codebase, when a function receives an `*schema.AtmosConfiguration` parameter, it should read configuration values from `atmosConfig.Settings` fields rather than using direct `os.Getenv()` or `viper.GetString()` calls. The Atmos pattern is: viper.BindEnv in cmd/root.go binds environment variables → Viper unmarshals into atmosConfig.Settings via mapstructure → business logic reads from the Settings struct. This provides centralized config management, respects precedence, and enables testability. Example: `atmosConfig.Settings.AtmosGithubToken` instead of `os.Getenv("ATMOS_GITHUB_TOKEN")` in functions like `getGHCRAuth` in internal/exec/oci_utils.go.

Applied to files:

  • website/blog/2025-11-11-atmos-profiles.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Applied to files:

  • website/blog/2025-10-17-interactive-identity-selection.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/src/theme/TOC/index.tsx
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-15-pager-default-correction.md
  • website/scripts/update-blog-releases.js
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/welcome.md
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-18-keyring-backends.mdx
📚 Learning: 2025-01-25T03:51:57.689Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 934
File: tests/fixtures/scenarios/docs-generate/README.md.gotmpl:99-118
Timestamp: 2025-01-25T03:51:57.689Z
Learning: For the cloudposse/atmos repository, changes to template contents should be handled in dedicated PRs and are typically considered out of scope for PRs focused on other objectives.

Applied to files:

  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/welcome.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2025-09-13T16:39:20.007Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: cmd/markdown/atmos_toolchain_aliases.md:2-4
Timestamp: 2025-09-13T16:39:20.007Z
Learning: In the cloudposse/atmos repository, CLI documentation files in cmd/markdown/ follow a specific format that uses " $ atmos command" (with leading space and dollar sign prompt) in code blocks. This is the established project convention and should not be changed to comply with standard markdownlint rules MD040 and MD014.

Applied to files:

  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/welcome.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : Use Docusaurus conventions with frontmatter, purpose note, screengrab, usage/examples/arguments/flags sections for CLI command documentation.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : All commands and flags need Docusaurus documentation in website/docs/cli/commands/. Use <dl> for arguments/flags. Build website after changes: cd website && npm run build.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-09-07T18:07:00.549Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1452
File: cmd/auth_login.go:43-44
Timestamp: 2025-09-07T18:07:00.549Z
Learning: In the atmos project, the identity flag is defined as a persistent flag on the auth root command (cmd/auth.go), making it available to all auth subcommands without needing to be redefined in each individual subcommand.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-07-disable-identity-authentication.mdx
📚 Learning: 2025-02-18T13:13:11.497Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1068
File: tests/snapshots/TestCLICommands_atmos_terraform_help.stdout.golden:59-64
Timestamp: 2025-02-18T13:13:11.497Z
Learning: For Atmos CLI help text, angle brackets in command examples and flag descriptions should be escaped using HTML entities (e.g., `&lt;component&gt;`) rather than converted to backticks or other markdown formatting.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-03-18T12:26:25.329Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 1149
File: tests/snapshots/TestCLICommands_atmos_vendor_pull_ssh.stderr.golden:7-7
Timestamp: 2025-03-18T12:26:25.329Z
Learning: In the Atmos project, typos or inconsistencies in test snapshot files (such as "terrafrom" instead of "terraform") may be intentional as they capture the exact output of commands and should not be flagged as issues requiring correction.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2025-01-19T15:49:15.593Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 955
File: tests/snapshots/TestCLICommands_atmos_validate_editorconfig_--help.stdout.golden:0-0
Timestamp: 2025-01-19T15:49:15.593Z
Learning: In future commits, the help text for Atmos CLI commands should be limited to only show component and stack parameters for commands that actually use them. This applies to the example usage section in command help text.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-10-10T23:51:36.597Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1599
File: internal/exec/terraform.go:394-402
Timestamp: 2025-10-10T23:51:36.597Z
Learning: In Atmos (internal/exec/terraform.go), when adding OpenTofu-specific flags like `--var-file` for `init`, do not gate them based on command name (e.g., checking if `info.Command == "tofu"` or `info.Command == "opentofu"`) because command names don't reliably indicate the actual binary being executed (symlinks, aliases). Instead, document the OpenTofu requirement in code comments and documentation, trusting users who enable the feature (e.g., `PassVars`) to ensure their terraform command points to an OpenTofu binary.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2024-11-22T12:38:33.132Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 768
File: internal/exec/vendor_utils.go:496-513
Timestamp: 2024-11-22T12:38:33.132Z
Learning: In the Atmos project, continue to flag path traversal issues in code reviews but acknowledge when they are expected and acceptable in specific cases.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2025-01-17T00:18:57.769Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 944
File: go.mod:206-206
Timestamp: 2025-01-17T00:18:57.769Z
Learning: For indirect dependencies with license compliance issues in the cloudposse/atmos repository, the team prefers to handle them in follow-up PRs rather than blocking the current changes, as these issues often require deeper investigation of the dependency tree.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2025-06-23T02:14:30.937Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 1327
File: cmd/terraform.go:111-117
Timestamp: 2025-06-23T02:14:30.937Z
Learning: In cmd/terraform.go, flags for the DescribeAffected function are added dynamically at runtime when info.Affected is true. This is intentional to avoid exposing internal flags like "file", "format", "verbose", "include-spacelift-admin-stacks", "include-settings", and "upload" in the terraform command interface, while still providing them for the shared DescribeAffected function used by both `atmos describe affected` and `atmos terraform apply --affected`.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-10-07T00:25:16.333Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1498
File: website/src/components/Screengrabs/atmos-terraform-metadata--help.html:25-55
Timestamp: 2025-10-07T00:25:16.333Z
Learning: In Atmos CLI, subcommands inherit flags from their parent commands via Cobra's command inheritance. For example, `atmos terraform metadata --help` shows `--affected` and related flags inherited from the parent `terraform` command (defined in cmd/terraform.go), even though the metadata subcommand doesn't explicitly define these flags. This is expected Cobra behavior and auto-generated help screengrabs accurately reflect this inheritance.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-09-05T14:57:37.360Z
Learnt from: RoseSecurity
Repo: cloudposse/atmos PR: 1448
File: cmd/ansible.go:26-28
Timestamp: 2025-09-05T14:57:37.360Z
Learning: The Atmos codebase uses a consistent pattern for commands that delegate to external tools: `PersistentFlags().Bool("", false, doubleDashHint)` where doubleDashHint provides help text about using double dashes to separate Atmos options from native command arguments. This pattern is used across terraform, packer, helmfile, atlantis, aws, and ansible commands.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to website/** : Update website documentation in the `website/` directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/scripts/update-blog-releases.js
📚 Learning: 2024-12-03T03:49:30.395Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx:104-110
Timestamp: 2024-12-03T03:49:30.395Z
Learning: In the documentation for `!terraform.output`, warnings about template variable availability are already covered in other sections, so no need to suggest adding them here.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2024-12-03T04:01:16.446Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx:0-0
Timestamp: 2024-12-03T04:01:16.446Z
Learning: In the `terraform.output.mdx` documentation file (`website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx`), the cache invalidation and cache scope behavior for the `!terraform.output` function are already described.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to cmd/**/*.go : Provide comprehensive help text for all commands and flags, include examples in command help, and follow Go's documentation conventions in Cobra command definitions

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2024-12-07T16:16:13.038Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 825
File: internal/exec/helmfile_generate_varfile.go:28-31
Timestamp: 2024-12-07T16:16:13.038Z
Learning: In `internal/exec/helmfile_generate_varfile.go`, the `--help` command (`./atmos helmfile generate varfile --help`) works correctly without requiring stack configurations, and the only change needed was to make `ProcessCommandLineArgs` exportable by capitalizing its name.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
📚 Learning: 2025-11-01T20:24:29.557Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: NOTICE:0-0
Timestamp: 2025-11-01T20:24:29.557Z
Learning: In the cloudposse/atmos repository, the NOTICE file is programmatically generated and should not be manually edited. Issues with dependency license URLs in NOTICE will be resolved when upstream package metadata is corrected.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes

Applied to files:

  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/scripts/update-blog-releases.js
📚 Learning: 2025-11-10T03:03:31.505Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-11-10T03:03:31.505Z
Learning: In the Atmos codebase, commands using the `StandardParser` flag pattern (from pkg/flags) do NOT need explicit `viper.BindPFlag()` calls in their code. The StandardParser encapsulates flag binding internally: flags are registered via `parser.RegisterFlags(cmd)` in init(), and bound via `parser.BindFlagsToViper(cmd, v)` in RunE, which internally calls viper.BindPFlag for each flag. This pattern is used throughout Atmos (e.g., cmd/toolchain/get.go, cmd/toolchain/info.go, cmd/toolchain/install.go, cmd/toolchain/path.go). Do not flag missing viper.BindPFlag calls when StandardParser is used.

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
📚 Learning: 2025-10-22T14:55:44.014Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1695
File: pkg/auth/manager.go:169-171
Timestamp: 2025-10-22T14:55:44.014Z
Learning: Go 1.20+ supports multiple %w verbs in fmt.Errorf, which returns an error implementing Unwrap() []error. This is valid and does not panic. Atmos uses Go 1.24.8 and configures errorlint with errorf-multi: true to validate this pattern.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning the error instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning specific error variables (like `ErrWorkflowNoSteps`, `ErrInvalidFromStep`, `ErrInvalidWorkflowStepType`, `ErrWorkflowStepFailed`) instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions while maintaining excellent user-facing error formatting.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2024-12-01T00:33:20.298Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml:28-32
Timestamp: 2024-12-01T00:33:20.298Z
Learning: In `examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml`, `!exec atmos terraform output` is used in examples to demonstrate its usage, even though `!terraform.output` is the recommended approach according to the documentation.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2024-12-02T21:26:32.337Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 808
File: pkg/config/config.go:478-483
Timestamp: 2024-12-02T21:26:32.337Z
Learning: In the 'atmos' project, when reviewing Go code like `pkg/config/config.go`, avoid suggesting file size checks after downloading remote configs if such checks aren't implemented elsewhere in the codebase.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
📚 Learning: 2024-11-16T17:30:52.893Z
Learnt from: pkbhowmick
Repo: cloudposse/atmos PR: 786
File: internal/exec/shell_utils.go:159-162
Timestamp: 2024-11-16T17:30:52.893Z
Learning: For the `atmos terraform shell` command in `internal/exec/shell_utils.go`, input validation for the custom shell prompt is not required, as users will use this as a CLI tool and any issues will impact themselves.

Applied to files:

  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
📚 Learning: 2025-09-24T20:45:40.401Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1475
File: tests/fixtures/scenarios/atmos-auth/stacks/deploy/nonprod.yaml:3-4
Timestamp: 2025-09-24T20:45:40.401Z
Learning: In Atmos stack files, the correct syntax for importing other stack files is `import:` (singular), not `imports:` (plural). All stack files in the Atmos codebase consistently use `import:` followed by a list of paths to import.

Applied to files:

  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Use registry pattern for extensibility and plugin-like architecture (Command Registry, Component Registry, Store Registry). New commands MUST use command registry pattern via CommandProvider interface.

Applied to files:

  • website/blog/2025-10-16-command-registry-pattern.md
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!env` is used to retrieve environment variables and assign them to sections in stack manifests. It supports both simple types (string, number, boolean) and complex types (JSON-encoded lists, maps, objects).

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!include` allows downloading local or remote files from different sources and assigning their contents to sections in stack manifests. It supports various protocols (file, http, git, s3, etc.) and can filter content using YQ expressions.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2024-11-12T03:15:15.627Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 775
File: examples/quick-start-advanced/Dockerfile:9-9
Timestamp: 2024-11-12T03:15:15.627Z
Learning: It is acceptable to set `ARG ATMOS_VERSION` to a future version like `1.105.0` in `examples/quick-start-advanced/Dockerfile` if that will be the next release.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2025-11-11T03:47:59.576Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: toolchain/which_test.go:166-223
Timestamp: 2025-11-11T03:47:59.576Z
Learning: In the cloudposse/atmos repo, tests that manipulate environment variables should use testing.T.Setenv for automatic setup/teardown instead of os.Setenv/Unsetenv.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2025-11-07T14:52:55.217Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1761
File: docs/prd/claude-agent-architecture.md:331-439
Timestamp: 2025-11-07T14:52:55.217Z
Learning: In the cloudposse/atmos repository, Claude agents are used as interactive tools, not in automated/headless CI/CD contexts. Agent documentation and patterns should assume synchronous human interaction.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain has been updated to follow XDG Base Directory Specification with helper functions GetXDGCacheDir() and GetXDGTempCacheDir() in toolchain/xdg_cache.go, using XDG_CACHE_HOME when set and falling back to ~/.cache/atmos-toolchain, making it consistent with atmos core's XDG compliance.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain should follow XDG Base Directory Specification like the rest of atmos core, using XDG_CACHE_HOME environment variable when available and falling back to ~/.cache when not set, instead of hardcoding ~/.cache/tools-cache paths.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain XDG compliance implementation is complete with GetXDGCacheDir() and GetXDGTempCacheDir() functions in toolchain/xdg_cache.go, updated installer.go and toolchain_clean.go to use these helpers, and changed cache paths from ~/.cache/tools-cache to ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain when XDG_CACHE_HOME is not set).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: Final XDG Base Directory Specification implementation for atmos toolchain is complete and verified: toolchain/xdg_cache.go provides GetXDGCacheDir() and GetXDGTempCacheDir() functions, all hardcoded ~/.cache/tools-cache paths have been replaced with XDG-compliant paths using ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback), and tests have been updated to expect the new path structure.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: XDG Base Directory Specification compliance implementation for atmos toolchain is complete: created toolchain/xdg_cache.go with GetXDGCacheDir() and GetXDGTempCacheDir() functions, updated toolchain/installer.go and cmd/toolchain_clean.go to use these XDG helpers, and changed all cache paths from hardcoded ~/.cache/tools-cache to XDG-compliant ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to README.md : Update README.md with new commands and features

Applied to files:

  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2024-10-23T22:11:41.077Z
Learnt from: haitham911
Repo: cloudposse/atmos PR: 727
File: internal/exec/path_utils.go:145-146
Timestamp: 2024-10-23T22:11:41.077Z
Learning: In the `atmos` project, the preference is to print relative paths in log messages instead of full paths.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2024-12-11T18:40:12.808Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 844
File: cmd/helmfile.go:37-37
Timestamp: 2024-12-11T18:40:12.808Z
Learning: In the atmos project, `cliConfig` is initialized within the `cmd` package in `root.go` and can be used in other command files.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2025-01-25T15:21:40.413Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 808
File: examples/demo-atmos-cli-imports/atmos.yaml:8-8
Timestamp: 2025-01-25T15:21:40.413Z
Learning: In Atmos, when a directory is specified for configuration loading (e.g., in the `import` section of atmos.yaml), all files within that directory should be treated as Atmos configurations. Do not suggest restricting file extensions in directory-based glob patterns.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2024-10-27T16:59:26.187Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 729
File: internal/exec/help.go:48-51
Timestamp: 2024-10-27T16:59:26.187Z
Learning: In the Atmos CLI help messages, when providing examples that include the version number, use the actual version variable (e.g., `version.Version`) instead of placeholders like `<version>`.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-09-27T20:50:20.564Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1533
File: pkg/config/load.go:585-637
Timestamp: 2025-09-27T20:50:20.564Z
Learning: In the cloudposse/atmos repository, command merging prioritizes precedence over display ordering. Help commands are displayed lexicographically regardless of internal array order, so the mergeCommandArrays function focuses on ensuring the correct precedence chain (top-level file wins) rather than maintaining specific display order.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
🧬 Code graph analysis (6)
website/src/components/ChangelogTimeline/TimelineRelease.tsx (2)
website/src/components/ChangelogTimeline/utils.ts (1)
  • ReleaseGroup (45-48)
website/src/components/ChangelogTimeline/TimelineEntry.tsx (1)
  • TimelineEntry (13-60)
website/src/theme/BlogSidebar/Desktop/index.tsx (1)
website/src/theme/BlogSidebar/context.tsx (1)
  • useSidebarCollapsed (22-29)
website/src/components/ChangelogTimeline/index.tsx (3)
website/src/components/ChangelogTimeline/utils.ts (3)
  • extractTags (197-205)
  • filterBlogPostsByTag (238-248)
  • groupBlogPostsByRelease (101-119)
website/src/components/ChangelogTimeline/FilterBar.tsx (1)
  • FilterBar (10-40)
website/src/components/ChangelogTimeline/TimelineRelease.tsx (1)
  • TimelineRelease (11-47)
website/src/theme/BlogPostItem/Header/index.tsx (1)
website/plugins/docusaurus-plugin-llms-txt/src/index.js (1)
  • props (236-236)
website/src/theme/BlogLayout/index.tsx (2)
website/src/theme/BlogSidebar/context.tsx (2)
  • useSidebarCollapsed (22-29)
  • SidebarProvider (13-20)
website/src/theme/BlogSidebar/index.tsx (1)
  • BlogSidebar (10-20)
website/src/components/ChangelogTimeline/utils.ts (2)
website/src/components/ChangelogTimeline/index.tsx (1)
  • BlogPostItem (80-80)
website/plugins/fetch-latest-release/index.js (1)
  • release (23-23)
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Summary

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
website/src/theme/TOC/index.tsx (1)

46-50: Context error still unhandled when TOC renders outside BlogPostProvider.

The module-scope try/catch handles a missing plugin, but useBlogPost() will throw when called on pages where BlogPostProvider doesn't wrap the component (e.g., non-blog pages using TOC). Wrap the call to catch context errors:

 export default function TOC({ className, ...props }: Props): JSX.Element {
-  // Hook is always called unconditionally - useBlogPost is either the real
-  // hook or a no-op that returns null (set at module scope).
-  const blogPost = useBlogPost();
-  const release = blogPost?.frontMatter?.release as string | undefined;
+  // Safely attempt to get blog post data - can fail on non-blog pages.
+  let release: string | undefined;
+  try {
+    const blogPost = useBlogPost();
+    release = blogPost?.frontMatter?.release as string | undefined;
+  } catch {
+    // Not in a blog context - release badge won't be shown.
+    release = undefined;
+  }
🧹 Nitpick comments (8)
website/src/theme/BlogSidebar/Desktop/styles.module.css (1)

11-14: Consider whether !important is necessary.

The !important on line 13 might be required to override Docusaurus defaults, but it's worth verifying if higher CSS specificity could achieve the same result without it. Using !important makes future styling changes more difficult.

If !important is truly needed to override Docusaurus grid layouts, document why in a CSS comment:

 .sidebarCollapsed {
   width: 48px;
+  /* !important needed to override Docusaurus col--3 grid flex properties */
   flex: 0 0 48px !important;
 }
website/src/theme/BlogPostItem/Header/index.tsx (1)

1-10: Passthrough swizzle component—verify if needed.

This component currently just forwards props to the original header without adding functionality. While the comment explains that the release badge is now in the TOC, consider whether this swizzled component file is necessary. If it's a placeholder for future customization or prevents Docusaurus from unwrapping during upgrades, it's fine to keep with a clearer comment.

If keeping as an intentional architecture choice, enhance the comment:

 /**
  * Swizzled BlogPostItem/Header - passes through to original.
  * Release badge is now displayed in BlogLayout TOC area instead.
+ * This swizzle is maintained as a hook point for future header customizations
+ * and to prevent Docusaurus from auto-removing our theme customizations.
  */

If not needed, this file could potentially be removed entirely.

website/src/components/ChangelogTimeline/index.tsx (1)

37-61: Running index pattern works but has a minor smell.

Mutating runningIndex inside the .map() callback is a side effect during render. It works because React renders synchronously, but a reduce or pre-computed indices array would be more declarative. Low priority.

// Alternative: pre-compute indices
const groupsWithIndex = useMemo(() => {
  let idx = 0;
  return groupedItems.map((g) => {
    const start = idx;
    idx += g.items.length;
    return { ...g, startIndex: start };
  });
}, [groupedItems]);
website/src/components/ChangelogTimeline/styles.module.css (1)

415-419: Consider using CSS variables for consistency.

.tagUnreleased uses hardcoded colors (#757575, #9e9e9e). For consistency with other styles using Infima variables, consider:

.tagUnreleased {
  background: rgba(158, 158, 158, 0.15);
  color: var(--ifm-color-gray-600);
  cursor: default;
}

Minor nit—current approach still works.

website/src/components/ChangelogTimeline/TimelineRelease.tsx (1)

11-45: TimelineRelease logic looks good; consider moving inline styles to CSS.

Release handling, aria label, and left/right alternation all look solid and match the new release‑grouped timeline behavior. The only nit is the inline style on the anchor; you might prefer a dedicated CSS class (e.g. releaseLink) in styles.module.css for easier theming and consistency with the rest of the component styles.

website/src/theme/BlogLayout/styles.module.css (1)

5-20: Layout classes align with the new sidebar/TOC behavior.

The new .mainExpanded, .mainContent, and .tocWrapper definitions look consistent with the updated BlogLayout logic and should keep the TOC anchored on the right while allowing smooth main‑content resizing. The liberal use of !important is acceptable here given you’re intentionally overriding Docusaurus defaults, but if more overrides accumulate later it might be worth revisiting the specificity strategy.

website/src/components/ChangelogTimeline/utils.ts (1)

238-247: Tag-only filter is fine; consider reusing existing filter logic later.

filterBlogPostsByTag does exactly what the new UI needs and keeps the code simple. Long term, you might consider consolidating it with filterBlogPosts to avoid having two subtly different tag filters, but that’s purely a cleanliness concern.

website/scripts/update-blog-releases.js (1)

18-36: Non‑recursive blog scan is appropriate for current structure — all posts are top-level.

The script correctly uses fs.readdirSync(blogDir) to process only top-level *.md/*.mdx files under website/blog. Verification confirms the blog contains 44 posts, all at the top level with no subdirectories.

The suggestion to consider a recursive walker for future-proofing remains valid if nested blog organization is anticipated, but is not needed for the current layout.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 49caeb9 and 5429a15.

📒 Files selected for processing (61)
  • tests/fixtures/scenarios/empty-dir/.gitignore (0 hunks)
  • website/blog/2025-01-04-nested-backend-maps-support.mdx (1 hunks)
  • website/blog/2025-10-13-introducing-atmos-auth.md (1 hunks)
  • website/blog/2025-10-15-atmos-auth-shell.mdx (1 hunks)
  • website/blog/2025-10-15-introducing-atmos-auth-list.md (1 hunks)
  • website/blog/2025-10-15-pager-default-correction.md (1 hunks)
  • website/blog/2025-10-15-provenance-tracking.mdx (1 hunks)
  • website/blog/2025-10-16-command-registry-pattern.md (1 hunks)
  • website/blog/2025-10-17-auth-logout-feature.md (1 hunks)
  • website/blog/2025-10-17-aws-sso-verification-code-display.md (1 hunks)
  • website/blog/2025-10-17-interactive-identity-selection.md (1 hunks)
  • website/blog/2025-10-17-version-list-command.md (1 hunks)
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md (1 hunks)
  • website/blog/2025-10-18-keyring-backends.mdx (1 hunks)
  • website/blog/2025-10-19-chdir-flag.md (1 hunks)
  • website/blog/2025-10-20-auth-console-web-access.md (1 hunks)
  • website/blog/2025-10-21-auth-context-implementation.md (1 hunks)
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md (1 hunks)
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx (1 hunks)
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md (1 hunks)
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md (1 hunks)
  • website/blog/2025-10-26-zero-config-terminal-output.md (1 hunks)
  • website/blog/2025-10-28-pro-instances-api-query-params.md (1 hunks)
  • website/blog/2025-10-29-auth-ux-improvements.mdx (1 hunks)
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx (1 hunks)
  • website/blog/2025-10-30-terraform-provider-development.mdx (1 hunks)
  • website/blog/2025-10-31-component-aware-stack-completion.mdx (1 hunks)
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx (1 hunks)
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx (1 hunks)
  • website/blog/2025-11-07-azure-authentication-support.mdx (1 hunks)
  • website/blog/2025-11-07-disable-identity-authentication.mdx (1 hunks)
  • website/blog/2025-11-08-git-root-discovery.md (1 hunks)
  • website/blog/2025-11-08-helpful-errors.mdx (1 hunks)
  • website/blog/2025-11-08-terminal-themes.mdx (1 hunks)
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx (1 hunks)
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx (1 hunks)
  • website/blog/2025-11-11-atmos-profiles.mdx (1 hunks)
  • website/blog/2025-11-14-comprehensive-version-management-docs.md (1 hunks)
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx (1 hunks)
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx (1 hunks)
  • website/blog/2025-11-14-terraform-command-documentation.mdx (1 hunks)
  • website/blog/2025-11-14-theme-aware-help.mdx (1 hunks)
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md (1 hunks)
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md (1 hunks)
  • website/blog/welcome.md (1 hunks)
  • website/scripts/update-blog-releases.js (1 hunks)
  • website/src/components/ChangelogTimeline/FilterBar.tsx (0 hunks)
  • website/src/components/ChangelogTimeline/TimelineEntry.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/TimelineRelease.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/index.tsx (2 hunks)
  • website/src/components/ChangelogTimeline/styles.module.css (3 hunks)
  • website/src/components/ChangelogTimeline/utils.ts (4 hunks)
  • website/src/theme/BlogLayout/index.tsx (1 hunks)
  • website/src/theme/BlogLayout/styles.module.css (1 hunks)
  • website/src/theme/BlogPostItem/Header/index.tsx (1 hunks)
  • website/src/theme/BlogPostItem/Header/styles.module.css (1 hunks)
  • website/src/theme/BlogSidebar/Desktop/index.tsx (4 hunks)
  • website/src/theme/BlogSidebar/Desktop/styles.module.css (3 hunks)
  • website/src/theme/BlogSidebar/context.tsx (1 hunks)
  • website/src/theme/TOC/index.tsx (1 hunks)
  • website/src/theme/TOC/styles.module.css (1 hunks)
💤 Files with no reviewable changes (2)
  • website/src/components/ChangelogTimeline/FilterBar.tsx
  • tests/fixtures/scenarios/empty-dir/.gitignore
🧰 Additional context used
📓 Path-based instructions (2)
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in the website/ directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style
Keep website code in the website/ directory, follow the existing website architecture and style, and test website changes locally before committing
Keep CLI documentation and website documentation in sync and document new features on the website with examples and use cases

Files:

  • website/src/theme/BlogSidebar/context.tsx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-15-pager-default-correction.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-17-interactive-identity-selection.md
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/src/theme/BlogSidebar/Desktop/styles.module.css
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/welcome.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/src/theme/BlogPostItem/Header/index.tsx
  • website/src/components/ChangelogTimeline/TimelineRelease.tsx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/src/theme/TOC/index.tsx
  • website/src/theme/BlogLayout/styles.module.css
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/src/components/ChangelogTimeline/styles.module.css
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-17-auth-logout-feature.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/src/theme/BlogSidebar/Desktop/index.tsx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/src/theme/BlogPostItem/Header/styles.module.css
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/src/theme/TOC/styles.module.css
  • website/scripts/update-blog-releases.js
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/src/components/ChangelogTimeline/index.tsx
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/src/theme/BlogLayout/index.tsx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-17-aws-sso-verification-code-display.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/src/components/ChangelogTimeline/TimelineEntry.tsx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
website/blog/**/*.mdx

📄 CodeRabbit inference engine (CLAUDE.md)

PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
🧠 Learnings (54)
📓 Common learnings
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).
📚 Learning: 2025-10-27T01:54:35.665Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: website/blog/2025-10-26-zero-config-terminal-output.md:6-6
Timestamp: 2025-10-27T01:54:35.665Z
Learning: In the Atmos blog (website/blog/), blog post authors in frontmatter should always be set to the actual committer or PR opener (e.g., "osterman"), not generic organization names like "cloudposse" or "atmos". Authors must exist in website/blog/authors.yml.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/welcome.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-17-auth-logout-feature.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
📚 Learning: 2025-01-25T03:51:57.689Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 934
File: tests/fixtures/scenarios/docs-generate/README.md.gotmpl:99-118
Timestamp: 2025-01-25T03:51:57.689Z
Learning: For the cloudposse/atmos repository, changes to template contents should be handled in dedicated PRs and are typically considered out of scope for PRs focused on other objectives.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/welcome.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
📚 Learning: 2025-09-10T21:17:55.273Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: toolchain/http_client_test.go:3-10
Timestamp: 2025-09-10T21:17:55.273Z
Learning: In the cloudposse/atmos repository, imports should never be changed as per samtholiya's coding guidelines.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-09-13T16:39:20.007Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: cmd/markdown/atmos_toolchain_aliases.md:2-4
Timestamp: 2025-09-13T16:39:20.007Z
Learning: In the cloudposse/atmos repository, CLI documentation files in cmd/markdown/ follow a specific format that uses " $ atmos command" (with leading space and dollar sign prompt) in code blocks. This is the established project convention and should not be changed to comply with standard markdownlint rules MD040 and MD014.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/welcome.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-01-17T00:18:57.769Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 944
File: go.mod:206-206
Timestamp: 2025-01-17T00:18:57.769Z
Learning: For indirect dependencies with license compliance issues in the cloudposse/atmos repository, the team prefers to handle them in follow-up PRs rather than blocking the current changes, as these issues often require deeper investigation of the dependency tree.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-11-11-atmos-profiles.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-11-14-theme-aware-help.mdx
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/src/theme/TOC/index.tsx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-11-08-terminal-themes.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/scripts/update-blog-releases.js
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/src/theme/BlogLayout/index.tsx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-17-aws-sso-verification-code-display.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
📚 Learning: 2025-11-01T20:24:29.557Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: NOTICE:0-0
Timestamp: 2025-11-01T20:24:29.557Z
Learning: In the cloudposse/atmos repository, the NOTICE file is programmatically generated and should not be manually edited. Issues with dependency license URLs in NOTICE will be resolved when upstream package metadata is corrected.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-03-18T12:26:25.329Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 1149
File: tests/snapshots/TestCLICommands_atmos_vendor_pull_ssh.stderr.golden:7-7
Timestamp: 2025-03-18T12:26:25.329Z
Learning: In the Atmos project, typos or inconsistencies in test snapshot files (such as "terrafrom" instead of "terraform") may be intentional as they capture the exact output of commands and should not be flagged as issues requiring correction.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to README.md : Update README.md with new commands and features

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-11-10T03:03:31.505Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-11-10T03:03:31.505Z
Learning: In the Atmos codebase, commands using the `StandardParser` flag pattern (from pkg/flags) do NOT need explicit `viper.BindPFlag()` calls in their code. The StandardParser encapsulates flag binding internally: flags are registered via `parser.RegisterFlags(cmd)` in init(), and bound via `parser.BindFlagsToViper(cmd, v)` in RunE, which internally calls viper.BindPFlag for each flag. This pattern is used throughout Atmos (e.g., cmd/toolchain/get.go, cmd/toolchain/info.go, cmd/toolchain/install.go, cmd/toolchain/path.go). Do not flag missing viper.BindPFlag calls when StandardParser is used.

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
📚 Learning: 2025-10-07T00:25:16.333Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1498
File: website/src/components/Screengrabs/atmos-terraform-metadata--help.html:25-55
Timestamp: 2025-10-07T00:25:16.333Z
Learning: In Atmos CLI, subcommands inherit flags from their parent commands via Cobra's command inheritance. For example, `atmos terraform metadata --help` shows `--affected` and related flags inherited from the parent `terraform` command (defined in cmd/terraform.go), even though the metadata subcommand doesn't explicitly define these flags. This is expected Cobra behavior and auto-generated help screengrabs accurately reflect this inheritance.

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-09-05T14:57:37.360Z
Learnt from: RoseSecurity
Repo: cloudposse/atmos PR: 1448
File: cmd/ansible.go:26-28
Timestamp: 2025-09-05T14:57:37.360Z
Learning: The Atmos codebase uses a consistent pattern for commands that delegate to external tools: `PersistentFlags().Bool("", false, doubleDashHint)` where doubleDashHint provides help text about using double dashes to separate Atmos options from native command arguments. This pattern is used across terraform, packer, helmfile, atlantis, aws, and ansible commands.

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-10-10T23:51:36.597Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1599
File: internal/exec/terraform.go:394-402
Timestamp: 2025-10-10T23:51:36.597Z
Learning: In Atmos (internal/exec/terraform.go), when adding OpenTofu-specific flags like `--var-file` for `init`, do not gate them based on command name (e.g., checking if `info.Command == "tofu"` or `info.Command == "opentofu"`) because command names don't reliably indicate the actual binary being executed (symlinks, aliases). Instead, document the OpenTofu requirement in code comments and documentation, trusting users who enable the feature (e.g., `PassVars`) to ensure their terraform command points to an OpenTofu binary.

Applied to files:

  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2024-11-12T03:15:15.627Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 775
File: examples/quick-start-advanced/Dockerfile:9-9
Timestamp: 2024-11-12T03:15:15.627Z
Learning: It is acceptable to set `ARG ATMOS_VERSION` to a future version like `1.105.0` in `examples/quick-start-advanced/Dockerfile` if that will be the next release.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2024-11-25T17:17:15.703Z
Learnt from: RoseSecurity
Repo: cloudposse/atmos PR: 797
File: pkg/list/atmos.yaml:213-214
Timestamp: 2024-11-25T17:17:15.703Z
Learning: The file `pkg/list/atmos.yaml` is primarily intended for testing purposes.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
📚 Learning: 2025-11-11T03:47:59.576Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: toolchain/which_test.go:166-223
Timestamp: 2025-11-11T03:47:59.576Z
Learning: In the cloudposse/atmos repo, tests that manipulate environment variables should use testing.T.Setenv for automatic setup/teardown instead of os.Setenv/Unsetenv.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
📚 Learning: 2024-12-01T00:33:20.298Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml:28-32
Timestamp: 2024-12-01T00:33:20.298Z
Learning: In `examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml`, `!exec atmos terraform output` is used in examples to demonstrate its usage, even though `!terraform.output` is the recommended approach according to the documentation.

Applied to files:

  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2025-01-19T15:49:15.593Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 955
File: tests/snapshots/TestCLICommands_atmos_validate_editorconfig_--help.stdout.golden:0-0
Timestamp: 2025-01-19T15:49:15.593Z
Learning: In future commits, the help text for Atmos CLI commands should be limited to only show component and stack parameters for commands that actually use them. This applies to the example usage section in command help text.

Applied to files:

  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2024-10-27T16:59:26.187Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 729
File: internal/exec/help.go:48-51
Timestamp: 2024-10-27T16:59:26.187Z
Learning: In the Atmos CLI help messages, when providing examples that include the version number, use the actual version variable (e.g., `version.Version`) instead of placeholders like `<version>`.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-09-27T20:50:20.564Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1533
File: pkg/config/load.go:585-637
Timestamp: 2025-09-27T20:50:20.564Z
Learning: In the cloudposse/atmos repository, command merging prioritizes precedence over display ordering. Help commands are displayed lexicographically regardless of internal array order, so the mergeCommandArrays function focuses on ensuring the correct precedence chain (top-level file wins) rather than maintaining specific display order.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Use registry pattern for extensibility and plugin-like architecture (Command Registry, Component Registry, Store Registry). New commands MUST use command registry pattern via CommandProvider interface.

Applied to files:

  • website/blog/2025-10-16-command-registry-pattern.md
📚 Learning: 2025-11-08T19:56:18.660Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1697
File: internal/exec/oci_utils.go:0-0
Timestamp: 2025-11-08T19:56:18.660Z
Learning: In the Atmos codebase, when a function receives an `*schema.AtmosConfiguration` parameter, it should read configuration values from `atmosConfig.Settings` fields rather than using direct `os.Getenv()` or `viper.GetString()` calls. The Atmos pattern is: viper.BindEnv in cmd/root.go binds environment variables → Viper unmarshals into atmosConfig.Settings via mapstructure → business logic reads from the Settings struct. This provides centralized config management, respects precedence, and enables testability. Example: `atmosConfig.Settings.AtmosGithubToken` instead of `os.Getenv("ATMOS_GITHUB_TOKEN")` in functions like `getGHCRAuth` in internal/exec/oci_utils.go.

Applied to files:

  • website/blog/2025-11-11-atmos-profiles.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : Use Docusaurus conventions with frontmatter, purpose note, screengrab, usage/examples/arguments/flags sections for CLI command documentation.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-11-14-terraform-command-documentation.mdx
📚 Learning: 2024-12-03T03:49:30.395Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx:104-110
Timestamp: 2024-12-03T03:49:30.395Z
Learning: In the documentation for `!terraform.output`, warnings about template variable availability are already covered in other sections, so no need to suggest adding them here.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to cmd/**/*.go : Provide comprehensive help text for all commands and flags, include examples in command help, and follow Go's documentation conventions in Cobra command definitions

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2024-12-07T16:16:13.038Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 825
File: internal/exec/helmfile_generate_varfile.go:28-31
Timestamp: 2024-12-07T16:16:13.038Z
Learning: In `internal/exec/helmfile_generate_varfile.go`, the `--help` command (`./atmos helmfile generate varfile --help`) works correctly without requiring stack configurations, and the only change needed was to make `ProcessCommandLineArgs` exportable by capitalizing its name.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
📚 Learning: 2025-09-24T20:45:40.401Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1475
File: tests/fixtures/scenarios/atmos-auth/stacks/deploy/nonprod.yaml:3-4
Timestamp: 2025-09-24T20:45:40.401Z
Learning: In Atmos stack files, the correct syntax for importing other stack files is `import:` (singular), not `imports:` (plural). All stack files in the Atmos codebase consistently use `import:` followed by a list of paths to import.

Applied to files:

  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
📚 Learning: 2024-11-22T12:38:33.132Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 768
File: internal/exec/vendor_utils.go:496-513
Timestamp: 2024-11-22T12:38:33.132Z
Learning: In the Atmos project, continue to flag path traversal issues in code reviews but acknowledge when they are expected and acceptable in specific cases.

Applied to files:

  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2024-11-16T17:30:52.893Z
Learnt from: pkbhowmick
Repo: cloudposse/atmos PR: 786
File: internal/exec/shell_utils.go:159-162
Timestamp: 2024-11-16T17:30:52.893Z
Learning: For the `atmos terraform shell` command in `internal/exec/shell_utils.go`, input validation for the custom shell prompt is not required, as users will use this as a CLI tool and any issues will impact themselves.

Applied to files:

  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
📚 Learning: 2025-09-07T18:07:00.549Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1452
File: cmd/auth_login.go:43-44
Timestamp: 2025-09-07T18:07:00.549Z
Learning: In the atmos project, the identity flag is defined as a persistent flag on the auth root command (cmd/auth.go), making it available to all auth subcommands without needing to be redefined in each individual subcommand.

Applied to files:

  • website/blog/2025-11-07-disable-identity-authentication.mdx
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!env` is used to retrieve environment variables and assign them to sections in stack manifests. It supports both simple types (string, number, boolean) and complex types (JSON-encoded lists, maps, objects).

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!include` allows downloading local or remote files from different sources and assigning their contents to sections in stack manifests. It supports various protocols (file, http, git, s3, etc.) and can filter content using YQ expressions.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2024-12-03T04:01:16.446Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx:0-0
Timestamp: 2024-12-03T04:01:16.446Z
Learning: In the `terraform.output.mdx` documentation file (`website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx`), the cache invalidation and cache scope behavior for the `!terraform.output` function are already described.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-04-25T20:54:19.701Z
Learnt from: mcalhoun
Repo: cloudposse/atmos PR: 963
File: website/docs/core-concepts/projects/configuration/stores.mdx:286-286
Timestamp: 2025-04-25T20:54:19.701Z
Learning: For the AWS SSM Parameter Store implementation in Atmos, support for `read_role_arn` and `write_role_arn` options is essential to enable cross-account access, allowing users to run operations like `terraform plan` in multiple accounts while accessing values across keystores. Azure Key Vault would need similar capabilities for cross-tenant/subscription authentication.

Applied to files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
📚 Learning: 2025-11-10T20:03:56.875Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1775
File: pkg/auth/providers/aws/sso_provisioning.go:40-79
Timestamp: 2025-11-10T20:03:56.875Z
Learning: In the Atmos AWS SSO provider (pkg/auth/providers/aws/sso_provisioning.go), the OAuth access token from the AWS SSO device flow is intentionally stored in the `AccessKeyID` field of `AWSCredentials` during authentication. This token is then extracted and used for ListAccounts and ListAccountRoles API calls during identity provisioning. This design reuses the existing `AWSCredentials` type for token transport rather than creating a separate credential type.

Applied to files:

  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain has been updated to follow XDG Base Directory Specification with helper functions GetXDGCacheDir() and GetXDGTempCacheDir() in toolchain/xdg_cache.go, using XDG_CACHE_HOME when set and falling back to ~/.cache/atmos-toolchain, making it consistent with atmos core's XDG compliance.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2024-10-23T22:11:41.077Z
Learnt from: haitham911
Repo: cloudposse/atmos PR: 727
File: internal/exec/path_utils.go:145-146
Timestamp: 2024-10-23T22:11:41.077Z
Learning: In the `atmos` project, the preference is to print relative paths in log messages instead of full paths.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2024-12-11T18:40:12.808Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 844
File: cmd/helmfile.go:37-37
Timestamp: 2024-12-11T18:40:12.808Z
Learning: In the atmos project, `cliConfig` is initialized within the `cmd` package in `root.go` and can be used in other command files.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2025-01-25T15:21:40.413Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 808
File: examples/demo-atmos-cli-imports/atmos.yaml:8-8
Timestamp: 2025-01-25T15:21:40.413Z
Learning: In Atmos, when a directory is specified for configuration loading (e.g., in the `import` section of atmos.yaml), all files within that directory should be treated as Atmos configurations. Do not suggest restricting file extensions in directory-based glob patterns.

Applied to files:

  • website/blog/2025-11-08-git-root-discovery.md
📚 Learning: 2024-12-02T21:26:32.337Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 808
File: pkg/config/config.go:478-483
Timestamp: 2024-12-02T21:26:32.337Z
Learning: In the 'atmos' project, when reviewing Go code like `pkg/config/config.go`, avoid suggesting file size checks after downloading remote configs if such checks aren't implemented elsewhere in the codebase.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
📚 Learning: 2025-11-07T14:52:55.217Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1761
File: docs/prd/claude-agent-architecture.md:331-439
Timestamp: 2025-11-07T14:52:55.217Z
Learning: In the cloudposse/atmos repository, Claude agents are used as interactive tools, not in automated/headless CI/CD contexts. Agent documentation and patterns should assume synchronous human interaction.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-20-auth-console-web-access.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain should follow XDG Base Directory Specification like the rest of atmos core, using XDG_CACHE_HOME environment variable when available and falling back to ~/.cache when not set, instead of hardcoding ~/.cache/tools-cache paths.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain XDG compliance implementation is complete with GetXDGCacheDir() and GetXDGTempCacheDir() functions in toolchain/xdg_cache.go, updated installer.go and toolchain_clean.go to use these helpers, and changed cache paths from ~/.cache/tools-cache to ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain when XDG_CACHE_HOME is not set).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: Final XDG Base Directory Specification implementation for atmos toolchain is complete and verified: toolchain/xdg_cache.go provides GetXDGCacheDir() and GetXDGTempCacheDir() functions, all hardcoded ~/.cache/tools-cache paths have been replaced with XDG-compliant paths using ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback), and tests have been updated to expect the new path structure.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: XDG Base Directory Specification compliance implementation for atmos toolchain is complete: created toolchain/xdg_cache.go with GetXDGCacheDir() and GetXDGTempCacheDir() functions, updated toolchain/installer.go and cmd/toolchain_clean.go to use these XDG helpers, and changed all cache paths from hardcoded ~/.cache/tools-cache to XDG-compliant ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-10-22T14:55:44.014Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1695
File: pkg/auth/manager.go:169-171
Timestamp: 2025-10-22T14:55:44.014Z
Learning: Go 1.20+ supports multiple %w verbs in fmt.Errorf, which returns an error implementing Unwrap() []error. This is valid and does not panic. Atmos uses Go 1.24.8 and configures errorlint with errorf-multi: true to validate this pattern.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning the error instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning specific error variables (like `ErrWorkflowNoSteps`, `ErrInvalidFromStep`, `ErrInvalidWorkflowStepType`, `ErrWorkflowStepFailed`) instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions while maintaining excellent user-facing error formatting.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes

Applied to files:

  • website/scripts/update-blog-releases.js
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to website/** : Update website documentation in the `website/` directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style

Applied to files:

  • website/scripts/update-blog-releases.js
📚 Learning: 2025-02-18T13:13:11.497Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1068
File: tests/snapshots/TestCLICommands_atmos_terraform_help.stdout.golden:59-64
Timestamp: 2025-02-18T13:13:11.497Z
Learning: For Atmos CLI help text, angle brackets in command examples and flag descriptions should be escaped using HTML entities (e.g., `&lt;component&gt;`) rather than converted to backticks or other markdown formatting.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-06-23T02:14:30.937Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 1327
File: cmd/terraform.go:111-117
Timestamp: 2025-06-23T02:14:30.937Z
Learning: In cmd/terraform.go, flags for the DescribeAffected function are added dynamically at runtime when info.Affected is true. This is intentional to avoid exposing internal flags like "file", "format", "verbose", "include-spacelift-admin-stacks", "include-settings", and "upload" in the terraform command interface, while still providing them for the shared DescribeAffected function used by both `atmos describe affected` and `atmos terraform apply --affected`.

Applied to files:

  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : All commands and flags need Docusaurus documentation in website/docs/cli/commands/. Use <dl> for arguments/flags. Build website after changes: cd website && npm run build.

Applied to files:

  • website/blog/2025-11-14-terraform-command-documentation.mdx
🧬 Code graph analysis (5)
website/src/components/ChangelogTimeline/TimelineRelease.tsx (2)
website/src/components/ChangelogTimeline/utils.ts (1)
  • ReleaseGroup (45-48)
website/src/components/ChangelogTimeline/TimelineEntry.tsx (1)
  • TimelineEntry (13-60)
website/src/theme/BlogSidebar/Desktop/index.tsx (1)
website/src/theme/BlogSidebar/context.tsx (1)
  • useSidebarCollapsed (22-29)
website/src/components/ChangelogTimeline/index.tsx (3)
website/src/components/ChangelogTimeline/utils.ts (3)
  • extractTags (197-205)
  • filterBlogPostsByTag (238-248)
  • groupBlogPostsByRelease (101-119)
website/src/components/ChangelogTimeline/FilterBar.tsx (1)
  • FilterBar (10-40)
website/src/components/ChangelogTimeline/TimelineRelease.tsx (1)
  • TimelineRelease (11-47)
website/src/theme/BlogLayout/index.tsx (2)
website/src/theme/BlogSidebar/context.tsx (2)
  • useSidebarCollapsed (22-29)
  • SidebarProvider (13-20)
website/src/theme/BlogSidebar/index.tsx (1)
  • BlogSidebar (10-20)
website/src/components/ChangelogTimeline/utils.ts (2)
website/src/components/ChangelogTimeline/index.tsx (1)
  • BlogPostItem (80-80)
website/plugins/fetch-latest-release/index.js (1)
  • release (23-23)
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Summary

osterman and others added 3 commits November 29, 2025 11:34
The useBlogPost hook throws when called outside of a BlogPostProvider
context (e.g., on docs pages). Wrap the hook call in a try/catch within
useBlogPostSafe() to gracefully return null instead of crashing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The function was never used - groupBlogPostsByRelease already handles
sorting releases by version internally via compareVersionsDescending.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Remove unused .releaseContainer rule from BlogPostItem/Header styles
- Anchor parseVersion regex to end ($) to reject prerelease suffixes
  like "v1.2.3-rc1" which would previously match incorrectly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The watermark background image was taking up space on mobile devices.
Hide it on screens smaller than 996px for a cleaner mobile experience.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Title now displays on 2 lines max ("One Tool to Orchestrate" on line 1, animated word on line 2)
- Changed "Learn More" from button to subtle text link
- Removed excessive left/right margins on mobile for full-width layout
- Demo screenshot contained with same padding as feature cards
- Typing animation container prevents layout shift with min-width

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
website/src/theme/BlogLayout/styles.module.css (2)

5-21: Verify necessity of !important flags and consider specificity-based alternatives.

The CSS uses seven !important declarations to override inherited styles. While this works, it can make the stylesheet harder to maintain and debug. Consider whether the specificity can be improved through better selector hierarchy or CSS module scoping instead.

Can you clarify:

  1. Why !important is necessary here? Are these overriding inherited Docusaurus styles that can't be targeted differently?
  2. Could CSS module scoping or higher-specificity selectors reduce or eliminate the need for !important?

If !important is unavoidable, adding a comment explaining the constraint would help future maintainers.


25-30: Verify magic number 4rem aligns with design system.

The margin-bottom: 4rem in the mobile responsive rule appears to be a magic number. Does this correspond to a design token or spacing variable used elsewhere in the project? If available, use a project-standard spacing constant for consistency.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 1f57e3f and 121e76a.

📒 Files selected for processing (2)
  • website/src/css/custom.css (1 hunks)
  • website/src/theme/BlogLayout/styles.module.css (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in the website/ directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style
Keep website code in the website/ directory, follow the existing website architecture and style, and test website changes locally before committing
Keep CLI documentation and website documentation in sync and document new features on the website with examples and use cases

Files:

  • website/src/css/custom.css
  • website/src/theme/BlogLayout/styles.module.css
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Summary
🔇 Additional comments (4)
website/src/theme/BlogLayout/styles.module.css (2)

24-24: Verify 996px breakpoint consistency.

Confirm that the 996px responsive breakpoint at line 24 matches your project's standard breakpoints and aligns with other media queries in the codebase.


11-14: Smooth transitions enhance UX.

The transition property on .mainContent for sidebar expand/collapse is a nice touch for user experience. This looks good.

website/src/css/custom.css (2)

1-944: AI-generated summary describes TypeScript component changes, but file is a CSS stylesheet.

The AI summary refers to FilterBar.tsx changes (removing year-based filtering, retaining tag-based filtering), but this file is custom.css and contains CSS-only styling. This mismatch suggests either the summary was generated for a different file, or additional component files may not be included in this review.

Can you confirm whether the changelog timeline component files (FilterBar.tsx, TimelineRelease.tsx, index.tsx, utils.ts) are included in this PR review, or should they be reviewed separately?


134-140: Mobile responsiveness: Hide background watermark on smaller viewports.

The 996px breakpoint correctly aligns with Docusaurus's standard mobile/desktop cutoff. This change prevents rendering the decorative background image on mobile, which is a sensible optimization for bandwidth and performance. The CSS is syntactically correct and applies to both light and dark themes.

Replace hardcoded '/changelog' strings with BLOG_ROUTE_BASE constant
and BLOG_NON_POST_PATHS array for safer, more maintainable blog post
path detection. Added documentation noting dependency on docusaurus.config.js.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
coderabbitai[bot]
coderabbitai bot previously approved these changes Nov 29, 2025
- Add blog-release-data plugin to extract release info from blog posts
- Rewrite BlogSidebar/Content to group posts by release version
- Add collapsible release groups with GitHub link icons
- Fix TOC loading issues on client-side navigation with useLocation
- Add error boundary for BlogReleaseBadge component
- Allow sidebar links to wrap instead of truncating with ellipsis

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
website/plugins/blog-release-data/index.js (1)

22-26: Add error handling for file operations.

File reads can fail due to permissions, encoding issues, or malformed frontmatter. Wrap the file operations in try-catch to prevent build failures and provide clear error messages.

Apply this diff:

     for (const file of files) {
-      const filePath = path.join(blogDir, file);
-      const content = fs.readFileSync(filePath, 'utf-8');
-      const { data: frontmatter } = matter(content);
+      try {
+        const filePath = path.join(blogDir, file);
+        const content = fs.readFileSync(filePath, 'utf-8');
+        const { data: frontmatter } = matter(content);
 
-      if (frontmatter.release) {
+        if (frontmatter.release) {
           // The blog is configured with routeBasePath: 'changelog'.
           // Handle multiple filename formats and permalink styles.
 
           // Try date-prefixed filename: YYYY-MM-DD-slug-name.mdx
           const dateMatch = file.match(/^(\d{4})-(\d{2})-(\d{2})-(.+)\.(mdx?|md)$/);
           if (dateMatch) {
             const [, year, month, day, slugPart] = dateMatch;
             const slug = frontmatter.slug || slugPart;
 
             // Store multiple permalink formats to handle both slug-only and date-based paths.
             const slugPermalink = `/changelog/${slug}`;
             const datePermalink = `/changelog/${year}/${month}/${day}/${slugPart}`;
 
             releaseMap[slugPermalink] = frontmatter.release;
             releaseMap[`${slugPermalink}/`] = frontmatter.release;
             releaseMap[datePermalink] = frontmatter.release;
             releaseMap[`${datePermalink}/`] = frontmatter.release;
           } else if (frontmatter.slug) {
             // Non-date-prefixed file with explicit slug (e.g., welcome.md)
             const slugPermalink = `/changelog/${frontmatter.slug}`;
             releaseMap[slugPermalink] = frontmatter.release;
             releaseMap[`${slugPermalink}/`] = frontmatter.release;
           }
-      }
+        }
+      } catch (error) {
+        console.error(`Error processing blog file ${file}:`, error.message);
+        // Continue processing other files
+      }
     }
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 1f57e3f and 35daaf2.

📒 Files selected for processing (9)
  • website/docusaurus.config.js (1 hunks)
  • website/plugins/blog-release-data/index.js (1 hunks)
  • website/src/css/custom.css (2 hunks)
  • website/src/css/landing-page.css (3 hunks)
  • website/src/pages/index.js (2 hunks)
  • website/src/theme/BlogLayout/styles.module.css (1 hunks)
  • website/src/theme/BlogSidebar/Content/index.tsx (4 hunks)
  • website/src/theme/BlogSidebar/Desktop/styles.module.css (4 hunks)
  • website/src/theme/TOC/index.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • website/src/theme/BlogLayout/styles.module.css
🧰 Additional context used
📓 Path-based instructions (1)
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in the website/ directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style
Keep website code in the website/ directory, follow the existing website architecture and style, and test website changes locally before committing
Keep CLI documentation and website documentation in sync and document new features on the website with examples and use cases

Files:

  • website/src/theme/BlogSidebar/Content/index.tsx
  • website/src/css/custom.css
  • website/src/pages/index.js
  • website/src/theme/TOC/index.tsx
  • website/src/css/landing-page.css
  • website/src/theme/BlogSidebar/Desktop/styles.module.css
  • website/plugins/blog-release-data/index.js
  • website/docusaurus.config.js
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Applied to files:

  • website/src/theme/BlogSidebar/Content/index.tsx
  • website/src/theme/TOC/index.tsx
  • website/plugins/blog-release-data/index.js
📚 Learning: 2025-09-30T00:36:22.219Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-09-30T00:36:22.219Z
Learning: In the Atmos website project using docusaurus-plugin-llms, the postbuild script intentionally copies llms.txt and llms-full.txt from build/ to static/ (reverse of typical Docusaurus flow). This is necessary because: (1) the plugin hardcodes output to build/ directory, (2) files must be in static/ for deployment and dev mode access, (3) the plugin doesn't support configuring output directory. The files are source-controlled in static/ and regenerated on each build.

Applied to files:

  • website/docusaurus.config.js
🧬 Code graph analysis (2)
website/plugins/blog-release-data/index.js (1)
website/docusaurus.config.js (1)
  • path (8-8)
website/docusaurus.config.js (4)
website/plugins/blog-release-data/index.js (1)
  • path (6-6)
website/plugins/docusaurus-plugin-llms-txt/src/index.js (1)
  • path (14-14)
website/plugins/glossary-tooltips/webpack-loader.js (1)
  • path (1-1)
website/plugins/glossary-tooltips/index.js (1)
  • path (2-2)
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Acceptance Tests (macos)
  • GitHub Check: Acceptance Tests (linux)
  • GitHub Check: Acceptance Tests (windows)
  • GitHub Check: Summary
🔇 Additional comments (15)
website/src/css/landing-page.css (2)

135-203: Responsive design adjustments look solid.

The mobile-first cascade (desktop 280px min-width → mobile 200px) and flex stacking (CTA, hero demo) follow good practices. Typography scaling (4em → 2.25rem on mobile) and margin/padding removal for full-width sections are well-executed.

Also applies to: 545-600


205-223: The .hero__link class is correctly applied to the "Learn More" link element.

Verification confirms the class is actively used in website/src/pages/index.js (line 34) on the secondary "Learn More" link within the hero CTA section. The CSS styling is clean with proper dark-mode variants. No issues found.

website/src/css/custom.css (2)

125-131: Mobile optimization looks good.

Hiding the background watermark on mobile improves performance and visual clarity on small screens.


892-893: Better UX for long sidebar titles.

Switching from truncation to wrapping ensures users can read full titles without having to hover or guess.

website/src/theme/BlogSidebar/Desktop/styles.module.css (1)

7-8: Collapsible sidebar implementation is solid.

The CSS transitions, flexbox sizing, and toggle button positioning all work together to create a smooth collapse/expand experience. The icon rotation provides clear visual feedback.

Also applies to: 13-20, 25-37, 47-51, 60-62, 72-72

website/docusaurus.config.js (1)

168-170: Plugin registration follows existing patterns.

The blog-release-data plugin is correctly added to the plugins array with proper path resolution.

website/src/pages/index.js (1)

25-25: UI refinements are straightforward.

The title wrapper and updated link class are minor presentational changes that align with the new styling system.

Also applies to: 34-34

website/plugins/blog-release-data/index.js (1)

32-50: Permalink format handling is thorough.

Supporting both date-based and slug-based permalinks with trailing slash variants ensures compatibility with various blog routing configurations.

website/src/theme/BlogSidebar/Content/index.tsx (2)

22-43: Release grouping logic is clean.

The use of a Map to group items by release, followed by version-based sorting, produces the desired timeline order.


45-128: Collapsible release groups enhance UX.

The component provides clear visual hierarchy with expandable sections, proper ARIA attributes, and GitHub release links. The inline SVG icons keep dependencies minimal.

website/src/theme/TOC/index.tsx (5)

26-39: Good documentation for maintenance.

The IMPORTANT comment and constant-based approach address the pathname heuristic fragility. Maintainers will know exactly where to look if blog routes change.


45-65: Blog post detection logic is clear.

The function systematically checks route base, excludes index/listing pages, and handles various non-post paths. The sequential checks are easy to follow and debug.


71-90: Error boundary provides graceful degradation.

The boundary catches errors from BlogReleaseBadge (e.g., missing BlogPostProvider) and silently returns null, ensuring the TOC still renders on non-blog pages.


99-117: Client-side rendering pattern is solid.

Using React.lazy + Suspense + BrowserOnly avoids SSG issues while maintaining proper code splitting. The error boundary wrapper ensures resilience.


119-135: TOC component handles both blog and doc pages cleanly.

The BrowserOnly wrapper defers blog-specific rendering to the client, while standard TOC rendering works everywhere. The approach is pragmatic and maintainable.

- Consolidate 50+ tags down to 9 meaningful categories: feature, enhancement,
  bugfix, dx, breaking-change, security, documentation, core, deprecation
- Update FilterBar with modern pill-style multi-select buttons
- Add year and tag filtering with OR logic (union)
- Center filter bar under title while keeping filters left-aligned
- Add color-coded tag styles with dark mode support
- Remove redundant description fields from blog posts to use truncation content
- Update tags.yml with new simplified taxonomy

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Change links from github.com/cloudposse/atmos/discussions to
github.com/orgs/cloudposse/discussions across all blog posts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
website/blog/2025-01-04-nested-backend-maps-support.mdx (1)

6-7: Consider whether tag scope is sufficient.

The tags have been reduced from [bugfix, terraform, backend] to just [bugfix]. While this tag is accurate for the post's content, the prior tags provided better discoverability and context. If the PR is intentionally rationalizing tags across all posts, this is fine; otherwise, consider restoring the additional tags for categorization.

website/src/components/ChangelogTimeline/index.tsx (1)

40-67: Running index calculation works but could be cleaner.

Mutating runningIndex inside the render is safe since it's a local variable recomputed each render. That said, a reduce or similar approach would express intent more clearly. Not blocking—just a style note.

-  // Calculate running index for alternating positions across releases.
-  let runningIndex = 0;
-
   return (
     <div className={styles.changelogTimeline}>
       <FilterBar
         years={years}
         selectedYears={selectedYears}
         onYearsChange={setSelectedYears}
         tags={tags}
         selectedTags={selectedTags}
         onTagsChange={setSelectedTags}
       />

       {hasResults ? (
         <div className={styles.timeline}>
           <div className={styles.timelineLine} aria-hidden="true" />
-          {groupedItems.map((releaseGroup) => {
-            const startIndex = runningIndex;
-            runningIndex += releaseGroup.items.length;
-            return (
+          {groupedItems.reduce<{elements: JSX.Element[]; index: number}>(
+            (acc, releaseGroup) => {
+              acc.elements.push(
+                <TimelineRelease
+                  key={releaseGroup.release}
+                  releaseGroup={releaseGroup}
+                  startIndex={acc.index}
+                />
+              );
+              acc.index += releaseGroup.items.length;
+              return acc;
+            },
+            {elements: [], index: 0}
+          ).elements}
-              <TimelineRelease
-                key={releaseGroup.release}
-                releaseGroup={releaseGroup}
-                startIndex={startIndex}
-              />
-            );
-          })}
         </div>
website/src/theme/BlogSidebar/Content/index.tsx (1)

130-134: Consider renaming yearGroupHeadingClassName prop.

The prop name references "year" but now applies to release groups. A rename to releaseGroupHeadingClassName would better reflect its purpose. Low priority since it's internal.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 35daaf2 and eb965e0.

📒 Files selected for processing (46)
  • website/blog/2025-01-04-nested-backend-maps-support.mdx (1 hunks)
  • website/blog/2025-10-13-introducing-atmos-auth.md (2 hunks)
  • website/blog/2025-10-15-atmos-auth-shell.mdx (1 hunks)
  • website/blog/2025-10-15-introducing-atmos-auth-list.md (1 hunks)
  • website/blog/2025-10-15-pager-default-correction.md (1 hunks)
  • website/blog/2025-10-15-provenance-tracking.mdx (2 hunks)
  • website/blog/2025-10-16-command-registry-pattern.md (2 hunks)
  • website/blog/2025-10-17-auth-logout-feature.md (2 hunks)
  • website/blog/2025-10-17-aws-sso-verification-code-display.md (1 hunks)
  • website/blog/2025-10-17-interactive-identity-selection.md (1 hunks)
  • website/blog/2025-10-17-version-list-command.md (2 hunks)
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md (2 hunks)
  • website/blog/2025-10-18-keyring-backends.mdx (2 hunks)
  • website/blog/2025-10-19-chdir-flag.md (1 hunks)
  • website/blog/2025-10-20-auth-console-web-access.md (1 hunks)
  • website/blog/2025-10-21-auth-context-implementation.md (1 hunks)
  • website/blog/2025-10-21-azure-blob-terraform-state-support.md (2 hunks)
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx (1 hunks)
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md (1 hunks)
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md (1 hunks)
  • website/blog/2025-10-26-zero-config-terminal-output.md (1 hunks)
  • website/blog/2025-10-28-pro-instances-api-query-params.md (1 hunks)
  • website/blog/2025-10-29-auth-ux-improvements.mdx (1 hunks)
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx (1 hunks)
  • website/blog/2025-10-30-terraform-provider-development.mdx (1 hunks)
  • website/blog/2025-10-31-component-aware-stack-completion.mdx (1 hunks)
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx (1 hunks)
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx (1 hunks)
  • website/blog/2025-11-07-azure-authentication-support.mdx (1 hunks)
  • website/blog/2025-11-08-git-root-discovery.md (1 hunks)
  • website/blog/2025-11-08-helpful-errors.mdx (1 hunks)
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx (1 hunks)
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx (2 hunks)
  • website/blog/2025-11-14-comprehensive-version-management-docs.md (2 hunks)
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx (2 hunks)
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx (1 hunks)
  • website/blog/2025-11-14-terraform-command-documentation.mdx (1 hunks)
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md (1 hunks)
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md (1 hunks)
  • website/blog/tags.yml (1 hunks)
  • website/blog/welcome.md (1 hunks)
  • website/src/components/ChangelogTimeline/FilterBar.tsx (1 hunks)
  • website/src/components/ChangelogTimeline/index.tsx (2 hunks)
  • website/src/components/ChangelogTimeline/styles.module.css (8 hunks)
  • website/src/components/ChangelogTimeline/utils.ts (5 hunks)
  • website/src/theme/BlogSidebar/Content/index.tsx (4 hunks)
✅ Files skipped from review due to trivial changes (5)
  • website/blog/2025-10-17-interactive-identity-selection.md
  • website/blog/2025-10-15-introducing-atmos-auth-list.md
  • website/blog/2025-10-26-zero-config-terminal-output.md
  • website/blog/2025-11-07-azure-authentication-support.mdx
  • website/blog/2025-11-08-git-root-discovery.md
🚧 Files skipped from review as they are similar to previous changes (18)
  • website/blog/welcome.md
  • website/blog/2025-10-21-auth-context-implementation.md
  • website/blog/2025-10-31-component-aware-stack-completion.mdx
  • website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx
  • website/blog/2025-10-31-shell-argument-quoting-fix.mdx
  • website/blog/2025-11-08-theme-commands-environment-variables.mdx
  • website/blog/2025-10-15-pager-default-correction.md
  • website/blog/2025-10-17-aws-sso-verification-code-display.md
  • website/blog/2025-10-15-atmos-auth-shell.mdx
  • website/blog/2025-10-16-command-registry-pattern.md
  • website/blog/2025-11-14-safe-logout-preserves-keychain.mdx
  • website/blog/2025-10-30-terraform-provider-development.mdx
  • website/blog/2025-11-14-terraform-command-documentation.mdx
  • website/blog/2025-10-17-auth-logout-feature.md
  • website/blog/2025-11-02-describe-commands-identity-flag.mdx
  • website/blog/2025-10-29-auth-ux-improvements.mdx
  • website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx
  • website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md
🧰 Additional context used
📓 Path-based instructions (2)
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in the website/ directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style
Keep website code in the website/ directory, follow the existing website architecture and style, and test website changes locally before committing
Keep CLI documentation and website documentation in sync and document new features on the website with examples and use cases

Files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/tags.yml
  • website/src/components/ChangelogTimeline/FilterBar.tsx
  • website/src/theme/BlogSidebar/Content/index.tsx
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-17-version-list-command.md
  • website/src/components/ChangelogTimeline/styles.module.css
  • website/src/components/ChangelogTimeline/index.tsx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
website/blog/**/*.mdx

📄 CodeRabbit inference engine (CLAUDE.md)

PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
🧠 Learnings (48)
📓 Common learnings
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).
📚 Learning: 2024-12-01T00:33:20.298Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml:28-32
Timestamp: 2024-12-01T00:33:20.298Z
Learning: In `examples/tests/stacks/catalog/terraform/template-functions-test2/defaults.yaml`, `!exec atmos terraform output` is used in examples to demonstrate its usage, even though `!terraform.output` is the recommended approach according to the documentation.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-01-17T00:18:57.769Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 944
File: go.mod:206-206
Timestamp: 2025-01-17T00:18:57.769Z
Learning: For indirect dependencies with license compliance issues in the cloudposse/atmos repository, the team prefers to handle them in follow-up PRs rather than blocking the current changes, as these issues often require deeper investigation of the dependency tree.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-01-25T03:51:57.689Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 934
File: tests/fixtures/scenarios/docs-generate/README.md.gotmpl:99-118
Timestamp: 2025-01-25T03:51:57.689Z
Learning: For the cloudposse/atmos repository, changes to template contents should be handled in dedicated PRs and are typically considered out of scope for PRs focused on other objectives.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-09-13T16:39:20.007Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: cmd/markdown/atmos_toolchain_aliases.md:2-4
Timestamp: 2025-09-13T16:39:20.007Z
Learning: In the cloudposse/atmos repository, CLI documentation files in cmd/markdown/ follow a specific format that uses " $ atmos command" (with leading space and dollar sign prompt) in code blocks. This is the established project convention and should not be changed to comply with standard markdownlint rules MD040 and MD014.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-20-auth-console-web-access.md
📚 Learning: 2025-09-10T21:17:55.273Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 1466
File: toolchain/http_client_test.go:3-10
Timestamp: 2025-09-10T21:17:55.273Z
Learning: In the cloudposse/atmos repository, imports should never be changed as per samtholiya's coding guidelines.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-11-01T20:24:29.557Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1714
File: NOTICE:0-0
Timestamp: 2025-11-01T20:24:29.557Z
Learning: In the cloudposse/atmos repository, the NOTICE file is programmatically generated and should not be manually edited. Issues with dependency license URLs in NOTICE will be resolved when upstream package metadata is corrected.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
📚 Learning: 2025-11-07T14:52:55.217Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1761
File: docs/prd/claude-agent-architecture.md:331-439
Timestamp: 2025-11-07T14:52:55.217Z
Learning: In the cloudposse/atmos repository, Claude agents are used as interactive tools, not in automated/headless CI/CD contexts. Agent documentation and patterns should assume synchronous human interaction.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
📚 Learning: 2025-02-06T13:38:07.216Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 984
File: internal/exec/copy_glob.go:0-0
Timestamp: 2025-02-06T13:38:07.216Z
Learning: The `u.LogTrace` function in the `cloudposse/atmos` repository accepts `atmosConfig` as its first parameter, followed by the message string.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2024-11-22T12:38:33.132Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 768
File: internal/exec/vendor_utils.go:496-513
Timestamp: 2024-11-22T12:38:33.132Z
Learning: In the Atmos project, continue to flag path traversal issues in code reviews but acknowledge when they are expected and acceptable in specific cases.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-11-09T19:06:58.470Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1752
File: pkg/profile/list/formatter_table.go:27-29
Timestamp: 2025-11-09T19:06:58.470Z
Learning: In the cloudposse/atmos repository, performance tracking with `defer perf.Track()` is enforced on all functions via linting, including high-frequency utility functions, formatters, and renderers. This is a repository-wide policy to maintain consistency and avoid making case-by-case judgment calls about which functions should have profiling.

Applied to files:

  • website/blog/2025-10-21-azure-blob-terraform-state-support.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-15-provenance-tracking.mdx
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!env` is used to retrieve environment variables and assign them to sections in stack manifests. It supports both simple types (string, number, boolean) and complex types (JSON-encoded lists, maps, objects).

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-01-19T22:30:27.600Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 0
File: :0-0
Timestamp: 2025-01-19T22:30:27.600Z
Learning: The Atmos YAML function `!include` allows downloading local or remote files from different sources and assigning their contents to sections in stack manifests. It supports various protocols (file, http, git, s3, etc.) and can filter content using YQ expressions.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-11-11T03:47:59.576Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: toolchain/which_test.go:166-223
Timestamp: 2025-11-11T03:47:59.576Z
Learning: In the cloudposse/atmos repo, tests that manipulate environment variables should use testing.T.Setenv for automatic setup/teardown instead of os.Setenv/Unsetenv.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-11-11T03:47:45.878Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: toolchain/add_test.go:67-77
Timestamp: 2025-11-11T03:47:45.878Z
Learning: In the cloudposse/atmos codebase, tests should prefer t.Setenv for environment variable setup/teardown instead of os.Setenv/Unsetenv to ensure test-scoped isolation.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-11-08T19:56:18.660Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1697
File: internal/exec/oci_utils.go:0-0
Timestamp: 2025-11-08T19:56:18.660Z
Learning: In the Atmos codebase, when a function receives an `*schema.AtmosConfiguration` parameter, it should read configuration values from `atmosConfig.Settings` fields rather than using direct `os.Getenv()` or `viper.GetString()` calls. The Atmos pattern is: viper.BindEnv in cmd/root.go binds environment variables → Viper unmarshals into atmosConfig.Settings via mapstructure → business logic reads from the Settings struct. This provides centralized config management, respects precedence, and enables testability. Example: `atmosConfig.Settings.AtmosGithubToken` instead of `os.Getenv("ATMOS_GITHUB_TOKEN")` in functions like `getGHCRAuth` in internal/exec/oci_utils.go.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-08-29T20:57:35.423Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1433
File: cmd/theme_list.go:33-36
Timestamp: 2025-08-29T20:57:35.423Z
Learning: In the Atmos codebase, avoid using viper.SetEnvPrefix("ATMOS") with viper.AutomaticEnv() because canonical environment variable names are not exclusive to Atmos and could cause conflicts. Instead, use selective environment variable binding through the setEnv function in pkg/config/load.go with bindEnv(v, "config.key", "ENV_VAR_NAME") for specific environment variables.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
📚 Learning: 2025-09-10T17:34:52.568Z
Learnt from: Benbentwo
Repo: cloudposse/atmos PR: 1475
File: pkg/auth/providers/github/oidc.go:96-100
Timestamp: 2025-09-10T17:34:52.568Z
Learning: The ATMOS_ environment variable binding guideline applies to Atmos configuration variables, not external service-required environment variables like GitHub Actions OIDC variables (GITHUB_ACTIONS, ACTIONS_ID_TOKEN_*) which must use their standard names.

Applied to files:

  • website/blog/2025-11-14-env-function-stack-manifest-support.mdx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
📚 Learning: 2025-11-29T17:35:01.146Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1819
File: website/blog/2025-10-13-introducing-atmos-auth.md:5-6
Timestamp: 2025-11-29T17:35:01.146Z
Learning: In the Atmos blog (website/blog/), blog post authors should be set to the actual content author (the person who wrote the feature/content), not generic organization names like "cloudposse" or "atmos". If the actual author differs from the PR opener, use the actual author. Authors must exist in website/blog/authors.yml.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/tags.yml
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/blog/**/*.mdx : PRs labeled minor/major MUST include blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML front matter, <!--truncate--> after intro, tags (feature/enhancement/bugfix/contributors), and author (committer's GitHub username).

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-08-helpful-errors.mdx
  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/src/theme/BlogSidebar/Content/index.tsx
  • website/blog/2025-11-17-enhanced-color-output-and-code-quality.md
  • website/blog/2025-10-19-chdir-flag.md
  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/src/components/ChangelogTimeline/index.tsx
  • website/blog/2025-10-13-introducing-atmos-auth.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-10-20-auth-console-web-access.md
  • website/src/components/ChangelogTimeline/utils.ts
  • website/blog/2025-10-15-provenance-tracking.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-03-18T12:26:25.329Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 1149
File: tests/snapshots/TestCLICommands_atmos_vendor_pull_ssh.stderr.golden:7-7
Timestamp: 2025-03-18T12:26:25.329Z
Learning: In the Atmos project, typos or inconsistencies in test snapshot files (such as "terrafrom" instead of "terraform") may be intentional as they capture the exact output of commands and should not be flagged as issues requiring correction.

Applied to files:

  • website/blog/2025-10-28-pro-instances-api-query-params.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
  • website/blog/2025-01-04-nested-backend-maps-support.mdx
📚 Learning: 2025-10-22T14:55:44.014Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1695
File: pkg/auth/manager.go:169-171
Timestamp: 2025-10-22T14:55:44.014Z
Learning: Go 1.20+ supports multiple %w verbs in fmt.Errorf, which returns an error implementing Unwrap() []error. This is valid and does not panic. Atmos uses Go 1.24.8 and configures errorlint with errorf-multi: true to validate this pattern.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning the error instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-06-02T14:12:02.710Z
Learnt from: milldr
Repo: cloudposse/atmos PR: 1229
File: internal/exec/workflow_test.go:0-0
Timestamp: 2025-06-02T14:12:02.710Z
Learning: In the atmos codebase, workflow error handling was refactored to use `PrintErrorMarkdown` followed by returning specific error variables (like `ErrWorkflowNoSteps`, `ErrInvalidFromStep`, `ErrInvalidWorkflowStepType`, `ErrWorkflowStepFailed`) instead of `PrintErrorMarkdownAndExit`. This pattern allows proper error testing without the function terminating the process with `os.Exit`, enabling unit tests to assert on error conditions while maintaining excellent user-facing error formatting.

Applied to files:

  • website/blog/2025-11-08-helpful-errors.mdx
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to CHANGELOG.md : Follow semantic versioning, update CHANGELOG.md with each release, and create GitHub releases with detailed release notes

Applied to files:

  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-10-17-version-list-command.md
  • website/src/components/ChangelogTimeline/utils.ts
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : Use Docusaurus conventions with frontmatter, purpose note, screengrab, usage/examples/arguments/flags sections for CLI command documentation.

Applied to files:

  • website/blog/2025-11-14-comprehensive-version-management-docs.md
  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2024-11-23T00:13:22.004Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 801
File: examples/quick-start-advanced/Dockerfile:9-9
Timestamp: 2024-11-23T00:13:22.004Z
Learning: When updating the `ATMOS_VERSION` in Dockerfiles, the team prefers to pin to the next future version when the PR merges, even if the version is not yet released.

Applied to files:

  • website/blog/2025-11-14-comprehensive-version-management-docs.md
📚 Learning: 2024-11-12T03:15:15.627Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 775
File: examples/quick-start-advanced/Dockerfile:9-9
Timestamp: 2024-11-12T03:15:15.627Z
Learning: It is acceptable to set `ARG ATMOS_VERSION` to a future version like `1.105.0` in `examples/quick-start-advanced/Dockerfile` if that will be the next release.

Applied to files:

  • website/blog/2025-11-14-comprehensive-version-management-docs.md
📚 Learning: 2025-09-07T17:38:17.619Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/src/components/Screengrabs/demo-stacks/deploy-dev.html:28-37
Timestamp: 2025-09-07T17:38:17.619Z
Learning: Screengrab files in the CloudPosse/atmos repository are programmatically generated and should be ignored during code reviews. Do not provide suggestions or comments on files in screengrab directories or screengrab-related HTML files.

Applied to files:

  • website/blog/2025-10-18-keyring-backends.mdx
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
📚 Learning: 2025-10-10T23:51:36.597Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1599
File: internal/exec/terraform.go:394-402
Timestamp: 2025-10-10T23:51:36.597Z
Learning: In Atmos (internal/exec/terraform.go), when adding OpenTofu-specific flags like `--var-file` for `init`, do not gate them based on command name (e.g., checking if `info.Command == "tofu"` or `info.Command == "opentofu"`) because command names don't reliably indicate the actual binary being executed (symlinks, aliases). Instead, document the OpenTofu requirement in code comments and documentation, trusting users who enable the feature (e.g., `PassVars`) to ensure their terraform command points to an OpenTofu binary.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-11-24T17:35:20.297Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:35:20.297Z
Learning: Applies to website/docs/cli/commands/**/*.mdx : All commands and flags need Docusaurus documentation in website/docs/cli/commands/. Use <dl> for arguments/flags. Build website after changes: cd website && npm run build.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to website/** : Update website documentation in the `website/` directory when adding new features, ensure consistency between CLI help text and website documentation, and follow the website's documentation structure and style

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-01-19T15:49:15.593Z
Learnt from: samtholiya
Repo: cloudposse/atmos PR: 955
File: tests/snapshots/TestCLICommands_atmos_validate_editorconfig_--help.stdout.golden:0-0
Timestamp: 2025-01-19T15:49:15.593Z
Learning: In future commits, the help text for Atmos CLI commands should be limited to only show component and stack parameters for commands that actually use them. This applies to the example usage section in command help text.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-10-07T00:25:16.333Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1498
File: website/src/components/Screengrabs/atmos-terraform-metadata--help.html:25-55
Timestamp: 2025-10-07T00:25:16.333Z
Learning: In Atmos CLI, subcommands inherit flags from their parent commands via Cobra's command inheritance. For example, `atmos terraform metadata --help` shows `--affected` and related flags inherited from the parent `terraform` command (defined in cmd/terraform.go), even though the metadata subcommand doesn't explicitly define these flags. This is expected Cobra behavior and auto-generated help screengrabs accurately reflect this inheritance.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to cmd/**/*.go : Provide comprehensive help text for all commands and flags, include examples in command help, and follow Go's documentation conventions in Cobra command definitions

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2024-12-07T16:16:13.038Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 825
File: internal/exec/helmfile_generate_varfile.go:28-31
Timestamp: 2024-12-07T16:16:13.038Z
Learning: In `internal/exec/helmfile_generate_varfile.go`, the `--help` command (`./atmos helmfile generate varfile --help`) works correctly without requiring stack configurations, and the only change needed was to make `ProcessCommandLineArgs` exportable by capitalizing its name.

Applied to files:

  • website/blog/2025-11-17-comprehensive-terraform-documentation.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain has been updated to follow XDG Base Directory Specification with helper functions GetXDGCacheDir() and GetXDGTempCacheDir() in toolchain/xdg_cache.go, using XDG_CACHE_HOME when set and falling back to ~/.cache/atmos-toolchain, making it consistent with atmos core's XDG compliance.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain should follow XDG Base Directory Specification like the rest of atmos core, using XDG_CACHE_HOME environment variable when available and falling back to ~/.cache when not set, instead of hardcoding ~/.cache/tools-cache paths.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: The atmos toolchain XDG compliance implementation is complete with GetXDGCacheDir() and GetXDGTempCacheDir() functions in toolchain/xdg_cache.go, updated installer.go and toolchain_clean.go to use these helpers, and changed cache paths from ~/.cache/tools-cache to ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain when XDG_CACHE_HOME is not set).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: Final XDG Base Directory Specification implementation for atmos toolchain is complete and verified: toolchain/xdg_cache.go provides GetXDGCacheDir() and GetXDGTempCacheDir() functions, all hardcoded ~/.cache/tools-cache paths have been replaced with XDG-compliant paths using ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback), and tests have been updated to expect the new path structure.

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-09-08T01:25:44.958Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1466
File: website/docs/cli/commands/toolchain/usage.mdx:117-121
Timestamp: 2025-09-08T01:25:44.958Z
Learning: XDG Base Directory Specification compliance implementation for atmos toolchain is complete: created toolchain/xdg_cache.go with GetXDGCacheDir() and GetXDGTempCacheDir() functions, updated toolchain/installer.go and cmd/toolchain_clean.go to use these XDG helpers, and changed all cache paths from hardcoded ~/.cache/tools-cache to XDG-compliant ${XDG_CACHE_HOME}/atmos-toolchain (or ~/.cache/atmos-toolchain fallback).

Applied to files:

  • website/blog/2025-10-24-macos-xdg-cli-conventions.md
📚 Learning: 2025-11-24T17:35:37.209Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: .cursor/rules/atmos-rules.mdc:0-0
Timestamp: 2025-11-24T17:35:37.209Z
Learning: Applies to README.md : Update README.md with new commands and features

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2024-10-27T16:59:26.187Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 729
File: internal/exec/help.go:48-51
Timestamp: 2024-10-27T16:59:26.187Z
Learning: In the Atmos CLI help messages, when providing examples that include the version number, use the actual version variable (e.g., `version.Version`) instead of placeholders like `<version>`.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
📚 Learning: 2025-09-27T20:50:20.564Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1533
File: pkg/config/load.go:585-637
Timestamp: 2025-09-27T20:50:20.564Z
Learning: In the cloudposse/atmos repository, command merging prioritizes precedence over display ordering. Help commands are displayed lexicographically regardless of internal array order, so the mergeCommandArrays function focuses on ensuring the correct precedence chain (top-level file wins) rather than maintaining specific display order.

Applied to files:

  • website/blog/2025-10-17-version-list-command.md
  • website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md
📚 Learning: 2025-01-09T19:53:29.847Z
Learnt from: Listener430
Repo: cloudposse/atmos PR: 912
File: pkg/config/config.go:91-92
Timestamp: 2025-01-09T19:53:29.847Z
Learning: In the Atmos project, the `core.inject_github_token` configuration is required to be enabled (`true`) by default to support authenticated GitHub requests and help bypass rate limits.

Applied to files:

  • website/blog/2025-10-13-introducing-atmos-auth.md
📚 Learning: 2025-04-25T20:54:19.701Z
Learnt from: mcalhoun
Repo: cloudposse/atmos PR: 963
File: website/docs/core-concepts/projects/configuration/stores.mdx:286-286
Timestamp: 2025-04-25T20:54:19.701Z
Learning: For the AWS SSM Parameter Store implementation in Atmos, support for `read_role_arn` and `write_role_arn` options is essential to enable cross-account access, allowing users to run operations like `terraform plan` in multiple accounts while accessing values across keystores. Azure Key Vault would need similar capabilities for cross-tenant/subscription authentication.

Applied to files:

  • website/blog/2025-10-13-introducing-atmos-auth.md
📚 Learning: 2024-12-02T21:26:32.337Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 808
File: pkg/config/config.go:478-483
Timestamp: 2024-12-02T21:26:32.337Z
Learning: In the 'atmos' project, when reviewing Go code like `pkg/config/config.go`, avoid suggesting file size checks after downloading remote configs if such checks aren't implemented elsewhere in the codebase.

Applied to files:

  • website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx
📚 Learning: 2024-12-03T04:01:16.446Z
Learnt from: aknysh
Repo: cloudposse/atmos PR: 810
File: website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx:0-0
Timestamp: 2024-12-03T04:01:16.446Z
Learning: In the `terraform.output.mdx` documentation file (`website/docs/core-concepts/stacks/yaml-functions/terraform.output.mdx`), the cache invalidation and cache scope behavior for the `!terraform.output` function are already described.

Applied to files:

  • website/blog/2025-01-04-nested-backend-maps-support.mdx
🧬 Code graph analysis (1)
website/src/theme/BlogSidebar/Content/index.tsx (2)
website/src/components/ChangelogTimeline/utils.ts (2)
  • ReleaseGroup (45-48)
  • compareVersionsDescending (65-86)
website/plugins/blog-release-data/index.js (1)
  • releaseMap (15-15)
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Acceptance Tests (windows)
  • GitHub Check: Summary
🔇 Additional comments (49)
website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx (1)

1-9: Frontmatter and release field look good.

The file now properly includes the release: v1.196.0 field and follows the blog post guidelines with YAML frontmatter, actual author, tags, and the <!--truncate--> marker in place. All changes align with the PR's release-aware blog organization.

One small note: tags were narrowed from [enhancement, bugfix] to [enhancement]. Confirm this was intentional—if the change should include both tags, that's a quick fix.

website/blog/2025-11-14-comprehensive-version-management-docs.md (3)

1-9: Verify file extension and release field alignment.

Per the learnings, blog posts should use the .mdx extension, but this file is .md. Additionally, the new release: v1.199.0 field is a great addition that aligns perfectly with the PR's release-sorting objective—this enables the blog-release data plugin to automatically tag posts by release version and group them accordingly. However, before proceeding, confirm:

  1. Is the .md extension intentional, or should this be .mdx?
  2. Is v1.199.0 the correct release version for this post?

113-113: Verify GitHub Discussions URL change.

The GitHub Discussions link has been updated from https://github.com/cloudposse/atmos/discussions to https://github.com/orgs/cloudposse/discussions. Please confirm this URL change is intentional and that the org-level discussions URL is correct and active.


4-7: Front matter reformatting looks good.

The conversion of authors and tags to block list format is clean and consistent with the broader front matter standardization effort described in the PR. The block list format is more maintainable and aligns with YAML conventions.

website/blog/2025-10-21-azure-blob-terraform-state-support.md (3)

1-11: Frontmatter structure looks solid. The normalized YAML format with multiline authors and tags, ISO 8601 date, and new release field all align with the PR's release-aware grouping feature. One quick check: confirm that the unquoted title and sidebar_label (lines 3–4) follow your website's current configuration conventions. If other posts in this PR also drop quotes, you're good; if they retain quotes, this might need consistency.


13-310: Content and structure are well-executed. The post flows naturally from "what's new" through examples, performance benefits, and migration guidance. The <!--truncate--> marker is in the right place; code blocks are properly formatted; links point to the right documentation destinations. Nice touch including the practical "Before/After" performance comparison and the troubleshooting section (lines 174–178).


306-306: CTA link update aligns with the PR's pattern. The Discuss link now points to the org-level discussions URL (/orgs/cloudposse/discussions) instead of the repo-specific path. Consistent with the footer/CTA link updates mentioned in the PR.

website/blog/tags.yml (1)

1-45: Well-structured tag reorganization aligns with changelog grouping objectives.

The consolidation to user-facing and contributor-specific sections is clean and logical. Tag names, labels, and descriptions are consistent and user-centric. The addition of breaking-change and clearer security/deprecation tags are particularly valuable for changelog visibility.

Optional verification: Ensure all blog posts in the changelog use 1–2 tags from this taxonomy and that the filtering system properly enforces tag presence.

website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md (4)

7-8: Tags don't match established pattern.

Tags changed from [feature, cloud-architecture] to [documentation]. Per established guidelines, blog post tags should include one of: feature, enhancement, bugfix, contributors. The current tag documentation doesn't align with this pattern. Verify if this was intentional during normalization or if tags should be restored/adjusted to include a proper category tag.


1-11: File extension should be .mdx.

This blog post uses a .md extension, but the project guideline specifies blog posts should use .mdx format (e.g., website/blog/YYYY-MM-DD-feature-name.mdx). Confirm whether this file should be renamed or if the extension convention varies for this post.


9-10: Release field and frontmatter normalization look good.

The ISO 8601 date format and new release: v1.196.0 field align well with the PR objectives. Author field (osterman) matches established guidelines.


82-82: GitHub Discussions link update is appropriate.

Changing the link from https://github.com/cloudposse/discussions to https://github.com/orgs/cloudposse/discussions correctly routes to the org-level discussions page.

website/blog/2025-10-28-pro-instances-api-query-params.md (2)

1-10: Front matter is properly formatted and author field corrected.

The front matter now correctly uses osterman (the actual contributor's GitHub handle) instead of the generic atmos placeholder. The structure includes all required fields per guidelines: title, authors, tags, date (ISO 8601), and the new release field (v1.196.0) supporting the PR's release-grouping initiative.


12-82: Content structure meets blog guidelines.

The post includes the required truncate marker, clear sections explaining the change, rationale, and impact. Technical details with code examples are well-structured and easy to follow.

website/blog/2025-11-17-enhanced-color-output-and-code-quality.md (2)

4-9: Frontmatter normalization looks solid.

The YAML list format for authors and tags is clean, and the release field addition aligns with the PR's changelog reorganization.

Verify that release: v1.200.0 matches the actual release this post corresponds to—both blog posts share this date and version, so confirm they're intended for the same release.


12-77: Content structure is well-organized.

Clear sections, proper truncate marker, and thoughtful upgrade guidance. Looks good.

website/blog/2025-11-17-comprehensive-terraform-documentation.md (2)

4-8: Frontmatter normalization consistent with file 1.

Authors and tags properly formatted as YAML lists, release field added. Both posts share the same date and version—if intentional, this works fine; if not, verify alignment.

Confirm both v1.200.0-tagged posts are intended for the same release.


11-61: Content updates fit the release narrative.

The restructured sections (documentation completeness, screengrab automation, fixes) align well with the post's title and tag. Truncate marker is in the right place. Looks solid.

website/blog/2025-01-04-nested-backend-maps-support.mdx (2)

3-9: Front matter looks good—author corrected and release field added.

The author field is now correctly set to osterman (matching the PR opener), and the release field (v1.198.0) follows the PR pattern for grouping posts by version. Front matter structure aligns with the blog post requirements.


12-58: Content and structure are solid.

The post follows proper structure: intro, truncate marker, well-organized sections, clear examples, and actionable usage guidance. Formatting, code samples, and explanation are all clear and helpful.

website/blog/2025-10-20-auth-console-web-access.md (1)

5-9: Author verification confirms front matter is properly configured.

The author "osterman" is correctly registered in website/blog/authors.yml with a complete profile (Erik Osterman, Founder @ Cloud Posse). The front matter restructuring and release field addition are both appropriate and properly formatted.

website/blog/2025-10-24-macos-xdg-cli-conventions.md (3)

1-9: Front matter normalization looks solid.

The front matter has been properly normalized: ISO 8601 date format, YAML block list for authors and tags, and the new release: v1.196.0 field added. The author field now correctly uses "osterman" instead of the generic placeholder. Once the author verification passes, this should be good to go.


12-182: Blog post content is well-structured and comprehensive.

The post clearly explains the breaking change, provides migration options for affected users, includes technical justification, and offers actionable guidance. The structure with <!--truncate--> placement and organized sections aligns with blog post conventions.


4-5: Author "osterman" is properly configured in authors.yml.

Verification confirms that "osterman" exists in website/blog/authors.yml with complete profile information (name: Erik Osterman, Founder @ Cloud Posse). The author field has been correctly updated from the generic "atmos" placeholder to the actual GitHub username, following blog post conventions.

website/blog/2025-10-19-chdir-flag.md (1)

3-11: Frontmatter normalization and release metadata look good.

The reformatting to consistent YAML block-style lists, ISO 8601 date format, and addition of the release field align with the PR's goal of enabling release-aware blog grouping. The <!--truncate--> marker is already correctly positioned at line 16.

website/blog/2025-11-08-helpful-errors.mdx (1)

3-12: Frontmatter normalization and release metadata are correctly applied.

The folded multi-line title scalar (lines 3–5), YAML list formatting, ISO 8601 date, and new release field follow the same pattern as other blog posts in this PR. The <!--truncate--> marker addition at line 17 is correctly positioned after the intro.

website/blog/2025-10-13-introducing-atmos-auth.md (1)

3-10: Frontmatter normalization and release metadata are consistent with the PR pattern.

The title, sidebar_label, authors (Benbentwo), tags, date, and new release field follow the same standardization pattern applied across blog posts in this PR. The <!--truncate--> marker is correctly positioned at line 15, after the intro.

website/blog/2025-10-17-version-list-command.md (1)

1-11: Front matter looks good.

The release field is correctly set to v1.95.0, which matches the body examples. The YAML formatting with multi-line authors/tags and ISO 8601 date is consistent with the PR's standardization effort.

website/blog/2025-10-15-provenance-tracking.mdx (2)

1-11: Front matter changes look good.

Release field v1.195.0 added, and formatting normalized to multi-line YAML lists. Consistent with the PR's standardization approach.


194-194: Discussion link updated consistently.

Link points to the org-level discussions, matching other posts in this PR.

website/blog/2025-11-14-env-function-stack-manifest-support.mdx (1)

1-10: Front matter updates are solid.

Release v1.199.0 added, formatting standardized. Good to go.

website/src/components/ChangelogTimeline/index.tsx (1)

17-36: Multi-select filtering and release grouping look good.

State management with arrays for selectedYears and selectedTags integrates well with the new filterBlogPostsMulti and groupBlogPostsByRelease utilities.

website/src/theme/BlogSidebar/Content/index.tsx (2)

135-139: Good defensive handling of global data.

Safe fallback with || {} when releaseMap is unavailable prevents runtime errors.


102-123: GitHub release link is a nice touch.

Good UX—users can jump directly to the release page. The stopPropagation on click prevents toggle interference.

website/blog/2025-10-18-keyring-backends.mdx (1)

270-270: Discussion link updated consistently.

Matches the org-level discussions pattern used across other posts.

website/src/components/ChangelogTimeline/FilterBar.tsx (2)

23-37: Toggle helpers are clean.

Simple and correct array manipulation for multi-select behavior.


40-82: Multi-select pill UI looks good.

Clear structure with year/tag sections and a conditional "Clear all" button. Works well for the new filtering approach.

website/src/components/ChangelogTimeline/styles.module.css (5)

15-91: Filter bar refactor looks solid.

The updated layout structure with wrapper → bar → section → pills provides clear hierarchy. The column layout with aligned sections and refined sizing (smaller fonts, tighter gaps) keeps the UI compact. Clear button styling is appropriate.


128-134: Sticky year marker is a nice UX touch.

Making the year marker stick below the navbar keeps context visible during scrolling. The offset calculation accounts for the navbar height properly.


394-446: Comprehensive tag styling for the new release workflow.

All six new tag types (dx, breaking-change, security, documentation, core, deprecation) plus release/unreleased badges have appropriate color schemes that align with semantic meaning. The release tag hover state provides good interactive feedback.


507-543: Dark mode parity maintained.

Every new tag class has a corresponding dark mode variant with adjusted opacity for proper contrast. Release and unreleased tags use theme variables correctly.


564-610: Mobile responsive adjustments align with new structure.

The updated selectors (.filterBar, .filterSection, .pillGroup, .filterPill) maintain proper mobile behavior with reduced gaps and font sizes. Entry positioning remains correct.

website/src/components/ChangelogTimeline/utils.ts (7)

6-9: FrontMatter interface captures release metadata cleanly.

The optional release field with index signature allows future extensibility while supporting the core use case.


45-48: ReleaseGroup interface is straightforward and purpose-built.

Simple structure for grouping posts by release version. Works well with the grouping function below.


50-86: Version parsing and comparison logic is correct.

The parseVersion regex with $ anchor now enforces exact semver matches as documented. The compareVersionsDescending function correctly handles "unreleased" priority and descending semver ordering. The subtraction at line 82 (versionB[i] - versionA[i]) produces positive values when B > A, achieving descending order.


88-109: Release grouping implementation is clean.

Using a Map for grouping, then sorting the keys with compareVersionsDescending, then mapping to ReleaseGroup objects. The fallback to 'unreleased' at line 95 handles missing release fields gracefully.


225-238: Single-tag filter is straightforward.

Early return for no selection, then standard Array.filter with some() check. Clear and efficient.


240-272: Multi-filter logic correctly implements OR within groups, AND between.

The implementation matches the JSDoc: years are OR'd (line 259 checks includes), tags are OR'd (lines 264-266 use some), and the two filters are AND'd (both checks must pass). This allows users to select "2024 OR 2025" AND "feature OR bugfix" – exactly what you'd expect.


287-298: Tag color mappings expanded appropriately.

The six new cases (dx, breaking-change, security, documentation, core, deprecation) align with the CSS classes added in styles.module.css. Consistent naming convention maintained.

The post was missing a date field in frontmatter which is required
for proper sorting and display in the blog system.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@aknysh aknysh merged commit df49f31 into main Nov 30, 2025
92 of 93 checks passed
@aknysh aknysh deleted the osterman/blog-release-tags branch November 30, 2025 13:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-release Do not create a new release (wait for additional code changes) size/xl Extra large size PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants