feat(docs): override Starlight header with a top-level site nav - #368
Conversation
|
Warning Review limit reached
Next review available in: 38 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThis PR adds a custom Starlight header and related branding updates, updates shared navigation and component typings, and bumps the Go toolchain version. ChangesDocs header and branding
Go toolchain bump
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
✨ Simplify code
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 |
|
📚 Docs preview is live → https://a2968f8d-wavehouse-docs.wave-rf.workers.dev |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: b37afca5-448b-414c-955c-078e506b497f
📒 Files selected for processing (4)
docs/astro.config.mjsdocs/src/components/Header.astrodocs/src/config/sidebar.tsdocs/src/env.d.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: Docs build
- GitHub Check: Lint
- GitHub Check: Analyze (go)
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: Analyze (go)
⚠️ CI failures not shown inline (2)
GitHub Actions: PR housekeeping / PR housekeeping: feat(docs): override Starlight header with a top-level site nav
Conclusion: failure
##[group]Run # Single source of truth for the rule: scripts/lint-pr-title.sh — the
�[36;1m# Single source of truth for the rule: scripts/lint-pr-title.sh — the�[0m
�[36;1m# SAME validator the local agent gate runs (.claude/hooks/agent-bash-gate.sh),�[0m
�[36;1m# so CI and local can't drift. The checkout above is ref: main, so this is�[0m
�[36;1m# always the default-branch script. Dependabot's grouped-update titles�[0m
�[36;1m# routinely exceed the 72-char subject cap and the format isn't�[0m
�[36;1m# configurable, so Dependabot PRs are exempt from the length check�[0m
�[36;1m# (the format check still applies).�[0m
�[36;1mif [[ "$PR_AUTHOR" == "dependabot[bot]" || "$PR_AUTHOR" == "app/dependabot" ]]; then�[0m
�[36;1m export PR_TITLE_SKIP_LENGTH=1�[0m
�[36;1mfi�[0m
�[36;1m�[0m
�[36;1mif reason=$(bash scripts/lint-pr-title.sh "$PR_TITLE" 2>&1); then�[0m
�[36;1m echo "passed=true" >> "$GITHUB_OUTPUT"�[0m
�[36;1m echo "PR title OK: $PR_TITLE"�[0m
�[36;1melse�[0m
�[36;1m echo "passed=false" >> "$GITHUB_OUTPUT"�[0m
�[36;1m printf '%s\n' "$reason"�[0m
�[36;1m echo "::error::$(printf '%s' "$reason" | head -1)"�[0m
GitHub Actions: PR housekeeping / 0_PR housekeeping.txt: feat(docs): override Starlight header with a top-level site nav
Conclusion: failure
##[group]Run # Single source of truth for the rule: scripts/lint-pr-title.sh — the
�[36;1m# Single source of truth for the rule: scripts/lint-pr-title.sh — the�[0m
�[36;1m# SAME validator the local agent gate runs (.claude/hooks/agent-bash-gate.sh),�[0m
�[36;1m# so CI and local can't drift. The checkout above is ref: main, so this is�[0m
�[36;1m# always the default-branch script. Dependabot's grouped-update titles�[0m
�[36;1m# routinely exceed the 72-char subject cap and the format isn't�[0m
�[36;1m# configurable, so Dependabot PRs are exempt from the length check�[0m
�[36;1m# (the format check still applies).�[0m
�[36;1mif [[ "$PR_AUTHOR" == "dependabot[bot]" || "$PR_AUTHOR" == "app/dependabot" ]]; then�[0m
�[36;1m export PR_TITLE_SKIP_LENGTH=1�[0m
�[36;1mfi�[0m
�[36;1m�[0m
�[36;1mif reason=$(bash scripts/lint-pr-title.sh "$PR_TITLE" 2>&1); then�[0m
�[36;1m echo "passed=true" >> "$GITHUB_OUTPUT"�[0m
�[36;1m echo "PR title OK: $PR_TITLE"�[0m
�[36;1melse�[0m
�[36;1m echo "passed=false" >> "$GITHUB_OUTPUT"�[0m
�[36;1m printf '%s\n' "$reason"�[0m
�[36;1m echo "::error::$(printf '%s' "$reason" | head -1)"�[0m
🔇 Additional comments (5)
docs/src/config/sidebar.ts (1)
86-98: LGTM!docs/src/components/Header.astro (2)
1-24: LGTM!Also applies to: 55-143
25-25: 🎯 Functional CorrectnessHeader nav links are fine as-is.
docs/astro.config.mjsdoesn’t define Starlightlocales, so the root-absoluteheaderNavlinks and thearia-currentcomparison match this single-locale setup.> Likely an incorrect or invalid review comment.docs/astro.config.mjs (1)
149-149: LGTM!docs/src/env.d.ts (1)
6-7: LGTM!Also applies to: 20-39
…mark to the text baseline
…act/expanded search, Get Started CTA
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 7113524a-83cc-4c07-8965-ee81a2ab6b14
📒 Files selected for processing (2)
docs/src/components/Header.astrodocs/src/config/sidebar.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: Docs build
- GitHub Check: Lint
- GitHub Check: Analyze (go)
- GitHub Check: Analyze (go)
- GitHub Check: Analyze (javascript-typescript)
⚠️ CI failures not shown inline (2)
GitHub Actions: PR housekeeping / PR housekeeping: feat(docs): override Starlight header with a top-level site nav
Conclusion: failure
##[group]Run # Single source of truth for the rule: scripts/lint-pr-title.sh — the
�[36;1m# Single source of truth for the rule: scripts/lint-pr-title.sh — the�[0m
�[36;1m# SAME validator the local agent gate runs (.claude/hooks/agent-bash-gate.sh),�[0m
�[36;1m# so CI and local can't drift. The checkout above is ref: main, so this is�[0m
�[36;1m# always the default-branch script. Dependabot's grouped-update titles�[0m
�[36;1m# routinely exceed the 72-char subject cap and the format isn't�[0m
�[36;1m# configurable, so Dependabot PRs are exempt from the length check�[0m
�[36;1m# (the format check still applies).�[0m
�[36;1mif [[ "$PR_AUTHOR" == "dependabot[bot]" || "$PR_AUTHOR" == "app/dependabot" ]]; then�[0m
�[36;1m export PR_TITLE_SKIP_LENGTH=1�[0m
�[36;1mfi�[0m
�[36;1m�[0m
�[36;1mif reason=$(bash scripts/lint-pr-title.sh "$PR_TITLE" 2>&1); then�[0m
�[36;1m echo "passed=true" >> "$GITHUB_OUTPUT"�[0m
�[36;1m echo "PR title OK: $PR_TITLE"�[0m
�[36;1melse�[0m
�[36;1m echo "passed=false" >> "$GITHUB_OUTPUT"�[0m
�[36;1m printf '%s\n' "$reason"�[0m
�[36;1m echo "::error::$(printf '%s' "$reason" | head -1)"�[0m
GitHub Actions: PR housekeeping / 0_PR housekeeping.txt: feat(docs): override Starlight header with a top-level site nav
Conclusion: failure
##[group]Run # Single source of truth for the rule: scripts/lint-pr-title.sh — the
�[36;1m# Single source of truth for the rule: scripts/lint-pr-title.sh — the�[0m
�[36;1m# SAME validator the local agent gate runs (.claude/hooks/agent-bash-gate.sh),�[0m
�[36;1m# so CI and local can't drift. The checkout above is ref: main, so this is�[0m
�[36;1m# always the default-branch script. Dependabot's grouped-update titles�[0m
�[36;1m# routinely exceed the 72-char subject cap and the format isn't�[0m
�[36;1m# configurable, so Dependabot PRs are exempt from the length check�[0m
�[36;1m# (the format check still applies).�[0m
�[36;1mif [[ "$PR_AUTHOR" == "dependabot[bot]" || "$PR_AUTHOR" == "app/dependabot" ]]; then�[0m
�[36;1m export PR_TITLE_SKIP_LENGTH=1�[0m
�[36;1mfi�[0m
�[36;1m�[0m
�[36;1mif reason=$(bash scripts/lint-pr-title.sh "$PR_TITLE" 2>&1); then�[0m
�[36;1m echo "passed=true" >> "$GITHUB_OUTPUT"�[0m
�[36;1m echo "PR title OK: $PR_TITLE"�[0m
�[36;1melse�[0m
�[36;1m echo "passed=false" >> "$GITHUB_OUTPUT"�[0m
�[36;1m printf '%s\n' "$reason"�[0m
�[36;1m echo "::error::$(printf '%s' "$reason" | head -1)"�[0m
🔇 Additional comments (7)
docs/src/config/sidebar.ts (1)
87-94: 🎯 Functional CorrectnessConfirm the intended header navigation entries.
headerNavcurrently exposes onlyDocs, andHeader.astrorenders this array verbatim. The PR objective describes separate Getting Started, Why WaveHouse?, Architecture, API, and SDK links; if that requirement is still current, add those entries here so the header matches the product spec.docs/src/components/Header.astro (6)
20-42: LGTM!
54-68: LGTM!
80-86: LGTM!
91-159: LGTM!Also applies to: 179-236
46-49: 🎯 Functional CorrectnessMobile drawer toggle is still present.
PageFrame.astrorendersMobileMenuTogglefor sidebar pages, so this override doesn’t remove the mobile sidebar entry point.> Likely an incorrect or invalid review comment.
168-170: 🎯 Functional CorrectnessNo issue: the search button keeps its accessible name. The
spanis alreadyaria-hidden, and the button’saria-labelprovides the label, so hiding thespanhere does not make the splash icon button unlabeled.> Likely an incorrect or invalid review comment.
|
Would love to see some changes, including:
|
Code Coverage OverviewLanguages: Go GoThe overall coverage remains at 90%, unchanged from the Updated |
…urrent, true-up header width comments



Summary
Adds a curated top-level Docs link to the docs site header, with a custom header layout for the sidebar-less splash homepage. Starlight has no config hook for header links, so this overrides its Header component through the sanctioned
components map. The override is our own layout — brand + primary nav pinned left, controls pinned right — rather than a copy of Starlight's default row: doc pages stay full-bleed to the edges, while the splash homepage (the only page with a hero) holds the inner content in a centered 68rem column — deliberately narrower than the hero's 80rem band.
Every control (SiteTitle, Search, ThemeSelect, SocialIcons, LanguageSelect) is still Starlight's own built-in, re-rendered through its virtual:starlight/components/* import, so their overrides and Pagefind search keep working untouched. Search keeps Starlight's expanded "Search … ⌘K" box on every page at ≥50rem (including the splash) so the keyboard shortcut stays discoverable; below 50rem — where the nav and controls are hidden (doc pages' sidebar drawer carries navigation there; the splash's hero CTAs do) — it collapses to its icon.
The single Docs link (→ /getting-started) lives in headerNav in sidebar.ts, colocated with the sidebar so the header and sidebar share one navigation source of truth. It's the way into the doc tree from the splash homepage, which hides the sidebar; every doc page already carries the full sidebar, so the nav is hidden below the md breakpoint (50rem) there. The footer brand block reuses the same (labelled via a title prop mirroring WaveMark's API) so header and footer render one wordmark; the inline lockup is decorative inside the labelled home link, SSR and client normalize nav hrefs identically, and headerNav documents that component-rendered links sit outside starlight-links-validator's scope. env.d.ts gains type declarations for the built-in components the override re-renders so astro check passes.
Related Issues
None