feat: Add VitePress docs site (new)#1739
Conversation
Co-authored-by: DaveSkender <[email protected]>
Co-authored-by: DaveSkender <[email protected]>
📝 WalkthroughWalkthroughThis PR migrates the documentation site infrastructure from Jekyll (Ruby-based static site generator) to VitePress (Node.js/Vue-based). The changes include replacing Jekyll configuration files and dependencies with VitePress equivalents, converting CI/CD workflows from Ruby/Bundler to Node/pnpm tooling, removing Jekyll-specific template includes and layouts, and introducing VitePress configuration with theme customization and Vue components. Markdown documentation files are updated to remove Jekyll front matter and integrate with VitePress features. Build scripts, accessibility testing, and URL redirects are added to support the new architecture. Development environments and tooling are updated across dev containers, VS Code tasks, and GitHub workflows. Possibly related PRs
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 |
Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: DaveSkender <[email protected]>
DaveSkender
left a comment
There was a problem hiding this comment.
@copilot resolve these small issues, but also consolidate all the migration notes into a user-facing website page with attention to keeping all the detailed changes. Do not leave the old obsolete files after moving. Ensure the website lints and builds okay.
|
@DaveSkender I've opened a new pull request, #1892, to work on those changes. Once the pull request is ready, I'll request review from you. |
Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 12
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (5)
docs/contributing.md (1)
1-301: Add "Last updated" footer to the end of the file.Per the coding guidelines, Markdown files should end with a blank line, optional separator, and a "Last updated: <Month Day, Year>" footer. This file is missing that footer.
📝 Proposed fix to add footer
Thanks, Dave Skender + +--- + +Last updated: January 10, 2026docs/indicators/ConnorsRsi.md (1)
1-88: Add "Last updated" footer to the end of the file.Per the coding guidelines, Markdown files should end with a blank line, optional separator, and a "Last updated: <Month Day, Year>" footer. This file is missing that footer.
📝 Proposed fix to add footer
IReadOnlyList<ConnorsRsiResult> results = observer.Results;
+---
+
+Last updated: January 10, 2026</details> </blockquote></details> <details> <summary>docs/indicators/Ichimoku.md (2)</summary><blockquote> `63-66`: **Document ChikouSpan's special null behavior.** Per the learnings, ChikouSpan in Ichimoku is shifted left and has a different null pattern than other components—it contains non-null values at the beginning and null values at the end. The current line 66 states that early periods have null values generally, but this doesn't capture ChikouSpan's inverse behavior. Consider adding a note clarifying that `ChikouSpan` specifically has null values at the end of the series rather than at the start. <details> <summary>📝 Suggested documentation clarification</summary> Add a note after line 66 explaining ChikouSpan's behavior: ```markdown - The `ChikouSpan` component differs from others: it contains non-null values starting from the beginning and has `null` values at the end of the series (shifted forward), representing its lagging nature.
15-36: Update the buffered usage example to show all parameters and defaults.The
ToIchimokuListoverload includessenkouOffsetandchikouOffsetparameters (both with default value 26), but the example only demonstrates the first three parameters. While the code works due to default values, the example should show the complete signature:// buffered usage (incremental) IchimokuList buffer = quotes.ToIchimokuList(tenkanPeriods, kijunPeriods, senkouBPeriods, senkouOffset, chikouOffset); IReadOnlyList<IchimokuResult> results = buffer;Or, if demonstrating defaults, use named parameters or add a comment noting the optional parameters. Verify the streaming example correctly shows
ToIchimokuHubwith onlyoffsetPeriods(which applies to both senkou and chikou internally) and not separate offset parameters likeStaticSeriesallows.docs/indicators/FisherTransform.md (1)
81-81: Fix incorrect indicator name in chaining comment.The comment states "Results can be further processed on
Alma" but this is the Fisher Transform documentation page. This appears to be a copy-paste error from another indicator's documentation.📝 Proposed fix
-Results can be further processed on `Alma` with additional chain-enabled indicators. +Results can be further processed on `Fisher` with additional chain-enabled indicators.
🤖 Fix all issues with AI agents
In @.vscode/tasks.json:
- Around line 533-543: The task "Install: Chrome for Puppeteer" has an incorrect
"detail" value (mentions Docker Desktop); update the "detail" property for the
"Install: Chrome for Puppeteer" task to a correct description about installing
Chrome for Puppeteer (e.g., "Install Chrome browser required by Puppeteer") so
the task detail matches the command and label; locate the task by the "label":
"Install: Chrome for Puppeteer" and replace the Docker-related sentence in its
"detail" field accordingly.
In @docs/.vitepress/components/IndicatorChart.vue:
- Around line 43-47: The SeriesStyle.data item type is missing a color field yet
code accesses d.color (see usage around d.color at the access in the render
logic), so update the data item interface (the Array<{ timestamp: string; value:
number | null }>) to include a color property (e.g., color?: string or color:
string|null depending on whether it can be absent) so TypeScript knows the field
exists; ensure any places creating these data objects include the color when
required or handle undefined if you make it optional.
- Around line 554-560: Remove the invalid cast "lineWidth: 0 as LineWidth" in
the IndicatorChart component and either omit the lineWidth property entirely or
set it to a valid value (1–4); since priceLineVisible: false (and
lastValueVisible/crosshairMarkerVisible are false) already hides the line, the
simplest fix is to delete the lineWidth entry from the options object, or if you
prefer an explicit width use a valid numeric literal like 1. Ensure you update
the options object where lineWidth is currently set so it no longer supplies 0
at runtime.
- Around line 68-70: The IndicatorChart component only defines a src prop (see
const props = withDefaults(defineProps<{ src: string }>(), {})) but many docs
pass an unused :height="360"; remove the height prop from every IndicatorChart
usage in the indicator docs (the ~71 files) and stop emitting it from the
generator by removing the height attribute in the update-indicator-charts.mjs
script so the component relies on its CSS aspect-ratio for sizing.
In @docs/.vitepress/config.mts:
- Around line 1-2: The config uses path.resolve(__dirname, 'public') but
__dirname isn't defined in ES modules; add the standard ES‑module __dirname
definition before its use by importing fileURLToPath from 'url' and deriving
__dirname via path.dirname(fileURLToPath(import.meta.url)) so that the call to
path.resolve(__dirname, 'public') in the config works correctly (look for the
path.resolve(__dirname, 'public') usage to place the new __dirname definition).
In @docs/customization.md:
- Around line 6-190: Append the required markdown footer to the end of
docs/customization.md: add a single blank line, then a separator line consisting
of three hyphens (---), and a "Last updated" line with the current date (e.g.,
"Last updated: 2026-01-10") so the file ends with the mandated blank line,
separator and timestamp.
In @docs/indicators/AtrStop.md:
- Around line 52-54: The convergence warning in the AtrStop.md warning block
starts with a lowercase "the" — update the first word of the warning text inside
the "::: warning ⚞ Convergence warning" block to start with an uppercase "The"
so the sentence follows sentence case; locate the warning block in
docs/indicators/AtrStop.md and change the initial "the line segment..." to "The
line segment..." without altering the rest of the text.
- Around line 1-95: The AtrStop.md documentation ("ATR Trailing Stop") is
missing the required "Last updated" footer; append to the end of AtrStop.md a
final blank line, a horizontal separator (---) on its own line, another blank
line, and then the footer line "Last updated: January 10, 2026", ensuring the
file ends with a newline so the footer is present and properly formatted.
- Around line 11-13: The docs build fails because the chart generator script
(docs/scripts/generate-chart-data.mjs) expects baseline test result JSON files
under tests/indicators/_testdata/results/ (e.g., atr-stop.standard.json) that
are missing; add the required JSON result files (starting with
atr-stop.standard.json) into that directory using the same filename patterns the
script expects and ensure each file's JSON schema matches the test result
structure used by generate-chart-data.mjs so the script can produce
/data/AtrStop.json (and repeat for other indicators referenced by
IndicatorChart).
In @docs/indicators/Dema.md:
- Around line 1-6: The front-matter in Dema.md uses the unsupported Jekyll field
`redirect_from`; remove the `redirect_from` entry from the front matter and
instead add an equivalent redirect rule to your site's publish-root redirects
file (e.g., _redirects) mapping /indicators/DoubleEma/ to /indicators/dema/ with
a 301 status, or simply omit the redirect if not needed.
In @docs/indicators/Doji.md:
- Line 9: The link on the Doji doc contains a malformed opening bracket sequence
("[[Discuss]") which breaks markdown rendering; fix the link text by removing
the extra bracket so it becomes a normal markdown link (e.g., change '[[Discuss]
💬](https://... "Community discussion about this indicator")' to '[Discuss
💬](https://... "Community discussion about this indicator")'), ensuring the
visible text has no extra brackets and the URL and title remain unchanged.
In @docs/indicators/HtTrendline.md:
- Around line 43-45: Replace the VitePress custom container starting with ":::
warning ⚞ Convergence warning" and its closing "::: " with a GitHub alert block
by removing the "::: warning …" and closing "::: " and inserting a GitHub
warning block beginning with "> [!WARNING]" and a bolded title, e.g. ">
[!WARNING]" followed by "> **Convergence warning:** The first `100` periods will
have decreasing magnitude, convergence-related precision errors that can be as
high as ~5% deviation in indicator values for earlier periods." to match the
coding guideline.
🧹 Nitpick comments (7)
.vscode/tasks.json (2)
131-138: Cross-platform compatibility:rm -rfis Unix-only.The clean task uses a Unix command that won't work on Windows. Consider adding a Windows-specific command or using a cross-platform approach.
🔧 Suggested fix for cross-platform support
{ "label": "Clean: Website build cache", "detail": "Delete the dist build outputs cache.", "type": "shell", "command": "rm -rf dist", + "windows": { + "command": "if (Test-Path dist) { Remove-Item -Recurse -Force dist }", + "options": { + "shell": { + "executable": "powershell.exe", + "args": ["-Command"] + } + } + }, "options": { "cwd": "${workspaceFolder}/docs" } }
544-584: Well-implemented multi-platform Docker check.The task handles platform differences appropriately, including auto-starting Docker Desktop on macOS.
One minor inconsistency: the Windows version has a 60-second timeout while Unix versions loop indefinitely. Consider adding a timeout to the Unix commands for consistency, though this is low priority since developers can always Ctrl+C.
🔧 Optional: Add timeout to Unix commands for consistency
- "command": "echo 'Checking Docker...' && (docker info > /dev/null 2>&1 && echo '✅ Docker is ready' || (echo 'Waiting for Docker...' && until docker info > /dev/null 2>&1; do sleep 2; done && echo '✅ Docker is ready'))", + "command": "echo 'Checking Docker...' && (docker info > /dev/null 2>&1 && echo '✅ Docker is ready' || (echo 'Waiting for Docker...' && timeout=60; elapsed=0; until docker info > /dev/null 2>&1; do sleep 2; elapsed=$((elapsed+2)); [ $elapsed -ge $timeout ] && echo '❌ Docker failed to start' && exit 1; done && echo '✅ Docker is ready'))",docs/.vitepress/components/IndicatorChart.vue (2)
147-157: Fallback timestamp may cause chart issues.When timestamp parsing fails, returning
'1970-01-01'could cause data points to cluster at the epoch, potentially breaking chart visualization. Consider logging a warning or filtering out invalid timestamps entirely.
635-652: Watchers trigger full chart recreation - consider optimizing.Theme changes and viewport width changes both destroy and recreate the entire chart. For theme changes,
lightweight-chartssupportsapplyOptions()to update colors without recreation. This would improve UX during theme toggles.docs/indicators/Cmf.md (1)
53-55: Warning content could be more descriptive.The warning states values are "somewhat meaningless" but doesn't explain why or how to properly interpret them. Consider adding brief guidance on using CMF for relative comparisons or trend analysis.
docs/indicators/Atr.md (1)
6-6: Apply sentence case to header for consistency with guidelines.The header uses title case ("Average True Range / True Range"), but coding guidelines require sentence case for headers. Convert to "Average true range (ATR) / True range (TR)".
docs/indicators/Cci.md (1)
6-6: Apply sentence case to header for consistency with guidelines.The header uses title case ("Commodity Channel Index"), but coding guidelines require sentence case for headers. Convert to "Commodity channel index (CCI)" to maintain consistency with the documentation style guidelines.
…1892) Signed-off-by: Dave Skender <[email protected]> Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: DaveSkender <[email protected]>
|
@coderabbitai re-review.
|
🧩 Analysis chain🏁 Script executed: Length of output: 125 @DaveSkender, excellent news! I've completed a comprehensive analysis of all review feedback on PR #1739. 🎉 Prior Feedback StatusAll 93 previous review threads have been resolved!
The team has done an outstanding job addressing all feedback including:
🔍 Next StepsI'm now triggering a comprehensive re-review that will:
This will be a complete, from-scratch evaluation of the entire PR in its current state. ✅ Actions performedFull review triggered. |
Added exception for VitePress codeblocks in markdown instructions. Signed-off-by: Dave Skender <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: Dave Skender <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: Dave Skender <[email protected]>
Increased line width for threshold lines in the oscillator chart. Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In @docs/.vitepress/config.mts:
- Around line 56-79: The '/features' sidebar contains a duplicate menu entry for
"Utilities" (both the nested item under the "Features" group and a separate
top-level item link to '/utilities/'); remove the redundant standalone entry {
text: 'Utilities', link: '/utilities/' } that appears after "Indicators" so only
the intended "Utilities" link remains under the "Features" group in the
'/features' array in docs/.vitepress/config.mts.
- Around line 451-453: ssr.noExternal: true is forcing bundling of all deps
(including browser-only lightweight-charts) and causes SSR "window is not
defined" errors; update the Vite/VitePress config to remove or replace
ssr.noExternal: true with an explicit array of packages to bundle (e.g., only
list modules that truly require bundling) or remove lightweight-charts from the
noExternal list, and instead ensure any components using lightweight-charts are
rendered client-side via a ClientOnly wrapper; locate the ssr configuration
(ssr.noExternal) in the config and either change the boolean to an explicit
array of safe packages or delete the entry and wrap chart components with
ClientOnly so lightweight-charts isn’t bundled for SSR.
🧹 Nitpick comments (9)
.github/instructions/markdown.instructions.md (1)
329-329: Clarify VitePress alert syntax terminology and scope.The term "codeblocks" is misleading for VitePress custom containers (directives). The exception should clarify syntax and scope more explicitly.
✏️ Proposed refinement for the VitePress alert exception
- > Exception: for docs VitePress website, use native `:::` codeblocks for alerts. + > Exception: for `docs/**/*.md` files, use VitePress custom container syntax for alerts (`::: note`, `::: warning`, `::: tip`, `::: info`).Alternatively, for a more integrated approach that shows the mapping:
- > Exception: for docs VitePress website, use native `:::` codeblocks for alerts. + > Exception: for VitePress documentation files, use custom container syntax instead: + > - `::: note` (replaces `> [!NOTE]`) + > - `::: tip` (replaces `> [!TIP]`) + > - `::: warning` (replaces `> [!WARNING]`) + > - `::: info` (replaces `> [!IMPORTANT]`).vscode/tasks.json (2)
130-138: Cross-platform compatibility concern.The
rm -rf distcommand will fail on native Windows without Git Bash, WSL, or similar. Consider adding a Windows-specific variant for consistency with other cross-platform tasks in this file (e.g., lines 548-559).🔧 Suggested cross-platform fix
{ "label": "Clean: Website build cache", "detail": "Delete the dist build outputs cache.", "type": "shell", "command": "rm -rf dist", + "windows": { + "command": "if (Test-Path dist) { Remove-Item -Recurse -Force dist }", + "options": { + "shell": { + "executable": "powershell.exe", + "args": ["-Command"] + } + } + }, "options": { "cwd": "${workspaceFolder}/docs" } },
461-499: Background tasks lackproblemMatcherfor server readiness detection.The dev/preview server tasks are marked as
isBackground: truebut don't define aproblemMatcherwith background patterns. VS Code won't detect when the server is ready, which could affect task chaining or dependent tasks.This is a minor usability concern for local development.
🔧 Example problemMatcher for VitePress dev server
{ "label": "Run: Website (dev server)", "detail": "Serve VitePress website with hot reload (port 5173)", "type": "shell", "command": "pnpm run docs:dev", "dependsOn": "Install: NPM (pnpm) packages", "dependsOrder": "sequence", "isBackground": true, "runOptions": { "instanceLimit": 1 }, "options": { "cwd": "${workspaceFolder}/docs" - } + }, + "problemMatcher": { + "owner": "vitepress", + "pattern": { "regexp": "^$", "message": 1 }, + "background": { + "activeOnStart": true, + "beginsPattern": "^.*vitepress.*dev.*$", + "endsPattern": "^.*Local:.*http://localhost.*$" + } + } },.github/instructions/docs.instructions.md (1)
51-55: Clarify that the preview server must be running for accessibility testing.The pa11y-ci command targets
http://localhost:5173, but the instructions only showdocs:buildbefore running the test. The preview server (pnpm run docs:preview) should be started first, or use the correct preview port (typically 4173 for Vite preview).📝 Suggested clarification
```bash # accessibility testing after production build pnpm run docs:build +pnpm run docs:preview & # Start preview server (default: http://localhost:4173) -npx pa11y-ci --sitemap http://localhost:5173/sitemap.xml +npx pa11y-ci --sitemap http://localhost:4173/sitemap.xml</details> </blockquote></details> <details> <summary>docs/.vitepress/components/IndicatorChart.vue (4)</summary><blockquote> `223-225`: **Price formatter rounds to integers, which may lose precision for low-priced securities.** The overlay chart formatter uses `Math.round(price)`, which would display $1 for a stock priced at $1.45. Consider using decimal formatting for prices under a certain threshold. <details> <summary>💡 Optional precision handling</summary> ```diff localization: { - priceFormatter: (price: number) => `$${Math.round(price)}` + priceFormatter: (price: number) => { + if (Math.abs(price) < 10) { + return `$${price.toFixed(2)}` + } + return `$${Math.round(price)}` + } },
425-437: TypeScript type mismatch when addingcolorproperty to data point.The
pointobject is typed without acolorproperty, but one is conditionally assigned at line 434. This may cause TypeScript errors depending on strict mode settings.🔧 Fix type annotation
.map(d => { - const point = { + const point: { time: string; value: number; color?: string } = { time: parseTimestamp(d.timestamp), value: d.value as number } // Preserve per-bar color if present (for conditional coloring like Elder-Ray) if (d.color) { point.color = d.color } return point })
647-652: Viewport change triggers full chart rebuild, which may cause visual flicker.The watcher destroys and reinitializes charts when crossing the mobile breakpoint. Consider whether updating price scale visibility alone (already done in
updatePriceScaleVisibility) would suffice, or if the bar count change justifies the rebuild.The current approach ensures correct bar counts for different viewports. If the rebuild is intentional for data re-slicing, consider adding a brief comment explaining why full reinitialization is needed.
717-720: Redundant media query with identical styles.The overlay-chart styles at the large breakpoint (768px-1024px) specify the same
aspect-ratio: 2.5as the default. This can be removed.🧹 Remove redundant media query
.overlay-chart { aspect-ratio: 2.5; - /* Medium breakpoint (768px-1024px) */ - @media (max-width: $large-breakpoint) { - aspect-ratio: 2.5; - } - /* Mobile breakpoint (<480px) - matches JavaScript isMobileViewport */ @media (max-width: $small-breakpoint) { aspect-ratio: 5/4; }docs/.vitepress/config.mts (1)
55-203: Repeated sidebar "Documentation" block across multiple sections violates DRY.The same documentation links block is repeated for
/features,/guide,/utilities,/examples,/performance,/migration,/contributing, and/aboutsidebars. Consider extracting to a shared constant.♻️ Extract shared sidebar items
// Define once at the top of the config const documentationItems = [ { text: 'Getting started', link: '/guide' }, { text: 'Features', link: '/features/' }, { text: 'Indicators', link: '/indicators' }, { text: 'Utilities', link: '/utilities/' }, { text: 'Examples', link: '/examples/' }, { text: 'Performance', link: '/performance' }, { text: 'Migration (v2→v3)', link: '/migration' }, { text: 'Contributing', link: '/contributing' }, { text: 'About', link: '/about' }, ] // Then reuse in sidebar sections sidebar: { '/guide': [ { text: 'Documentation', items: documentationItems } ], // ... }
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
.github/instructions/docs.instructions.md.github/instructions/markdown.instructions.md.vscode/tasks.jsondocs/.vitepress/components/IndicatorChart.vuedocs/.vitepress/config.mtsdocs/.vitepress/contributors.data.ts
🧰 Additional context used
🧠 Learnings (56)
📓 Common learnings
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Ensure documentation site builds successfully in the CI/CD pipeline
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/** : Build Jekyll documentation without errors before committing changes
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Provide migration guidance for breaking changes in documentation
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Document version-specific features appropriately
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Check for typos and formatting consistency in documentation changes
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1404
File: docs/.markdownlint-cli2.jsonc:1-28
Timestamp: 2025-09-28T17:52:02.347Z
Learning: Jekyll-based documentation in the docs/ directory requires docs-specific markdownlint configuration (.markdownlint-cli2.jsonc) due to Jekyll's unique markdown requirements, which is an exception to the general preference for repository-wide lint rules.
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/_indicators/** : Keep indicator documentation current with library changes
Applied to files:
docs/.vitepress/components/IndicatorChart.vuedocs/.vitepress/config.mts.github/instructions/docs.instructions.md
📚 Learning: 2025-12-31T18:52:11.970Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: docs/AGENTS.md:0-0
Timestamp: 2025-12-31T18:52:11.970Z
Learning: Applies to docs/_indicators/**/*.md : Add or update indicator documentation files in `_indicators/` directory
Applied to files:
docs/.vitepress/components/IndicatorChart.vue.github/instructions/docs.instructions.md
📚 Learning: 2026-01-03T07:34:40.247Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T07:34:40.247Z
Learning: Applies to docs/_indicators/*.md : Update the matching `docs/_indicators/<Indicator>.md` file whenever an indicator changes; keep primary public API example, parameter details, warmup guidance, and outputs in sync with the implementation
Applied to files:
docs/.vitepress/components/IndicatorChart.vue
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/_indicators/** : Add or update indicator files in the `_indicators/` directory with consistent naming conventions
Applied to files:
docs/.vitepress/components/IndicatorChart.vue
📚 Learning: 2026-01-01T06:10:39.665Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/AGENTS.md:0-0
Timestamp: 2026-01-01T06:10:39.665Z
Learning: Applies to src/docs/_indicators/*.md : Update `docs/_indicators/{IndicatorName}.md` with usage, parameters, warmup, and outputs documentation
Applied to files:
docs/.vitepress/components/IndicatorChart.vue
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Include navigation metadata in front matter when applicable
Applied to files:
docs/.vitepress/config.mts
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Document version-specific features appropriately
Applied to files:
docs/.vitepress/config.mts.github/instructions/docs.instructions.md.github/instructions/markdown.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Verify all internal and external links work in documentation
Applied to files:
docs/.vitepress/config.mts.vscode/tasks.json.github/instructions/docs.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/({_layouts,_includes})/**/*.{html,md} : Follow established patterns in `_layouts/` and `_includes/` directories
Applied to files:
docs/.vitepress/config.mts.github/instructions/docs.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Verify all internal Markdown links resolve to existing files
Applied to files:
docs/.vitepress/config.mts
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/assets/**/*.{png,jpg,jpeg,gif,svg,webp} : Place image assets in the `assets/` folder with consistent naming conventions
Applied to files:
docs/.vitepress/config.mts
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/assets/**/*.{png,jpg,jpeg,gif,svg,webp} : Optimize images for web delivery
Applied to files:
docs/.vitepress/config.mts
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Remove backticks in `#file:` references: use `#file:path` not `` `#file:path` ``
Applied to files:
docs/.vitepress/config.mts
📚 Learning: 2025-12-31T18:52:11.970Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: docs/AGENTS.md:0-0
Timestamp: 2025-12-31T18:52:11.970Z
Learning: Applies to docs/assets/**/*.{png,jpg,jpeg,gif,svg,webp} : Place image assets in `assets/` folder
Applied to files:
docs/.vitepress/config.mts
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Check for typos and formatting consistency in documentation changes
Applied to files:
.vscode/tasks.json.github/instructions/docs.instructions.md
📚 Learning: 2025-09-28T16:59:35.741Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1402
File: .devcontainer/startup.sh:8-16
Timestamp: 2025-09-28T16:59:35.741Z
Learning: In .devcontainer/devcontainer.json for the Stock.Indicators repository, Node.js is installed via the "ghcr.io/devcontainers/features/node:1" feature with LTS version, making npm commands in startup.sh safe to use.
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown,.markdownlint*} : Run `npx markdownlint-cli2 --no-globs {filepath} --fix` to auto-fix Markdown linting issues, always using `--no-globs` with explicit file paths to prevent unintended glob expansion
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown,.markdownlint*} : Run `npx markdownlint-cli2 --no-globs {filepath}` to verify zero linting errors after manual fixes
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:34:40.247Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T07:34:40.247Z
Learning: Applies to **/*.md : Markdown: Run `npx markdownlint-cli2` for linting and `npx markdownlint-cli2 --fix` for auto-fixing
Applied to files:
.vscode/tasks.json
📚 Learning: 2025-12-31T18:52:11.970Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: docs/AGENTS.md:0-0
Timestamp: 2025-12-31T18:52:11.970Z
Learning: Use `npx markdownlint-cli2 --fix` to lint and fix markdown files
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-01T06:10:39.665Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/AGENTS.md:0-0
Timestamp: 2026-01-01T06:10:39.665Z
Learning: Applies to src/**/*.md : Run `npx markdownlint-cli2 --fix` to lint and fix markdown files
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Never bypass lint warnings; resolve or add narrow suppressions with `<!-- markdownlint-disable MD### -->...<!-- markdownlint-enable MD### -->`
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to {.markdownlintrc,markdownlint.json} : Remove competing Markdown linting configuration files (`markdownlint.json`, `.markdownlintrc`) if present, keeping only `.markdownlint-cli2.jsonc`
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to .markdownlint-cli2.jsonc : Configure `.markdownlint-cli2.jsonc` with rules: MD003 (ATX style), MD004 (dash bullets), MD007 (2-space indent), MD013 (disabled), MD024 (siblings_only), MD028 (disabled), MD033 (allowed HTML elements), MD046 (fenced code), MD048 (backtick fences)
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:34:40.247Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T07:34:40.247Z
Learning: Execute code completion checklist before finishing any code work: `dotnet format --no-restore && dotnet build && dotnet test --no-restore && npx markdownlint-cli2` ensuring zero warnings and zero errors
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Use present tense and imperative mood in Markdown prose: 'Run the command' not 'You should run'
Applied to files:
.vscode/tasks.json
📚 Learning: 2026-01-03T07:34:40.247Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T07:34:40.247Z
Learning: Applies to **/*.cs : Use Roslynator: `roslynator fix --properties TargetFramework=net10.0 --severity-level info` for .NET code linting and auto-fixing
Applied to files:
.vscode/tasks.json
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/** : Build Jekyll documentation without errors before committing changes
Applied to files:
.vscode/tasks.json.github/instructions/docs.instructions.md
📚 Learning: 2026-01-03T07:34:40.247Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T07:34:40.247Z
Learning: Use Solution tasks (Restore, Build, Test) or run `dotnet restore`, `dotnet build`, and `dotnet test --no-restore` from repository root
Applied to files:
.vscode/tasks.json
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Ensure documentation site builds successfully in the CI/CD pipeline
Applied to files:
.vscode/tasks.json.github/instructions/docs.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Follow markdown linting rules in the `.github/instructions/markdown.instructions.md` file
Applied to files:
.vscode/tasks.json.github/instructions/docs.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to .vscode/settings.json : Configure `.vscode/settings.json` with `[markdown]` editor settings: defaultFormatter (DavidAnson.vscode-markdownlint), formatOnSave (true), codeActionsOnSave (source.fixAll.markdownlint), and files.associations (*.md to markdown)
Applied to files:
.vscode/tasks.json
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step
Applied to files:
.vscode/tasks.json
📚 Learning: 2025-12-24T07:46:43.391Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1771
File: .github/instructions/indicator-buffer.instructions.md:321-321
Timestamp: 2025-12-24T07:46:43.391Z
Learning: Only update the 'Last updated' timestamp in files under .github/instructions when the actual guidance content changes meaningfully. Do not bump the date for administrative edits like path updates, link corrections, or file reorganization. If unsure whether a change is substantive, document the rationale and consider delaying the timestamp update.
Applied to files:
.github/instructions/docs.instructions.md.github/instructions/markdown.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Provide migration guidance for breaking changes in documentation
Applied to files:
.github/instructions/docs.instructions.md.github/instructions/markdown.instructions.md
📚 Learning: 2025-12-31T18:52:11.970Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: docs/AGENTS.md:0-0
Timestamp: 2025-12-31T18:52:11.970Z
Learning: Follow documentation instructions in .github/instructions/docs.instructions.md
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2026-01-01T06:10:39.665Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/AGENTS.md:0-0
Timestamp: 2026-01-01T06:10:39.665Z
Learning: Applies to src/**/MigrationGuide.V3.md : Update `MigrationGuide.V3.md` with migration notes and bridges when behavior changes
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2025-12-31T18:52:11.970Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: docs/AGENTS.md:0-0
Timestamp: 2025-12-31T18:52:11.970Z
Learning: Applies to docs/_indicators/**/*.md : Ensure proper YAML front matter in Jekyll documentation files
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Set appropriate page titles and descriptions in Jekyll front matter
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2025-09-28T17:52:02.347Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1404
File: docs/.markdownlint-cli2.jsonc:1-28
Timestamp: 2025-09-28T17:52:02.347Z
Learning: Jekyll-based documentation in the docs/ directory requires docs-specific markdownlint configuration (.markdownlint-cli2.jsonc) due to Jekyll's unique markdown requirements, which is an exception to the general preference for repository-wide lint rules.
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/_config.yml : Follow Jekyll best practices in `_config.yml`
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Use consistent layout references in Jekyll front matter
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Ensure proper heading hierarchy with no skipping levels
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Use ATX-style headers only (`#`, `##`, `###`); never use Setext style (`===`, `---`)
Applied to files:
.github/instructions/docs.instructions.md.github/instructions/markdown.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/_config.yml : Leverage Jekyll plugins appropriately
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Ensure YAML front matter follows documented schema
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Include descriptive link text and avoid 'click here' phrases
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skill files must include workflow sections in the following order: Title and introduction (H1), When to use this skill, Required tools, Workflow (numbered sequential steps), Completion criteria or quality standards, Self-healing (for maintenance skills), About maintenance
Applied to files:
.github/instructions/docs.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Use GitHub alert blocks sparingly for critical execution warnings: `> [!NOTE]`, `> [!TIP]`, `> [!IMPORTANT]`, `> [!WARNING]`, `> [!CAUTION]`
Applied to files:
.github/instructions/markdown.instructions.md
📚 Learning: 2026-01-06T06:43:47.544Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1880
File: docs/indicators/Beta.md:69-69
Timestamp: 2026-01-06T06:43:47.544Z
Learning: The docs/.markdownlint-cli2.jsonc configuration allows the following HTML elements in MD033: a, code, details, summary, sub, sup, kbd, abbr, img, br, div, p, h1, ul, li, nav, script, Badge, ClientOnly, IndicatorChart, VPTeamMembers, TQuote, clientonly, indicatorchart
Applied to files:
.github/instructions/markdown.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Limit acceptable duplication in Markdown to: short orienting summaries (2–3 sentences), critical inline warnings, code examples demonstrating distinct use cases, and cross-references providing essential context
Applied to files:
.github/instructions/markdown.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Exclude historical context and migration details from Markdown files; focus on current directives only
Applied to files:
.github/instructions/markdown.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Use pipe-delimited table format with alignment: left-align with `| --- |`, right-align with `| ---: |`, center-align with `| :---: |`
Applied to files:
.github/instructions/markdown.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Always use fenced code blocks (``` ```); never use indented code blocks
Applied to files:
.github/instructions/markdown.instructions.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Add blank lines before and after code block fences
Applied to files:
.github/instructions/markdown.instructions.md
🧬 Code graph analysis (1)
docs/.vitepress/config.mts (2)
docs/.vitepress/scripts/generate-indicator-sidebar.mjs (1)
__dirname(7-7)docs/.vitepress/scripts/generate-contributors.mjs (1)
__dirname(6-6)
⏰ Context from checks skipped due to timeout of 400000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (10)
.vscode/tasks.json (5)
112-129: LGTM!The PNPM install and update tasks are correctly configured with the appropriate working directory pointing to
docs/where the VitePresspackage.jsonresides. The task labels clearly indicate the package manager in use.
191-200: LGTM!The build task correctly chains the package installation as a prerequisite and uses the standard VitePress build command with the appropriate working directory.
419-440: LGTM!The website testing tasks properly chain their prerequisites (Docker for htmlproofer, Chrome for pa11y) and align with CI workflow parity mentioned in the PR objectives.
Consider adding
problemMatcherdefinitions to surface errors directly in VS Code's Problems panel for better developer experience, though this is optional.
517-532: LGTM!Good cross-platform implementation for stopping servers. The
|| truesuffix ensures the task succeeds even when no matching processes exist, and the presentation settings appropriately minimize noise.Minor note: The pattern
5173|5174could theoretically match unrelated processes, but the combined pattern withvitepress|docs:dev|docs:previewmakes false positives unlikely in practice.
544-584: LGTM!The Docker Desktop task demonstrates excellent cross-platform handling with appropriate timeout logic (60s with 2s polling), proper background
problemMatcherconfiguration, and macOS-specific auto-launch viaopen -a Docker. The pattern-based readiness detection will allow dependent tasks to chain correctly.docs/.vitepress/contributors.data.ts (2)
1-45: LGTM!The contributor data loader is well-structured with proper TypeScript interfaces, graceful error handling, and bot filtering. The optional token handling is appropriate for local development vs CI environments.
25-29: No action needed. The repository has approximately 20 contributors (based on GitHub API pagination headers), which is well below the 100-item limit per request. All contributors will be fetched correctly with the current implementation..github/instructions/docs.instructions.md (1)
1-162: Documentation instructions updated appropriately for VitePress migration.The instructions comprehensively cover the migration from Jekyll to VitePress, including local development setup, VitePress-specific guidelines (custom containers, asset management), and accessibility testing workflows.
docs/.vitepress/components/IndicatorChart.vue (1)
1-811: Well-architected charting component with good accessibility and responsive design.The component demonstrates solid engineering practices: TypeScript interfaces, proper Vue 3 composition API usage, graceful error handling, accessibility attributes, theme integration, and responsive behavior. The lightweight-charts integration is clean with appropriate series type handling.
docs/.vitepress/config.mts (1)
1-487: Comprehensive VitePress configuration for the documentation migration.The configuration covers site metadata, SEO, navigation, extensive indicator taxonomy in the sidebar, clean URLs, legacy redirects, and proper build exclusions for Jekyll artifacts. The structure supports the migration while maintaining backward compatibility.
| '/features': [ | ||
| { | ||
| items:[ | ||
| { text: 'Getting started', link: '/guide' }, | ||
| { | ||
| text: 'Features', | ||
| items: [ | ||
| { text: 'Overview', link: '/features/' }, | ||
| { text: 'Batch (Series)', link: '/features/batch' }, | ||
| { text: 'Buffer lists', link: '/features/buffer' }, | ||
| { text: 'Stream hubs', link: '/features/stream' }, | ||
| { text: 'Utilities', link: '/utilities/' }, | ||
| ] | ||
| }, | ||
| { text: 'Indicators', link: '/indicators' }, | ||
| { text: 'Utilities', link: '/utilities/' }, | ||
| { text: 'Examples', link: '/examples/' }, | ||
| { text: 'Performance', link: '/performance' }, | ||
| { text: 'Migration (v2→v3)', link: '/migration' }, | ||
| { text: 'Contributing', link: '/contributing' }, | ||
| { text: 'About', link: '/about' }, | ||
| ] | ||
| } | ||
| ], |
There was a problem hiding this comment.
Duplicate "Utilities" entry in /features sidebar.
Lines 67 and 71 both link to /utilities/, creating redundant navigation entries in the same sidebar section.
🔧 Remove duplicate entry
{
text: 'Features',
items: [
{ text: 'Overview', link: '/features/' },
{ text: 'Batch (Series)', link: '/features/batch' },
{ text: 'Buffer lists', link: '/features/buffer' },
{ text: 'Stream hubs', link: '/features/stream' },
- { text: 'Utilities', link: '/utilities/' },
]
},
{ text: 'Indicators', link: '/indicators' },
{ text: 'Utilities', link: '/utilities/' },🤖 Prompt for AI Agents
In @docs/.vitepress/config.mts around lines 56 - 79, The '/features' sidebar
contains a duplicate menu entry for "Utilities" (both the nested item under the
"Features" group and a separate top-level item link to '/utilities/'); remove
the redundant standalone entry { text: 'Utilities', link: '/utilities/' } that
appears after "Indicators" so only the intended "Utilities" link remains under
the "Features" group in the '/features' array in docs/.vitepress/config.mts.
| ssr: { | ||
| noExternal: true | ||
| }, |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, check the repository structure and find build scripts
git ls-files | head -20Repository: DaveSkender/Stock.Indicators
Length of output: 832
🏁 Script executed:
# Check if pnpm-lock.yaml or package.json exists in docs
find . -maxdepth 3 -name "package.json" -o -name "pnpm-lock.yaml" | grep -E "(^|/)docs/" | head -5Repository: DaveSkender/Stock.Indicators
Length of output: 93
🏁 Script executed:
# Check the full config.mts file to understand the context
wc -l docs/.vitepress/config.mtsRepository: DaveSkender/Stock.Indicators
Length of output: 102
🏁 Script executed:
# Read the full config.mts file to see the context around line 451
sed -n '426,487p' docs/.vitepress/config.mtsRepository: DaveSkender/Stock.Indicators
Length of output: 1391
🏁 Script executed:
# Check if docs/package.json exists and read it
cat docs/package.jsonRepository: DaveSkender/Stock.Indicators
Length of output: 121
🏁 Script executed:
# Check root package.json as well
cat package.json 2>/dev/null | head -50Repository: DaveSkender/Stock.Indicators
Length of output: 54
🏁 Script executed:
# Get full root package.json
wc -l package.json && echo "---" && cat package.jsonRepository: DaveSkender/Stock.Indicators
Length of output: 115
🏁 Script executed:
# Check for pnpm workspace configuration
ls -la | grep -E "(pnpm|workspace)"
cat pnpm-workspace.yaml 2>/dev/null || echo "No pnpm-workspace.yaml"Repository: DaveSkender/Stock.Indicators
Length of output: 94
🏁 Script executed:
# List what's actually in the docs directory
ls -la docs/ | head -20Repository: DaveSkender/Stock.Indicators
Length of output: 1256
🏁 Script executed:
# List root directory
ls -la | head -30Repository: DaveSkender/Stock.Indicators
Length of output: 1240
🏁 Script executed:
# Search for all package.json files in the repo
find . -name "package.json" -type f 2>/dev/null | head -20Repository: DaveSkender/Stock.Indicators
Length of output: 54
🏁 Script executed:
# Check .vitepress directory structure
ls -la docs/.vitepress/Repository: DaveSkender/Stock.Indicators
Length of output: 691
🏁 Script executed:
# Check the pnpm-lock.yaml to see what dependencies are defined
head -100 docs/pnpm-lock.yamlRepository: DaveSkender/Stock.Indicators
Length of output: 3573
🏁 Script executed:
# Look for package.json in .vitepress or other locations
find . -path ./.*git -prune -o -name "package.json" -type f -print 2>/dev/nullRepository: DaveSkender/Stock.Indicators
Length of output: 54
🏁 Script executed:
# Check if there's any build documentation
find . -name "*.md" -type f | xargs grep -l "build\|docs:build\|pnpm" 2>/dev/null | head -5Repository: DaveSkender/Stock.Indicators
Length of output: 314
🌐 Web query:
Vite ssr.noExternal: true implications side effects
💡 Result:
Short summary — setting ssr.noExternal: true causes Vite to bundle every dependency for SSR (no deps are externalized). Main implications / side effects:
- Bundles all dependencies into the SSR output → larger single bundle and longer build time. (vite.dev)
- Useful when targeting non-Node runtimes (e.g., ssr.target: 'webworker') to produce a single JS file. (ja.vite.dev)
- Node built‑ins (fs, path, etc.) imported by a dependency will cause errors when noExternal is true (Vite will throw). (ja.vite.dev)
- Native / binary modules (node-gyp, native addons) and some CJS-only packages may fail when bundled — they often need to remain external. (vite.dev)
- Overrides ssr.external for listed packages (noExternal takes precedence unless you explicitly list externals as string[]). Be careful combining ssr.external and ssr.noExternal. (vite.dev)
- May change resolution/conditions behavior for packages (use ssr.resolve.* to control). (ja.vite.dev)
When to use: enable when you need a single bundled SSR file (e.g., Web Worker runtime) or when dependencies must be transpiled/bundled for the server. Avoid if you depend on Node native modules or want to keep server deps external for smaller build and faster cold starts. (ja.vite.dev)
Sources: Vite docs (SSR guide and SSR options). (ja.vite.dev)
Citations:
- 1: https://vite.dev/config/ssr-options.html?utm_source=openai
- 2: https://ja.vite.dev/guide/ssr?utm_source=openai
- 3: https://ja.vite.dev/guide/ssr?utm_source=openai
- 4: https://vite.dev/config/ssr-options.html?utm_source=openai
- 5: https://vite.dev/config/ssr-options.html?utm_source=openai
- 6: https://ja.vite.dev/guide/ssr?utm_source=openai
- 7: https://ja.vite.dev/guide/ssr?utm_source=openai
- 8: https://ja.vite.dev/guide/ssr?utm_source=openai
🌐 Web query:
VitePress ssr noExternal configuration best practices
💡 Result:
Short best-practices for configuring ssr.noExternal when using VitePress (sources: Vite docs + VitePress SSR notes) [1][2]:
-
Prefer explicit lists or globs, not global true:
- Use string/RegExp or arrays to include only packages that must be bundled (e.g. UI libs compiled to ESM, linked/local packages, or packages that ship non-ESM builds). Avoid ssr.noExternal: true unless you really need a fully bundled SSR output. [1]
-
Include only problematic packages:
- Add packages that fail when externalized (common culprits: UI libraries, CSS-in-JS packages, some Popper/tooltip libs, or packages that ship CJS-only or mixed exports). Example pattern: ssr.noExternal: ['@org/*','some-ui-lib','@popperjs/core']. This keeps build size controllable. [1][2]
-
Use globs/regex for monorepos or scoped packages:
- For workspace packages or scoped namespaces use patterns (e.g. /@my-scope/.+/ or '@my-scope/*') so you don’t miss linked packages used during HMR/SSR. [1]
-
Watch node built-ins / target implications:
- If you set ssr.noExternal: true (bundle everything) Vite will error if Node built-ins are imported for non-node targets; prefer leaving node built-ins external by targeting node or excluding them. Use ssr.target where appropriate. [1]
-
Balance bundle size vs compatibility:
- Bundling (noExternal) solves compatibility but increases SSR build time and artifact size. Start by adding only packages that break and iterate. Use diagnostics (SSR run errors) to identify candidates. [1]
-
For VitePress-specific themes/plugins:
- Any third-party theme dependencies that access DOM or ship non-SSR-friendly builds should be added to ssr.noExternal in your Vite config used by VitePress. Wrap truly browser-only code in instead of bundling when possible. [2]
-
Example (vite.config.js used by VitePress):
- ssr: {
noExternal: [
'@my-scope/*',
'some-ui-lib',
'@popperjs/core'
]
}
This bundles only the listed packages for SSR and leaves the rest externalized. [1]
- ssr: {
References
- Vite SSR options (ssr.noExternal / ssr.target / behavior when true). [1]
- VitePress SSR compatibility / recommendations for SSR-safe code and client-only components. [2]
If you want, I can inspect your package.json or VitePress/Vite config and suggest an exact ssr.noExternal list.
🌐 Web query:
lightweight-charts SSR compatibility issues
💡 Result:
Summary — cause
- lightweight-charts is a client‑side library and assumes browser APIs (window/document/canvas); it is not built to run in Node/SSR. [1]
Common SSR problems
- "window is not defined" / SyntaxError at server render because the package executes browser code during import. [2][5]
- Hydration/no-render: chart element mounts but nothing is drawn or hydration errors when chart code runs on the server or in a Server Component. [4]
Short solutions
- Only load/use the library on the client:
- Make the component a Client Component ("use client") in Next.js App Router. [3][4]
- Or dynamically import the chart component with SSR disabled (next/dynamic { ssr: false }) or lazy-load via import() inside a useEffect. [2][5][3]
- Defer imports that reference lightweight-charts into a client-only file (don't import it from modules that may be imported on the server). [2][5]
- Guard runtime references (if you must) with typeof window !== 'undefined' and run createChart inside useEffect/useLayoutEffect. [3][5]
If you still see issues
- Ensure you’re not importing lightweight-charts in any file that can be imported by server code (routes/layouts/page server components). Move those imports to client components or dynamic-loaded modules. [3][2]
Sources
- Lightweight Charts docs (client-side only). [1]
- Next.js and community solutions (dynamic import / client components). [3][2]
- Community posts and troubleshooting (Stack Overflow, blog posts). [2][5][4]
Replace ssr.noExternal: true with an explicit list or remove client-side packages from bundling.
Setting ssr.noExternal: true bundles all dependencies including client-only libraries. The project includes lightweight-charts (5.1.0), a browser-only library that cannot be bundled for SSR and will cause "window is not defined" errors during server rendering. Follow Vite best practices: either (1) use an explicit list of packages that genuinely need bundling (e.g., UI libraries with problematic exports), or (2) wrap browser-dependent components in <ClientOnly> instead of forcing bundling. If chart visualization is only needed client-side, exclude it from SSR bundling entirely.
🤖 Prompt for AI Agents
In @docs/.vitepress/config.mts around lines 451 - 453, ssr.noExternal: true is
forcing bundling of all deps (including browser-only lightweight-charts) and
causes SSR "window is not defined" errors; update the Vite/VitePress config to
remove or replace ssr.noExternal: true with an explicit array of packages to
bundle (e.g., only list modules that truly require bundling) or remove
lightweight-charts from the noExternal list, and instead ensure any components
using lightweight-charts are rendered client-side via a ClientOnly wrapper;
locate the ssr configuration (ssr.noExternal) in the config and either change
the boolean to an explicit array of safe packages or delete the entry and wrap
chart components with ClientOnly so lightweight-charts isn’t bundled for SSR.
commit 98415b5 Author: JGronholz <[email protected]> Date: Sat Jan 10 13:03:36 2026 -0600 Update ReusableObserver.cs commit 7e271df Author: JGronholz <[email protected]> Date: Sat Jan 10 12:37:17 2026 -0600 Make ReusableObserver generic commit b7900e2 Author: JGronholz <[email protected]> Date: Sat Jan 10 12:19:57 2026 -0600 Update ReusableObserver.cs commit 5eff832 Merge: 37acf0d 52b6378 Author: JGronholz <[email protected]> Date: Sat Jan 10 10:58:43 2026 -0600 Merge pull request #7 from JGronholz/copilot/add-xml-documentation-streamhub docs: Add XML documentation to ReusableObserver commit 52b6378 Author: copilot-swe-agent[bot] <[email protected]> Date: Sat Jan 10 16:52:10 2026 +0000 Add comprehensive XML documentation to ReusableObserver - Add XML docs for IsSubscribed property with thread-safety notes - Add XML docs for constructor with parameter descriptions - Add null validation for required isSubscribed parameter - Add XML docs for all public methods (OnError, OnCompleted, Unsubscribe, OnAdd, OnRebuild, OnPrune, Reinitialize, Rebuild overloads) - Add test for ArgumentNullException validation Co-authored-by: JGronholz <[email protected]> commit c2632b4 Author: copilot-swe-agent[bot] <[email protected]> Date: Sat Jan 10 16:44:03 2026 +0000 Initial plan commit 37acf0d Author: JGronholz <[email protected]> Date: Sat Jan 10 10:27:47 2026 -0600 Update ReusableObserver.cs commit 938d7d2 Author: JGronholz <[email protected]> Date: Sat Jan 10 10:17:51 2026 -0600 Update ReusableObserver.cs commit 252a668 Author: JGronholz <[email protected]> Date: Sat Jan 10 10:15:40 2026 -0600 Update ReusableObserver.cs commit 608d471 Author: JGronholz <[email protected]> Date: Sat Jan 10 10:15:08 2026 -0600 Update ReusableObserver.cs commit ccef491 Author: JGronholz <[email protected]> Date: Sat Jan 10 09:23:06 2026 -0600 Create ReusableObserver.cs commit a277198 Author: Dave Skender <[email protected]> Date: Sat Jan 10 05:07:27 2026 -0500 feat: Add VitePress docs site (new) (DaveSkender#1739) Signed-off-by: Dave Skender <[email protected]> Signed-off-by: GitHub <[email protected]> Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> commit f165c8e Author: Dave Skender <[email protected]> Date: Sat Jan 10 01:14:26 2026 -0500 ci: Fix publish versioning (DaveSkender#1890) Signed-off-by: Dave Skender <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> commit cdf9131 Author: Copilot <[email protected]> Date: Thu Jan 8 23:41:19 2026 -0500 fix: Prevent dev version reset when preview tags are added (DaveSkender#1887) Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: DaveSkender <[email protected]>
Experimental migration for doc site using VitePress framework