Skip to content

docs: add VitePress documentation site#175

Merged
QaidVoid merged 1 commit into
mainfrom
docs
Jun 18, 2026
Merged

docs: add VitePress documentation site#175
QaidVoid merged 1 commit into
mainfrom
docs

Conversation

@QaidVoid

@QaidVoid QaidVoid commented Jun 18, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

Documentation

  • Launched a refreshed VitePress documentation site with a custom Nightsky/Soar theme, dark-mode styling, enhanced home layout, install-command copy widget, quick navigation cards, and a styled 404 page.
  • Published/expanded end-user guides and references, including Quick Start, Installation, Configuration, Profiles, Package Management, CLI reference, and command docs (install/add/remove/run/search/query/list/info/update/repo/health/maintenance/releases), plus download/declarative/use/inspection coverage.

Chores

  • Updated documentation ignore rules to prevent committing generated and dependency artifacts.

@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 04775bc4-a206-4f15-b6c7-7aa00f3d99b6

📥 Commits

Reviewing files that changed from the base of the PR and between 878c4bf and 3481234.

⛔ Files ignored due to path filters (2)
  • docs/bun.lock is excluded by !**/*.lock
  • docs/public/favicon.svg is excluded by !**/*.svg
📒 Files selected for processing (33)
  • docs/.gitignore
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/InstallCommand.vue
  • docs/.vitepress/theme/components/NotFound.vue
  • docs/.vitepress/theme/components/QuickNav.vue
  • docs/.vitepress/theme/custom.css
  • docs/.vitepress/theme/index.ts
  • docs/README.md
  • docs/cli-reference.md
  • docs/configuration.md
  • docs/declarative.md
  • docs/download.md
  • docs/health.md
  • docs/index.md
  • docs/inspection.md
  • docs/install.md
  • docs/installation.md
  • docs/list.md
  • docs/maintenance.md
  • docs/package-management.md
  • docs/package.json
  • docs/profiles.md
  • docs/quick-start.md
  • docs/releases.md
  • docs/releases/v0.10.md
  • docs/releases/v0.11.md
  • docs/releases/v0.12.md
  • docs/remove.md
  • docs/repo.md
  • docs/run.md
  • docs/search.md
  • docs/update.md
  • docs/use.md

📝 Walkthrough

Walkthrough

Adds a complete VitePress documentation site for the Soar package manager under docs/. Includes project scaffolding (package.json, .gitignore), a custom Nightsky theme with Vue components and CSS, the VitePress site config (config.mts), and a comprehensive set of Markdown pages covering installation, configuration, profiles, all CLI commands, declarative package management, and versioned release notes (v0.10–v0.12).

Changes

Soar Documentation Site

Layer / File(s) Summary
Project scaffolding and VitePress config
docs/package.json, docs/.gitignore, docs/.vitepress/config.mts
Adds the soar-docs package manifest with VitePress dev/build/preview scripts; gitignores node_modules/ and .vitepress/{cache,dist}; defines the full VitePress config (language, clean URLs, sitemap, OpenGraph head metadata, font links, nav/sidebar hierarchy, social links, search, footer, edit-link template, and last-updated stamping).
Custom Nightsky theme: components and CSS
docs/.vitepress/theme/index.ts, docs/.vitepress/theme/components/*.vue, docs/.vitepress/theme/custom.css
index.ts exports a theme that extends DefaultTheme and slot-injects InstallCommand.vue (home-hero-after), QuickNav.vue (home-features-after), and NotFound.vue (not-found). InstallCommand.vue renders the install command with a clipboard copy button that auto-resets after 2 s. QuickNav.vue renders a hardcoded navigation card grid. NotFound.vue renders a styled 404 page with withBase links. custom.css adds the complete Nightsky palette (light/dark), hero, feature card hover, install-command UI, quick-nav grid, doc typography, tables, blockquotes, code blocks, and navbar styling.
Landing page and entry-point docs
docs/index.md, docs/quick-start.md, docs/package-management.md, docs/README.md
index.md adds the VitePress home-layout front matter with hero actions and six feature items. quick-start.md walks through install, PATH, common commands, apt/pacman equivalence tables, profile setup, and troubleshooting. package-management.md provides a sectioned navigation hub. README.md documents local dev, build, and content structure.
Installation, configuration, profiles, and CLI reference docs
docs/installation.md, docs/configuration.md, docs/profiles.md, docs/cli-reference.md
installation.md covers system requirements, install script, manual binary/Cargo/source installs, PATH setup, uninstall, and troubleshooting. configuration.md documents all config.toml options, repository config, management commands, env vars, and common issues. profiles.md explains [profile.<name>] config, path-resolution precedence, usage flags, and examples. cli-reference.md documents all global flags, env vars, and common flag combinations.
Core package operations docs
docs/install.md, docs/remove.md, docs/update.md, docs/search.md, docs/list.md
install.md documents input resolution rules, basic/URL/portable install, all flags, and troubleshooting. remove.md covers single/multi/pkg_id removal, cleanup sequence, broken-package handling, and manual removal. update.md documents version determination, cross-repository constraints, the full update workflow with backup/recovery, and troubleshooting. search.md covers command syntax, filters, result indicators, query syntax, and tips. list.md documents soar list vs soar info, output format, filtering, and common use cases.
Advanced features and declarative management docs
docs/run.md, docs/use.md, docs/download.md, docs/inspection.md, docs/declarative.md, docs/repo.md
run.md documents on-demand execution, caching, cleanup, and best practices. use.md covers package-family variant switching, symlink/DB changes, and limitations. download.md documents all download sources (direct URL, registry, GitHub/GitLab releases, GHCR), filtering options, extraction, file handling, and advanced examples. inspection.md covers soar query, soar inspect, and soar log with shared query syntax and troubleshooting. declarative.md fully documents packages.toml structure, all package fields, hooks, build, sandbox, arch mapping, GitHub/GitLab integration, version_command, and soar apply. repo.md documents soar repo list/add/update/remove commands.
Maintenance docs and release notes
docs/health.md, docs/maintenance.md, docs/releases.md, docs/releases/v0.*.md
health.md documents soar health checks, status table, remediation commands, soar env, soar clean, and soar sync. maintenance.md covers soar self update/uninstall, best practices, cron/systemd scheduling, a maintenance checklist/table, and troubleshooting. releases.md indexes the versioned release notes. Release notes for v0.10–v0.12 document all features, breaking changes, and bug fixes for those versions.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐇 Hippity-hop, the docs have arrived,
A VitePress warren where knowledge thrives!
Dark themes and sidebars, components galore,
soar install explained at every door.
The rabbit has typed till paw-tips were sore—
Now quick-start.md opens the store! 📄✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title 'docs: add VitePress documentation site' directly and clearly summarizes the main change—adding a complete VitePress-based documentation site with configuration, theme components, content pages, and styling.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs

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

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (6)
docs/.vitepress/theme/components/QuickNav.vue (1)

1-5: Use withBase() for internal links in QuickNav.

Line 58 uses raw href values that bypass VitePress base prefixing. This works at the site root but breaks if docs are served from a subpath. The companion NotFound.vue correctly demonstrates using withBase() for internal routes—apply the same pattern here.

Suggested patch
 <script setup lang="ts">
+import { withBase } from 'vitepress'
+
 interface NavLink {
   text: string
   link: string
 }
@@
             <li v-for="item in group.links" :key="item.link">
-              <a :href="item.link">{{ item.text }}</a>
+              <a :href="withBase(item.link)">{{ item.text }}</a>
             </li>
🤖 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/.vitepress/theme/components/QuickNav.vue` around lines 1 - 5, The
QuickNav component is using raw href values that do not account for VitePress
base path prefixing, which breaks when the documentation is served from a
subpath. Import the withBase() function from VitePress and apply it to all
internal link values where href is being assigned (around line 58 in the
template or component logic). Wrap each link reference with withBase() to ensure
proper base path handling, following the same pattern demonstrated in the
NotFound.vue component.
docs/public/install.sh (2)

243-243: ⚡ Quick win

Unquoted variable in command execution: apply strict POSIX quoting.

Line 243 uses unquoted $DOWNLOAD_TOOL in command execution. Although the variable contents are controlled and safe (generated from check_download_tool), strict POSIX discipline suggests quoting for consistency and defense-in-depth.

♻️ Proposed fix for strict POSIX compliance
     else
       printf "[+] Using $DOWNLOAD_TOOL\n"
-      $DOWNLOAD_TOOL "$INSTALL_PATH/soar" "$RELEASE_URL"
+      eval "$DOWNLOAD_TOOL" '"'"$INSTALL_PATH/soar"'"' '"'"$RELEASE_URL"'"'

Or, if you prefer a simpler approach without eval, comment to document why it's safe:

     else
       printf "[+] Using $DOWNLOAD_TOOL\n"
+      # DOWNLOAD_TOOL is controlled output from check_download_tool(), safe to unquote
       $DOWNLOAD_TOOL "$INSTALL_PATH/soar" "$RELEASE_URL"
🤖 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/public/install.sh` at line 243, The variable $DOWNLOAD_TOOL is used
unquoted in the command execution line on line 243. To follow strict POSIX
quoting discipline and ensure consistent defensive practices, wrap the
$DOWNLOAD_TOOL variable in double quotes so it becomes "$DOWNLOAD_TOOL" in the
same statement where "$INSTALL_PATH/soar" and "$RELEASE_URL" are already
properly quoted.

321-325: 💤 Low value

Simplify overly verbose debug toggle logic.

Lines 321–325 use an unnecessary first condition that does nothing (: is a no-op). Simplify for clarity.

♻️ Proposed simplification
-  # Disable Debug?
-  if [ -z "$DEBUG" ]; then
-    :
-  elif [ -n "$DEBUG" ]; then
-    set +x
-  fi
+  # Disable Debug?
+  [ -n "$DEBUG" ] && set +x
🤖 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/public/install.sh` around lines 321 - 325, The debug toggle logic
between lines 321-325 contains an unnecessary first condition that does nothing
(the `:` no-op). Remove the first if block that checks for empty DEBUG and does
nothing, and convert the elif statement into a standalone if statement that
checks whether DEBUG is not empty and executes set +x. This simplifies the logic
to a single condition without any redundant branches.
docs/remove.md (1)

134-134: 💤 Low value

Add language specifiers to plain-text output code blocks.

Lines 134 and 173 contain code blocks displaying example command output without language specifiers. Mark these as text or leave empty for consistency with other documentation.

♻️ Proposed fix
Line 134:
-```
+```text
Broken Packages (1):
...

Line 173:
-```
+```text
Broken Packages (1):

Also applies to: 173-173

🤖 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/remove.md` at line 134, The code blocks displaying command output in
docs/remove.md at lines 134 and 173 are missing language specifiers. Add `text`
as the language identifier to the opening triple backticks (change ``` to
```text) for the blocks that display the "Broken Packages (1):" example output
to maintain consistency with other documentation code blocks.

Source: Linters/SAST tools

docs/install.md (1)

122-122: 💤 Low value

Fix the split infinitive for clarity.

Line 122 contains "attempts to automatically detect," which splits the infinitive. Consider restructuring as: "automatically attempts to detect" or "attempts to detect package metadata automatically."

🤖 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/install.md` at line 122, The sentence contains a split infinitive with
"attempts to automatically detect" where the adverb "automatically" is placed
between the infinitive marker "to" and the verb "detect". Restructure this
phrase by moving "automatically" to either come before "attempts" (resulting in
"automatically attempts to detect") or after the object "metadata" (resulting in
"attempts to detect package metadata automatically") to resolve the grammatical
issue while maintaining clarity.

Source: Linters/SAST tools

docs/search.md (1)

90-90: 💤 Low value

Add language specifiers to plain-text output code blocks.

Lines 90, 112, and 134 contain code blocks displaying example command output without language specifiers. Mark these as text or leave empty for consistency with other documentation.

♻️ Proposed fix
Line 90:
-```
+```text
bat#official:soarpkgs
bat#official:official

Line 112:
- +text
[✓] bat#official:official (0.24.0)
[○] bat#official:soarpkgs (0.23.0)
[○] code#official:flathub (latest)


Line 134:
-```
+```text
[-] firefox#mozilla:official (122.0)
[-] firewall#system:official (latest)
[+] firefoxpwa#third-party:flathub (1.0)

Also applies to: 112-112, 134-134

🤖 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/search.md` at line 90, The code blocks displaying example command output
at lines 90, 112, and 134 in the search.md file lack language specifiers on
their opening markdown fence. Add the text language specifier to each of these
three code blocks by changing the opening ``` to ```text for consistency with
other documented examples. This applies to all three output blocks: the package
listing output, the package status output, and the package action output.

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/.vitepress/theme/custom.css`:
- Around line 354-356: The .vp-doc tr:nth-child(2n) selector uses a hardcoded
dark background color that breaks readability in light mode. Replace the
hardcoded rgba(22, 27, 34, 0.4) value with a semantic theme-aware CSS variable
that adapts to light and dark modes, then add a separate rule targeting .dark
.vp-doc tr:nth-child(2n) to override it with the darker background color for
dark mode specifically.
- Around line 10-13: The --vp-font-family-base CSS variable declaration is
triggering Stylelint value-keyword-case errors because the font names
BlinkMacSystemFont and Roboto are not quoted. To fix this, add single quotes
around both 'BlinkMacSystemFont' and 'Roboto' in the font-family-base token
declaration so they are consistently quoted like the other font names in the
stack, which will resolve the lint validation errors.

In `@docs/configuration.md`:
- Line 103: The sentence fragment "Can be overridden per-repository" on line 103
lacks a subject and should be completed. Either add a subject to make it a
complete sentence (e.g., "This setting can be overridden per-repository") or
merge it with the preceding sentence about signature_verification configuration
to create a single, grammatically complete sentence that explains the setting
and its override capability.
- Line 107: The sentence fragment "Can be set globally or per-repository" at the
end of the desktop_integration configuration documentation is incomplete and
lacks a subject. Rephrase this line by either merging it with the preceding
sentence or adding a proper subject to make it grammatically complete. The
revised text should clearly convey that the desktop_integration setting itself
can be configured either globally or per-repository.

In `@docs/public/install.sh`:
- Around line 289-291: The INSTALL_PATH variable is unquoted within the command
substitution on both lines (289 and 291), which creates word-splitting
vulnerabilities if the path contains spaces. Wrap the $INSTALL_PATH/soar
executable path in double quotes within each command substitution statement.
Apply this fix to both the if branch on line 289 and the else branch on line 291
by changing $INSTALL_PATH/soar to "$INSTALL_PATH/soar" to ensure the path is
treated as a single argument regardless of whitespace.

In `@docs/quick-start.md`:
- Around line 28-38: The PATH configuration in the bash and zsh export
statements is incorrect and does not match the actual installation location used
by install.sh. Replace the path `$HOME/.local/share/soar/bin` with
`$HOME/.local/bin` in both the bash section (around line 29) where the echo
command adds the PATH to ~/.bashrc and the zsh section (around line 34) where
the echo command adds the PATH to ~/.zshrc. This ensures the documented PATH
matches the default installation directory specified in install.sh, allowing
users to properly access the soar binary after installation.

---

Nitpick comments:
In `@docs/.vitepress/theme/components/QuickNav.vue`:
- Around line 1-5: The QuickNav component is using raw href values that do not
account for VitePress base path prefixing, which breaks when the documentation
is served from a subpath. Import the withBase() function from VitePress and
apply it to all internal link values where href is being assigned (around line
58 in the template or component logic). Wrap each link reference with withBase()
to ensure proper base path handling, following the same pattern demonstrated in
the NotFound.vue component.

In `@docs/install.md`:
- Line 122: The sentence contains a split infinitive with "attempts to
automatically detect" where the adverb "automatically" is placed between the
infinitive marker "to" and the verb "detect". Restructure this phrase by moving
"automatically" to either come before "attempts" (resulting in "automatically
attempts to detect") or after the object "metadata" (resulting in "attempts to
detect package metadata automatically") to resolve the grammatical issue while
maintaining clarity.

In `@docs/public/install.sh`:
- Line 243: The variable $DOWNLOAD_TOOL is used unquoted in the command
execution line on line 243. To follow strict POSIX quoting discipline and ensure
consistent defensive practices, wrap the $DOWNLOAD_TOOL variable in double
quotes so it becomes "$DOWNLOAD_TOOL" in the same statement where
"$INSTALL_PATH/soar" and "$RELEASE_URL" are already properly quoted.
- Around line 321-325: The debug toggle logic between lines 321-325 contains an
unnecessary first condition that does nothing (the `:` no-op). Remove the first
if block that checks for empty DEBUG and does nothing, and convert the elif
statement into a standalone if statement that checks whether DEBUG is not empty
and executes set +x. This simplifies the logic to a single condition without any
redundant branches.

In `@docs/remove.md`:
- Line 134: The code blocks displaying command output in docs/remove.md at lines
134 and 173 are missing language specifiers. Add `text` as the language
identifier to the opening triple backticks (change ``` to ```text) for the
blocks that display the "Broken Packages (1):" example output to maintain
consistency with other documentation code blocks.

In `@docs/search.md`:
- Line 90: The code blocks displaying example command output at lines 90, 112,
and 134 in the search.md file lack language specifiers on their opening markdown
fence. Add the text language specifier to each of these three code blocks by
changing the opening ``` to ```text for consistency with other documented
examples. This applies to all three output blocks: the package listing output,
the package status output, and the package action output.
🪄 Autofix (Beta)

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: defaults

Review profile: CHILL

Plan: Pro

Run ID: b87571ed-b2bb-4b6d-bbdc-2d901576aed3

📥 Commits

Reviewing files that changed from the base of the PR and between d8df544 and b88cde7.

⛔ Files ignored due to path filters (2)
  • docs/bun.lock is excluded by !**/*.lock
  • docs/public/favicon.svg is excluded by !**/*.svg
📒 Files selected for processing (34)
  • docs/.gitignore
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/InstallCommand.vue
  • docs/.vitepress/theme/components/NotFound.vue
  • docs/.vitepress/theme/components/QuickNav.vue
  • docs/.vitepress/theme/custom.css
  • docs/.vitepress/theme/index.ts
  • docs/README.md
  • docs/cli-reference.md
  • docs/configuration.md
  • docs/declarative.md
  • docs/download.md
  • docs/health.md
  • docs/index.md
  • docs/inspection.md
  • docs/install.md
  • docs/installation.md
  • docs/list.md
  • docs/maintenance.md
  • docs/package-management.md
  • docs/package.json
  • docs/profiles.md
  • docs/public/install.sh
  • docs/quick-start.md
  • docs/releases.md
  • docs/releases/v0.10.md
  • docs/releases/v0.11.md
  • docs/releases/v0.12.md
  • docs/remove.md
  • docs/repo.md
  • docs/run.md
  • docs/search.md
  • docs/update.md
  • docs/use.md

Comment on lines +10 to +13
--vp-font-family-base: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
Roboto, sans-serif;
--vp-font-family-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code',
'Source Code Pro', ui-monospace, monospace;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix font-family tokens to satisfy Stylelint.

Lines 10–11 currently trigger value-keyword-case errors. Quote BlinkMacSystemFont and Roboto in the font stack to pass lint consistently.

Suggested patch
 :root {
-  --vp-font-family-base: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
-    Roboto, sans-serif;
+  --vp-font-family-base: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI',
+    'Roboto', sans-serif;
📝 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.

Suggested change
--vp-font-family-base: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
Roboto, sans-serif;
--vp-font-family-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code',
'Source Code Pro', ui-monospace, monospace;
--vp-font-family-base: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI',
'Roboto', sans-serif;
--vp-font-family-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code',
'Source Code Pro', ui-monospace, monospace;
🧰 Tools
🪛 Stylelint (17.13.0)

[error] 10-10: Expected "BlinkMacSystemFont" to be "blinkmacsystemfont" (value-keyword-case)

(value-keyword-case)


[error] 11-11: Expected "Roboto" to be "roboto" (value-keyword-case)

(value-keyword-case)

🤖 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/.vitepress/theme/custom.css` around lines 10 - 13, The
--vp-font-family-base CSS variable declaration is triggering Stylelint
value-keyword-case errors because the font names BlinkMacSystemFont and Roboto
are not quoted. To fix this, add single quotes around both 'BlinkMacSystemFont'
and 'Roboto' in the font-family-base token declaration so they are consistently
quoted like the other font names in the stack, which will resolve the lint
validation errors.

Source: Linters/SAST tools

Comment thread docs/.vitepress/theme/custom.css
Comment thread docs/configuration.md Outdated
Comment thread docs/configuration.md Outdated
Comment thread docs/public/install.sh Outdated
Comment on lines +289 to +291
SOAR_ENV_OUT="$($INSTALL_PATH/soar env --system 2>/dev/null)"
else
SOAR_ENV_OUT="$($INSTALL_PATH/soar env 2>/dev/null)"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Unquoted variable in command substitution: potential for word-splitting if path contains spaces.

Lines 289 and 291 use unquoted $INSTALL_PATH within command substitution. While the script validates writability (lines 45, 52), strict POSIX safety recommends quoting to prevent word-splitting on paths with spaces.

# Current (line 289):
SOAR_ENV_OUT="$($INSTALL_PATH/soar env --system 2>/dev/null)"

# Recommended:
SOAR_ENV_OUT="$("$INSTALL_PATH/soar" env --system 2>/dev/null)"
🛡️ Proposed fix for strict POSIX safety
  # Check Current Config
  if [ -n "$IS_ROOT" ]; then
-   SOAR_ENV_OUT="$($INSTALL_PATH/soar env --system 2>/dev/null)"
+   SOAR_ENV_OUT="$("$INSTALL_PATH/soar" env --system 2>/dev/null)"
  else
-   SOAR_ENV_OUT="$($INSTALL_PATH/soar env 2>/dev/null)"
+   SOAR_ENV_OUT="$("$INSTALL_PATH/soar" env 2>/dev/null)"
  fi
🧰 Tools
🪛 Shellcheck (0.11.0)

[info] 289-289: Double quote to prevent globbing and word splitting.

(SC2086)


[info] 291-291: Double quote to prevent globbing and word splitting.

(SC2086)

🤖 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/public/install.sh` around lines 289 - 291, The INSTALL_PATH variable is
unquoted within the command substitution on both lines (289 and 291), which
creates word-splitting vulnerabilities if the path contains spaces. Wrap the
$INSTALL_PATH/soar executable path in double quotes within each command
substitution statement. Apply this fix to both the if branch on line 289 and the
else branch on line 291 by changing $INSTALL_PATH/soar to "$INSTALL_PATH/soar"
to ensure the path is treated as a single argument regardless of whitespace.

Comment thread docs/quick-start.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

♻️ Duplicate comments (2)
docs/.vitepress/theme/custom.css (2)

10-11: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Quote system font keywords to clear Stylelint errors.

Line 10 and Line 11 still use unquoted BlinkMacSystemFont and Roboto, which triggers value-keyword-case in the current lint config.

Suggested patch
-  --vp-font-family-base: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
-    Roboto, sans-serif;
+  --vp-font-family-base: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI',
+    'Roboto', sans-serif;
🤖 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/.vitepress/theme/custom.css` around lines 10 - 11, The
--vp-font-family-base CSS custom property contains unquoted font family names
BlinkMacSystemFont and Roboto that trigger the Stylelint value-keyword-case
rule. Wrap these two unquoted font names in single quotes to comply with the
lint configuration, ensuring all font family values in the property are properly
quoted.

Source: Linters/SAST tools


354-356: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Replace hardcoded zebra row color with a theme-aware token.

Line 355 hardcodes a dark RGBA value, so zebra contrast is off in light mode. Use a semantic variable with light/dark overrides.

Suggested patch
 :root {
+  --soar-table-zebra-bg: rgba(31, 35, 40, 0.04);
 }
 
 .dark {
+  --soar-table-zebra-bg: rgba(22, 27, 34, 0.4);
 }
@@
 .vp-doc tr:nth-child(2n) {
-  background: rgba(22, 27, 34, 0.4);
+  background: var(--soar-table-zebra-bg);
 }
🤖 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/.vitepress/theme/custom.css` around lines 354 - 356, The zebra striping
for table rows in the .vp-doc tr:nth-child(2n) selector uses a hardcoded dark
RGBA color value that doesn't adapt to light mode themes. Replace the hardcoded
rgba(22, 27, 34, 0.4) background value with a semantic CSS variable (such as
var(--vp-table-zebra-bg)) and define this variable in your theme configuration
with appropriate light and dark mode overrides to ensure proper contrast in both
modes.
🧹 Nitpick comments (2)
docs/.vitepress/theme/custom.css (1)

227-230: ⚡ Quick win

Add explicit keyboard focus-visible states for interactive controls.

install-copy and quick-nav links currently style :hover only. Adding :focus-visible improves keyboard navigation clarity and consistency.

Suggested patch
 .install-copy:hover {
   color: var(--vp-c-text-1);
   border-color: var(--vp-c-brand-1);
 }
+
+.install-copy:focus-visible {
+  outline: 2px solid var(--vp-c-brand-1);
+  outline-offset: 2px;
+}

 .quick-nav-card a:hover {
   color: var(--vp-c-brand-1);
 }
+
+.quick-nav-card a:focus-visible {
+  color: var(--vp-c-brand-1);
+  outline: 2px solid var(--vp-c-brand-1);
+  outline-offset: 2px;
+  border-radius: 4px;
+}

Also applies to: 316-318

🤖 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/.vitepress/theme/custom.css` around lines 227 - 230, The `.install-copy`
class styling block only includes `:hover` state but lacks `:focus-visible`
pseudo-class styling for keyboard navigation accessibility. Add a
`:focus-visible` state to the `.install-copy` selector (and also apply the same
pattern to the quick-nav links section at lines 316-318) with equivalent styling
properties to ensure keyboard users have clear visual feedback when navigating
interactive controls.
docs/releases.md (1)

10-12: 💤 Low value

Consider rewording to avoid repetitive "Soar" sentence starters.

Each bullet begins with "[Soar X.Y]", which is flagged as a stylistic pattern. While functional and clear, you might consider varying the phrasing for visual diversity—for example, "Repository Consolidation & Fuzzy Search (v0.12)" as a headline, with a brief description below. However, this is optional and the current format is acceptable.

🤖 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/releases.md` around lines 10 - 12, The release notes for versions 0.12,
0.11, and 0.10 have repetitive sentence starters with "[Soar X.Y]" at the
beginning of each bullet point. To improve visual diversity and readability,
reword the bullet points to vary the phrasing. Consider using alternative
formats such as highlighting the main feature or version number differently in
each entry, or varying the structure between entries so they don't all follow
the identical "[Soar X.Y]: description" pattern. The goal is to maintain clarity
while reducing the monotonous repetition of the "Soar" prefix.

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/releases/v0.12.md`:
- Around line 43-47: Add the language specifier "sh" to the fenced code block in
docs/releases/v0.12.md that demonstrates the soar install and soar repo list
commands. Change the opening fence from triple backticks to ```sh to enable
proper syntax highlighting for the shell command examples shown in the code
block.

In `@docs/remove.md`:
- Around line 134-139: The code blocks displaying example output in the
documentation are missing language specifiers on their opening fences. Add the
language identifier "output" to the code block opening at lines 134 and 173 by
changing the opening triple backticks from ``` to ```output to improve
consistency with the documentation style guide and provide better formatting
clarity for readers.

In `@docs/search.md`:
- Around line 90-94: Three code blocks in the search.md file are missing
language identifiers for their example output. Add the language specifier output
to the opening triple backticks for each of the three code blocks: the first
containing bat#official references, the second containing installation status
with [✓] and [○] symbols, and the third containing status information with [-]
and [+] symbols. Change each opening from triple backticks to triple backticks
followed by output to properly mark these as text output examples.

In `@docs/use.md`:
- Around line 23-33: The markdown code block displaying the package family
hierarchy structure is missing a language specifier. Add `text` as the language
identifier to the opening triple backticks of the code block that shows the
package hierarchy with the "Package: python" and "Package: cat" sections,
changing the opening ``` to ```text for proper syntax highlighting and
consistency.

---

Duplicate comments:
In `@docs/.vitepress/theme/custom.css`:
- Around line 10-11: The --vp-font-family-base CSS custom property contains
unquoted font family names BlinkMacSystemFont and Roboto that trigger the
Stylelint value-keyword-case rule. Wrap these two unquoted font names in single
quotes to comply with the lint configuration, ensuring all font family values in
the property are properly quoted.
- Around line 354-356: The zebra striping for table rows in the .vp-doc
tr:nth-child(2n) selector uses a hardcoded dark RGBA color value that doesn't
adapt to light mode themes. Replace the hardcoded rgba(22, 27, 34, 0.4)
background value with a semantic CSS variable (such as var(--vp-table-zebra-bg))
and define this variable in your theme configuration with appropriate light and
dark mode overrides to ensure proper contrast in both modes.

---

Nitpick comments:
In `@docs/.vitepress/theme/custom.css`:
- Around line 227-230: The `.install-copy` class styling block only includes
`:hover` state but lacks `:focus-visible` pseudo-class styling for keyboard
navigation accessibility. Add a `:focus-visible` state to the `.install-copy`
selector (and also apply the same pattern to the quick-nav links section at
lines 316-318) with equivalent styling properties to ensure keyboard users have
clear visual feedback when navigating interactive controls.

In `@docs/releases.md`:
- Around line 10-12: The release notes for versions 0.12, 0.11, and 0.10 have
repetitive sentence starters with "[Soar X.Y]" at the beginning of each bullet
point. To improve visual diversity and readability, reword the bullet points to
vary the phrasing. Consider using alternative formats such as highlighting the
main feature or version number differently in each entry, or varying the
structure between entries so they don't all follow the identical "[Soar X.Y]:
description" pattern. The goal is to maintain clarity while reducing the
monotonous repetition of the "Soar" prefix.
🪄 Autofix (Beta)

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: defaults

Review profile: CHILL

Plan: Pro

Run ID: ae8df88f-06a6-4213-a671-4682ae7b545a

📥 Commits

Reviewing files that changed from the base of the PR and between b88cde7 and 61ae589.

⛔ Files ignored due to path filters (2)
  • docs/bun.lock is excluded by !**/*.lock
  • docs/public/favicon.svg is excluded by !**/*.svg
📒 Files selected for processing (33)
  • docs/.gitignore
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/InstallCommand.vue
  • docs/.vitepress/theme/components/NotFound.vue
  • docs/.vitepress/theme/components/QuickNav.vue
  • docs/.vitepress/theme/custom.css
  • docs/.vitepress/theme/index.ts
  • docs/README.md
  • docs/cli-reference.md
  • docs/configuration.md
  • docs/declarative.md
  • docs/download.md
  • docs/health.md
  • docs/index.md
  • docs/inspection.md
  • docs/install.md
  • docs/installation.md
  • docs/list.md
  • docs/maintenance.md
  • docs/package-management.md
  • docs/package.json
  • docs/profiles.md
  • docs/quick-start.md
  • docs/releases.md
  • docs/releases/v0.10.md
  • docs/releases/v0.11.md
  • docs/releases/v0.12.md
  • docs/remove.md
  • docs/repo.md
  • docs/run.md
  • docs/search.md
  • docs/update.md
  • docs/use.md
✅ Files skipped from review due to trivial changes (13)
  • docs/package-management.md
  • docs/quick-start.md
  • docs/.vitepress/theme/components/NotFound.vue
  • docs/repo.md
  • docs/.gitignore
  • docs/releases/v0.11.md
  • docs/.vitepress/config.mts
  • docs/README.md
  • docs/list.md
  • docs/run.md
  • docs/update.md
  • docs/installation.md
  • docs/inspection.md
🚧 Files skipped from review as they are similar to previous changes (5)
  • docs/.vitepress/theme/components/InstallCommand.vue
  • docs/package.json
  • docs/index.md
  • docs/.vitepress/theme/index.ts
  • docs/.vitepress/theme/components/QuickNav.vue

Comment thread docs/releases/v0.12.md
Comment thread docs/remove.md
Comment thread docs/search.md
Comment on lines +90 to +94
```
bat#official:soarpkgs
bat#official:official
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add language specifiers to output code blocks.

Three code blocks showing example output (lines 90, 112, and 134) are missing language identifiers. These are plain-text output examples that should be marked consistently.

🔧 Proposed fix

Line 90:

 Results may include packages from multiple repositories:

-```
+```output
 bat#official:soarpkgs
 bat#official:official
-```
+```

Line 112:

 Example output:

-```
+```output
 [✓] bat#official:official (0.24.0)
 [○] bat#official:soarpkgs (0.23.0)
 [○] code#official:flathub (latest)
-```
+```

Line 134:

 Example results for `soar search fire`:

-```
+```output
 [-] firefox#mozilla:official (122.0)
 [-] firewall#system:official (latest)
 [+] firefoxpwa#third-party:flathub (1.0)
-```
+```

Also applies to: 112-116, 134-138

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 90-90: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 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/search.md` around lines 90 - 94, Three code blocks in the search.md file
are missing language identifiers for their example output. Add the language
specifier output to the opening triple backticks for each of the three code
blocks: the first containing bat#official references, the second containing
installation status with [✓] and [○] symbols, and the third containing status
information with [-] and [+] symbols. Change each opening from triple backticks
to triple backticks followed by output to properly mark these as text output
examples.

Source: Linters/SAST tools

Comment thread docs/use.md
Comment on lines +23 to +33
```
Package: python
├── python#python@3.11 (from main repo)
├── python#python@3.12 (from main repo)
└── python#pypy@3.11 (from testing repo)

Package: cat
├── cat#coreutils@9.5 (provides: cat, ls, etc.)
├── cat#busybox@1.36 (provides: cat, ls, etc.)
└── cat#uutils-coreutils@0.0.23 (provides: cat, ls, etc.)
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add language specifier to code block showing package family structure.

The code block at line 23 is a text diagram showing the package family hierarchy but is missing a language specifier. Use an empty language identifier or text for consistency.

🔧 Proposed fix
 ### Example Package Families

-```
+```text
 Package: python
 ├── python#python@3.11 (from main repo)
 ├── python#python@3.12 (from main repo)
 └── python#pypy@3.11 (from testing repo)

 Package: cat
 ├── cat#coreutils@9.5 (provides: cat, ls, etc.)
 ├── cat#busybox@1.36 (provides: cat, ls, etc.)
 └── cat#uutils-coreutils@0.0.23 (provides: cat, ls, etc.)
-```
+```
📝 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.

Suggested change
```
Package: python
├── python#python@3.11 (from main repo)
├── python#python@3.12 (from main repo)
└── python#pypy@3.11 (from testing repo)
Package: cat
├── cat#coreutils@9.5 (provides: cat, ls, etc.)
├── cat#busybox@1.36 (provides: cat, ls, etc.)
└── cat#uutils-coreutils@0.0.23 (provides: cat, ls, etc.)
```
### Example Package Families
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 23-23: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 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/use.md` around lines 23 - 33, The markdown code block displaying the
package family hierarchy structure is missing a language specifier. Add `text`
as the language identifier to the opening triple backticks of the code block
that shows the package hierarchy with the "Package: python" and "Package: cat"
sections, changing the opening ``` to ```text for proper syntax highlighting and
consistency.

Source: Linters/SAST tools

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 18, 2026

Copy link
Copy Markdown

Deploying soar-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: 3481234
Status:⚡️  Build in progress...

View logs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

♻️ Duplicate comments (3)
docs/search.md (1)

90-93: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add language tags to the example-output fences.

Same MD040 issue remains on all three output blocks; output matches the existing documentation style.

🔧 Proposed fix
-```
+```output
 bat#official:soarpkgs
 bat#official:official
-```
+```
@@
-```
+```output
 [✓] bat#official:official (0.24.0)
 [○] bat#official:soarpkgs (0.23.0)
 [○] code#official:flathub (latest)
-```
+```
@@
-```
+```output
 [-] firefox#mozilla:official (122.0)
 [-] firewall#system:official (latest)
 [+] firefoxpwa#third-party:flathub (1.0)
-```
+```

Also applies to: 112-116, 134-138

🤖 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/search.md` around lines 90 - 93, Add the `output` language tag to all
three markdown code fence blocks that display example outputs in the search.md
documentation file. Change each opening fence from a bare ``` to ```output to
match the existing documentation style and resolve the MD040 linting issue. This
applies to the output blocks showing bat package search results, the
verification status output, and the firefox-related package operations output.

Source: Linters/SAST tools

docs/use.md (1)

23-33: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Label the package-family diagram fence.

Same MD040 issue remains here; text is the right specifier for this hierarchy diagram.

🔧 Proposed fix
-```
+```text
 Package: python
 ├── python#python@3.11 (from main repo)
 ├── python#python@3.12 (from main repo)
 └── python#pypy@3.11 (from testing repo)
@@
 Package: cat
 ├── cat#coreutils@9.5 (provides: cat, ls, etc.)
 ├── cat#busybox@1.36 (provides: cat, ls, etc.)
 └── cat#uutils-coreutils@0.0.23 (provides: cat, ls, etc.)
-```
+```
🤖 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/use.md` around lines 23 - 33, The markdown code fence containing the
package-family hierarchy diagram (showing "Package: python" and "Package: cat"
with their respective dependencies) is missing the language specifier required
by the MD040 lint rule. Add the "text" language identifier to the opening code
fence delimiter to properly label this content as a text-based hierarchy
diagram, which will resolve the markdown linting error.

Source: Linters/SAST tools

docs/remove.md (1)

134-139: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add language tags to the example-output fences.

Same MD040 issue remains on both output blocks; output keeps these examples consistent with the rest of the guide.

🔧 Proposed fix
-```
+```output
 Removed 7z#upstream.release:official (24.08)
   - Removed binary: ~/.local/share/soar/bin/7z
   - Removed directory: ~/.local/share/soar/packages/7z-24.08
   - Reclaimed 2.3 MiB
-```
+```
@@
-```
+```output
 Broken Packages (1):
   7z#upstream.release:official /home/user/.local/share/soar/packages/7z-24.08
-```
+```

Also applies to: 173-176

🤖 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/remove.md` around lines 134 - 139, The markdown code fences in the
example output blocks are missing language tags, causing an MD040 linting error.
Add the `output` language tag to two code fence blocks in this file: the first
block containing the example output starting with "Removed
7z#upstream.release:official (24.08)" and the second block containing "Broken
Packages (1)". Change each opening fence from triple backticks with no tag to
triple backticks followed by the word "output", and ensure the closing fence
remains as triple backticks only.

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/declarative.md`:
- Around line 289-293: The markdown code block containing remote_version,
download_url_for_that_version, and size_in_bytes is unlabeled, causing
markdownlint to flag it as an anonymous code fence. Add a language identifier to
the opening triple backticks of this code block by using either `text` or
`console` as the label (e.g., change the opening ``` to ```text or ```console)
to resolve the linting warning.
- Around line 563-566: The version_command example in the packages.nightly-app
section only shows the curl command itself but does not demonstrate what the
actual output should be, which conflicts with the documented 3-line contract
(version on line 1, URL on line 2, size optional on line 3). Update the example
to show the expected output of the curl command as 3 lines, making the reference
implementation complete and consistent with the earlier requirement
documentation.

In `@docs/health.md`:
- Around line 53-61: The markdown file contains anonymous code fence blocks that
markdownlint is flagging at the specified line ranges. Add a language identifier
to each of the three code fence blocks at lines 53-61, 65-83, and 235-239 by
modifying the opening backticks from ``` to ```console or ```text. Since these
blocks contain example output from system commands and console displays, use
```console as the language identifier for all three blocks to properly label
them for markdownlint compliance.

In `@docs/install.md`:
- Around line 282-292: The documentation in this section conflates the purpose
of different flags and contradicts the default behavior description that
follows. Rewrite the content to clearly explain that: Soar installs
automatically once a single package is resolved by default; the `--ask` flag
forces confirmation before proceeding; the `--show` flag is the interactive
variant picker for choosing between multiple versions; and the `--yes` flag
skips prompts when multiple packages match the query. Ensure these descriptions
are consistent with each other and with the non-interactive installation section
that follows.

In `@docs/profiles.md`:
- Around line 147-155: The fenced code block containing the directory tree
structure (starting with ~/.local/share/soar/) lacks a language label on the
opening fence, which triggers the MD040 linting rule. Add a language label by
changing the opening triple backticks from ``` to ```text or ```console to
properly identify the content type and satisfy the markdown linter.

In `@docs/releases/v0.10.md`:
- Around line 43-47: The shell transcript code block containing the "soar
install ripgep" command and its output is missing a language identifier on the
opening fence, which violates markdown linting rule MD040. Add the `sh` language
label to the opening triple backticks fence (change ``` to ```sh) to properly
identify this as a shell script example, and ensure the closing fence is
formatted correctly as just triple backticks.

---

Duplicate comments:
In `@docs/remove.md`:
- Around line 134-139: The markdown code fences in the example output blocks are
missing language tags, causing an MD040 linting error. Add the `output` language
tag to two code fence blocks in this file: the first block containing the
example output starting with "Removed 7z#upstream.release:official (24.08)" and
the second block containing "Broken Packages (1)". Change each opening fence
from triple backticks with no tag to triple backticks followed by the word
"output", and ensure the closing fence remains as triple backticks only.

In `@docs/search.md`:
- Around line 90-93: Add the `output` language tag to all three markdown code
fence blocks that display example outputs in the search.md documentation file.
Change each opening fence from a bare ``` to ```output to match the existing
documentation style and resolve the MD040 linting issue. This applies to the
output blocks showing bat package search results, the verification status
output, and the firefox-related package operations output.

In `@docs/use.md`:
- Around line 23-33: The markdown code fence containing the package-family
hierarchy diagram (showing "Package: python" and "Package: cat" with their
respective dependencies) is missing the language specifier required by the MD040
lint rule. Add the "text" language identifier to the opening code fence
delimiter to properly label this content as a text-based hierarchy diagram,
which will resolve the markdown linting error.
🪄 Autofix (Beta)

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: defaults

Review profile: CHILL

Plan: Pro

Run ID: e65a290e-e5f3-441d-96a9-1bce70355a28

📥 Commits

Reviewing files that changed from the base of the PR and between 61ae589 and cd1cee8.

⛔ Files ignored due to path filters (2)
  • docs/bun.lock is excluded by !**/*.lock
  • docs/public/favicon.svg is excluded by !**/*.svg
📒 Files selected for processing (33)
  • docs/.gitignore
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/InstallCommand.vue
  • docs/.vitepress/theme/components/NotFound.vue
  • docs/.vitepress/theme/components/QuickNav.vue
  • docs/.vitepress/theme/custom.css
  • docs/.vitepress/theme/index.ts
  • docs/README.md
  • docs/cli-reference.md
  • docs/configuration.md
  • docs/declarative.md
  • docs/download.md
  • docs/health.md
  • docs/index.md
  • docs/inspection.md
  • docs/install.md
  • docs/installation.md
  • docs/list.md
  • docs/maintenance.md
  • docs/package-management.md
  • docs/package.json
  • docs/profiles.md
  • docs/quick-start.md
  • docs/releases.md
  • docs/releases/v0.10.md
  • docs/releases/v0.11.md
  • docs/releases/v0.12.md
  • docs/remove.md
  • docs/repo.md
  • docs/run.md
  • docs/search.md
  • docs/update.md
  • docs/use.md
✅ Files skipped from review due to trivial changes (13)
  • docs/README.md
  • docs/.gitignore
  • docs/run.md
  • docs/index.md
  • docs/repo.md
  • docs/releases/v0.11.md
  • docs/package.json
  • docs/list.md
  • docs/installation.md
  • docs/update.md
  • docs/configuration.md
  • docs/package-management.md
  • docs/inspection.md
🚧 Files skipped from review as they are similar to previous changes (5)
  • docs/.vitepress/theme/components/QuickNav.vue
  • docs/.vitepress/theme/components/NotFound.vue
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/InstallCommand.vue
  • docs/.vitepress/theme/index.ts

Comment thread docs/declarative.md
Comment on lines +289 to +293
```
<remote_version>
<download_url_for_that_version>
<size_in_bytes>
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Label the example-output fence.

Markdownlint will keep flagging this anonymous block. Use text or console for the sample output.

Suggested patch
-```
+```text
📝 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.

Suggested change
```
<remote_version>
<download_url_for_that_version>
<size_in_bytes>
```
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 289-289: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 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/declarative.md` around lines 289 - 293, The markdown code block
containing remote_version, download_url_for_that_version, and size_in_bytes is
unlabeled, causing markdownlint to flag it as an anonymous code fence. Add a
language identifier to the opening triple backticks of this code block by using
either `text` or `console` as the label (e.g., change the opening ``` to ```text
or ```console) to resolve the linting warning.

Source: Linters/SAST tools

Comment thread docs/declarative.md
Comment thread docs/health.md
Comment on lines +53 to +61
```
╭────────────────────────────────────────╮
│ System Health Check │
├──────────────────┬─────────────────────┤
│ PATH │ ✓ Configured │
│ Broken Packages │ ✓ None │
│ Broken Symlinks │ ✓ None │
╰──────────────────┴─────────────────────╯
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Label the anonymous example-output fences.

Markdownlint is flagging the plain output blocks at Lines 53-61, 65-83, and 235-239. Mark them text or console.

Suggested patch
-```
+```text

Also applies to: 65-83, 235-239

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 53-53: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 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/health.md` around lines 53 - 61, The markdown file contains anonymous
code fence blocks that markdownlint is flagging at the specified line ranges.
Add a language identifier to each of the three code fence blocks at lines 53-61,
65-83, and 235-239 by modifying the opening backticks from ``` to ```console or
```text. Since these blocks contain example output from system commands and
console displays, use ```console as the language identifier for all three blocks
to properly label them for markdownlint compliance.

Source: Linters/SAST tools

Comment thread docs/install.md Outdated
Comment thread docs/profiles.md
Comment on lines +147 to +155
```
~/.local/share/soar/
├── bin/ # Symlinks to package binaries
├── cache/ # Download cache
├── db/ # Package database
├── packages/ # Installed packages
├── repos/ # Repository metadata
└── portable-dirs/ # Portable app data
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Label the directory-tree fence.

This anonymous block will keep triggering MD040. Use text or console for the tree example.

Suggested patch
-```
+```text
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 147-147: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 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/profiles.md` around lines 147 - 155, The fenced code block containing
the directory tree structure (starting with ~/.local/share/soar/) lacks a
language label on the opening fence, which triggers the MD040 linting rule. Add
a language label by changing the opening triple backticks from ``` to ```text or
```console to properly identify the content type and satisfy the markdown
linter.

Source: Linters/SAST tools

Comment thread docs/releases/v0.10.md
Comment on lines +43 to +47
This improves compatibility with the GitHub CLI (`gh`) and other tools that use `GH_TOKEN`.

### Bug Fixes

- Fixed HTTP status code handling in download fallback logic

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Label the shell transcript fence.

This block still triggers MD040. sh fits this mixed command/output example best.

🔧 Proposed fix
-```
+```sh
 $ soar install ripgep
 Package ripgep not found
 Did you mean: ripgrep?
-```
+```
🤖 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/releases/v0.10.md` around lines 43 - 47, The shell transcript code block
containing the "soar install ripgep" command and its output is missing a
language identifier on the opening fence, which violates markdown linting rule
MD040. Add the `sh` language label to the opening triple backticks fence (change
``` to ```sh) to properly identify this as a shell script example, and ensure
the closing fence is formatted correctly as just triple backticks.

Source: Linters/SAST tools

@QaidVoid QaidVoid merged commit cb40774 into main Jun 18, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant