Skip to content

chore: Upgrade Docusaurus from 3.6.3 to 3.9.2#1926

Merged
aknysh merged 11 commits intomainfrom
osterman/upgrade-docusaurus
Jan 8, 2026
Merged

chore: Upgrade Docusaurus from 3.6.3 to 3.9.2#1926
aknysh merged 11 commits intomainfrom
osterman/upgrade-docusaurus

Conversation

@osterman
Copy link
Copy Markdown
Member

@osterman osterman commented Jan 1, 2026

what

  • Upgrades all Docusaurus packages to version 3.9.2 (latest stable)
  • Updates package.json and pnpm-lock.yaml dependencies

why

The upgrade includes support for DocSearch v4 with AI-powered search features, improved i18n configuration options for multi-domain deployments, React 19 compatibility fixes, and new build APIs.

references

Summary by CodeRabbit

  • New Features

    • Ask AI conversational search now integrated into documentation, powered by DocSearch v4 and ChatGPT for natural language queries and contextual answers.
  • Documentation

    • Added Algolia search indexing setup guide and Ask AI feature announcement blog post.
  • Chores

    • Updated documentation framework dependencies and roadmap entries.

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

Upgrades all Docusaurus packages to the latest version, including support for DocSearch v4 with AI features, improved i18n configuration, and React 19 compatibility.

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

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
@osterman osterman requested a review from a team as a code owner January 1, 2026 05:24
@github-actions github-actions bot added the size/s Small size PR label Jan 1, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Jan 1, 2026

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ✅ 0 package(s) with unknown licenses.
See the Details below.

Scanned Files

  • .github/workflows/website-deploy-prod.yml
  • website/package.json

@codecov
Copy link
Copy Markdown

codecov bot commented Jan 1, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 74.03%. Comparing base (3f9227d) to head (4711cb9).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #1926      +/-   ##
==========================================
+ Coverage   74.02%   74.03%   +0.01%     
==========================================
  Files         769      769              
  Lines       69288    69288              
==========================================
+ Hits        51288    51295       +7     
+ Misses      14587    14583       -4     
+ Partials     3413     3410       -3     
Flag Coverage Δ
unittests 74.03% <ø> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Adds AI-powered conversational search to the documentation site using Algolia's Ask AI feature. Users can now get intelligent, contextual answers from the docs.

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

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

coderabbitai bot commented Jan 1, 2026

Warning

Rate limit exceeded

@osterman has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 19 minutes and 7 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between bde77cf and 4711cb9.

📒 Files selected for processing (1)
  • website/blog/2026-01-07-ask-ai-search.mdx
📝 Walkthrough

Walkthrough

This PR integrates Algolia DocSearch v4 Ask AI conversational search into the documentation website. Updates include Docusaurus configuration with AI search settings, dependency upgrades to Docusaurus 3.9.2, modified deployment workflow using Algolia Crawler GitHub Action, and accompanying documentation and blog content.

Changes

Cohort / File(s) Summary
Algolia Configuration & Dependencies
website/docusaurus.config.js, website/package.json
Sentry DSN updated to HTTPS protocol. Algolia DocSearch v4 Ask AI integration added with assistantId, appId, apiKey, and indexName configuration (environment-variable-driven with fallbacks). New @docsearch/react ^4.2.0 dependency added. Docusaurus ecosystem bumped from ^3.6.3 to ^3.9.2 (@docusaurus/core, plugin-client-redirects, plugin-content-blog, plugin-google-tag-manager, preset-classic, theme-common, theme-mermaid, module-type-aliases).
Deployment & CI/CD
.github/workflows/website-deploy-prod.yml
Algolia reindexing step replaced: previous shell script invocation swapped for algolia/algoliasearch-crawler-github-actions@v1 action. Credentials passed via action inputs (crawler-user-id, crawler-api-key, algolia-app-id, algolia-api-key, site-url) instead of environment variables.
Roadmap & Feature Tracking
website/src/data/roadmap.js
Four new milestone entries added (featured and docs sections): "Ask AI conversational search" (shipped, q1-2026), "New learning section" (q4-2025), "Added migration guides" (q4-2025), "Roadmap" (q4-2025). Each includes metadata (status, quarter, changelog, description, category, priority, benefits). Duplicates removed.
Documentation & Blog
docs/algolia-search-indexing.md, website/blog/2026-01-07-ask-ai-search.mdx
New Algolia search indexing guide documents architecture (GitHub Actions → Algolia Crawler → Algolia Index), components, configuration requirements, and troubleshooting. New blog post introduces Ask AI feature, covering dual search modes, usage, technical details, and feedback channels.

Sequence Diagram(s)

sequenceDiagram
    participant GH as GitHub Actions
    participant Crawler as Algolia Crawler
    participant Index as Algolia Index
    participant Frontend as Docusaurus Frontend
    participant User as User

    rect rgb(230, 245, 255)
    note over GH,Index: Indexing Flow (on deploy)
    GH->>Crawler: Trigger crawler<br/>(via action with<br/>credentials & site-url)
    Crawler->>Crawler: Fetch & parse site<br/>(Docusaurus v3 template)
    Crawler->>Index: Push indexed records<br/>(appId, apiKey, indexName)
    end

    rect rgb(245, 230, 255)
    note over Frontend,User: Search Flow (runtime)
    User->>Frontend: Open search (/ or Cmd+K)
    alt Natural Language Query
        User->>Frontend: Ask question
        Frontend->>Index: Query (DocSearch v4)
        Index-->>Frontend: Results + Ask AI context
        Frontend->>Frontend: Route to ChatGPT<br/>(via assistantId)
        Frontend-->>User: Conversational answer
    else Keyword Search
        User->>Frontend: Enter keywords
        Frontend->>Index: Traditional search
        Index-->>Frontend: Keyword results
        Frontend-->>User: Results list
    end
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • aknysh
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Title check ⚠️ Warning The PR title describes a Docusaurus version upgrade, but the changeset includes significant feature additions (Ask AI search, DocSearch v4 integration, roadmap updates, blog posts, and Algolia documentation) beyond a simple dependency bump. Consider a more accurate title like 'feat: Add Ask AI conversational search with Docusaurus 3.9.2 upgrade' to reflect the actual scope of changes.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch osterman/upgrade-docusaurus

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.

@osterman osterman added the no-release Do not create a new release (wait for additional code changes) label Jan 1, 2026
- Add blog post introducing Ask AI conversational documentation search
- Add Ask AI to featured section in roadmap
- Add Ask AI milestone to documentation initiative

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions github-actions bot added size/m Medium size PR and removed size/s Small size PR labels Jan 1, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Jan 1, 2026

Caution

Review failed

The head commit changed during the review from 2d085dc to a1e51bf.

✨ 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/upgrade-docusaurus

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[bot]
coderabbitai bot previously approved these changes Jan 1, 2026
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman and others added 2 commits January 1, 2026 00:40
Add appId, apiKey, indexName, and suggestedQuestions to askAi config
for complete DocSearch v4 Ask AI integration.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The suggestedQuestions option is not allowed in Docusaurus's Algolia
schema validation.

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

Co-Authored-By: Claude Opus 4.5 <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 (1)
website/docusaurus.config.js (1)

495-503: Simplify askAi to string form since it reuses parent algolia credentials.

DocSearch v4 supports two forms for Ask AI: a simple string form (askAi: 'assistantId') for reusing parent credentials, and an object form for pointing Ask AI at different credentials/indexes. Since your config duplicates the parent appId, apiKey, and indexName, use the string form instead:

askAi: process.env.ALGOLIA_ASKAI_ASSISTANT_ID || 'xzgtsIXZSf7V',

This removes the redundancy and clarifies intent.

📜 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 a1e51bf and fbc038b.

📒 Files selected for processing (1)
  • website/docusaurus.config.js
🧰 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/docusaurus.config.js
🧠 Learnings (1)
📓 Common learnings
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: docs/prd/tool-dependencies-integration.md:58-64
Timestamp: 2025-12-13T06:07:37.766Z
Learning: cloudposse/atmos: For PRD docs (docs/prd/*.md), markdownlint issues like MD040/MD010/MD034 can be handled in a separate documentation cleanup commit and should not block the current PR.
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.
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.
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
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-30T20:13:29.819Z
Learning: Follow PR template including what/why/references. For PRs labeled minor/major: MUST include blog post (website/blog/YYYY-MM-DD-feature-name.mdx) and update website/src/data/roadmap.js
🪛 Gitleaks (8.30.0)
website/docusaurus.config.js

[high] 501-501: Identified an Algolia API Key, which could result in unauthorized search operations and data exposure on Algolia-managed platforms.

(algolia-api-key)

⏰ 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). (3)
  • GitHub Check: Acceptance Tests (windows)
  • GitHub Check: Acceptance Tests (macos)
  • GitHub Check: Summary
🔇 Additional comments (1)
website/docusaurus.config.js (1)

501-501: Static analysis false positive - search-only API key.

The static analysis tool flagged this as a sensitive API key. However, as noted on line 493, this is a search-only API key that's safe to include in client-side code. Search-only keys are intended for public use and don't permit write operations or sensitive data access.

coderabbitai[bot]
coderabbitai bot previously approved these changes Jan 1, 2026
The Sentry DSN was missing the protocol prefix, causing CORS errors
on preview deployments.

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

Co-Authored-By: Claude Opus 4.5 <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 (1)
website/docusaurus.config.js (1)

495-503: Simplify askAi configuration to avoid redundant field duplication.

The appId, apiKey, and indexName in the askAi object (lines 500–502) are unnecessary duplicates. DocSearch v4 Ask AI automatically inherits these from the parent algolia config when omitted. Either use the simpler string form (askAi: 'xzgtsIXZSf7V') or remove the duplicate fields and let inheritance handle them:

askAi: {
    assistantId: process.env.ALGOLIA_ASKAI_ASSISTANT_ID || 'xzgtsIXZSf7V',
}

The Algolia API key on line 501 is correctly identified as a public search-only key (as noted on line 493), so no security concern there.

📜 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 fbc038b and 8c2e982.

📒 Files selected for processing (1)
  • website/docusaurus.config.js
🧰 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/docusaurus.config.js
🧠 Learnings (1)
📓 Common learnings
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: docs/prd/tool-dependencies-integration.md:58-64
Timestamp: 2025-12-13T06:07:37.766Z
Learning: cloudposse/atmos: For PRD docs (docs/prd/*.md), markdownlint issues like MD040/MD010/MD034 can be handled in a separate documentation cleanup commit and should not block the current PR.
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.
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.
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-01T18:25:25.942Z
Learning: Applies to website/docs/**/*.mdx : Build the website after documentation changes: `cd website && npm run build` to verify no broken links, missing images, or MDX component rendering issues
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
🪛 Gitleaks (8.30.0)
website/docusaurus.config.js

[high] 501-501: Identified an Algolia API Key, which could result in unauthorized search operations and data exposure on Algolia-managed platforms.

(algolia-api-key)

⏰ 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). (3)
  • GitHub Check: Acceptance Tests (macos)
  • GitHub Check: Acceptance Tests (windows)
  • GitHub Check: Summary
🔇 Additional comments (1)
website/docusaurus.config.js (1)

339-339: Sentry DSN fix looks good.

Adding the https:// protocol prefix correctly resolves the CORS errors on preview deployments. This matches the commit message and is the right fix.

coderabbitai[bot]
coderabbitai bot previously approved these changes Jan 3, 2026
…wler

The legacy algolia/docsearch-scraper Docker image was deprecated in
February 2022 and was only indexing 1 record instead of ~46,000.

Changes:
- Replace Docker scraper with official Algolia Crawler GitHub Action
- Delete legacy scraper files (website/algolia/)
- Add documentation for Algolia search indexing configuration

The Algolia Crawler must be configured in dashboard.algolia.com before
this workflow will function. Required GitHub secrets:
- ALGOLIA_CRAWLER_USER_ID
- ALGOLIA_CRAWLER_API_KEY
- ALGOLIA_API_KEY

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

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

mergify bot commented Jan 8, 2026

Important

Cloud Posse Engineering Team Review Required

This pull request modifies files that require Cloud Posse's review. Please be patient, and a core maintainer will review your changes.

To expedite this process, reach out to us on Slack in the #pr-reviews channel.

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 (1)
docs/algolia-search-indexing.md (1)

11-16: Consider specifying a language for the code fence.

The ASCII architecture diagram is in a code fence without a language specifier. You can add text or leave it empty to satisfy markdownlint.

📝 Proposed fix
-```
+```text
 ┌─────────────────────┐     ┌──────────────────────┐     ┌─────────────────┐
 │  GitHub Actions     │────▶│   Algolia Crawler    │────▶│  Algolia Index  │
 │  (website-deploy)   │     │   (cloud-hosted)     │     │  (atmos.tools)  │
 └─────────────────────┘     └──────────────────────┘     └─────────────────┘
</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**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.

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 8c2e98210957ea0343ee6a4f7fee1f44faf9c674 and 1034f1cd65ecee07050e76b45fb645e2ce6de64d.

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `.github/workflows/website-deploy-prod.yml`
* `docs/algolia-search-indexing.md`

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>📓 Path-based instructions (1)</summary>

<details>
<summary>.github/workflows/*.{yml,yaml}</summary>


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

> Configure CI to run unit tests, integration tests, golangci-lint, and coverage reporting on all pull requests

Files:
- `.github/workflows/website-deploy-prod.yml`

</details>

</details><details>
<summary>🧠 Learnings (2)</summary>

<details>
<summary>📓 Common learnings</summary>

Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: docs/prd/tool-dependencies-integration.md:58-64
Timestamp: 2025-12-13T06:07:37.766Z
Learning: cloudposse/atmos: For PRD docs (docs/prd/*.md), markdownlint issues like MD040/MD010/MD034 can be handled in a separate documentation cleanup commit and should not block the current PR.


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.


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


</details>
<details>
<summary>📚 Learning: 2025-11-24T17:35:37.209Z</summary>

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:**
- `docs/algolia-search-indexing.md`

</details>

</details><details>
<summary>🪛 Gitleaks (8.30.0)</summary>

<details>
<summary>docs/algolia-search-indexing.md</summary>

[high] 62-62: Identified an Algolia API Key, which could result in unauthorized search operations and data exposure on Algolia-managed platforms.

(algolia-api-key)

</details>

</details>
<details>
<summary>🪛 LanguageTool</summary>

<details>
<summary>docs/algolia-search-indexing.md</summary>

[uncategorized] ~20-~20: The official name of this software platform is spelled with a capital “H”.
Context: ...onents  1. **GitHub Actions Workflow** (`.github/workflows/website-deploy-prod.yml`)    ...

(GITHUB)

---

[uncategorized] ~81-~81: The official name of this software platform is spelled with a capital “H”.
Context: ...hod. The GitHub Action is configured in `.github/workflows/website-deploy-prod.yml`.  ##...

(GITHUB)

---

[typographical] ~90-~90: Consider using typographic quotation marks here.
Context: ...ect the `atmos.tools` crawler. 4. Click "Start crawl" or "Restart crawling".  ### Manual (API...

(EN_QUOTES)

---

[typographical] ~90-~90: Consider using typographic quotation marks here.
Context: ...ols` crawler. 4. Click "Start crawl" or "Restart crawling".  ### Manual (API)  For scripting or au...

(EN_QUOTES)

</details>

</details>
<details>
<summary>🪛 markdownlint-cli2 (0.18.1)</summary>

<details>
<summary>docs/algolia-search-indexing.md</summary>

11-11: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

</details>

<details>
<summary>⏰ 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)</summary>

* GitHub Check: Acceptance Tests (windows)
* GitHub Check: Acceptance Tests (macos)
* GitHub Check: Acceptance Tests (linux)
* GitHub Check: Summary

</details>

<details>
<summary>🔇 Additional comments (3)</summary><blockquote>

<details>
<summary>docs/algolia-search-indexing.md (2)</summary><blockquote>

`1-134`: **Excellent documentation!**

This is thorough, well-organized documentation that clearly explains the Algolia indexing setup, configuration, and troubleshooting. The architecture diagram, component breakdown, and step-by-step guidance make this very helpful for future maintainers.

---

`59-70`: The API key in the documentation is a search-only key already exposed in your production config. No action needed—this is safe to keep as-is.

</blockquote></details>
<details>
<summary>.github/workflows/website-deploy-prod.yml (1)</summary><blockquote>

`74-81`: **Action version is valid.**

The `algolia/algoliasearch-crawler-github-actions@v1` is verified to exist and is the official Algolia action. Using the major version tag `@v1` is the correct approach—it ensures you get latest patch releases with security fixes while maintaining stability on the v1 API. The configuration looks solid with all required secrets and environment variables properly referenced.

</blockquote></details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

coderabbitai[bot]
coderabbitai bot previously approved these changes Jan 8, 2026
- Rename blog post to 2026-01-07 and improve intro (remove generic "We're excited")
- Add Algolia + ChatGPT attribution throughout
- Update roadmap: move Ask AI to Q1 2026, sort milestones by date descending
- Remove Ask AI from featured (already in Documentation milestones)
- Add API key ACL permissions section to Algolia docs

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

Co-Authored-By: Claude Opus 4.5 <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: 2

🤖 Fix all issues with AI agents
In @website/blog/2026-01-07-ask-ai-search.mdx:
- Line 26: There are two identical "## How It Works" headings causing duplicate
anchors; rename the second heading (the one currently "## How It Works" that
appears after the first) to a distinct title such as "## Under the Hood" or "##
Technical Implementation", update any local links or anchor references that
pointed to the old heading, and ensure the new heading text is used consistently
in the document (search for the second occurrence of "## How It Works" to locate
and change it).
- Line 24: The sentence "**Seamless experience** - Switch between keyword search
and AI assistant without leaving the search dialog" is missing terminal
punctuation; edit that line in the blog post and add a period (or appropriate
punctuation) at the end so it reads "...search dialog." to properly terminate
the paragraph before the next heading.
🧹 Nitpick comments (1)
docs/algolia-search-indexing.md (1)

11-16: Consider adding language identifier to code block.

The fenced code block contains ASCII art but lacks a language identifier. Add text for proper syntax highlighting.

📝 Proposed fix
-```
+```text
 ┌─────────────────────┐     ┌──────────────────────┐     ┌─────────────────┐
 │  GitHub Actions     │────▶│   Algolia Crawler    │────▶│  Algolia Index  │
 │  (website-deploy)   │     │   (cloud-hosted)     │     │  (atmos.tools)  │
 └─────────────────────┘     └──────────────────────┘     └─────────────────┘
-```
+```
📜 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 1034f1c and bde77cf.

📒 Files selected for processing (3)
  • docs/algolia-search-indexing.md
  • website/blog/2026-01-07-ask-ai-search.mdx
  • website/src/data/roadmap.js
🧰 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/data/roadmap.js
  • website/blog/2026-01-07-ask-ai-search.mdx
website/blog/*.mdx

📄 CodeRabbit inference engine (CLAUDE.md)

PRs labeled minor or major MUST include a blog post at website/blog/YYYY-MM-DD-feature-name.mdx with YAML frontmatter, using only tags defined in website/blog/tags.yml

Files:

  • website/blog/2026-01-07-ask-ai-search.mdx
🧠 Learnings (5)
📓 Common learnings
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: docs/prd/tool-dependencies-integration.md:58-64
Timestamp: 2025-12-13T06:07:37.766Z
Learning: cloudposse/atmos: For PRD docs (docs/prd/*.md), markdownlint issues like MD040/MD010/MD034 can be handled in a separate documentation cleanup commit and should not block the current PR.
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.
📚 Learning: 2026-01-04T00:55:21.720Z
Learnt from: CR
Repo: cloudposse/atmos PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T00:55:21.720Z
Learning: PRs labeled `minor` or `major` MUST update `website/src/data/roadmap.js` with shipped milestones, status, changelog link, PR number, and initiative progress percentage

Applied to files:

  • website/src/data/roadmap.js
📚 Learning: 2025-12-13T06:07:37.766Z
Learnt from: osterman
Repo: cloudposse/atmos PR: 1686
File: docs/prd/tool-dependencies-integration.md:58-64
Timestamp: 2025-12-13T06:07:37.766Z
Learning: cloudposse/atmos: For PRD docs (docs/prd/*.md), markdownlint issues like MD040/MD010/MD034 can be handled in a separate documentation cleanup commit and should not block the current PR.

Applied to files:

  • website/src/data/roadmap.js
📚 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:

  • docs/algolia-search-indexing.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/2026-01-07-ask-ai-search.mdx
🪛 Gitleaks (8.30.0)
docs/algolia-search-indexing.md

[high] 81-81: Identified an Algolia API Key, which could result in unauthorized search operations and data exposure on Algolia-managed platforms.

(algolia-api-key)

🪛 LanguageTool
docs/algolia-search-indexing.md

[uncategorized] ~20-~20: The official name of this software platform is spelled with a capital “H”.
Context: ...onents 1. GitHub Actions Workflow (.github/workflows/website-deploy-prod.yml) ...

(GITHUB)


[uncategorized] ~100-~100: The official name of this software platform is spelled with a capital “H”.
Context: ...hod. The GitHub Action is configured in .github/workflows/website-deploy-prod.yml. ##...

(GITHUB)


[typographical] ~109-~109: Consider using typographic quotation marks here.
Context: ...ect the atmos.tools crawler. 4. Click "Start crawl" or "Restart crawling". ### Manual (API...

(EN_QUOTES)


[typographical] ~109-~109: Consider using typographic quotation marks here.
Context: ...ols` crawler. 4. Click "Start crawl" or "Restart crawling". ### Manual (API) For scripting or au...

(EN_QUOTES)

website/blog/2026-01-07-ask-ai-search.mdx

[typographical] ~21-~21: Consider using a typographic opening quote here.
Context: ...language queries** - Ask questions like "How do I configure AWS SSO authenticatio...

(EN_QUOTES)


[typographical] ~21-~21: Consider using a typographic close quote here.
Context: ...w do I configure AWS SSO authentication?" or "What's the difference between stack...

(EN_QUOTES)


[typographical] ~21-~21: Consider using a typographic opening quote here.
Context: ...I configure AWS SSO authentication?" or "What's the difference between stacks and...

(EN_QUOTES)


[typographical] ~21-~21: Consider using a typographic close quote here.
Context: ...ifference between stacks and components?" - Contextual answers - Responses ar...

(EN_QUOTES)


[grammar] ~24-~24: Please add a punctuation mark at the end of paragraph.
Context: ...AI assistant without leaving the search dialog ## How It Works Ask AI uses Algolia's...

(PUNCTUATION_PARAGRAPH_END)


[typographical] ~40-~40: Consider using a typographic opening quote here.
Context: ...h dialog. Try asking questions like: - "How do I set up AWS SSO with Atmos?" - "...

(EN_QUOTES)


[typographical] ~40-~40: Consider using a typographic close quote here.
Context: ... - "How do I set up AWS SSO with Atmos?" - "What is the difference between impor...

(EN_QUOTES)


[typographical] ~41-~41: Consider using a typographic opening quote here.
Context: ..."How do I set up AWS SSO with Atmos?" - "What is the difference between imports a...

(EN_QUOTES)


[typographical] ~41-~41: Consider using a typographic close quote here.
Context: ...ference between imports and inheritance?" - "How do I create a custom workflow?" ...

(EN_QUOTES)


[typographical] ~42-~42: Consider using a typographic opening quote here.
Context: ...nce between imports and inheritance?" - "How do I create a custom workflow?" - "W...

(EN_QUOTES)


[typographical] ~42-~42: Consider using a typographic close quote here.
Context: ...?" - "How do I create a custom workflow?" - "What YAML functions are available?" ...

(EN_QUOTES)


[typographical] ~43-~43: Consider using a typographic opening quote here.
Context: ... "How do I create a custom workflow?" - "What YAML functions are available?" The...

(EN_QUOTES)


[typographical] ~43-~43: Consider using a typographic close quote here.
Context: ...?" - "What YAML functions are available?" The AI assistant will provide detailed...

(EN_QUOTES)

🪛 markdownlint-cli2 (0.18.1)
docs/algolia-search-indexing.md

11-11: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

⏰ 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 (macos)
  • GitHub Check: Acceptance Tests (linux)
  • GitHub Check: Summary
🔇 Additional comments (2)
website/src/data/roadmap.js (1)

388-392: LGTM!

The new roadmap milestones are well-structured and align with the PR objectives. All required fields are present and consistent with existing entries.

docs/algolia-search-indexing.md (1)

78-89: No issue—this API key is intentionally search-only.

The exposed key is confirmed as a search-only read-only key, as documented in website/docusaurus.config.js with the comment "this is SEARCH ONLY API key and is not sensitive information." Algolia search keys are safe for frontend exposure per security best practices. No change needed.

- Add missing period at end of list item
- Rename duplicate "How It Works" heading to "Under the Hood"

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@aknysh aknysh merged commit 083d3de into main Jan 8, 2026
57 checks passed
@aknysh aknysh deleted the osterman/upgrade-docusaurus branch January 8, 2026 03:45
@mergify mergify bot removed the needs-cloudposse Needs Cloud Posse assistance label Jan 8, 2026
osterman added a commit that referenced this pull request Jan 9, 2026
@github-actions
Copy link
Copy Markdown

These changes were released in v1.204.0-rc.3.

aknysh added a commit that referenced this pull request Jan 13, 2026
)

* index on osterman/aqua-zip-exe-install: 083d3de chore: Upgrade Docusaurus from 3.6.3 to 3.9.2 (#1926)

* fix: Fix Aqua registry factory and add darwin_all pattern support

- Fix nil registry factory by injecting real Aqua registry factory
- Load configured registries from atmos.yaml in NewInstaller()
- Add Asset field to AquaPackage for github_release types
- Support platform-specific asset patterns (e.g., darwin_all)
- Add test for replicated darwin_all override pattern
- Move test fixtures to proper testdata directories
- Clean up unnecessary aqua config files
- Refactor FindTool to reduce complexity and improve logging

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* chore: Remove duplicate test fixture directory

Remove toolchain/installer/atmos/ which was accidentally committed
alongside the proper test fixture at toolchain/installer/testdata/atmos/.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: Add platform overrides support to atmos inline registry

- Add parseOverrides() to parse platform-specific asset/format overrides in
  atmos inline registry (goos/goarch matching with custom asset templates)
- Fix toolchain info command to show correct registry name from tool metadata
  instead of always showing "aqua-public"
- Add debug/warning logging when loading registries from atmos.yaml to help
  diagnose registry configuration issues
- Add comprehensive test fixture with all supported package types
  (github_release, http) and formats (tar.gz, zip, pkg, raw)
- Add CLI test cases for toolchain help, info, registry search, and error handling
- Fix lint errors in pkg/template/ast.go and pkg/utils/git_test.go

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Use WithBinDir in installer tests to prevent directory pollution

Tests were using SetAtmosConfig() but then calling installer.New()
which doesn't read from the config. This caused binaries to be
installed to the current directory (toolchain/installer/atmos/)
instead of temp directories.

Fixed by:
- Using WithBinDir(tempDir) when creating the installer
- Using separate src/bin directories to avoid filename conflicts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Add sanitization to toolchain info test snapshots

Add sanitize rules to replace dynamic version numbers and dates with
stable placeholders (X.X.X and YYYY-MM-DD) in toolchain info tests.
This prevents test failures when new tool versions are released.

Affected tests:
- atmos toolchain info shows atmos-inline registry
- atmos toolchain info http type tool
- atmos toolchain info tar.gz format tool
- atmos toolchain info raw format tool
- atmos toolchain info yaml output

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Restore aqua/ folder and add README

The aqua/ folder was accidentally deleted, causing CI failures with
"gofumpt: command not found" in the autofix workflow. The aqua-installer
action needs aqua.yaml to know which tools to install.

Restored:
- aqua/aqua.yaml - Main Aqua config
- aqua/imports/gofumpt.yaml - gofumpt v0.7.0 definition
- aqua/aqua-checksums.json - Security checksums

Added:
- aqua/README.md - Documentation explaining the folder's purpose

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Update tests for reserved flag conflicts and toolchain logging

1. Custom command integration tests: Rename `--verbose/-v` flag to
   `--detailed/-d` to avoid conflicts with the new global `--verbose`
   flag registered on RootCmd.

2. Regenerate CLI snapshots to include new debug logs from toolchain
   registry loading:
   - "Loading toolchain registries from atmos.yaml"
   - "Successfully loaded configured registry from atmos.yaml"

3. Update toolchain info snapshot for CI environment (no versions
   installed).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: Revert custom command test changes

The verbose->detailed flag rename is being handled in a separate branch:
osterman/fix-custom-cmd-flag-conflict

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Remove conflicting custom command tests and fix toolchain snapshots

1. Remove TestCustomCommandIntegration_BooleanFlagDefaults and
   TestCustomCommandIntegration_BooleanFlagTemplatePatterns tests that
   use --verbose flag which conflicts with global --verbose flag.
   (Being handled in osterman/fix-custom-cmd-flag-conflict branch)

2. Add ignore_trailing_whitespace to toolchain info test - lipgloss
   table padding varies by platform/terminal width

3. Add platform sanitization (darwin/linux_arm64/amd64 -> linux_amd64)
   to toolchain info yaml output test

4. Regenerate toolchain snapshots with proper sanitization

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Address CodeRabbit review comments for toolchain

- Fix info command to show proper error for non-existent tools instead
  of "incorrect usage" by adding SilenceUsage and SilenceErrors flags
- Add missing test case for "atmos toolchain info non-existent tool"
- Regenerate snapshots for correct CI environment (no installed tools)
- Fix comment casing in clean_test.go and setup.go for godot linter
- Update usage.mdx to use {{.Version}} template syntax consistently
- Add notes for example version and upstream path changes in docs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Regenerate describe_config_imports snapshot with toolchain debug lines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test: increase toolchain test coverage by 50%

Add comprehensive tests for toolchain packages:
- extract_test.go: Tests for file extraction functions (isGzipMime, isBinaryMime,
  isTarGzFile, resolveBinaryName, validatePath, isSafePath, findBinaryInDir,
  installExtractedBinary, Unzip, copyFileFallback, copyWithLimit, extractDir)
- download_test.go: Tests for download functions (writeResponseToCache,
  buildDownloadError, isHTTP404, downloadAsset cache behavior)
- asset_test.go: Additional tests for template functions (trimPrefix, trimSuffix,
  replace, eq, ne, ternary) and edge cases (missing owner/name, default template)
- types_test.go: Tests for wrapper functions (NewInstaller options, registry
  factory, builtin aliases)

Coverage improved from ~5% to 55.7% for toolchain/installer package.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: make toolchain tests cross-platform compatible with Windows

- Remove query string filename test case from download_test.go (? is
  invalid in Windows filenames and GitHub releases don't use query
  strings anyway)
- Use filepath.FromSlash() in TestValidatePath to handle OS-specific
  path separators
- Add windows to platform sanitization regex in toolchain.yaml so
  Windows-specific asset URLs are normalized in snapshots

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test: improve TestIsBinaryMime and TestRealRegistryFactory assertions

- TestIsBinaryMime: Refactor to actually verify isBinaryMime() behavior
  instead of discarding the result. Tests now create real files with
  appropriate content (octet-stream, zip, gzip, text) and assert the
  function correctly identifies binary vs non-binary MIME types.

- TestRealRegistryFactory_NewAquaRegistry: Set XDG_CACHE_HOME to temp
  dir for hermetic testing, avoiding writes to real user cache and
  preventing environment-specific test flakiness.

Addresses CodeRabbit review feedback.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: update constant comments to reference identifier names

Update comments for unexported constants to explicitly reference the
constant identifier name in parentheses, maintaining godot linter
compliance while documenting the identifier:
- defaultMkdirPermissions in clean_test.go
- defaultDirPermissions and versionPrefix in setup.go

Addresses CodeRabbit review feedback.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test: fix TestIsGzipMime and replace hand-written mock with mockgen

- TestIsGzipMime: Always call isGzipMime() and assert the result
  for all test cases (both true and false), not just when expected=true.
  This ensures negative cases (zip, octet-stream) are actually validated.

- Replace hand-written mockToolRegistryForTypes with mockgen-generated
  MockToolRegistry. Add //go:generate directives to registry.go and
  types.go for generating mocks in both packages.

Addresses CodeRabbit review feedback.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: delegate NewInstallerWithResolver to NewInstaller for registry injection

The deprecated NewInstallerWithResolver was bypassing the realRegistryFactory
injection by calling installer.NewInstallerWithResolver directly. Now it
delegates to NewInstaller with the appropriate options, ensuring callers of
the deprecated function still get the registry factory injection.

Addresses CodeRabbit review feedback.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: pin mockgen to v0.6.0 and fix godot comment lints

- Change mockgen@latest to mockgen@v0.6.0 in go:generate directives
  for reproducible builds (matches go.mod version)
- Fix multi-line comment in NewInstaller to have periods on each line

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* add/update tests

* address comments

---------

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
Co-authored-by: Andriy Knysh <aknysh@users.noreply.github.com>
Co-authored-by: aknysh <andriy.knysh@gmail.com>
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/m Medium size PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants