docs: sync from help-docs (source of truth) - #1083
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe documentation site now has page metadata across major sections, revised branding and links, expanded getting-started content, updated MkDocs navigation, and new responsive styling. ChangesDocumentation refresh
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
Suggested labels: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
|
This PR doesn't fully meet our contributing guidelines and PR template. What needs to be fixed:
Please edit this PR description to address the above within 2 hours, or it will be automatically closed. If you believe this was flagged incorrectly, please let a maintainer know. |
d1dec56 to
c824ebc
Compare
c824ebc to
b18bbf3
Compare
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.
Tip: disable this comment in your organization's Code Review settings.
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/docs/data-engineering/tools/dbt-tools.md`:
- Around line 91-92: Update the generated Description value in the documented
dbt output to remain on a single line, keeping the closing quote on the same
line; only represent a newline with an explicit escape if that is the tool’s
actual output.
In `@docs/docs/index.md`:
- Line 28: Change the six documentation card headings, including “Quickstart”
and the headings at the referenced locations, from level-three (`###`) to
level-two (`##`) headings while preserving their existing text and links.
In `@docs/mkdocs.yml`:
- Around line 69-191: Update the Altimate MCP navigation section in the mkdocs
nav configuration so every datamates/... target points to an existing
documentation file under docs/docs/datamates, adding the missing target files as
needed, or remove entries whose pages do not exist. Ensure no broken datamates
navigation links remain.
- Line 4: Update docs/docs/llms.txt entries to remove the outdated /code/ prefix
so every link matches the root-relative routing established by site_url in
docs/mkdocs.yml and docs/docs/index.md. Modify docs/docs/llms.txt lines 4-42;
docs/mkdocs.yml lines 4-4 and docs/docs/index.md lines 16-16 require no direct
changes and serve as routing references.
- Around line 66-68: Restore valid callable Material emoji settings under
pymdownx.emoji by replacing the null emoji_index and emoji_generator values with
the original Material extensions or equivalent !!python/name callables. Ensure
Material emoji shortcodes render successfully during MkDocs builds.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 18bb33a8-8d51-4469-8ec8-9ccd300edd56
📒 Files selected for processing (75)
docs/docs/configure/acp.mddocs/docs/configure/agents.mddocs/docs/configure/bedrock-custom-endpoints.mddocs/docs/configure/commands.mddocs/docs/configure/config.mddocs/docs/configure/context-management.mddocs/docs/configure/custom-tools.mddocs/docs/configure/formatters.mddocs/docs/configure/governance.mddocs/docs/configure/index.mddocs/docs/configure/keybinds.mddocs/docs/configure/lsp.mddocs/docs/configure/mcp-servers.mddocs/docs/configure/models.mddocs/docs/configure/permissions.mddocs/docs/configure/providers.mddocs/docs/configure/rules.mddocs/docs/configure/skills.mddocs/docs/configure/themes.mddocs/docs/configure/tools.mddocs/docs/configure/tools/config.mddocs/docs/configure/tools/core-tools.mddocs/docs/configure/tools/custom.mddocs/docs/configure/tools/index.mddocs/docs/configure/trace.mddocs/docs/configure/warehouses.mddocs/docs/data-engineering/agent-modes.mddocs/docs/data-engineering/guides/clickhouse.mddocs/docs/data-engineering/guides/cost-optimization.mddocs/docs/data-engineering/guides/data-parity.mddocs/docs/data-engineering/guides/index.mddocs/docs/data-engineering/guides/migration.mddocs/docs/data-engineering/guides/using-with-claude-code.mddocs/docs/data-engineering/guides/using-with-codex.mddocs/docs/data-engineering/tools/dbt-tools.mddocs/docs/data-engineering/tools/finops-tools.mddocs/docs/data-engineering/tools/index.mddocs/docs/data-engineering/tools/lineage-tools.mddocs/docs/data-engineering/tools/memory-tools.mddocs/docs/data-engineering/tools/schema-tools.mddocs/docs/data-engineering/tools/sql-tools.mddocs/docs/data-engineering/tools/warehouse-tools.mddocs/docs/data-engineering/training/index.mddocs/docs/data-engineering/training/team-deployment.mddocs/docs/data-engineering/validators.mddocs/docs/develop/ecosystem.mddocs/docs/develop/plugins.mddocs/docs/develop/sdk.mddocs/docs/develop/server.mddocs/docs/drivers.mddocs/docs/examples/index.mddocs/docs/getting-started.mddocs/docs/getting-started/index.mddocs/docs/getting-started/quickstart-new.mddocs/docs/getting-started/quickstart.mddocs/docs/index.mddocs/docs/llms.txtdocs/docs/quickstart.mddocs/docs/reference/changelog.mddocs/docs/reference/network.mddocs/docs/reference/security-faq.mddocs/docs/reference/telemetry.mddocs/docs/reference/troubleshooting.mddocs/docs/reference/windows-wsl.mddocs/docs/usage/check.mddocs/docs/usage/ci-headless.mddocs/docs/usage/cli.mddocs/docs/usage/dbt-pr-review-corpus.mddocs/docs/usage/dbt-pr-review.mddocs/docs/usage/github.mddocs/docs/usage/gitlab.mddocs/docs/usage/ide.mddocs/docs/usage/tui.mddocs/docs/usage/web.mddocs/mkdocs.yml
| <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2 3 14h7l-1 8 10-12h-7l1-8z"/></svg> | ||
| </div> | ||
|
|
||
| ### [Quickstart](/getting-started/) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use level-two headings for the documentation cards.
Each card heading follows the page level-one heading. Level-three headings skip level two and create an invalid heading outline. Change all six card headings from ### to ##.
Proposed fix
-### [Quickstart](/getting-started/)
+## [Quickstart](/getting-started/)
-### [Tools](/configure/tools/)
+## [Tools](/configure/tools/)
-### [Interfaces](/usage/tui/)
+## [Interfaces](/usage/tui/)
-### [Configure](/configure/)
+## [Configure](/configure/)
-### [Governance](/configure/governance/)
+## [Governance](/configure/governance/)
-### [Develop & Extend](/develop/sdk/)
+## [Develop & Extend](/develop/sdk/)Also applies to: 41-41, 54-54, 67-67, 80-80, 93-93
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)
[warning] 28-28: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/index.md` at line 28, Change the six documentation card headings,
including “Quickstart” and the headings at the referenced locations, from
level-three (`###`) to level-two (`##`) headings while preserving their existing
text and links.
Source: Linters/SAST tools
| site_description: The open-source data engineering harness. 100+ tools for building, validating, optimizing, and shipping data products. | ||
| site_description: The open-source data engineering harness. 100+ tools for building, | ||
| validating, optimizing, and shipping data products. | ||
| site_url: https://docs.altimate.sh |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
origin="${DOCS_ORIGIN:-https://docs.altimate.sh}"
for path in /quickstart/ /code/quickstart/; do
printf '%s%s -> ' "$origin" "$path"
curl -sS -o /dev/null -w '%{http_code}\n' -L "$origin$path"
doneRepository: AltimateAI/altimate-code
Length of output: 255
Remove the outdated /code/ route set.
docs/mkdocs.yml#L4-L4 and docs/docs/index.md#L16-L16 use root-relative docs.altimate.sh paths. docs/docs/llms.txt still points every link under /code/, which does not resolve at the deployed docs origin. Update docs/docs/llms.txt to remove the /code/ prefix or regenerate it from the canonical routing policy.
📍 Affects 3 files
docs/mkdocs.yml#L4-L4(this comment)docs/docs/index.md#L16-L16docs/docs/llms.txt#L4-L42
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/mkdocs.yml` at line 4, Update docs/docs/llms.txt entries to remove the
outdated /code/ prefix so every link matches the root-relative routing
established by site_url in docs/mkdocs.yml and docs/docs/index.md. Modify
docs/docs/llms.txt lines 4-42; docs/mkdocs.yml lines 4-4 and docs/docs/index.md
lines 16-16 require no direct changes and serve as routing references.
| - pymdownx.emoji: | ||
| emoji_index: null | ||
| emoji_generator: null |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Configured Markdown extension:"
sed -n '57,68p' docs/mkdocs.yml
echo "Potential emoji shortcodes:"
rg -n ':[A-Za-z0-9_+-]+:' docs/docs || true
echo "Installed MkDocs and PyMdown dependency declarations:"
fd -HI '^(requirements.*\.(txt|in)|pyproject\.toml|poetry\.lock|uv\.lock)$' . \
-x rg -n 'mkdocs|pymdown|material' {}Repository: AltimateAI/altimate-code
Length of output: 4332
🌐 Web query:
pymdownx.emoji emoji_index null emoji_generator null MkDocs extension documentation
💡 Result:
In the context of the PyMdown Extensions Emoji extension used with MkDocs, emoji_index and emoji_generator are configuration parameters that define how emojis are retrieved and rendered [1][2]. Because MkDocs uses YAML for configuration, these parameters cannot be set with simple string names; they must be provided as Python object references using the!!python/name: prefix [1][3]. Parameter Overview: 1. emoji_index: This parameter specifies the function that provides the mapping (index) between shortcodes (e.g.,:smile:) and emoji data [1][2]. The extension comes with default indexes like emojione, gemoji, and twemoji [1][4]. 2. emoji_generator: This parameter specifies the function that converts the emoji data into the final output format (e.g., an HTML image tag or Unicode character) [1][2]. Configuration in MkDocs: To configure these in your mkdocs.yml file, you use the!!python/name: prefix to point to the specific Python function [1][5]. For example, when using the Material for MkDocs theme, the configuration is typically set as follows [6][5]: markdown_extensions: - pymdownx.emoji: emoji_index:!!python/name:material.extensions.emoji.twemoji emoji_generator:!!python/name:material.extensions.emoji.to_svg In this example,!!python/name: tells the YAML parser to import the specified Python function rather than treating it as a literal string [1][7]. You can substitute these references with custom modules or other built-in options provided by the PyMdown Extensions package (e.g.,!!python/name:pymdownx.emoji.to_png) depending on your requirements [1][3].
Citations:
- 1: https://facelessuser.github.io/pymdown-extensions/extensions/emoji/
- 2: https://github.com/wohugb/pymdown-extensions/blob/master/docs/src/markdown/extensions/emoji.md
- 3: https://facelessuser.github.io/pymdown-extensions/faq/
- 4: https://wohugb.github.io/pymdown-extensions/extensions/emoji/
- 5: https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/
- 6: https://github.com/squidfunk/mkdocs-material/blob/4c0004e1/docs/reference/icons-emojis.md
- 7: Adding custom icons in custom theme extending Material for MkDocs squidfunk/mkdocs-material#7371
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
try:
import pymdownx.emoji
import inspect
settings = getattr(pymdownx.emoji, 'DEFAULT_SETTINGS', None)
print('pymdownx.emoji available')
print('DEFAULT_SETTINGS:', settings)
for name in ('emoji_index', 'emoji_generator'):
if settings:
print(name, 'default type:', type(settings.get(name)).__name__, 'default:', repr(settings.get(name)))
except Exception as e:
print('pymdownx.emoji unavailable:', repr(e))
try:
import pymdownx.emoji
ext = pymdownx.emoji.EmojiExtension()
config = {'emoji_index': None, 'emoji_generator': None}
ret = ext.on_config(config) or config
print('on_config returns', type(ret).__name__ if ret is not None else None)
print('emoji_index after config:', type(ret.get('emoji_index')).__name__ if 'emoji_index' in ret else 'absent', repr(ret.get('emoji_index')))
print('emoji_generator after config:', type(ret.get('emoji_generator')).__name__ if 'emoji_generator' in ret else 'absent', repr(ret.get('emoji_generator')))
except Exception as e:
print('configuration test failed:', repr(type(e).__name__ + ': ' + str(e)))
PYRepository: AltimateAI/altimate-code
Length of output: 317
🌐 Web query:
MkDocs Material icons emojis emoji_index null emoji_generator null
💡 Result:
In Material for MkDocs, the configuration settings for emoji_index and emoji_generator within the pymdownx.emoji extension must be set to specific Python functions rather than null. Setting these to null is generally an error caused by misconfiguration or issues with third-party hosting platforms like Read the Docs parsing the YAML file incorrectly [1]. To correctly enable icons and emojis in your mkdocs.yml, you should use the following configuration [2][3][4]: markdown_extensions: - pymdownx.emoji: emoji_index:!!python/name:material.extensions.emoji.twemoji emoji_generator:!!python/name:material.extensions.emoji.to_svg Historical note: If you are using a very old version of Material for MkDocs (prior to version 9.4.0), you may see references to the older materialx.emoji package [5][6]. However, in all modern versions, the logic has been moved into the core theme, and material.extensions.emoji is the required path [5][6][7]. If these values are appearing as null in your build process, verify that your YAML file is not being modified or stripped by your CI/CD environment or hosting provider during the build process [1].
Citations:
- 1: MkDocs builds perfectly locally, but gets stuck on Read the Docs readthedocs/readthedocs.org#7865
- 2: https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/
- 3: https://squidfunk.github.io/mkdocs-material/setup/extensions/
- 4: emoji not being printed/rendered squidfunk/mkdocs-material#7270
- 5: Icons broken on
mastersquidfunk/mkdocs-material#6054 - 6: https://github.com/facelessuser/mkdocs-material-extensions/blob/master/materialx/emoji.py
- 7: https://github.com/squidfunk/mkdocs-material/blob/ae05a534/material/extensions/emoji.py
🌐 Web query:
"def test_emoji_null" "mkdocs-material" "emoji_index" "emoji_generator" "None"
💡 Result:
There is no standard or built-in function named test_emoji_null within the Material for MkDocs codebase [1][2]. The configuration of emojis and icons in Material for MkDocs relies on the pymdownx.emoji extension, which requires two primary components specified in your mkdocs.yml file [3][4]: 1. emoji_index: A callable that returns the dictionary of available emojis/icons (e.g.,!!python/name:material.extensions.emoji.twemoji) [1][3]. 2. emoji_generator: A callable that converts an icon shortcode into an SVG element (e.g.,!!python/name:material.extensions.emoji.to_svg) [1][3]. If you are encountering references to test_emoji_null, it is likely a user-defined function or a placeholder from custom internal testing code, rather than a part of the official Material for MkDocs library or its associated extensions [1][5][2]. For production configurations, you should use the official paths provided in the documentation [3][4]. If you are developing custom emoji logic, ensure your Python code properly imports and utilizes the existing material.extensions.emoji module [1][2].
Citations:
- 1: https://github.com/squidfunk/mkdocs-material/blob/ae05a534/material/extensions/emoji.py
- 2: Adding custom icons in custom theme extending Material for MkDocs squidfunk/mkdocs-material#7371
- 3: https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/
- 4: emoji not being printed/rendered squidfunk/mkdocs-material#7270
- 5: Custom emoji generator causes unnecessary deprecation warning squidfunk/mkdocs-material#7276
Restore the Material emoji generators before release.
emoji_index and emoji_generator are required callable settings for pymdownx.emoji when emoji shortcodes such as :material-cog:{ .lg .middle } are rendered. Setting them to null leaves no valid index or generator for those icons and can break MkDocs builds on pages that use Material emojis. Keep the original Material extensions or replace them with valid !!python/name:... callables.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/mkdocs.yml` around lines 66 - 68, Restore valid callable Material emoji
settings under pymdownx.emoji by replacing the null emoji_index and
emoji_generator values with the original Material extensions or equivalent
!!python/name callables. Ensure Material emoji shortcodes render successfully
during MkDocs builds.
| - attr_list | ||
| - md_in_html | ||
| - pymdownx.emoji: | ||
| emoji_index: null |
There was a problem hiding this comment.
WARNING: pymdownx.emoji index/generator dropped to null — breaks the Material icon shortcodes still used in the docs.
The sync replaced the required !!python/name:material.extensions.emoji.twemoji / to_svg tags with null. Those !!python/name: tags cannot survive a plain YAML parse/reserialize (a likely sync_to_oss.py artifact), but Material for MkDocs needs them to render the :octicons-*: / :material-*: shortcodes that are still present in the synced content (e.g. [:octicons-arrow-right-24: Browse more examples] in docs/docs/getting-started/index.md). With null, those shortcodes either render as literal text (silently — CI's mkdocs build may not catch it) or fail the build outright, depending on the pinned pymdownx version. Restore the tags:
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svgReply with @kilocode-bot fix it to have Kilo Code address this issue.
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Incremental re-review at
Files Reviewed (3 changed + 2 context)
Previous Review Summaries (7 snapshots, latest commit 9f4973e)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 9f4973e)Status: No Issues Found | Recommendation: Merge Incremental re-review at
Note: Files Reviewed (75 docs files — key surfaces below)
Previous review (commit efc0a82)Status: No Issues Found | Recommendation: Merge Incremental review of commit Note on the prior Files Reviewed (14 changed)
Previous review (commit ef000c5)Status: 3 Issues Found | Recommendation: Address before merge Overview
Incremental review of commit Issue Details (click to expand)WARNING
Files Reviewed (9 changed)
Fix these issues in Kilo Cloud Previous review (commit 2bf1dff)Status: No Issues Found | Recommendation: Merge The branch was force-pushed and squashed into commit Verified (functional content)
No new findings. The build-breaking issues raised earlier (emoji Files Reviewed (75 files)
Previous review (commit dc62de1)Status: No Issues Found | Recommendation: Merge Incremental review (since Incremental changes (clean)
No new findings. The remainder is the front-matter standardization already covered previously. Files Reviewed (75 files)Incremental functional content: Front-matter / content mirror (remainder): the other 69 pages under Previous review (commit 1b8a056)Status: No Issues Found | Recommendation: Merge Incremental review (since
No new findings. The previously-raised Files Reviewed (33 files)Front-matter cleanup (29):
Functional content (4):
Previous review (commit 96579c7)Status: 1 Issue Found | Recommendation: Address before merge Overview
Issue Details (click to expand)WARNING
Files Reviewed (70 files)
Reviewed by glm-5.2 · Input: 23.6K · Output: 6.1K · Cached: 307.8K Review guidance: REVIEW.md from base branch |
There was a problem hiding this comment.
2 issues found across 75 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="docs/docs/llms.txt">
<violation number="1" location="docs/docs/llms.txt:10">
P2: The de-prefixing pass stripped the `https://help.altimate.ai` domain from these links but left the `/code/` path segment in place, e.g. `/code/quickstart/`. Since the deployed site's routes (per mkdocs.yml nav) don't have a `/code/` prefix, these llms.txt links won't resolve at the deployed docs origin.</violation>
</file>
<file name="docs/docs/index.md">
<violation number="1" location="docs/docs/index.md:28">
P3: These new card headings jump from the page's h1 straight to h3, skipping h2, which creates an invalid heading outline (flagged by markdownlint MD001). Change `### [Quickstart](/getting-started/)` and the other five card headings to `##`.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| - [Quickstart (5 min)](https://help.altimate.ai/code/quickstart/): Install altimate, configure your LLM provider, connect your warehouse, and run your first query in under 5 minutes. | ||
| - [Full Setup Guide](https://help.altimate.ai/code/getting-started/): Complete installation, warehouse configuration for all 8 supported warehouses, LLM provider setup, and first-run walkthrough. | ||
| - [Network & Proxy](https://help.altimate.ai/code/reference/network/): Proxy configuration, CA certificate setup, firewall requirements. | ||
| - [Quickstart (5 min)](/code/quickstart/): Install altimate, configure your LLM provider, connect your warehouse, and run your first query in under 5 minutes. |
There was a problem hiding this comment.
P2: The de-prefixing pass stripped the https://help.altimate.ai domain from these links but left the /code/ path segment in place, e.g. /code/quickstart/. Since the deployed site's routes (per mkdocs.yml nav) don't have a /code/ prefix, these llms.txt links won't resolve at the deployed docs origin.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/docs/llms.txt, line 10:
<comment>The de-prefixing pass stripped the `https://help.altimate.ai` domain from these links but left the `/code/` path segment in place, e.g. `/code/quickstart/`. Since the deployed site's routes (per mkdocs.yml nav) don't have a `/code/` prefix, these llms.txt links won't resolve at the deployed docs origin.</comment>
<file context>
@@ -1,42 +1,42 @@
-- [Quickstart (5 min)](https://help.altimate.ai/code/quickstart/): Install altimate, configure your LLM provider, connect your warehouse, and run your first query in under 5 minutes.
-- [Full Setup Guide](https://help.altimate.ai/code/getting-started/): Complete installation, warehouse configuration for all 8 supported warehouses, LLM provider setup, and first-run walkthrough.
-- [Network & Proxy](https://help.altimate.ai/code/reference/network/): Proxy configuration, CA certificate setup, firewall requirements.
+- [Quickstart (5 min)](/code/quickstart/): Install altimate, configure your LLM provider, connect your warehouse, and run your first query in under 5 minutes.
+- [Full Setup Guide](/code/getting-started/): Complete installation, warehouse configuration for all 8 supported warehouses, LLM provider setup, and first-run walkthrough.
+- [Network & Proxy](/code/reference/network/): Proxy configuration, CA certificate setup, firewall requirements.
</file context>
| - [Quickstart (5 min)](/code/quickstart/): Install altimate, configure your LLM provider, connect your warehouse, and run your first query in under 5 minutes. | |
| - [Quickstart (5 min)](/quickstart/): Install altimate, configure your LLM provider, connect your warehouse, and run your first query in under 5 minutes. |
| <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2 3 14h7l-1 8 10-12h-7l1-8z"/></svg> | ||
| </div> | ||
|
|
||
| ### [Quickstart](/getting-started/) |
There was a problem hiding this comment.
P3: These new card headings jump from the page's h1 straight to h3, skipping h2, which creates an invalid heading outline (flagged by markdownlint MD001). Change ### [Quickstart](/getting-started/) and the other five card headings to ##.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/docs/index.md, line 28:
<comment>These new card headings jump from the page's h1 straight to h3, skipping h2, which creates an invalid heading outline (flagged by markdownlint MD001). Change `### [Quickstart](/getting-started/)` and the other five card headings to `##`.</comment>
<file context>
@@ -1,10 +1,107 @@
+<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2 3 14h7l-1 8 10-12h-7l1-8z"/></svg>
+</div>
+
+### [Quickstart](/getting-started/)
+
+Install, connect a warehouse and an LLM, and make your first run in under five minutes.
</file context>
96579c7 to
1b8a056
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/docs/getting-started/index.md`:
- Line 54: Change all documentation card headings from level-three to level-two
headings: update the six card headings at docs/docs/getting-started/index.md
lines 54, 67, 80, 93, 106, and 119, and the six card headings at
docs/docs/index.md lines 28, 41, 54, 67, 80, and 93.
In `@docs/docs/usage/ide.md`:
- Around line 1-3: Update the references around the IDE installation and usage
instructions to use one consistent extension name, preferably Datamates,
matching the title and the extension identifier
altimateai.vscode-altimate-mcp-server. Replace the `Altimate MCP` wording on the
affected lines without changing the CLI command or other setup details.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: d15578e1-b386-4f62-a71f-e508acbbfb5d
📒 Files selected for processing (75)
docs/docs/configure/acp.mddocs/docs/configure/agents.mddocs/docs/configure/bedrock-custom-endpoints.mddocs/docs/configure/commands.mddocs/docs/configure/config.mddocs/docs/configure/context-management.mddocs/docs/configure/custom-tools.mddocs/docs/configure/formatters.mddocs/docs/configure/governance.mddocs/docs/configure/index.mddocs/docs/configure/keybinds.mddocs/docs/configure/lsp.mddocs/docs/configure/mcp-servers.mddocs/docs/configure/models.mddocs/docs/configure/permissions.mddocs/docs/configure/providers.mddocs/docs/configure/rules.mddocs/docs/configure/skills.mddocs/docs/configure/themes.mddocs/docs/configure/tools.mddocs/docs/configure/tools/config.mddocs/docs/configure/tools/core-tools.mddocs/docs/configure/tools/custom.mddocs/docs/configure/tools/index.mddocs/docs/configure/trace.mddocs/docs/configure/warehouses.mddocs/docs/data-engineering/agent-modes.mddocs/docs/data-engineering/guides/clickhouse.mddocs/docs/data-engineering/guides/cost-optimization.mddocs/docs/data-engineering/guides/data-parity.mddocs/docs/data-engineering/guides/index.mddocs/docs/data-engineering/guides/migration.mddocs/docs/data-engineering/guides/using-with-claude-code.mddocs/docs/data-engineering/guides/using-with-codex.mddocs/docs/data-engineering/tools/dbt-tools.mddocs/docs/data-engineering/tools/finops-tools.mddocs/docs/data-engineering/tools/index.mddocs/docs/data-engineering/tools/lineage-tools.mddocs/docs/data-engineering/tools/memory-tools.mddocs/docs/data-engineering/tools/schema-tools.mddocs/docs/data-engineering/tools/sql-tools.mddocs/docs/data-engineering/tools/warehouse-tools.mddocs/docs/data-engineering/training/index.mddocs/docs/data-engineering/training/team-deployment.mddocs/docs/data-engineering/validators.mddocs/docs/develop/ecosystem.mddocs/docs/develop/plugins.mddocs/docs/develop/sdk.mddocs/docs/develop/server.mddocs/docs/drivers.mddocs/docs/examples/index.mddocs/docs/getting-started.mddocs/docs/getting-started/index.mddocs/docs/getting-started/quickstart-new.mddocs/docs/getting-started/quickstart.mddocs/docs/index.mddocs/docs/llms.txtdocs/docs/quickstart.mddocs/docs/reference/changelog.mddocs/docs/reference/network.mddocs/docs/reference/security-faq.mddocs/docs/reference/telemetry.mddocs/docs/reference/troubleshooting.mddocs/docs/reference/windows-wsl.mddocs/docs/usage/check.mddocs/docs/usage/ci-headless.mddocs/docs/usage/cli.mddocs/docs/usage/dbt-pr-review-corpus.mddocs/docs/usage/dbt-pr-review.mddocs/docs/usage/github.mddocs/docs/usage/gitlab.mddocs/docs/usage/ide.mddocs/docs/usage/tui.mddocs/docs/usage/web.mddocs/mkdocs.yml
🚧 Files skipped from review as they are similar to previous changes (69)
- docs/docs/configure/tools/core-tools.md
- docs/docs/develop/server.md
- docs/docs/configure/themes.md
- docs/docs/data-engineering/tools/sql-tools.md
- docs/docs/develop/sdk.md
- docs/docs/examples/index.md
- docs/docs/data-engineering/guides/data-parity.md
- docs/docs/configure/agents.md
- docs/docs/configure/acp.md
- docs/docs/configure/commands.md
- docs/docs/configure/keybinds.md
- docs/docs/configure/warehouses.md
- docs/docs/drivers.md
- docs/docs/configure/formatters.md
- docs/docs/usage/ci-headless.md
- docs/docs/develop/ecosystem.md
- docs/docs/configure/tools/index.md
- docs/docs/data-engineering/training/team-deployment.md
- docs/docs/data-engineering/guides/using-with-codex.md
- docs/docs/quickstart.md
- docs/docs/configure/models.md
- docs/docs/configure/custom-tools.md
- docs/docs/configure/tools/custom.md
- docs/docs/data-engineering/guides/index.md
- docs/docs/data-engineering/validators.md
- docs/docs/configure/bedrock-custom-endpoints.md
- docs/docs/data-engineering/tools/warehouse-tools.md
- docs/docs/usage/cli.md
- docs/docs/usage/gitlab.md
- docs/docs/configure/tools/config.md
- docs/docs/configure/context-management.md
- docs/docs/data-engineering/agent-modes.md
- docs/docs/data-engineering/tools/memory-tools.md
- docs/docs/configure/index.md
- docs/docs/configure/lsp.md
- docs/docs/develop/plugins.md
- docs/docs/configure/permissions.md
- docs/docs/usage/check.md
- docs/docs/data-engineering/tools/index.md
- docs/docs/configure/providers.md
- docs/docs/usage/tui.md
- docs/docs/configure/tools.md
- docs/docs/data-engineering/guides/cost-optimization.md
- docs/docs/data-engineering/tools/dbt-tools.md
- docs/docs/data-engineering/tools/finops-tools.md
- docs/docs/data-engineering/guides/migration.md
- docs/docs/usage/dbt-pr-review-corpus.md
- docs/docs/reference/network.md
- docs/docs/configure/skills.md
- docs/docs/reference/changelog.md
- docs/docs/getting-started.md
- docs/docs/reference/troubleshooting.md
- docs/docs/data-engineering/tools/schema-tools.md
- docs/docs/data-engineering/training/index.md
- docs/docs/configure/mcp-servers.md
- docs/docs/configure/config.md
- docs/docs/usage/dbt-pr-review.md
- docs/docs/configure/governance.md
- docs/docs/reference/telemetry.md
- docs/docs/configure/rules.md
- docs/docs/usage/web.md
- docs/docs/reference/security-faq.md
- docs/docs/data-engineering/guides/clickhouse.md
- docs/docs/configure/trace.md
- docs/docs/data-engineering/guides/using-with-claude-code.md
- docs/docs/getting-started/quickstart.md
- docs/docs/reference/windows-wsl.md
- docs/docs/usage/github.md
- docs/docs/data-engineering/tools/lineage-tools.md
| <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M17.5 19a4.5 4.5 0 1 0-2.45-8.28A6.5 6.5 0 0 0 4 13.5a4.5 4.5 0 0 0 4.5 4.5h9z"/></svg> | ||
| </div> | ||
|
|
||
| ### [Bring Your Own LLM](/configure/providers/) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use level-two headings for documentation card headings.
Both pages use ### for cards without a level-two parent. This creates an invalid heading outline. Change the affected card headings to ##.
docs/docs/getting-started/index.md#L54-L54: change the six card headings at Lines 54, 67, 80, 93, 106, and 119.docs/docs/index.md#L28-L28: change the six card headings at Lines 28, 41, 54, 67, 80, and 93.
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)
[warning] 54-54: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
📍 Affects 2 files
docs/docs/getting-started/index.md#L54-L54(this comment)docs/docs/index.md#L28-L28
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/getting-started/index.md` at line 54, Change all documentation card
headings from level-three to level-two headings: update the six card headings at
docs/docs/getting-started/index.md lines 54, 67, 80, 93, 106, and 119, and the
six card headings at docs/docs/index.md lines 28, 41, 54, 67, 80, and 93.
Source: Linters/SAST tools
| - pymdownx.emoji: | ||
| emoji_index: null | ||
| emoji_generator: null |
There was a problem hiding this comment.
CRITICAL — mkdocs build fails outright; the docs deploy is broken
The YAML round-trip replaced the !!python/name: tags with null, and pymdownx.emoji calls inspect.getfullargspec() on emoji_index. Building this branch aborts:
ERROR - Config value 'markdown_extensions': Failed to load extension 'pymdownx.emoji'.
File ".../pymdownx/emoji.py", line 257, in _set_index
if len(inspect.getfullargspec(index).args):
TypeError: unsupported callable
Aborted with a configuration error!
main builds clean (exit 0); this branch does not. .github/workflows/docs.yml runs exactly mkdocs build -f docs/mkdocs.yml -d site, so the Pages job fails and nothing publishes. GitHub Pages keeps serving the last successful build, so the site does not go dark — it silently freezes, and every future docs change fails to deploy with no user-visible signal.
The extension is genuinely in use: 17 :octicons-arrow-right-24: plus :material-github:, :material-palette:, :material-puzzle:.
Fix — restore the tags, and make the sync preserve unknown YAML tags (or patch only the nav: key instead of rewriting the whole file):
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svgPatching just these two lines makes the build succeed, which is how the remaining issues below were confirmed.
| - Altimate MCP: | ||
| - Overview: datamates/index.md | ||
| - Introduction: datamates/user-guide/home.md | ||
| - Altimate Code Chat: datamates/user-guide/components/altimate-code.md | ||
| - Altimate LLM Gateway: datamates/user-guide/components/llm-gateway.md | ||
| - Setup: | ||
| - Overview: datamates/user-guide/setup/setup.md | ||
| - Cursor: datamates/user-guide/setup/cursor-setup.md | ||
| - Claude Code: datamates/user-guide/setup/claude-code-setup.md | ||
| - Cline: datamates/user-guide/setup/cline-setup.md | ||
| - VS Code: datamates/user-guide/setup/vscode-setup.md | ||
| - Components: | ||
| - Overview: datamates/user-guide/components/components_overview.md | ||
| - Integrations: | ||
| - Overview: datamates/user-guide/components/integrations/integrations.md | ||
| - Airflow: datamates/user-guide/components/integrations/airflow.md | ||
| - Altimate: datamates/user-guide/components/integrations/altimate.md | ||
| - BigQuery: datamates/user-guide/components/integrations/bigquery.md | ||
| - Dagster: datamates/user-guide/components/integrations/dagster.md | ||
| - Databricks: datamates/user-guide/components/integrations/databricks.md | ||
| - dbt: datamates/user-guide/components/integrations/dbt.md | ||
| - GitHub: datamates/user-guide/components/integrations/github.md | ||
| - Google Sheets: datamates/user-guide/components/integrations/google_sheets.md | ||
| - Jira: datamates/user-guide/components/integrations/jira.md | ||
| - Linear: datamates/user-guide/components/integrations/linear.md | ||
| - PostgreSQL: datamates/user-guide/components/integrations/postgresql.md | ||
| - Snowflake: datamates/user-guide/components/integrations/snowflake.md | ||
| - Knowledge Hub: datamates/user-guide/components/knowledgehub.md | ||
| - Memory Hub: datamates/user-guide/components/memory.md | ||
| - Guardrails: datamates/user-guide/components/guardrails.md | ||
| - Examples: | ||
| - Showcase: examples/index.md | ||
| - Use: | ||
| - Agents: | ||
| - Agent Modes: data-engineering/agent-modes.md | ||
| - Agent Config: configure/agents.md | ||
| - Tools: | ||
| - Overview: configure/tools/index.md | ||
| - Built-in Tools: configure/tools/config.md | ||
| - Core Tools: configure/tools/core-tools.md | ||
| - SQL Tools: data-engineering/tools/sql-tools.md | ||
| - Schema Tools: data-engineering/tools/schema-tools.md | ||
| - FinOps Tools: data-engineering/tools/finops-tools.md | ||
| - Lineage Tools: data-engineering/tools/lineage-tools.md | ||
| - dbt Tools: data-engineering/tools/dbt-tools.md | ||
| - Warehouse Tools: data-engineering/tools/warehouse-tools.md | ||
| - Memory Tools: data-engineering/tools/memory-tools.md | ||
| - Custom Tools: configure/tools/custom.md | ||
| - Skills: configure/skills.md | ||
| - Commands: configure/commands.md | ||
| - Validators: data-engineering/validators.md | ||
| - Trace: configure/trace.md | ||
| - Interfaces: | ||
| - TUI: usage/tui.md | ||
| - CLI: usage/cli.md | ||
| - SQL Check: usage/check.md | ||
| - Web UI: usage/web.md | ||
| - CI: usage/ci-headless.md | ||
| - IDE: usage/ide.md | ||
| - GitHub: usage/github.md | ||
| - GitLab: usage/gitlab.md | ||
| - dbt PR Review: usage/dbt-pr-review.md | ||
| - dbt PR Review — Issue Corpus: usage/dbt-pr-review-corpus.md | ||
| - Guides: | ||
| - Cost Optimization: data-engineering/guides/cost-optimization.md | ||
| - Migration: data-engineering/guides/migration.md | ||
| - Data Parity: data-engineering/guides/data-parity.md | ||
| - Using with Claude Code: data-engineering/guides/using-with-claude-code.md | ||
| - Using with Codex: data-engineering/guides/using-with-codex.md | ||
| - ClickHouse: data-engineering/guides/clickhouse.md | ||
| - Configure: | ||
| - Overview: configure/index.md | ||
| - Warehouses: configure/warehouses.md | ||
| - LLMs: | ||
| - Providers: configure/providers.md | ||
| - Models: configure/models.md | ||
| - Bedrock Custom Endpoints: configure/bedrock-custom-endpoints.md | ||
| - MCPs & ACPs: | ||
| - MCP Servers: configure/mcp-servers.md | ||
| - ACP Support: configure/acp.md | ||
| - Appearance: | ||
| - Themes: configure/themes.md | ||
| - Keybinds: configure/keybinds.md | ||
| - Training: | ||
| - Overview: data-engineering/training/index.md | ||
| - Team Deployment: data-engineering/training/team-deployment.md | ||
| - Additional Config: | ||
| - LSP Servers: configure/lsp.md | ||
| - Network: reference/network.md | ||
| - Windows / WSL: reference/windows-wsl.md | ||
| - Config File Reference: configure/config.md | ||
| - Governance: | ||
| - Overview: configure/governance.md | ||
| - Rules: configure/rules.md | ||
| - Permissions: configure/permissions.md | ||
| - Context Management: configure/context-management.md | ||
| - Formatters: configure/formatters.md | ||
| - Reference: | ||
| - Changelog: reference/changelog.md | ||
| - Telemetry: reference/telemetry.md | ||
| - Security FAQ: reference/security-faq.md | ||
| - Troubleshooting: reference/troubleshooting.md | ||
| - Extend: | ||
| - SDK: develop/sdk.md | ||
| - Server API: develop/server.md | ||
| - Plugins: develop/plugins.md | ||
| - Ecosystem: develop/ecosystem.md | ||
| - Overview: datamates/examples/examples.md | ||
| - Build, Test, Docs for dbt Models: datamates/examples/build-test-document-dbt-model.md | ||
| - Find Broken Views in Snowflake: datamates/examples/find-broken-views-snowflake.md | ||
| - Optimize Cost and Performance: datamates/examples/optimize-costs-and-performance.md | ||
| - Migrate a pyspark project to dbt: datamates/examples/migrate-pyspark-dbt.md | ||
| - Debug an Airflow DAG: datamates/examples/debug-airflow-dag.md | ||
| - Write Snowflake UDFs: datamates/examples/write-snowflake-udfs.md | ||
| - FAQ: | ||
| - Security FAQs: datamates/faq/security.md | ||
| - Pricing FAQs: datamates/faq/pricing-faqs.md | ||
| - Troubleshooting: datamates/faq/troubleshooting.md |
There was a problem hiding this comment.
MAJOR — 36 nav entries point at files that don't exist
This entire Altimate MCP section was lifted from the unified help-docs nav, but the content was never copied: docs/docs/datamates/ does not exist in this repo. main has zero datamates/ nav entries.
With the emoji fix applied so the build can run, MkDocs emits 36 warnings:
WARNING - A reference to 'datamates/index.md' is included in the 'nav' configuration, which is not found in the documentation files.
WARNING - A reference to 'datamates/user-guide/home.md' ...
... (36 total)
These are warnings, not build failures — strict is unset — so this ships rather than failing CI. Confirmed against the built artifact: the rendered index.html contains the Altimate MCP section with 37 datamates references emitted as raw unprocessed paths:
href="datamates/examples/examples.md"
href="datamates/faq/security.md"So these publish as dead links pointing at .md files. Note this also becomes a hard build failure the moment anyone sets strict: true.
Fix — either sync the datamates/** content, or have the sync prune nav subtrees whose targets aren't in the mirrored file set and replace this section with a single external link to https://help.altimate.ai/datamates/.
| - [Power User for dbt](/dbt-power-user/) — Best dbt extension for VS Code / Cursor. | ||
| - [Altimate MCP](/datamates/) — A local-first MCP server for your data stack. | ||
| - [Altimate Lite for Snowflake](/snowflake-native-app/) — More out of your Snowflake compute, without your data leaving your account. |
There was a problem hiding this comment.
MAJOR — root-relative cross-product links 404 on this domain
This repo deploys standalone: docs/docs/CNAME is docs.altimate.sh and site_url: https://docs.altimate.sh. The unified-site "de-prefixing" rewrote working fully-qualified URLs into root-relative paths that only resolve on help.altimate.ai.
git grep confirms 0 such links on main, 8 on this branch. On docs.altimate.sh, /datamates/, /dbt-power-user/, and /snowflake-native-app/ are all 404s — and /datamates/ is unreachable in this repo regardless, since that content was never synced.
Fix — keep cross-product links fully qualified (https://help.altimate.ai/...). De-prefixing is only correct for pages that exist within this mirror.
All three targets here are external products, so all three should be absolute URLs.
|
|
||
| - **BYOK (Bring Your Own Key)** — Free and unlimited. Configure any of the [35+ supported providers](../configure/providers.md) (Anthropic, OpenAI, AWS Bedrock, Azure OpenAI, etc.) | ||
| - **[Altimate LLM Gateway](https://help.altimate.ai/datamates/user-guide/components/llm-gateway/)** — Managed LLM access with dynamic model routing. 10M tokens free to get started — no API keys to manage | ||
| - **[Altimate LLM Gateway](/datamates/user-guide/components/llm-gateway/)** — Managed LLM access with dynamic model routing. 10M tokens free to get started — no API keys to manage |
There was a problem hiding this comment.
MAJOR — de-prefixed link now 404s on docs.altimate.sh
This is the clearest instance of the regression — a working fully-qualified URL was rewritten into a path that only resolves on help.altimate.ai:
--- **[Altimate LLM Gateway](https://help.altimate.ai/datamates/user-guide/components/llm-gateway/)** — ...
-+- **[Altimate LLM Gateway](/datamates/user-guide/components/llm-gateway/)** — ...This repo publishes to docs.altimate.sh (CNAME + site_url), where /datamates/... does not exist. The LLM Gateway link is the most damaging of the eight, since it appears in provider setup, quickstart, and IDE guidance.
Fix — restore the fully-qualified https://help.altimate.ai/datamates/user-guide/components/llm-gateway/.
| ``` | ||
|
|
||
| For pricing, security, and data handling details, see the [Altimate LLM Gateway guide](https://help.altimate.ai/datamates/user-guide/components/llm-gateway/). | ||
| For pricing, security, and data handling details, see the [Altimate LLM Gateway guide](/datamates/user-guide/components/llm-gateway/). |
There was a problem hiding this comment.
MAJOR — de-prefixed link now 404s on docs.altimate.sh
This is the clearest instance of the regression — a working fully-qualified URL was rewritten into a path that only resolves on help.altimate.ai:
--- **[Altimate LLM Gateway](https://help.altimate.ai/datamates/user-guide/components/llm-gateway/)** — ...
-+- **[Altimate LLM Gateway](/datamates/user-guide/components/llm-gateway/)** — ...This repo publishes to docs.altimate.sh (CNAME + site_url), where /datamates/... does not exist. The LLM Gateway link is the most damaging of the eight, since it appears in provider setup, quickstart, and IDE guidance.
Fix — restore the fully-qualified https://help.altimate.ai/datamates/user-guide/components/llm-gateway/.
|
|
||
| [Get Started](quickstart.md){ .md-button .md-button--primary } | ||
| [See Examples](../examples/index.md){ .md-button } | ||
| [Get Started](/getting-started/quickstart/){ .md-button .md-button--primary } |
There was a problem hiding this comment.
MAJOR — same CTA mis-target as the homepage
/getting-started/quickstart/ resolves to getting-started/quickstart.md — the page titled "Setup Guide", which this PR removes from the nav — not to the nav-labeled Quickstart (quickstart-new.md).
| <div class="doc-links" markdown> | ||
|
|
||
| **Learn More** — [Quickstart](quickstart.md) | [Examples](../examples/index.md) | [Use](../data-engineering/agent-modes.md) | [Configure](../configure/index.md) | [Interfaces](../usage/tui.md) | [Reference](../reference/security-faq.md) | ||
| **Learn More** — [Quickstart](/getting-started/quickstart/) | [Examples](/examples/) | [Use](/data-engineering/agent-modes/) | [Configure](/configure/) | [Interfaces](/usage/tui/) | [Reference](/reference/security-faq/) |
There was a problem hiding this comment.
MINOR — same CTA mis-target in the footer links
[Quickstart](/getting-started/quickstart/) resolves to the "Setup Guide" page rather than the nav-labeled Quickstart (quickstart-new.md).
| @@ -1,7 +1,7 @@ | |||
| # altimate-code llms.txt | |||
| # AI-friendly documentation index for altimate-code | |||
| # Generated: 2026-03-18 | Version: v0.5.0 | |||
There was a problem hiding this comment.
MINOR — this file was touched but left materially stale
Two routes were corrected here (both good — verified they now point at real pages), but the file still contradicts docs shipped in this same commit:
llms.txt claim |
Reality in this repo |
|---|---|
Version: v0.5.0, generated 2026-03-18 |
packages/opencode/package.json = 1.17.9 |
| "all 8 supported warehouses" (line 11) | configure/warehouses.md documents 13 |
| "7 specialized agents (Builder, Analyst, Validator, Migrator, Researcher, Trainer, Executive)" (line 16) | configure/agents.md and data-engineering/agent-modes.md document 3: Builder, Analyst, Plan |
This is the file AI consumers read as the canonical product index, and it now disagrees with its own sibling pages.
Fix — regenerate from source data rather than hand-editing individual URLs.
| --- | ||
| title: altimate-code | ||
| title: Altimate Code | ||
| hide: | ||
| - toc | ||
| - navigation | ||
| --- |
There was a problem hiding this comment.
MINOR — the homepage is the one page with no SEO description
Of the 73 changed markdown files, 72 received both title and description. This one — the new landing page and the highest-value SEO surface in the site — has title and hide but no description, so it falls back to the generic site-wide site_description.
Fix — add a description matching this page's actual pitch.
| ## Full Altimate MCP Documentation | ||
|
|
||
| The Datamates extension offers additional capabilities beyond Altimate Code Chat, including MCP server integrations, Knowledge Hub, Memory Hub, and Guardrails. See the [Datamates documentation](https://help.altimate.ai/datamates/) for full setup guides, integration configuration, and feature details. | ||
| The Datamates extension offers additional capabilities beyond Altimate Code Chat, including MCP server integrations, Knowledge Hub, Memory Hub, and Guardrails. See the [Altimate MCP documentation](/datamates/) for full setup guides, integration configuration, and feature details. |
There was a problem hiding this comment.
MINOR — brand rename is half-applied
The "Datamates" → "Altimate MCP" rename was applied to command-palette labels and headings but not body copy. This line reads:
The Datamates extension offers additional capabilities … See the [Altimate MCP documentation]
…under a heading that says "Full Altimate MCP Documentation" — three names for one thing in two sentences. Six "Datamates" references remain in this file (lines 3, 8, 20, 24, 28, 73) plus develop/ecosystem.md:22.
Fix — if the VS Code marketplace listing is still literally named "Datamates", state that once explicitly ("the Altimate MCP extension, listed as Datamates in the marketplace") rather than alternating between the two names.
Review summary — requesting changesReviewed at 15 inline comments cover the issues that map to specific lines: 1 critical, 9 major, 5 minor. One clarification on severityThe 36 missing
MkDocs treats missing nav targets as warnings unless Issues not tied to a specific lineMINOR — the do-not-edit safeguard described in the PR is absentThe description says "each file carries a do-not-edit banner; this copy is regenerated automatically." Of the 74 markdown files under The whole migration rests on people not editing this mirror. Without the guardrail, local edits get silently clobbered on the next sync — which is exactly the problem the 13 reconciled edits represent. Fix — emit an HTML-comment banner at the top of every synced file, plus a CI check that fails when a file in the synced set changes without a corresponding MINOR — no pre-merge docs validation in CI
Fix — add a A strict PR-triggered build would have caught the emoji failure and the 36 dead nav targets outright, and would have surfaced the absolute-link warnings behind the cross-product and CTA issues. It would not, on its own, prove the CTA points at the semantically wrong page — that needs an explicit route assertion. NitsSync rewrites YAML inside fenced code blocks — The normalizer added quotes to Cosmetic YAML churn inflates the diff — Roughly 100 of the 297 changed lines in this file are pure round-trip noise: re-quoting Worth verifying before merge (not counted as defects)
Pre-existing debt (not introduced here)Nine files sit outside the nav. Eight pre-date this PR. The one worth acting on is What's done well
Suggested merge order
|
dc62de1 to
2bf1dff
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (5)
docs/docs/assets/stylesheets/neoteroi-cards.css (2)
33-38: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueMerge the two
.nt-cardblocks; the shadows are also overridden.Lines 33-35 and 61-64 declare the same selector in one file. Merge them into a single block.
extra.cssline 302 setsbox-shadow: nonefor the default scheme and line 311 sets it for slate, so the shadows at lines 34 and 37 never render.extra.csslines 295-296 also overridepaddingandmargin-bottomwith!important.Also applies to: 61-64
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/docs/assets/stylesheets/neoteroi-cards.css` around lines 33 - 38, Merge the declarations from both .nt-card blocks into one selector block, preserving the effective styles and removing the duplicate selector. Do not retain the box-shadow declarations because extra.css overrides them for both schemes; likewise avoid duplicating padding or margin-bottom declarations already overridden there with !important.
40-51: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
.nt-cardhas two owners.docs/mkdocs.ymlloadsneoteroi-cards.cssbeforeextra.css, andextra.cssrestyles.nt-cardwith equal-or-higher specificity plus!importantonborder-radius,padding, andmargin-bottom. Most rules in this file are therefore dead, and the few that survive fight the intent inextra.css. Makeextra.cssthe single owner of card appearance and keep this file to grid layout only.
docs/docs/assets/stylesheets/neoteroi-cards.css#L40-L51: delete the slate block.extra.csslines 308-316 already set the dark-mode background, border, and hover state. The survivingtransition: all 0.25s easeoverrides the scoped transition inextra.cssline 298 and animates every property on hover. Move thetranslateY(-2px)lift intoextra.cssif it is wanted.docs/docs/assets/stylesheets/neoteroi-cards.css#L33-L38: delete the shadow rules.extra.csslines 302 and 311 setbox-shadow: nonein both schemes.docs/docs/assets/stylesheets/neoteroi-cards.css#L61-L64: merge this duplicate.nt-cardselector away.extra.csslines 295-296 overridepaddingandmargin-bottomwith!important.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/docs/assets/stylesheets/neoteroi-cards.css` around lines 40 - 51, Make extra.css the sole owner of .nt-card appearance: in docs/docs/assets/stylesheets/neoteroi-cards.css, delete the slate block at lines 40-51, remove the shadow rules at lines 33-38, and merge away the duplicate .nt-card selector at lines 61-64, leaving this file responsible only for grid layout. If the card lift is desired, move the translateY(-2px) behavior into extra.css without restoring conflicting transition or appearance rules.docs/docs/assets/stylesheets/extra.css (3)
2279-2309: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse the brand token for the pillar colors; the hard-coded orange differs from
--alt-orange.Lines 2294, 2295, and 2307 use
rgba(255, 107, 28, …), which is#FF6B1C. The brand token at line 10 is--alt-orange:#F07030``. The file header states the palette is brand-true. The two oranges render differently side by side.Line 2298 also sets
color: rgba(255, 255, 255, 0.8). White text needs a dark backdrop. Confirm.ak-hero-pillarsonly renders inside.ak-proof, which setsbackground:#0B0D12``. If the pillars can appear in the default light scheme, the text will fail contrast.🎨 Proposed fix to use the brand tokens
padding: 0.9rem 0.6rem; border-radius: 8px; - border: 1px solid rgba(255, 107, 28, 0.35); - background: rgba(255, 107, 28, 0.05); + border: 1px solid rgba(240, 112, 48, 0.35); + background: rgba(240, 112, 48, 0.05); font-size: 0.62rem;.ak-pillar svg { width: 22px; height: 22px; - color: rgba(255, 107, 28, 0.9); + color: var(--alt-orange); flex-shrink: 0; }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/docs/assets/stylesheets/extra.css` around lines 2279 - 2309, Update the .ak-pillar border, background, and .ak-pillar svg color declarations to derive from the --alt-orange brand token instead of hard-coded rgba(255, 107, 28, …) values, preserving their current opacity. Verify that .ak-hero-pillars is only used within .ak-proof with its dark `#0B0D12` background; if it can render outside that context or in the light scheme, adjust the pillar text color to maintain sufficient contrast.
32-33: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winFix the stylelint
value-keyword-caseerrors.Stylelint reports errors at lines 32, 33, 858, and 909. Lines 858 and 909 use
currentColor; the CSS-wide keyword iscurrentcolorin lowercase, so those are genuine fixes.Lines 32 and 33 list font family names, not keywords. Stylelint's
value-keyword-caserule flags them because it does not treat unquoted font family names as proper nouns. Do not lowercase the family names, becauseBlinkMacSystemFontandRobotomust match the installed font names. Configure the rule instead.🎨 Proposed fixes
Apply the keyword fix at lines 858 and 909:
- color: currentColor; + color: currentcolor;Then disable the rule for font shorthand values in the stylelint config:
{ "rules": { "value-keyword-case": [ "lower", { "ignoreProperties": ["/^--alt-font/", "font", "font-family"] } ] } }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/docs/assets/stylesheets/extra.css` around lines 32 - 33, Lowercase currentColor to currentcolor at the declarations around the affected stylesheet usages, and update the stylelint value-keyword-case configuration to ignore custom properties matching ^--alt-font plus font and font-family, preserving the existing capitalized font family names in --alt-font-ui and --alt-font-mono.Source: Linters/SAST tools
584-588: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winRemove the legacy
.ak-*CSS blocks.The Trusted-by class blocks at lines 584-588 and swimlane flow class blocks at lines 1957-1964 are only referenced in this CSS file. Delete them to avoid retaining unused legacy rules.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/docs/assets/stylesheets/extra.css` around lines 584 - 588, Remove the legacy .ak-trusted CSS block and the swimlane flow class blocks identified in the comment from extra.css. Do not alter the active .ak-proof styles or other unrelated rules.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/docs/assets/stylesheets/copy-page.css`:
- Around line 41-46: Add visible keyboard focus styles for the copy controls by
extending the existing state rule around .ak-copy-page__main and
.ak-copy-page__toggle to include appropriate focus selectors, including the menu
buttons used by the disclosure widget. Ensure focused controls have a reliable
visual indicator without removing the current hover or expanded-state styling.
- Around line 4-13: Add the copy-page controller to the existing MkDocs override
configuration through an extra_javascript entry, alongside the current extra_css
and custom_dir settings. Ensure it references the script responsible for
controlling .ak-copy-page markup and its aria-expanded, hidden, and copied
states.
In `@docs/docs/assets/stylesheets/extra.css`:
- Around line 818-819: Scope the .md-content__button rule to the existing
homepage wrapper class used elsewhere in the stylesheet, so the button is hidden
only on hub index pages while remaining visible on other documentation pages;
keep the comment aligned with that scoped behavior.
---
Nitpick comments:
In `@docs/docs/assets/stylesheets/extra.css`:
- Around line 2279-2309: Update the .ak-pillar border, background, and
.ak-pillar svg color declarations to derive from the --alt-orange brand token
instead of hard-coded rgba(255, 107, 28, …) values, preserving their current
opacity. Verify that .ak-hero-pillars is only used within .ak-proof with its
dark `#0B0D12` background; if it can render outside that context or in the light
scheme, adjust the pillar text color to maintain sufficient contrast.
- Around line 32-33: Lowercase currentColor to currentcolor at the declarations
around the affected stylesheet usages, and update the stylelint
value-keyword-case configuration to ignore custom properties matching
^--alt-font plus font and font-family, preserving the existing capitalized font
family names in --alt-font-ui and --alt-font-mono.
- Around line 584-588: Remove the legacy .ak-trusted CSS block and the swimlane
flow class blocks identified in the comment from extra.css. Do not alter the
active .ak-proof styles or other unrelated rules.
In `@docs/docs/assets/stylesheets/neoteroi-cards.css`:
- Around line 33-38: Merge the declarations from both .nt-card blocks into one
selector block, preserving the effective styles and removing the duplicate
selector. Do not retain the box-shadow declarations because extra.css overrides
them for both schemes; likewise avoid duplicating padding or margin-bottom
declarations already overridden there with !important.
- Around line 40-51: Make extra.css the sole owner of .nt-card appearance: in
docs/docs/assets/stylesheets/neoteroi-cards.css, delete the slate block at lines
40-51, remove the shadow rules at lines 33-38, and merge away the duplicate
.nt-card selector at lines 61-64, leaving this file responsible only for grid
layout. If the card lift is desired, move the translateY(-2px) behavior into
extra.css without restoring conflicting transition or appearance rules.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 7ee76be3-bd67-4f55-8b42-c900cdf91085
⛔ Files ignored due to path filters (1)
docs/docs/assets/brand/logo-white.svgis excluded by!**/*.svg
📒 Files selected for processing (4)
docs/docs/assets/stylesheets/copy-page.cssdocs/docs/assets/stylesheets/extra.cssdocs/docs/assets/stylesheets/neoteroi-cards.cssdocs/mkdocs.yml
🚧 Files skipped from review as they are similar to previous changes (1)
- docs/mkdocs.yml
| .ak-copy-page { | ||
| position: relative; | ||
| float: right; | ||
| display: inline-flex; | ||
| align-items: stretch; | ||
| margin: 0 0 0.75rem 1rem; | ||
| font-family: var(--md-text-font-family, inherit); | ||
| font-size: 0.7rem; | ||
| z-index: 3; | ||
| } |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Confirm the copy-page control has a script and markup source.
set -euo pipefail
# Find the mkdocs config and print its JS/CSS asset registration.
fd -t f 'mkdocs.yml' | while IFS= read -r cfg; do
echo "=== $cfg ==="
rg -n -A 8 'extra_javascript|extra_css|custom_dir' "$cfg"
done
# Find any source that produces the ak-copy-page markup or behaviour.
rg -n -C 3 'ak-copy-page' --glob '!**/*.css'Repository: AltimateAI/altimate-code
Length of output: 760
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== tracked docs-related files ==="
git ls-files 'docs/**' | sed -n '1,200p'
echo "=== copy-page stylesheet ==="
if [ -f docs/docs/assets/stylesheets/copy-page.css ]; then
cat -n docs/docs/assets/stylesheets/copy-page.css | sed -n '1,220p'
fi
echo "=== references to copy page classes/state (all tracked files) ==="
python3 - <<'PY'
import subprocess, re, pathlib
files = subprocess.check_output(["git","ls-files"], text=True).splitlines()
needle = re.compile(r'ak-copy-page|aria-expanded|copied|copy-page')
for f in files:
try:
text = pathlib.Path(f).read_text(encoding='utf-8', errors='replace')
except Exception:
continue
if needle.search(text):
print(f"--- {f} ---")
lines = text.splitlines()
for i,l in enumerate(lines,1):
if needle.search(l):
start=max(1,i-4); end=min(len(lines),i+4)
for j in range(start,end+1):
print(f"{j}: {lines[j-1]}")
PY
echo "=== mkdocs js/custom_dir summary ==="
python3 - <<'PY'
import pathlib, re, subprocess
mkdocs = pathlib.Path('docs/mkdocs.yml')
if mkdocs.exists():
txt = mkdocs.read_text()
for section in ['custom_dir','extra_javascript','extra_css']:
print(f"{section}: {section in txt}")
PYRepository: AltimateAI/altimate-code
Length of output: 25178
Register the copy-page script with the same override context.
docs/mkdocs.yml currently only registers extra_css and custom_dir; this stylesheet adds aria-expanded, [hidden], and copied state styles for .ak-copy-page, so add the matching extra_javascript entry for the controller that injects or controls that markup.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/assets/stylesheets/copy-page.css` around lines 4 - 13, Add the
copy-page controller to the existing MkDocs override configuration through an
extra_javascript entry, alongside the current extra_css and custom_dir settings.
Ensure it references the script responsible for controlling .ak-copy-page markup
and its aria-expanded, hidden, and copied states.
| .ak-copy-page__main:hover, | ||
| .ak-copy-page__toggle:hover, | ||
| .ak-copy-page__toggle[aria-expanded='true'] { | ||
| background: var(--md-default-fg-color--lightest); | ||
| border-color: var(--md-default-fg-color--lighter); | ||
| } |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add visible focus styles for the copy control.
The stylesheet defines :hover and [aria-expanded='true'] states, but no focus state. Keyboard users get no reliable focus indicator on .ak-copy-page__main, .ak-copy-page__toggle, or the menu buttons. The menu is a disclosure widget, so keyboard operation is expected.
♿ Proposed fix to add focus indicators
.ak-copy-page__main:hover,
.ak-copy-page__toggle:hover,
.ak-copy-page__toggle[aria-expanded='true'] {
background: var(--md-default-fg-color--lightest);
border-color: var(--md-default-fg-color--lighter);
}
+
+.ak-copy-page__main:focus-visible,
+.ak-copy-page__toggle:focus-visible,
+.ak-copy-page__menu button:focus-visible {
+ outline: 2px solid var(--md-accent-fg-color);
+ outline-offset: 2px;
+}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| .ak-copy-page__main:hover, | |
| .ak-copy-page__toggle:hover, | |
| .ak-copy-page__toggle[aria-expanded='true'] { | |
| background: var(--md-default-fg-color--lightest); | |
| border-color: var(--md-default-fg-color--lighter); | |
| } | |
| .ak-copy-page__main:hover, | |
| .ak-copy-page__toggle:hover, | |
| .ak-copy-page__toggle[aria-expanded='true'] { | |
| background: var(--md-default-fg-color--lightest); | |
| border-color: var(--md-default-fg-color--lighter); | |
| } | |
| .ak-copy-page__main:focus-visible, | |
| .ak-copy-page__toggle:focus-visible, | |
| .ak-copy-page__menu button:focus-visible { | |
| outline: 2px solid var(--md-accent-fg-color); | |
| outline-offset: 2px; | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/assets/stylesheets/copy-page.css` around lines 41 - 46, Add visible
keyboard focus styles for the copy controls by extending the existing state rule
around .ak-copy-page__main and .ak-copy-page__toggle to include appropriate
focus selectors, including the menu buttons used by the disclosure widget.
Ensure focused controls have a reliable visual indicator without removing the
current hover or expanded-state styling.
| /* ---- Hide ToC button on hub indexes (we hide toc in frontmatter) -- */ | ||
| .md-content__button { display: none; } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Scope the .md-content__button rule; it currently hides the button on every page.
The comment states the intent is hub index pages. The selector has no scope, so it hides Material's content buttons site-wide. This removes the "Edit this page" and "View source" links from all documentation pages.
If the goal is hub indexes only, scope the rule to the homepage wrapper class that the rest of this file already uses.
🔧 Proposed fix to scope the rule
-/* ---- Hide ToC button on hub indexes (we hide toc in frontmatter) -- */
-.md-content__button { display: none; }
+/* ---- Hide ToC button on hub indexes (we hide toc in frontmatter) -- */
+.ak-home .md-content__button { display: none; }If the site-wide hide is intentional, update the comment to say so.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| /* ---- Hide ToC button on hub indexes (we hide toc in frontmatter) -- */ | |
| .md-content__button { display: none; } | |
| /* ---- Hide ToC button on hub indexes (we hide toc in frontmatter) -- */ | |
| .ak-home .md-content__button { display: none; } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/assets/stylesheets/extra.css` around lines 818 - 819, Scope the
.md-content__button rule to the existing homepage wrapper class used elsewhere
in the stylesheet, so the button is hidden only on hub index pages while
remaining visible on other documentation pages; keep the comment aligned with
that scoped behavior.
2bf1dff to
1269968
Compare
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (3)
docs/docs/llms.txt (1)
3-4: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd the generated-file banner.
This file is synchronized from the documentation source of truth. Add a clear do-not-edit notice and reference
tools/sync_to_oss.pyso future edits do not bypass the sync process.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/docs/llms.txt` around lines 3 - 4, Update the header of the generated llms documentation to include a clear do-not-edit notice and reference tools/sync_to_oss.py as the synchronization mechanism, while preserving the existing Generated and Source metadata.docs/docs/getting-started/setup.md (1)
291-294: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd language tags to the fenced blocks.
These blocks trigger MD040. Use
textfor the command output, TUI command, and prompt blocks.Also applies to: 310-312, 438-445
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/docs/getting-started/setup.md` around lines 291 - 294, Add the text language tag to the fenced code blocks containing the warehouse_test output and the corresponding command output, TUI command, and prompt examples. Update all referenced blocks, including the additional occurrences, without changing their contents.Source: Linters/SAST tools
docs/docs/getting-started/quickstart.md (1)
70-74: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd language tags to the fenced blocks.
These blocks trigger MD040. Use
textfor the output, prompt, and generated directory-tree blocks.Also applies to: 147-152, 158-174
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/docs/getting-started/quickstart.md` around lines 70 - 74, Add the `text` language tag to the fenced code blocks in the quickstart examples, including the output, prompt, and generated directory-tree blocks referenced by the comment. Update all affected fences consistently without changing their contents.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/docs/getting-started/quickstart.md`:
- Around line 38-39: Update the Altimate LLM Gateway link in the quickstart tip
to use the product’s canonical standalone documentation URL instead of the
`/datamates/` namespace, while preserving the surrounding link text and
description.
- Line 45: Update the environment-scan description near the “Scan your
environment?” dialog to accurately state that credential-bearing values from
profiles, Git configuration, environment variables, and Docker discovery may be
read, sent to the LLM in tool results, and retained in session transcripts. Add
the requested opt-out guidance, or revise the existing privacy claim to match
this behavior while preserving the telemetry-disable instructions.
In `@docs/docs/getting-started/setup.md`:
- Around line 210-226: Update the BigQuery and DuckDB quickstart connection
examples in the getting-started guide to match the documented Warehouses schema:
use {env:VAR} substitution where applicable, credentials_path for BigQuery, and
type plus path for local DuckDB. Ensure the resulting connections.json examples
are directly compatible with Altimate Code.
In `@docs/docs/usage/ide.md`:
- Line 3: Update the page description in the front matter to state that the
Datamates extension can use an existing altimate-code CLI or install it
automatically on first use, matching the behavior documented in the installation
section.
- Around line 53-62: Remove the entire “Extension settings” section, including
the settings table and native-install assurance paragraph. Do not document
altimate.altimateCodeRequireConsent, altimate.codeAutoUpdate, VS Code extension
behavior, or automated GitHub-release installation.
---
Nitpick comments:
In `@docs/docs/getting-started/quickstart.md`:
- Around line 70-74: Add the `text` language tag to the fenced code blocks in
the quickstart examples, including the output, prompt, and generated
directory-tree blocks referenced by the comment. Update all affected fences
consistently without changing their contents.
In `@docs/docs/getting-started/setup.md`:
- Around line 291-294: Add the text language tag to the fenced code blocks
containing the warehouse_test output and the corresponding command output, TUI
command, and prompt examples. Update all referenced blocks, including the
additional occurrences, without changing their contents.
In `@docs/docs/llms.txt`:
- Around line 3-4: Update the header of the generated llms documentation to
include a clear do-not-edit notice and reference tools/sync_to_oss.py as the
synchronization mechanism, while preserving the existing Generated and Source
metadata.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 651506ab-f8a1-419d-aaf6-319d07e8ad7a
📒 Files selected for processing (8)
docs/docs/develop/ecosystem.mddocs/docs/getting-started/quickstart-new.mddocs/docs/getting-started/quickstart.mddocs/docs/getting-started/setup.mddocs/docs/index.mddocs/docs/llms.txtdocs/docs/usage/ide.mddocs/mkdocs.yml
💤 Files with no reviewable changes (1)
- docs/docs/getting-started/quickstart-new.md
🚧 Files skipped from review as they are similar to previous changes (2)
- docs/docs/develop/ecosystem.md
- docs/mkdocs.yml
| !!! tip "Don't want to manage API keys?" | ||
| The [Altimate LLM Gateway](https://help.altimate.ai/datamates/user-guide/components/llm-gateway/) is the top row of the picker — 10M free tokens, and altimate-code auto-selects the right model per task. First-run sign-in uses a loopback OAuth on `127.0.0.1:7317-7325` (falls back if the preferred port is taken). |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use the canonical LLM Gateway documentation URL.
This link targets the /datamates/ product namespace. Replace it with the standalone documentation origin used by this product.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/getting-started/quickstart.md` around lines 38 - 39, Update the
Altimate LLM Gateway link in the quickstart tip to use the product’s canonical
standalone documentation URL instead of the `/datamates/` namespace, while
preserving the surrounding link text and description.
| "model": "google/gemini-2.5-pro" | ||
| } | ||
| ``` | ||
| Immediately after model setup, a **"Scan your environment?"** Yes/No dialog appears. Say **Yes** and altimate-code reads local config files (`.dbt/profiles.yml`, `dbt_project.yml`, `.git/config`) — no credentials are read or sent, and no schema, model contents, or queries leave your computer. An anonymous environment summary (e.g. "dbt project detected, no warehouse configured") may be included in the standard telemetry stream if telemetry is enabled; disable via `ALTIMATE_TELEMETRY_DISABLED=true` or the [telemetry docs](../reference/telemetry.md) if you want a strictly-offline scan. The scan then routes you into one of four branches: |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
rg -n -C3 \
'Scan your environment|ALTIMATE_TELEMETRY_DISABLED|profiles\.yml|\.git/config|environment summary|telemetry' \
. -g '*.ts' -g '*.tsx' -g '*.js' -g '*.md'Repository: AltimateAI/altimate-code
Length of output: 50381
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== candidate files =="
fd -a 'telemetry|telemetry-safety|dbt-profile|git|scan|cli|registry|config' packages docs 2>/dev/null | sed 's#^\./##' | head -200
echo "== focused search =="
rg -n \
'ALTIMATE_TELEMETRY_DISABLED|warehouse_census|Scan your environment|environment summary|profiles\.yml|\.git/config|secret|credential|password|token|key|account|user' \
packages -g '*.ts' -g '*.tsx' --max-count 200Repository: AltimateAI/altimate-code
Length of output: 50381
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== source files matching telemetry safety =="
git ls-files | rg 'packages/.*/src/.*/telemetry.*\.ts$|packages/.*/test/.*/telemetry-safety.*\.ts$'
echo "== telemetry-safety excerpt =="
tg='packages/opencode/src/altimate/telemetry-safety.ts'
if [ -f "$tg" ]; then
nl -ba "$tg" | sed -n '1,260p'
fi
echo "== telemetry safety tests context =="
fg='packages/opencode/test/altimate/telemetry-safety.test.ts'
if [ -f "$fg" ]; then
nl -ba "$fg" | sed -n '1,260p'
fi
echo "== focused definitions for scan/env summary =="
rg -n \
'environment summary|Scan your environment|ALTIMATE_TELEMETRY_DISABLED|warehouse_census|sanitize.*config|secret|credential|password|token|account|user|http-password|raw' \
packages/opencode/src packages/opencode/test --max-count 200Repository: AltimateAI/altimate-code
Length of output: 529
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
FILES='packages/opencode/src/altimate/review/telemetry.ts
packages/opencode/src/altimate/telemetry/index.ts
packages/opencode/src/altimate/telemetry/onboarding.ts
packages/opencode/test/altimate/telemetry-safety.test.ts'
for f in $FILES; do
[ -f "$f" ] || { echo "== missing $f =="; continue; }
echo "== $f (line count) =="
wc -l "$f"
done
echo "== telemetry safety excerpt =="
sed -n '1,280p' packages/opencode/src/altimate/review/telemetry.ts
echo "== onboarding excerpt =="
sed -n '1,280p' packages/opencode/src/altimate/telemetry/onboarding.ts
echo "== index excerpt =="
sed -n '1,280p' packages/opencode/src/altimate/telemetry/index.ts
echo "== safety tests excerpt =="
sed -n '1,280p' packages/opencode/test/altimate/telemetry-safety.test.tsRepository: AltimateAI/altimate-code
Length of output: 41183
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== onboarding scan-related excerpts =="
sed -n '260,337p' packages/opencode/src/altimate/telemetry/onboarding.ts
echo "== telemetry flag constants =="
rg -n 'ALTIMATE_TELEMETRY_(DISABLED|FORCE)|FLAG|Flag|application_insights|disable|disabled' packages/opencode/src -g '*.ts' | head -200
echo "== warehouse census and registry sanitize excerpts =="
rg -n 'warehouse_census|detectAuthMethod|detectQueryType|sanitize|secret|password|token|account|redact|credential' packages/opencode/src/altimate -g '*.ts' -A 5 -B 5Repository: AltimateAI/altimate-code
Length of output: 50381
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== onboarding scan gate section =="
sed -n '260,337p' packages/opencode/src/altimate/telemetry/onboarding.ts
echo "== index track init and warehouse_census section =="
sed -n '1640,1820p' packages/opencode/src/altimate/telemetry/index.ts
sed -n '1820,1960p' packages/opencode/src/altimate/telemetry/index.ts
sed -n '420,470p' packages/opencode/src/altimate/telemetry/index.ts
echo "== exact disabled/force definitions =="
rg -n 'ALTIMATE_TELEMETRY_(DISABLED|FORCE)|isAutomatedRun|disabled|force' packages/opencode/src/altimate/telemetry/index.ts -A 4 -B 4
echo "== exact scan files names =="
git ls-files | rg 'packages/opencode/src/altimate/(.*(scan|census|census)|telemetry/|native/.*connection|config|flag).*' | head -200
echo "== locate scan-related definitions/source =="
rg -n 'environmentScan|scan_gate|environment scan|Scan your environment|warehouse_census|profile|profiles|connection_string|password|token|account|git/config|git config|credentials|registry' packages/opencode/src \
--glob '*.ts' \
-A 3 -B 3 \
| head -300Repository: AltimateAI/altimate-code
Length of output: 46573
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== project scan source =="
sed -n '1,360p' packages/opencode/src/altimate/tools/project-scan.ts
echo "== dbt profiles resolver source =="
sed -n '1,280p' packages/opencode/src/altimate/native/connections/dbt-profiles.ts
echo "== registry census source =="
rg -n 'warehouse_census|census|list\(\)|setConfigs|detectAuth|isSensitive|sanitize|telemetry' packages/opencode/src/altimate/native/connections/registry.ts -A 12 -B 12
echo "== credential/store source =="
sed -n '1,180p' packages/opencode/src/altimate/native/connections/credential-store.tsRepository: AltimateAI/altimate-code
Length of output: 30944
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== project scan rest source =="
sed -n '220,720p' packages/opencode/src/altimate/tools/project-scan.ts
echo "== telemetry masking utils and env-var masking =="
rg -n 'maskString|SENSITIVE_KEYS|isSensitiveKey|mask.*value|mask.*env|env-var|secret' packages/opencode/src/altimate/telemetry/index.ts \
-A 8 -B 4 \
| head -300
echo "== scan telemetry event shape and raw config usage =="
rg -n 'environment_scan|environment_scan_completed|scan_gate_choice|env-vars|connections_found|warehouse_types|connection_sources|has_env_connections|secret|password|token|account|maskString|Telemetry.track\\(' packages/opencode/src/altimate/tools/project-scan.ts \
-A 8 -B 8 \
| head -400Repository: AltimateAI/altimate-code
Length of output: 23296
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== project scan telemetry section =="
rg -n 'telemetry|Environment Scan|connections|scan_gate|environment_scan|has_env_connections|has_dbt|warehouse_types|connection_sources|has_dbt_profiles|Telemetry|mask' packages/opencode/src/altimate/tools/project-scan.ts \
-A 12 -B 8 \
| sed -n '1,260p'
echo "== warehouse discovery credential handling =="
rg -n 'warehouse.discover|secret|sensitive|password|token|connection_string|docker|ssh|censor|redact' packages/opencode/src/altimate -g '*.ts' \
-A 8 -B 8 \
| sed -n '1,260p'Repository: AltimateAI/altimate-code
Length of output: 35699
Clarify credential exposure in the environment scan.
The scan reads .dbt/profiles.yml, .git/config, and environment variables that include credentials, while Docker discovery also reads env password values. These credentials are sent to the LLM in tool results and stored in session transcripts, but this paragraph still says “no credentials are read or sent.” Add a small credential-exposure note and an opt-out, or change the scan claim to match the behavior.
🧰 Tools
🪛 LanguageTool
[grammar] ~45-~45: Ensure spelling is correct
Context: ... Yes/No dialog appears. Say Yes and altimate-code reads local config files (`.dbt/pro...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/getting-started/quickstart.md` at line 45, Update the
environment-scan description near the “Scan your environment?” dialog to
accurately state that credential-bearing values from profiles, Git
configuration, environment variables, and Docker discovery may be read, sent to
the LLM in tool results, and retained in session transcripts. Add the requested
opt-out guidance, or revise the existing privacy claim to match this behavior
while preserving the telemetry-disable instructions.
| @@ -1,6 +1,11 @@ | |||
| --- | |||
| title: "IDE Integration — Altimate Code in VS Code" | |||
| description: "Use Altimate Code inside VS Code via the Datamates extension. Requires the altimate-code CLI to be installed." | |||
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Align the description with the documented CLI installation paths.
Line [3] says that the CLI must already be installed. Lines [59-62] say that the extension installs it automatically by default. Update the description to state that the extension can use an existing CLI or install one on first use.
Proposed fix
-description: "Use Altimate Code inside VS Code via the Datamates extension. Requires the altimate-code CLI to be installed."
+description: "Use Altimate Code inside VS Code via the Datamates extension. The extension can use or install the altimate-code CLI."Also applies to: 59-62
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/usage/ide.md` at line 3, Update the page description in the front
matter to state that the Datamates extension can use an existing altimate-code
CLI or install it automatically on first use, matching the behavior documented
in the installation section.
| ### Extension settings | ||
|
|
||
| The extension contributes these VS Code settings (Settings → search "altimate"): | ||
|
|
||
| | Setting | Default | Description | | ||
| |---|---|---| | ||
| | `altimate.altimateCodeRequireConsent` | `false` | Ask before downloading and installing the altimate-code CLI. By default the extension installs the CLI automatically the first time chat is opened. When enabled, chat shows an install prompt instead — nothing is downloaded until you confirm, and declining shows manual install instructions. | | ||
| | `altimate.codeAutoUpdate` | `true` | Keep the CLI up to date automatically in the background. Checked at most once a day, and only runs when the CLI is already installed. | | ||
|
|
||
| The extension installs the CLI natively: the release archive is fetched over HTTPS from [GitHub releases](https://github.com/AltimateAI/altimate-code/releases), verified against the release's `checksums.txt` (SHA-256), and placed in `~/.altimate/bin` — no shell scripts are executed and nothing outside your home directory is modified. Environments that prefer full control can enable `altimate.altimateCodeRequireConsent` via managed settings, or pre-install the CLI themselves (the extension uses any `altimate` found on `PATH` or in `~/.altimate/bin`). |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n 'altimateCodeRequireConsent|codeAutoUpdate|checksums\.txt|SHA-256|\.altimate/bin|GitHub releases|shell scripts' . \
--glob '!node_modules' \
--glob '!dist' \
--glob '!build' || trueRepository: AltimateAI/altimate-code
Length of output: 19046
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== candidate package files =="
git ls-files | rg '(^|/)package(-lock)?\.json$|(^|/)tsconfig.*\.json$|(^|/)extension\.src(\\.ts|\\.js)?$|(^|/)(extension|src|packages/opencode)' || true
echo
echo "== package names/dependencies mentioning vscode extension =="
rg -n '"`@vscode/test-electron`"|"`@types/vscode`"|vsce|vsce-|code' package.json packages/opencode/package.json . --glob '!node_modules' --glob '!dist' --glob '!build' | head -200 || trueRepository: AltimateAI/altimate-code
Length of output: 50381
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== repository package manifests =="
for f in package.json package-lock.json packages/opencode/package.json .vscode/extensions.json vscode/package.json; do
if [ -f "$f" ]; then
echo "--- $f ---"
cat "$f"
fi
done
echo
echo "== extension settings / altimate code settings references =="
rg -n '"settings"|"altimate\.altimateCodeRequireConsent"|"altimate\.codeAutoUpdate"|altimateCodeRequireConsent|codeAutoUpdate' . --glob '!node_modules' --glob '!dist' --glob '!build' | head -300 || true
echo
echo "== vscode / opencode ide package references =="
rg -n '`@opencode/`.*ide|opencode-ide|altimate-code|altimateCode|codeAutoUpdate|autoUpdate|ide' packages/opencode/package.json packages --glob 'package.json' packages/opencode/src/ide --glob '!node_modules' || trueRepository: AltimateAI/altimate-code
Length of output: 15903
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== source files containing codeAutoUpdate or consent =="
rg -n 'codeAutoUpdate|altimateCodeRequireConsent|requireConsent|consent|install prompt|Show' packages --glob '!node_modules' --glob '!dist' --glob '!build' || true
echo
echo "== install implementations relevant to fetch/verify/extract paths =="
sed -n '220,360p' packages/opencode/src/installation/index.ts 2>/dev/null || true
echo
sed -n='360,470p' install 2>/dev/null || true
echo
sed -n='80,260p' install.ps1 2>/dev/null || trueRepository: AltimateAI/altimate-code
Length of output: 50380
Remove the extension settings and native-install assurances.
This repository does not define altimate.altimateCodeRequireConsent, altimate.codeAutoUpdate, an Altimate VS Code extension, or automated native installs from GitHub releases. The install scripts are separate CLI installation tools, not VS Code extension behavior, so this section documents unsupported extensions/behavior.
🧰 Tools
🪛 LanguageTool
[grammar] ~55-~55: Ensure spelling is correct
Context: ...ese VS Code settings (Settings → search "altimate"): | Setting | Default | Description | |---...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docs/usage/ide.md` around lines 53 - 62, Remove the entire “Extension
settings” section, including the settings table and native-install assurance
paragraph. Do not document altimate.altimateCodeRequireConsent,
altimate.codeAutoUpdate, VS Code extension behavior, or automated GitHub-release
installation.
fc71613 to
ef000c5
Compare
| "account": "xy12345.us-east-1", | ||
| "user": "dbt_user", | ||
| "password": "{env:SNOWFLAKE_PASSWORD}", | ||
| "password": "${SNOWFLAKE_PASSWORD}", |
There was a problem hiding this comment.
WARNING: Connection password uses undocumented ${...} substitution instead of the canonical {env:VAR_NAME}
The Quickstart's Snowflake example uses ${SNOWFLAKE_PASSWORD}, but the documented substitution syntax is {env:VAR_NAME} (see configure/config.md → "Value Substitution", and configure/warehouses.md). The sibling setup.md page uses the correct "{env:SNOWFLAKE_PASSWORD}" form. A user who copies this likely gets the literal string rather than the resolved secret. The PostgreSQL example (line 119) has the same ${...} issue.
| "password": "${SNOWFLAKE_PASSWORD}", | |
| "password": "{env:SNOWFLAKE_PASSWORD}", |
Reply with @kilocode-bot fix it to have Kilo Code address this issue.
| "access_token": "{env:DATABRICKS_TOKEN}", | ||
| "catalog": "main", | ||
| "schema": "default" | ||
| "keyfile": "~/.config/gcloud/application_default_credentials.json" |
There was a problem hiding this comment.
WARNING: BigQuery example uses keyfile, but the documented field is credentials_path
configure/warehouses.md documents the BigQuery credential field as credentials_path (omittable for ADC). keyfile is not a recognized field, so the connection won't load the service account JSON. The sibling setup.md uses the correct "credentials_path" field.
| "keyfile": "~/.config/gcloud/application_default_credentials.json" | |
| "credentials_path": "~/.config/gcloud/application_default_credentials.json" |
Reply with @kilocode-bot fix it to have Kilo Code address this issue.
| "local": { | ||
| "type": "duckdb", | ||
| "path": "./data/analytics.duckdb" | ||
| "database": "./data/analytics.duckdb" |
There was a problem hiding this comment.
WARNING: DuckDB example uses "database", but the documented field is "path"
configure/warehouses.md documents DuckDB with "path": "./dev.duckdb". "database" is used for database names on other warehouses, not the DuckDB file path, so this connection likely won't open the file. The sibling setup.md uses the correct "path" field.
| "database": "./data/analytics.duckdb" | |
| "path": "./data/analytics.duckdb" |
Reply with @kilocode-bot fix it to have Kilo Code address this issue.
Note on the standalone-site findings (docs.altimate.sh)
Consequences for this review:
Actions taken:
Thanks @sahrizvi for the thorough review — the content-level fixes it surfaced were applied at the help-docs source; the deploy-level ones are obviated by the redirect. |
sahrizvi
left a comment
There was a problem hiding this comment.
Re-review — verdict: request changes (2 blocking, 6 minor, 6 nits)
The force-push fixed everything that broke the deployed site. I verified against a built artifact rather than reading the diff:
| Tree | non-strict | --strict |
|---|---|---|
main |
exit 0 | exit 1 (broken ../usage/telemetry.md link in quickstart-new.md) |
| this branch | exit 0 | exit 0, zero WARNING/ERROR lines |
Crawling the built site: 2 raw .md hrefs, both legitimate GitHub blob links; 78 datamates hrefs, all fully qualified; all 17 root-relative internal links resolve to built pages. Earlier findings #1, #2, #3, #5, #9 and #10 are closed, and deleting data-engineering/guides/ci-headless.md cleared debt the last pass flagged as untouched. This branch is a net improvement to build health.
Two blocking items remain, both new, both left as inline comments:
reference/telemetry.md/reference/security-faq.md— a privacy disclosure was deleted while the behavior still ships. The### CLI Authentication Flowsection and the matching Security FAQ bullet are gone, butbuildCliContext()still sends the persistent machine ID for PostHog account attribution. A separable second deletion drops the workingtelemetry.disabledopt-out from the FAQ. The section is not upstream — it was written here in #1068 alongside the feature — so this needs a fix inhelp-docstoo, or the next sync removes it again.mkdocs.yml— droppingassets/css/extra.cssfromextra_cssun-stylesgetting-started/index.md, which still uses eight classes defined only in that file. This is the inverse of earlier finding #4.
Also worth fixing (non-blocking)
getting-started/setup.md (454 lines) is in no navigation. Getting Started lists only Overview and Quickstart; the build reports the file as outside nav, and its only inbound link is getting-started/quickstart.md:208. Previously this content was in nav as Setup: getting-started/quickstart.md. Suggested: add - Setup: getting-started/setup.md.
On provenance — the page does come from upstream, just from an undeployed branch: help-docs feat/sync-docs-to-oss has it at df6df4f, byte-identical once BOM and CRLF are normalized (454 lines both sides), while help.altimate.ai/code/getting-started/setup/ currently 404s. Worth a line in the PR description, since it's unreachable in both places today.
Duplicate top-level pages are now being groomed rather than retired. These are orphans that pre-date the PR, but it added front matter to every one — giving each a canonical-looking title and description:
| Orphan | Lines | Overlaps |
|---|---|---|
quickstart.md — "Quickstart — Altimate Code" |
118 | getting-started/quickstart.md — "Quickstart — Altimate Code in 10 Minutes" |
getting-started.md |
283 | getting-started/index.md |
configure/tools.md |
154 | configure/tools/config.md (line-sequence similarity 0.494; vs tools/index.md only 0.068) |
Two published Quickstarts with near-identical titles and different install instructions compete in search. Separately, index.md and getting-started/index.md carry the identical title Altimate Code.
Quickstart duration is promised three ways — getting-started/quickstart.md:2 says "in 10 Minutes", index.md:29 says "under five minutes", llms.txt:10 says "(5 min)". The rewritten Quickstart now covers onboarding, warehouse setup, an environment scan and an NYC-taxi dbt/Airflow walkthrough; 10 minutes looks like the honest number.
No pre-merge docs validation (.github/workflows/docs.yml, unchanged from main). Still triggers only on push to main, still builds without --strict, still installs mkdocs-material unpinned — and the cache-dependency-path points at docs/requirements.txt, which is itself just the unpinned line mkdocs-material. Last round's build failure and 36 dead nav entries both reached review because nothing ran pre-merge. This branch happens to pass now; the generator can still reproduce the same class of failure.
on:
pull_request:
paths: ["docs/**", ".github/workflows/docs.yml"]
push:
branches: ["main"]
paths: ["docs/**", ".github/workflows/docs.yml"]
# ...
- run: pip install -r docs/requirements.txt
- run: mkdocs build --strict -f docs/mkdocs.yml -d siteNo do-not-edit banner — zero of 73 files carry one, and no CI check compares the mirror against help-docs. (develop/sdk.md matches a naive grep for "auto-generated", but at L198/L202 that refers to the OpenAPI-generated SDK client.) Blocking item 1 is the first concrete instance of the failure this guard exists to prevent: a repo-local edit silently clobbered by a sync.
Nits
.ak-subis undefined — used atindex.md:12for the homepage hero subtitle; the stylesheet defines.ak-hero-sub. The lede renders as a plain<p>while its own children.ak-bench-line/.ak-dotdo style, giving a half-rendered hero..ak-needs-rows--orange(getting-started/index.md:128) has no rule; base.ak-needs-rowsexists atextra.css:2325, so it degrades to the default variant. Near-miss worth noting: the stylesheet defines--orangevariants for the singular child class (.ak-need-row--orange,extra.css:2429), not the plural container — the child links style fine, only the container tint is lost.assets/stylesheets/extra.cssis the full marketing-site system (2740 lines / 74 KB), including.ak-hub-*,.ak-flow-*and.ak-anim, none used by any page here..ak-anim { opacity: 0 }is inert only because nothing uses it — a future sync bringing in matching markup would render those elements invisible, since the scroll-observer JS wasn't ported.- Two same-page anchors are broken by a slug mismatch (pre-existing, but this PR touches both files):
reference/telemetry.md:68links#delivery--reliabilitywhile the built id isdelivery-reliability;usage/dbt-pr-review.md:132links#model--credentials-for-the-advisory-lanevsmodel-credentials-for-the-advisory-lane. MkDocs reports these asINFO, so even--strictwon't catch them. llms.txtindexes a different origin than the one serving it — all 15 links point athelp.altimate.ai/code/…while the file publishes atdocs.altimate.sh/llms.txt. Harmless today (see below), wrong the moment the two sites diverge, which is the stated reason this repo exists.- The sync still re-quotes YAML inside fenced examples (
configure/skills.md,agents.md,commands.md) and still re-indents the wholenav:block 4→2 spaces. Both harmless; both will keep obscuring real changes in future diffs.
One piece of context
docs.altimate.sh currently returns a CloudFront 301 to help.altimate.ai/code/… for every path, so the artifact this workflow builds isn't user-reachable right now. That's why the rendering issues above are graded as they are rather than higher — and it's also why the two removed routes (/getting-started/quickstart-new/, /data-engineering/guides/ci-headless/) still resolve 200 through the edge and aren't flagged. Worth adding mkdocs-redirects if the standalone origin is ever restored.
Suggested checks, by what they'd have caught
pull_requesttrigger +--strict— both of last round's site-breaking bugs, and the next generated revision.- CSS class coverage: every class used in markdown is defined in some loaded stylesheet — blocking item 2 and the
.ak-subnit. Nothing text-based catches these today. - Sync integrity: fail when a mirrored file diverges from
help-docswithout a corresponding upstream change — blocking item 1. - Nav integrity + orphan assertion: every nav target exists, every page is in nav or explicitly allow-listed.
- Link checker over the built artifact, including fragments.
- Semantic round-trip on
mkdocs.yml: onlynav:may differ — earlier findings #1 and #12 directly.
| ### CLI Authentication Flow | ||
|
|
||
| When you sign in using the CLI browser auth flow (`altimate auth login`), the anonymous machine ID (a random UUID persisted at `~/.altimate/machine-id` — a device/installation identifier, reused across sessions) is included in the authorization URL and associated with your account in product analytics. This is used solely to correlate CLI install events with authenticated accounts in aggregate funnel analytics — it is not used for advertising or cross-site tracking. Your telemetry opt-out suppresses this: when you disable telemetry — via `ALTIMATE_TELEMETRY_DISABLED=true` **or** the `telemetry.disabled` config option — the machine ID is omitted from the authorization URL entirely. The machine ID is associated with your account in PostHog for this funnel analysis, separate from the Azure Application Insights pipeline used for other CLI telemetry events. | ||
|
|
There was a problem hiding this comment.
Blocking — this deletes a privacy disclosure for behavior that still ships.
buildCliContext() in packages/opencode/src/altimate/plugin/altimate.ts still puts the persistent ~/.altimate/machine-id in the authorize URL fragment (#cli_context=, L131-135), and per the contract comment at L57-77 the frontend registers it as the cli_machine_id PostHog super-property, attributing the CLI device to the authenticated account.
With this section gone, PostHog appears zero times anywhere under docs/. What survives immediately below, in Data Retention, is now unqualified and contradicted by that flow:
Telemetry data is sent to Azure Application Insights … We do not maintain a separate data store.
On provenance, because it changes the fix. This section is not upstream: searching all branches and full history of help-docs for CLI Authentication Flow, cli_context and cli_machine_id returns nothing, while git log --all -S 'CLI Authentication Flow' here shows it was added by #1068 — the same PR that implemented the correlation. So the sync is overwriting a more accurate privacy page with a less accurate one, and restoring it on this branch alone won't hold — the next sync deletes it again.
Suggested: (1) add the section to help-docs, updated for the fragment-based implementation; (2) restore it here; (3) qualify the "no separate data store" sentence to distinguish App Insights event telemetry from PostHog auth attribution.
There was a problem hiding this comment.
Fixed at the source (efc0a826f4). Good catch on provenance — restored the CLI Authentication Flow section into help-docs reference/telemetry.md (using the product's #1068 wording: machine-ID → PostHog auth-attribution, opt-out via ALTIMATE_TELEMETRY_DISABLED=true or telemetry.disabled), so the down-sync preserves it instead of deleting it. Also qualified the Data Retention sentence: "Aside from the PostHog auth-attribution described above, we do not maintain a separate data store for event telemetry."
| - **Logged-in users:** Your email is SHA-256 hashed before sending. We never see your raw email. | ||
| - **Anonymous users:** A random UUID (`crypto.randomUUID()`) is generated on first run and stored at `~/.altimate/machine-id`. This is NOT tied to your hardware, OS, or identity — it's purely random. | ||
| - **Both identifiers** are only sent when telemetry is enabled. Disable via `ALTIMATE_TELEMETRY_DISABLED=true` or the `telemetry.disabled` config option. | ||
| - **Both identifiers** are only sent when telemetry is enabled. Disable with `ALTIMATE_TELEMETRY_DISABLED=true`. |
There was a problem hiding this comment.
Blocking — this drops a documented, working opt-out.
The telemetry.disabled config gate is real and honoured: altimate.ts L81-89 resolves Config.get() and sets disabled = Boolean(userConfig.telemetry?.disabled), failing closed when config is unreadable. And reference/telemetry.md:149 still states that "ALTIMATE_TELEMETRY_DISABLED and the config opt-out take precedence over both."
So the Security FAQ — the page a privacy-conscious reader actually opens — now understates the available controls and disagrees with its own sibling page.
| - **Both identifiers** are only sent when telemetry is enabled. Disable with `ALTIMATE_TELEMETRY_DISABLED=true`. | |
| - **Both identifiers** are only sent when telemetry is enabled. Disable via `ALTIMATE_TELEMETRY_DISABLED=true` or the `telemetry.disabled` config option. |
There was a problem hiding this comment.
Fixed at the source (efc0a826f4). Restored the config opt-out in help-docs reference/security-faq.md: "Disable with ALTIMATE_TELEMETRY_DISABLED=true or the telemetry.disabled config option." — now consistent with telemetry.md:149.
| - assets/stylesheets/neoteroi-cards.css | ||
| - assets/stylesheets/extra.css | ||
| - assets/stylesheets/copy-page.css |
There was a problem hiding this comment.
Blocking — dropping assets/css/extra.css here un-styles getting-started/index.md.
The new stylesheets cover index.md, but getting-started/index.md still uses the old class system — unchanged by this PR (6 occurrences on main, 6 here). None of those classes exist in any of the three loaded stylesheets:
| Class | in loaded stylesheets | in assets/css/extra.css (no longer loaded) |
|---|---|---|
.hero |
0 | 1 |
.hero-tagline |
0 | 1 |
.hero-description |
0 | 1 |
.hero-actions |
0 | 2 |
.hero-install |
0 | 3 |
.section-heading |
0 | 1 |
.section-sub |
0 | 1 |
.doc-links |
0 | 3 |
The page ends up mixing both systems: its middle sections were rewritten onto nt-cards/ak-card-icon (defined), while the hero, all four <h2 class="section-heading">, all seven <p class="section-sub"> and the closing doc-links block stay on the old system. It renders as new card grids inside an unstyled hero.
Either port the .hero-* / .section-* / .doc-links rules into assets/stylesheets/extra.css, or move getting-started/index.md onto the new classes — then delete the now-orphaned assets/css/extra.css.
Separately, copy-page.css on the next line is dead weight here: it styles .ak-copy-page*, which is JS-injected upstream. There is no extra_javascript, no .js under docs/assets, and docs/overrides/main.html injects only the analytics snippet — .ak-copy-page appears in zero files. It also carries an .md-content__inner::after rule that reaches into Material's own content wrapper.
There was a problem hiding this comment.
We are keeping help docs as source of truth, so we dont need to keep the css built in altimate code docs going forward.
|
|
||
| - [Quickstart (5 min)](https://help.altimate.ai/code/quickstart/): Install altimate, configure your LLM provider, connect your warehouse, and run your first query in under 5 minutes. | ||
| - [Full Setup Guide](https://help.altimate.ai/code/getting-started/): Complete installation, warehouse configuration for all 8 supported warehouses, LLM provider setup, and first-run walkthrough. | ||
| - [Full Setup Guide](https://help.altimate.ai/code/getting-started/): Complete installation, warehouse configuration for all 13 supported warehouses, LLM provider setup, and first-run walkthrough. |
There was a problem hiding this comment.
This line is now correct — configure/warehouses.md documents 13 (Snowflake, BigQuery, Databricks, Trino, PostgreSQL, Redshift, DuckDB, MySQL, MongoDB, ClickHouse, Oracle, SQLite, SQL Server) — but line 24 still enumerates 8 and contradicts it:
Direct connectivity to Snowflake, BigQuery, Databricks, PostgreSQL, Redshift, DuckDB, MySQL, SQL Server.
Trino, MongoDB, ClickHouse, Oracle and SQLite are missing. Same root cause as the earlier llms.txt finding: individual lines were hand-corrected instead of regenerating the file from source data.
There was a problem hiding this comment.
Fixed at the source (efc0a826f4). Line 24 (Warehouse Tools) now lists all 13 — added Trino, MongoDB, ClickHouse, Oracle, SQLite — matching configure/warehouses.md and line 11.
ef000c5 to
efc0a82
Compare
sahrizvi
left a comment
There was a problem hiding this comment.
Round-3 review — verdict: request changes (6 blocking, 8 minor, 7 nits)
First, credit where it's due: the privacy disclosure was fixed at the root, not just locally. The last round argued that a mirror-only fix would be deleted by the next sync, and help-docs commit 21dde0d carries the same restoration upstream. That was the harder half of the ask and it landed within a day.
The author's edits this round are exactly three files (git diff <prev-head>..HEAD -- docs/): telemetry.md, security-faq.md, llms.txt. The build still passes --strict with zero warnings, which main does not.
The reason this is still a request-changes is that going a layer deeper than links-and-builds turned up four documented workflows that don't work, plus a second instance of the sync-deletion mechanism that caused the privacy problem in the first place. Earlier rounds verified links, builds and CSS; they did not execute the CLI examples or check the published extension manifest. All six blocking items are left as inline comments.
| # | Blocking item | Where |
|---|---|---|
| 1 | Getting Started overview still loses its stylesheet | docs/mkdocs.yml |
| 2 | Command-palette entry documented doesn't exist | usage/ide.md |
| 3 | DuckDB example silently opens :memory:; /schema-index isn't a command |
getting-started/quickstart.md |
| 4 | altimate /discover is parsed as a directory |
getting-started/setup.md |
| 5 | Re-sync deletes shipped Ctrl+Y docs |
configure/keybinds.md, configure/permissions.md |
| 6 | Security FAQ's CLI-auth bullet is still deleted | reference/security-faq.md |
On the privacy fix specifically
Three of four sub-items landed. Two gaps remain beyond the still-deleted FAQ bullet (inline comment 6):
- The upstream commit is on an unmerged branch.
git branch -r --contains 21dde0dreturns onlyfeat/sync-docs-to-oss; it is not an ancestor of upstreammain. Whether the next sync preserves the section depends on which ref the sync reads — if it readsmain, the deletion recurs. - The deployed page still omits it.
help.altimate.ai/code/reference/telemetry/has noCLI Authentication Flow, noPostHog, notelemetry.disabledin its rendered text. Sincedocs.altimate.sh301s every path there, that unqualified page is what users reach today. This branch fixes the mirror; the mirror isn't the served surface.
Also, the restored text is byte-identical to what was deleted, so the requested update for the fragment-based implementation didn't happen — fragment appears 0 times in telemetry.md. That distinction favours the product: altimate.ts:65-68 notes cli_context goes in the URL fragment, which browsers never transmit, keeping the ID out of access logs and Referer headers. As written ("included in the authorization URL"), a security reviewer will assume a query parameter. One clause fixes it.
Minor
Two orphan files are silently discarded by destination collisions. docs/docs/getting-started.md (283 lines) and docs/docs/configure/tools.md (154 lines) resolve to the same output path as their directory-index siblings, so only one survives:
site/getting-started/index.html -> <title>Altimate Code …> (getting-started/index.md won)
site/configure/tools/index.html -> <title>Tools Reference …> (configure/tools/index.md won)
437 lines never reach the site, and MkDocs emits no warning at all — not even under --strict. This PR added front matter to both, which makes them look maintained.
One genuine duplicate entry point remains. docs/docs/quickstart.md does not collide — it publishes at /quickstart/ ("Quickstart — Altimate Code") alongside /getting-started/quickstart/ ("Quickstart — Altimate Code in 10 Minutes"), with different install instructions. Separately, index.md and getting-started/index.md still carry the identical title Altimate Code.
The IDE page contradicts itself on the CLI prerequisite. usage/ide.md:20 says the extension "requires this to be installed", while ide.md:57-62 documents altimate.altimateCodeRequireConsent defaulting to false — i.e. the extension installs the CLI automatically on first chat. The settings table is the accurate one (it matches VSIX 0.8.12); the prerequisite section sends users to do work the extension already does.
getting-started/setup.md (454 lines) is still not in nav — the build still lists it as outside nav, reachable only from a link at the bottom of the Quickstart. One line in mkdocs.yml, though fix the /discover command on it first.
Still no pre-merge or strict docs validation. git diff --stat origin/main...HEAD -- .github/ is empty. Push-only on main, no --strict, unpinned mkdocs-material. Every defect in this review is mechanically checkable; none would be caught pre-merge today.
Still no provenance marker or divergence guard. Zero of 73 Markdown files carry a do-not-edit/source marker, and nothing compares the mirror against help-docs. There are now two documented instances of the resulting race (blocking items 5 and 6), in the same direction. This is the highest-leverage missing control in the PR — fixing the individual deletions doesn't fix the mechanism.
Quickstart duration is promised three ways — getting-started/quickstart.md:2 "in 10 Minutes"; index.md:31 "under five minutes"; llms.txt:10 "(5 min)".
llms.txt is still hand-edited rather than generated. Line 24 is now correct (all 13 warehouses — a genuine fix this round), but the file still claims 25 telemetry event types against 56 event-table rows carrying ~60 distinct identifiers, claims 12 Security FAQ pairs against 21 question headings, and still promises the five-minute Quickstart. Counts that drift are better dropped than hand-maintained.
Nits
- A third broken fragment, missed earlier —
quickstart.md:58linksgetting-started.md#step-3-configure-your-warehouse-optional, matching no generated id. Joinsreference/telemetry.md:68(#delivery--reliabilityvs iddelivery-reliability) andusage/dbt-pr-review.md:132.--strictcatches none: the first two are INFO, the third is cross-page. .ak-substill undefined (index.md:12) — the stylesheet defines.ak-hero-sub, so the homepage lede renders as a plain<p>while its children.ak-bench-line/.ak-dotstyle correctly..ak-needs-rows--orangestill undefined (getting-started/index.md:128) — base.ak-needs-rowsexists atextra.css:2325;--orangevariants exist only for the singular child.ak-need-row--orange(:2429). Only the container tint is lost.copy-page.cssremains dead — 161 lines styling.ak-copy-page*, which is JS-injected upstream. Noextra_javascript, no.jsunderdocs/assets,.ak-copy-pagein zero files.- The marketing stylesheet is still imported wholesale — 2740 lines / 74 KB including unused
.ak-hub-*,.ak-flow-*, and.ak-anim { opacity: 0 }with no observer JS ported. llms.txtindexes a different origin than the one serving it — 25help.altimate.ai/code/…links while the file publishes atdocs.altimate.sh/llms.txt. Harmless while the 301 stands.- YAML re-quoting and
nav:re-indent — unchanged; the sync still rewrites fenced examples and reformats the whole nav block 4→2 spaces.
Corrections to my earlier rounds
- I marked the Datamates/Altimate MCP rename FIXED twice. That was wrong — see inline comment 2. No earlier round checked the extension manifest.
- I tracked the two
security-faq.mddeletions as one finding, which let half a fix read as a whole one. See inline comment 6. - My artifact crawl reported two broken fragments; there are three — it didn't check cross-page fragments.
- My statement that the disclosure was absent upstream was true then and is now stale —
21dde0dexists, on an unmerged branch.
Suggested checks, by leverage
- Sync integrity against
help-docs— fail when a mirrored file diverges without a matching upstream change. Two documented instances now. pull_requesttrigger +--strict— the baseline gate everything else hangs off.- Executable documentation examples — blocking items 2/3/4 are all "documented command or config doesn't match the code", each checkable against CLI arg parsing, the command-template registry, driver config fields, and the extension manifest.
- Destination-collision assertion — no two sources may resolve to the same output path. MkDocs won't tell you.
- CSS class coverage — every class used in markdown defined in a loaded stylesheet.
- Fragment-aware link checking, including cross-page; plus nav-integrity and an orphan allow-list.
| - assets/stylesheets/neoteroi-cards.css | ||
| - assets/stylesheets/extra.css | ||
| - assets/stylesheets/copy-page.css |
There was a problem hiding this comment.
Blocking (carried over, unchanged) — dropping assets/css/extra.css here un-styles getting-started/index.md.
docs/mkdocs.yml wasn't touched this round. The new stylesheets cover index.md, but getting-started/index.md still uses the old class system — unchanged by this PR (16 occurrences). None of those classes exist in any of the three loaded stylesheets:
| Class | Loaded stylesheets | assets/css/extra.css (not loaded) |
|---|---|---|
.hero |
0 | 1 |
.hero-tagline |
0 | 1 |
.hero-description |
0 | 1 |
.hero-actions |
0 | 2 |
.hero-install |
0 | 3 |
.section-heading |
0 | 1 |
.section-sub |
0 | 1 |
.doc-links |
0 | 3 |
The page renders as new nt-cards grids inside an unstyled hero, under unstyled section headings.
Either port the .hero-* / .section-* / .doc-links rules into assets/stylesheets/extra.css, or move the page onto the new class system — then delete the orphaned assets/css/extra.css.
There was a problem hiding this comment.
This is expected. We will keep help docs as source of truth and this is just copy of that. No need to fix this
| 2. Type `Altimate MCP` | ||
| 3. Select **Altimate MCP: Open Altimate Code Chat** |
There was a problem hiding this comment.
Blocking — this palette entry does not exist, so step 2 of the install flow fails.
The extension ships from AltimateAI/vscode-altimate-mcp-server, not this repo (sdks/vscode here is a different extension with opencode.* commands), so the published manifest is the authority. Marketplace displayName is Datamates, version 0.8.12, and its VSIX package.json declares:
{ "command": "altimate.openChat", "title": "Open Altimate Code Chat", "category": "Datamates" }VS Code renders palette entries as category: title, so the real entry is Datamates: Open Altimate Code Chat. Typing Altimate MCP finds nothing.
This is my error from the previous two rounds — I marked the brand rename fixed without checking the manifest. The rename is right for prose; it must not be applied to the literal palette string, which has to match the extension's own category.
The same manifest also contradicts line 8, which says the extension's "in-editor commands and docs are branded Altimate MCP". The commands are branded Datamates; the chat panel and docs carry the Altimate MCP name.
| 2. Type `Altimate MCP` | |
| 3. Select **Altimate MCP: Open Altimate Code Chat** | |
| 2. Type `Datamates` | |
| 3. Select **Datamates: Open Altimate Code Chat** |
Separately (non-blocking): line 20 says the extension "requires this to be installed", while the settings table at lines 57-62 documents altimateCodeRequireConsent defaulting to false — the extension installs the CLI automatically on first chat. The settings table is accurate against VSIX 0.8.12; the prerequisite section should say pre-installing is optional.
There was a problem hiding this comment.
This is copy of help docs. Changing the name is ongoing effort in altimate mcp server repo. This will get fixed once all changes are done in help docs and then re synced to this repo
| "local": { | ||
| "type": "duckdb", | ||
| "path": "./data/analytics.duckdb" | ||
| "database": "./data/analytics.duckdb" |
There was a problem hiding this comment.
Blocking — this key is ignored, and the failure is silent.
packages/drivers/src/duckdb.ts:16 reads path only:
const dbPath = (config.path as string) ?? ":memory:"There's no database → path alias (packages/drivers/src/normalize.ts gives DuckDB no aliases), so this config opens an in-memory database. Nothing errors — the user follows the Quickstart, everything appears to work, and the file at ./data/analytics.duckdb is never touched. Silent-wrong is the worst failure mode for a quickstart.
| "database": "./data/analytics.duckdb" | |
| "path": "./data/analytics.duckdb" |
There was a problem hiding this comment.
fixed in latest commit
|
|
||
| ```bash | ||
| altimate --agent analyst | ||
| /schema-index snowflake |
There was a problem hiding this comment.
Blocking — /schema-index is not a registered command.
There are nine built-in slash-command templates, all under packages/opencode/src/command/template/: ci-check, configure-claude, configure-codex, discover, discover-and-add-mcps, feedback, initialize, onboard-connect, review. None is schema-index.
The underlying capability is SchemaIndexTool (packages/opencode/src/altimate/tools/schema-index.ts), imported at packages/opencode/src/tool/registry.ts:77 and registered at :410. The string schema_index appears inside discover.txt and onboard-connect.txt as a tool the agent may call — never as something a user types.
Replace with a verified interaction (ask the agent to index the connection), or register a real /schema-index command and document that.
There was a problem hiding this comment.
fixed in latest commit
| > Skip this step if you want to work locally. You can always run `/discover` later. | ||
|
|
||
| ```bash | ||
| altimate /discover |
There was a problem hiding this comment.
Blocking — this is parsed as a directory path, not a slash command.
The TUI command is declared $0 [project] (packages/opencode/src/cli/cmd/tui.ts:79-89), with project described as "path to start altimate-code in". It's resolved and process.chdir()-ed at tui.ts:128-134, erroring with Failed to change directory to …. So altimate /discover tries to chdir into /discover and fails.
/discover is a real slash command — packages/opencode/src/command/template/discover.txt — but only inside the TUI.
| altimate /discover | |
| altimate |
Then type /discover at the TUI prompt.
There was a problem hiding this comment.
fixed in latest commit
| | Leader + `k` | Keybind list | | ||
| | Leader + `e` | Open editor | | ||
| | Leader + `q` | Quit | | ||
| | `Ctrl+Y` | Toggle YOLO mode for this session (confirms when enabling; instant when disabling) | |
There was a problem hiding this comment.
Blocking — this PR deletes documentation for a feature that still ships.
Relative to current origin/main, this PR removes the Ctrl+Y row here, the session_yolo_toggle identifier at keybinds.md:118, and the mid-session-toggle explanation at configure/permissions.md:135.
The feature ships: packages/tui/src/config/keybind.ts:106 (session_yolo_toggle: keybind("ctrl+y", "Toggle YOLO mode for this session")) and :317, with packages/tui/test/yolo-keybind.test.tsx covering it.
This is the same mechanism as the privacy-disclosure deletion, in the same direction — stale upstream content overwriting newer repo-local docs — and it appeared after the rebase, so it's new this round. Restoring the individual sections isn't sufficient; without a divergence guard this recurs on every sync.
Restore these upstream and in this mirror.
There was a problem hiding this comment.
fixed in latest commit
| - **Both identifiers** are only sent when telemetry is enabled. Disable via `ALTIMATE_TELEMETRY_DISABLED=true` or the `telemetry.disabled` config option. | ||
| - **Both identifiers** are only sent when telemetry is enabled. Disable with `ALTIMATE_TELEMETRY_DISABLED=true` or the `telemetry.disabled` config option. | ||
| - **No fingerprinting:** We do not use browser fingerprinting, hardware IDs, MAC addresses, or IP-based tracking. | ||
| - **CLI auth flow:** When you sign in via `altimate auth login`, the anonymous machine ID is included in the authorization URL and associated with your account in product analytics for funnel analysis. This is suppressed when you disable telemetry — via `ALTIMATE_TELEMETRY_DISABLED=true` or the `telemetry.disabled` config option — and the machine ID is omitted from the URL entirely. |
There was a problem hiding this comment.
Blocking — this bullet is still deleted; only half the privacy fix landed.
The previous round flagged two separate deletions in this file. One was restored (the telemetry.disabled opt-out at line 138 — thank you), but this bullet was not. Against current origin/main, the PR still removes it, and grep -n 'CLI auth flow' docs/docs/reference/security-faq.md returns nothing on HEAD.
The behavior it described still ships (packages/opencode/src/altimate/plugin/altimate.ts:58-138). So the Security FAQ — the page a privacy-conscious reader actually opens — carries no disclosure of the auth-flow machine-ID correlation. The restoration landed in reference/telemetry.md only.
That's my tracking error from the previous round: I recorded the two deletions as one finding, which let a half-fix read as complete.
Restore the bullet here and in the upstream source, so the next sync doesn't drop it again.
There was a problem hiding this comment.
fixed in latest commit
… disclosure, keybind [docs-sync] Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011fcN8kPwzjDeBysYUzKfJU
efc0a82 to
9f4973e
Compare
sahrizvi
left a comment
There was a problem hiding this comment.
Round-4 review — verdict: request changes (8 major, 7 minor, 7 nits)
Thanks for the continued iteration on this — the Setup fold is a genuinely good structural call, and several fixes this round landed exactly right.
What's closed since last round: the DuckDB config key is now "path" (with "database" correctly retained for Snowflake and PostgreSQL, which do use it); the non-existent /schema-index step was removed rather than reworded; the Security FAQ CLI-auth bullet is back verbatim; and the Ctrl+Y keybind row is restored. setup.md folding into the Quickstart removes a competing entry point cleanly, with no dangling links. Build still passes --strict with zero warnings, which main does not.
Eight blocking items remain. Six are left as inline comments; two more are noted below because their lines fall outside the diff.
| # | Blocking item | Where |
|---|---|---|
| 1 | "No credentials are read" doesn't match the scan's behaviour | getting-started/quickstart.md:45 |
| 2 | {env:…} isn't expanded in connections.json |
getting-started/quickstart.md:88,104,119 |
| 3 | Getting Started overview loses its stylesheet | docs/mkdocs.yml |
| 4 | Command-palette entry doesn't exist | usage/ide.md |
| 5 | The second live Quickstart carries five broken workflows | docs/docs/quickstart.md |
| 6 | YOLO toggle docs restored only in part | configure/keybinds.md, configure/permissions.md |
| 7 | Keybind reference is substantially out of date | configure/keybinds.md |
| 8 | Privacy disclosure not yet durable or live | upstream help-docs |
Not anchorable inline (lines outside the diff):
configure/warehouses.md:546repeatsaltimate /discoveras a shell command. The TUI declares$0 [project](packages/opencode/src/cli/cmd/tui.ts:80) and callsprocess.chdir(next)at:132, so this attempts tochdirinto/discover. The canonical Quickstart now presents/discovercorrectly as a TUI command — this page anddocs/docs/quickstart.md:55still have the shell form.- Upstream privacy disclosure.
help-docscommit21dde0drestores the CLI-auth section, and thank you for doing that at the source rather than only here. It hasn't reached upstreammainyet (git merge-base --is-ancestor 21dde0d origin/main→ exit 1; onlyfeat/sync-docs-to-osscontains it), and the deployed page athelp.altimate.ai/code/reference/telemetry/still omits it. Sincedocs.altimate.sh301s there, that's the page users currently reach. Worth landing before this merges. The restored text also still says "included in the authorization URL" —packages/opencode/src/altimate/plugin/altimate.ts:65-68notes it's specifically the URL fragment, which browsers never transmit, so this actually undersells the protection.
A note on why new major items keep appearing
This is worth spelling out, because it isn't a reflection on the work going into each round — it's a property of what this PR is.
This branch is a generated mirror, not a hand-authored document. That changes how review feedback behaves in three ways:
-
Each round has probed a different layer. Round 1 checked links and the build. Round 2 checked CSS and the rendered artifact. Round 3 was the first to check a published UI string against the extension manifest. Round 4 was the first to execute documented commands and check config keys against the drivers. Items like the stale keybind table and the broken workflows on
docs/docs/quickstart.mdhave been present the whole time — they surfaced now because nobody had looked there yet, not because they were introduced or ignored. -
The sync brings new content between rounds. Two of this round's blocking items are in text that didn't exist last round: the
{env:…}warehouse examples and the first-run-scan privacy sentence. The previous head's Quickstart had zero{env:examples. So each regeneration can both close old findings and introduce new ones, and the net count moves less than the effort would suggest. -
Downstream fixes don't persist on their own. The privacy disclosure was removed, restored here, and needed a matching upstream commit to stay. The same mechanism removed the
Ctrl+Ydocumentation. Any fix applied only to this mirror is one sync away from reverting.
There's also a fourth effect, and it's partly on how this review has been written: findings anchored to a single quoted line have tended to get single-line fixes. /discover was quoted at setup.md:193, that file was deleted, and two live instances remained elsewhere. The DuckDB key was quoted on the canonical page and fixed there, while the same bug on docs/docs/quickstart.md stayed. That's a reasonable reading of the feedback as written — the reviews should have named the class of occurrence rather than the instance, and they now do.
What would make the next round shorter
The encouraging part is that nearly every finding across all four rounds is mechanically detectable. Moving the loop left would catch them before review rather than during it:
- Validate documented examples against the code. This alone covers blocking items 1, 2, 4, 5, 7 and the commands-reference gap — every one is "a documented command, config key or claim doesn't match what ships." Checkable against CLI argument parsing, the command-template registry, driver config fields, the config-substitution path, the keybind
Definitionstable, and the published extension manifest. - Add a sync-integrity check comparing this mirror against the intended
help-docsref, with an explicit allow-list for deliberate local overrides. This is what keeps a fix from silently reverting. - Run the docs build on
pull_requestwith--strict, and pinmkdocs-material. Currently.github/workflows/docs.ymlruns only on push tomain. - Assert no two sources resolve to the same output path. MkDocs does not warn about this, even under
--strict—getting-started.mdandconfigure/tools.mdare currently discarded silently. - Assert every CSS class used in Markdown is defined in a loaded stylesheet. Covers blocking item 3 and two nits.
- Check fragments, not just pages, including cross-page anchors — three are currently broken and
--strictcatches none.
If it helps, items 3 and 4 are each a few lines of CI and would have caught two of this round's blockers on their own.
Minor
Two source pages are still silently discarded. docs/docs/getting-started.md and docs/docs/configure/tools.md resolve to the same output paths as their directory-index siblings; the built site contains only the directory-index versions, with no warning in normal or strict mode.
The Setup fold is slightly lossy. 454 lines → 302. The 164-line LLM configuration section became a 25-line picker/sign-in section, Databricks is down to two passing mentions, and Redshift is absent from the page. That material does survive in configure/providers.md and configure/warehouses.md, and "What's Next" links the Warehouses reference — the one gap is that there's no direct handoff to Providers, which is where the LLM configuration detail went.
usage/ide.md contradicts itself on the CLI prerequisite. Line 20 says the extension requires the CLI to be installed; lines 57-62 document altimateCodeRequireConsent defaulting to false, i.e. automatic install on first chat. The settings table is the accurate one — it matches VSIX 0.8.12.
configure/commands.md describes itself as complete but omits two commands. It references "all" six built-in commands; the registry exposes eight user-visible defaults plus a hidden onboarding command (packages/opencode/src/command/index.ts:172-198). /discover-and-add-mcps and /mcps are missing.
No pre-merge docs validation, no provenance marker or divergence guard (0 of 72 files), and the Quickstart duration is still promised four ways — getting-started/quickstart.md:2 "in 10 Minutes", docs/docs/index.md:31 "under five minutes", llms.txt:10 "(5 min)", and docs/docs/quickstart.md:3 "in under 5 minutes".
Nits
- Three broken fragments in the built artifact:
docs/docs/quickstart.md:58,reference/telemetry.md:68(#delivery--reliabilityvs generated iddelivery-reliability),usage/dbt-pr-review.md:132. Strict mode catches none. .ak-subundefined (docs/docs/index.md:12— the stylesheet defines.ak-hero-sub), and.ak-needs-rows--orangeundefined (getting-started/index.md:128—--orangevariants exist only for the singular child.ak-need-row--orange).copy-page.cssis loaded on every page but has no corresponding markup or JS; the marketing stylesheet is imported wholesale (2740 lines / 74 KB) includingak-hub,ak-flowandak-anim, which appear in zero Markdown files.llms.txtindexeshelp.altimate.ai/code(25 links) while publishing atdocs.altimate.sh, and its hand-maintained counts drift: it claims 25 telemetry event types against an event table of 56 rows carrying 60 distinct identifiers, and 12 Security FAQ pairs against 21 question headings.- The sync still re-quotes YAML inside fenced examples and reformats the whole
nav:block from 4-space to 2-space indentation, which will keep enlarging future diffs.
| "model": "lmstudio/qwen2.5-7b-instruct" | ||
| } | ||
| ``` | ||
| Immediately after model setup, a **"Scan your environment?"** Yes/No dialog appears. Say **Yes** and altimate-code reads local config files (`.dbt/profiles.yml`, `dbt_project.yml`, `.git/config`) — no credentials are read or sent, and no schema, model contents, or queries leave your computer. An anonymous environment summary (e.g. "dbt project detected, no warehouse configured") may be included in the standard telemetry stream if telemetry is enabled; disable via `ALTIMATE_TELEMETRY_DISABLED=true` or the [telemetry docs](../reference/telemetry.md) if you want a strictly-offline scan. The scan then routes you into one of four branches: |
There was a problem hiding this comment.
Blocking — the "no credentials are read" half of this sentence doesn't match what the scan does.
The "nothing leaves your computer" half is accurate. But project_scan dispatches dbt.profiles (packages/opencode/src/altimate/tools/project-scan.ts:642-649), and that parser reads the whole profiles file and resolves env_var() references:
packages/opencode/src/altimate/native/connections/dbt-profiles.ts:156 fs.readFileSync(resolvedPath, "utf-8")
packages/opencode/src/altimate/native/connections/dbt-profiles.ts:61 process.env[envName] ?? defaultValue ?? ""
So passwords, tokens and key material are read into process memory, and environment variables holding them are actively resolved. They're then discarded rather than masked — the model-visible tool output emits only name/type/source — which is why "not sent" holds up.
That distinction matters here specifically because this sentence is what someone reads while deciding whether to answer Yes to the scan prompt.
Suggested rewording: credentials are read and resolved locally to discover connections, then dropped from the result before any tool output reaches the model; only bounded connection/environment metadata enters telemetry. Naming which metadata would make it airtight.
There was a problem hiding this comment.
This is what docs/docs/getting-started/quickstart-new.md has. We are not sending the credentials out of the machine and we use it for running the commands with the variables only.
There was a problem hiding this comment.
Verified your point and you're right — I was wrong to call this newly written text. origin/main:docs/docs/getting-started/quickstart-new.md contains this sentence verbatim, so the fold carried it forward rather than introducing it. Apologies for the mis-framing.
Dropping it from this PR. The read-vs-transmitted distinction still seems worth tightening someday (the dbt profiles parser does readFileSync and resolves env_var() locally, even though nothing leaves the machine), but that's a help-docs wording change, not something this sync should carry. Happy to file it upstream instead — say the word.
| === "PostgreSQL" | ||
|
|
||
| ```json |
There was a problem hiding this comment.
Blocking — {env:…} isn't expanded in the file these examples target.
This block and the Snowflake one above it (line 88) use "password": "{env:…}", and the section says to add them to .altimate-code/connections.json.
{env:VAR} is a real feature — the pattern is defined at packages/opencode/src/config/paths.ts:64-144 and applied to the main config (altimate-code.json) via config/config.ts:318 → ConfigVariable.substitute(). But the native connections file goes through a different loader:
// packages/opencode/src/altimate/native/connections/registry.ts:51-57
const raw = fs.readFileSync(filePath, "utf-8")
const parsed = JSON.parse(raw)Plain JSON.parse, no substitution pass. And credential-store.ts:96-108 only fills missing sensitive fields from the keychain — it skips values already present. So the literal string {env:SNOWFLAKE_PASSWORD} is handed to the driver as the password.
This one is easy to miss precisely because the syntax is valid elsewhere in the product — a user who double-checks will find it documented and reasonably conclude they typed it correctly.
The BigQuery example at line 104 has the same shape: credentials_path: "~/.config/gcloud/…" is forwarded as keyFilename (packages/drivers/src/bigquery.ts:32-34), and google-auth-library@10.5.0 applies only path.resolve() (googleauth.js:752-755), which yields <cwd>/~/.config/… rather than the home directory.
Options: point users at the warehouse_add flow, document ALTIMATE_CODE_CONN_*, or add {env:} and ~ expansion to the native connection loader.
There was a problem hiding this comment.
Same here: docs/docs/getting-started/quickstart-new.md copied from this file and we are not changing the content in this PR
There was a problem hiding this comment.
You're right, and my "introduced by this rewrite" claim was wrong — I checked one file at one commit and generalised from it. {env:...} is used across the existing docs: configure/warehouses.md:24 explicitly instructs it and has 15 occurrences, and origin/main:getting-started/quickstart.md had 10. Clearly pre-existing and not this PR's concern.
Dropping it. For the upstream backlog whenever it's useful: .altimate-code/connections.json is loaded with plain JSON.parse in native/connections/registry.ts:51-57, so {env:} isn't expanded on that path the way it is for altimate-code.json. Not a blocker here.
| - assets/stylesheets/neoteroi-cards.css | ||
| - assets/stylesheets/extra.css | ||
| - assets/stylesheets/copy-page.css |
There was a problem hiding this comment.
Blocking (open since round 2) — dropping assets/css/extra.css from extra_css leaves getting-started/index.md unstyled.
The new stylesheets cover index.md, but getting-started/index.md still uses the older class system — 16 occurrences, unchanged by this PR. None of those classes has a definition in any of the three loaded stylesheets:
| Class | Loaded stylesheets | assets/css/extra.css (not loaded) |
|---|---|---|
.hero |
0 | 1 |
.hero-tagline |
0 | 1 |
.hero-description |
0 | 1 |
.hero-actions |
0 | 2 |
.hero-install |
0 | 3 |
.section-heading |
0 | 1 |
.section-sub |
0 | 1 |
.doc-links |
0 | 3 |
(There is a narrow inline .hero img { max-width: 280px } rule at getting-started/index.md:10, which sizes the hero image but doesn't restore layout, typography, section headings or the footer link block.)
The page ends up mixing systems — the middle sections use nt-cards/ak-card-icon, which are defined, inside an unstyled hero.
This is one of two remaining items that needs a decision rather than an edit: either port the .hero-* / .section-* / .doc-links rules into assets/stylesheets/extra.css, or move the page onto the ak-* system — then delete the now-unreferenced assets/css/extra.css.
There was a problem hiding this comment.
For the third time: This will be copy of what help docs codebase has. Since this repo will not be deployed, this is ok
There was a problem hiding this comment.
Understood, and sorry for making you say it three times — that's on my process, not on you. I wasn't reading the reply threads between rounds, so answered items kept coming back. Fixed going forward.
Dropping this permanently; I won't raise it again.
One small practical note, purely FYI and not a blocker: GitHub Pages is still configured for the repo (gh api repos/AltimateAI/altimate-code/pages returns docs.altimate.sh with the CNAME set) and .github/workflows/docs.yml still builds and publishes on push to main — last run succeeded 2026-08-07. What makes it effectively invisible is the CloudFront 301 sending docs.altimate.sh → help.altimate.ai/code/. If the intent is genuinely no deployment, deleting that workflow and the Pages config would make it true and would retire this whole category of review comment for good.
| 2. Type `Altimate MCP` | ||
| 3. Select **Altimate MCP: Open Altimate Code Chat** |
There was a problem hiding this comment.
Blocking (open since round 3) — this palette entry doesn't exist.
The extension ships from AltimateAI/vscode-altimate-mcp-server rather than this repo, so the published manifest is the authority. Marketplace displayName is Datamates, current version 0.8.12, and every declared command category in its manifest is Datamates:
{ "command": "altimate.openChat", "title": "Open Altimate Code Chat", "category": "Datamates" }VS Code renders palette entries as category: title, so the actual entry is Datamates: Open Altimate Code Chat. Typing Altimate MCP won't surface it.
Line 8 is affected by the same thing — it says the in-editor commands are branded Altimate MCP, whereas the commands carry the Datamates category; it's the chat panel and docs that use the Altimate MCP name.
| 2. Type `Altimate MCP` | |
| 3. Select **Altimate MCP: Open Altimate Code Chat** | |
| 2. Type `Datamates` | |
| 3. Select **Datamates: Open Altimate Code Chat** |
This is the second item that's a decision rather than an edit — worth settling what this page should say now that the palette string is known.
There was a problem hiding this comment.
For the second time: this is work in progress in power user and datamates extension to rename the titles. This may include if we go with workspaces as well. So we are not touching the code/help content atm
There was a problem hiding this comment.
Understood — and sorry for raising it twice. Dropping it, and I won't bring it up again while the rename is in flight in the extension repo. Makes sense to let that land upstream and re-sync.
| --- | ||
| description: "Install altimate-code and run your first SQL analysis. The open-source data engineering harness with 100+ tools for building, validating, optimizing, and shipping data products." | ||
| title: Quickstart — Altimate Code | ||
| description: "Install Altimate Code, connect your warehouse and LLM, and run your first SQL analysis in under 5 minutes." |
There was a problem hiding this comment.
Blocking — this page is still live at /quickstart/ alongside /getting-started/quickstart/, and it's the stale one.
It isn't only competing for search; it now contradicts the canonical Quickstart on five points, each of which was fixed on the canonical page this round:
| Line | Documented | Actual |
|---|---|---|
| 40 | providers key |
schema accepts singular provider (packages/core/src/v1/config/config.ts:115) |
| 55 | altimate /discover |
positional is a project directory → chdir("/discover") (tui.ts:80,132) |
| 58 | getting-started.md#step-3-… |
that source file is silently discarded by a destination collision, and the anchor doesn't exist |
| 66 | DuckDB database |
driver reads path only (packages/drivers/src/duckdb.ts:16) |
| 104-105 | /generate-tests, /migrate-sql |
not registered; the equivalents are /dbt-test and /sql-translate |
Simplest resolution is to delete this page and redirect /quickstart/ to the canonical Quickstart — fixing it in place keeps two entry points that will drift again.
There was a problem hiding this comment.
Fixed in latest commit
There was a problem hiding this comment.
Confirmed — docs/docs/quickstart.md is deleted in dc119eab. Thanks for taking that one; it removes the duplicate route as well as the stale commands.
|
|
||
| ### Session | ||
|
|
||
| `session_export`, `session_new`, `session_list`, `session_timeline`, `session_fork`, `session_rename`, `session_delete`, `session_child_cycle`, `session_parent`, `session_share`, `session_unshare`, `session_interrupt`, `session_compact`, `session_yolo_toggle` |
There was a problem hiding this comment.
Blocking — the visible half of the YOLO documentation is restored, but two parts are still removed.
Thanks for putting the Ctrl+Y row back. Relative to current origin/main, this PR still deletes this identifier line, and the mid-session-toggle paragraph at configure/permissions.md:135:
-**Mid-session toggle (TUI):** Press `Ctrl+Y` inside the TUI to toggle yolo mode for the current
- session without restarting. … The toggle is **session and subagent scoped and lives in memory
- only** … Deny rules stay enforced.grep -c 'session_yolo_toggle' docs/docs/configure/keybinds.md → 0; grep -c 'Mid-session toggle' docs/docs/configure/permissions.md → 0.
The effect is that the binding is listed but not rebindable by name, and the semantics that matter most for a permissions-bypass toggle — session/subagent scope, in-memory only, deny rules still enforced — are absent from the Governance page. The feature ships at packages/tui/src/config/keybind.ts:106,317 with packages/tui/test/yolo-keybind.test.tsx covering it.
Worth restoring upstream as well, so it survives the next sync.
There was a problem hiding this comment.
Confirmed restored — thank you.
| @@ -1,3 +1,8 @@ | |||
| --- | |||
| title: Keybindings — Altimate Code TUI | |||
| description: "85+ customizable keybindings for the Altimate Code terminal UI. Configure the leader key and reassign any shortcut." | |||
There was a problem hiding this comment.
Blocking — the keybind reference is substantially out of date, beyond the YOLO gap.
The page describes "85+" bindings here and at line 8; packages/tui/src/config/keybind.ts defines 183 keybind( entries. Roughly a dozen documented defaults also disagree with the implementation:
| Documented | Actual default | keybind.ts |
|---|---|---|
| Leader + Shift+D delete | ctrl+d |
:91 |
| Leader + Shift+R rename | ctrl+r |
:90 |
| Leader + Shift+F fork | none | :89 |
| Leader + Shift+E export | <leader>x |
:84 |
| Leader + Shift+S share | none | :92 |
| Leader + Tab cycle agent | tab |
:130 |
Leader + s sidebar |
<leader>b (<leader>s is status view) |
:80,:82 |
Leader + / commands |
ctrl+p |
:57 |
| Leader + Ctrl+C interrupt | escape |
:94 |
Plus drift on provider list, reverse agent cycling, compact, previous/next message and undo/redo. /keybinds at line 115 is also not a registered command — only the keyboard action exists.
This one predates the PR, so it's not something this round introduced — but the page ships with it. Generating the table from Definitions, or adding a test that compares documented defaults against it, would keep it correct for free.
There was a problem hiding this comment.
This is same exact copy of keybindings.md file from main. Scope of this PR is not to update the content, just make sure it is synced with help docs. We can take this up in future PRs
There was a problem hiding this comment.
Confirmed: the only diff to this file versus main is the front matter, so the table is verbatim from main and your scope point is correct. Dropping it from this PR.
Noting it for the upstream backlog rather than here: packages/tui/src/config/keybind.ts defines 183 keybind( entries against the page's "85+", and roughly a dozen documented defaults have drifted. Entirely a future-PR item.
Down-synced from help-docs (source of truth): - delete `docs/docs/quickstart.md` — an orphaned duplicate of the canonical `getting-started/quickstart.md` that rendered at a competing `/quickstart/` URL and had drifted from the code (`provider` config key, `/discover` usage, DuckDB `path`, `/dbt-test` `/sql-translate` command names) - repoint the inbound link in `getting-started.md` to the canonical page - propagate the `session_yolo_toggle` keybind row `/quickstart/` now 301s to the canonical page via the help-docs redirect map.
Initial docs sync from AltimateAI/help-docs, which is now the source of truth for documentation.
tools/sync_to_oss.py.mkdocs.ymlnav regenerated from help-docs.First sync is large because help-docs content was developed substantially post-migration. Please review; anything here that should live in help-docs instead can be pulled back before merge.
🤖 Generated with Claude Code
Summary by cubic
Syncs docs from
AltimateAI/help-docsand refreshes homepage/nav/styles. Consolidates Quickstart (Setup folded in) and removes the orphaned top-level/quickstart/page; all Quickstart links now point togetting-started/quickstart/.Migration
AltimateAI/help-docs; this repo mirrors viahelp-docs/tools/sync_to_oss.py(prunes orphans, preserves repo-only assets).docs/docs/quickstart.mdto eliminate route drift; update any remaining links togetting-started/quickstart/(external/quickstart/relies on help-docs 301).getting-started/quickstart-new.md; Quickstart is a single canonical page; moved CI guide tousage/ci-headless.md;mkdocs.ymlnav regenerated.help.altimate.aiwhere appropriate;docs/docs/llms.txtregenerated with updated date and canonical source.Review focus
assets/stylesheets/{extra.css,neoteroi-cards.css,copy-page.css}andassets/brand/logo-white.svg; wired viaextra_csswith a “Copy page” control.Ctrl+Yyolo toggle.Written for commit dc119ea. Summary will update on new commits.
Summary by CodeRabbit