Skip to content

chore: Upgrade .NET version from 9.x to 10.x#1736

Merged
DaveSkender merged 10 commits intov3from
dotnet-10
Nov 13, 2025
Merged

chore: Upgrade .NET version from 9.x to 10.x#1736
DaveSkender merged 10 commits intov3from
dotnet-10

Conversation

@DaveSkender
Copy link
Owner

No description provided.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 13, 2025

📝 Walkthrough

Walkthrough

This pull request updates the project and CI to .NET 10.0 (container images and GitHub Actions), adds Node feature to the devcontainer and removes UV/Python tooling, adjusts devcontainer startup behavior, bumps Skender.Stock.Indicators references to 2.7.0 in examples and tools, changes BufferList and ConnorsRsi initialization/propagation logic, updates solution/Visual Studio metadata and Tools solution items, and performs wide documentation and formatting refinements.

Possibly related PRs


📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4515710 and 3f79826.

📒 Files selected for processing (1)
  • .devcontainer/startup.sh (0 hunks)
💤 Files with no reviewable changes (1)
  • .devcontainer/startup.sh
⏰ 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). (2)
  • GitHub Check: linting (full)
  • GitHub Check: Codacy Static Code Analysis

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.

@DaveSkender DaveSkender marked this pull request as ready for review November 13, 2025 09:15
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/a-d/ConnorsRsi/ConnorsRsi.BufferList.cs (1)

79-87: Unnecessary null checks for readonly initialized fields.

The null checks for _rsiClose and _rsiStreak are redundant. Both fields are declared as readonly (lines 8-9) and are always initialized in the constructor (lines 32-33), so they cannot be null when MaxListSize setter is invoked.

Apply this diff to simplify:

         // Propagate MaxListSize to inner RSI buffer lists
-        if (_rsiClose is not null)
-        {
-            _rsiClose.MaxListSize = value;
-        }
-
-        if (_rsiStreak is not null)
-        {
-            _rsiStreak.MaxListSize = value;
-        }
+        _rsiClose.MaxListSize = value;
+        _rsiStreak.MaxListSize = value;
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 804fed4 and 598b5f1.

📒 Files selected for processing (2)
  • src/_common/BufferLists/BufferList.cs (2 hunks)
  • src/a-d/ConnorsRsi/ConnorsRsi.BufferList.cs (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
src/**/*.cs

⚙️ CodeRabbit configuration file

src/**/*.cs: Focus on:

  • Mathematical accuracy: Verify financial calculations against reference implementations
  • Performance: Flag unnecessary allocations, excessive LINQ, boxing operations
  • Precision: Ensure appropriate use of double vs decimal for financial calculations
  • Null safety: Validate handling of insufficient data scenarios
  • Input validation: Check parameter validation and error handling
  • Lookback periods: Verify off-by-one errors in window calculations
  • Streaming support: Ensure stateful indicators handle edge cases properly
  • Memory efficiency: Check for proper span usage and buffer management
  • XML documentation: Ensure all public APIs have complete documentation

Files:

  • src/a-d/ConnorsRsi/ConnorsRsi.BufferList.cs
  • src/_common/BufferLists/BufferList.cs
🧠 Learnings (1)
📓 Common learnings
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.378Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.
🧬 Code graph analysis (1)
src/_common/BufferLists/BufferList.cs (1)
src/s-z/VolatilityStop/VolatilityStop.BufferList.cs (1)
  • PruneList (169-178)
⏰ 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 (1)
src/_common/BufferLists/BufferList.cs (1)

33-58: LGTM! Clean refactoring to explicit backing field.

The conversion from auto-property to explicit property with a private backing field is correctly implemented. The initialization, getter, setter validation, and pruning logic all work as expected.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ccf73fe and 864007b.

⛔ Files ignored due to path filters (2)
  • .github/prompts/speckit.plan.prompt.md is excluded by !.github/prompts/speckit.* and included by **
  • .github/prompts/speckit.tasks.prompt.md is excluded by !.github/prompts/speckit.* and included by **
📒 Files selected for processing (20)
  • .devcontainer/devcontainer.json (2 hunks)
  • .devcontainer/startup.sh (1 hunks)
  • .github/copilot-instructions.md (5 hunks)
  • .github/instructions/indicator-buffer.instructions.md (1 hunks)
  • .github/instructions/indicator-stream.instructions.md (3 hunks)
  • .github/instructions/source-code-completion.instructions.md (1 hunks)
  • .github/instructions/spec-kit.instructions.md (4 hunks)
  • .github/workflows/copilot-setup-steps.yml (0 hunks)
  • .github/workflows/test-indicators.yml (3 hunks)
  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md (1 hunks)
  • .specify/specs/001-develop-streaming-indicators/checklists/stream-hub.md (1 hunks)
  • .specify/specs/002-fix-streaming-performance/implementation-status.md (1 hunks)
  • .specify/specs/002-fix-streaming-performance/phase-10-completion-notes.md (1 hunks)
  • .specify/specs/002-fix-streaming-performance/phase-8-completion-notes.md (1 hunks)
  • docs/_includes/candle-properties.md (1 hunks)
  • docs/_includes/candlepart-options.md (1 hunks)
  • docs/pages/guide.md (1 hunks)
  • docs/pages/utilities.md (1 hunks)
  • src/_common/BufferLists/BufferList.cs (1 hunks)
  • src/agents.md (5 hunks)
💤 Files with no reviewable changes (1)
  • .github/workflows/copilot-setup-steps.yml
✅ Files skipped from review due to trivial changes (4)
  • .specify/specs/001-develop-streaming-indicators/checklists/stream-hub.md
  • .specify/specs/002-fix-streaming-performance/phase-8-completion-notes.md
  • .specify/specs/002-fix-streaming-performance/phase-10-completion-notes.md
  • src/agents.md
🚧 Files skipped from review as they are similar to previous changes (7)
  • docs/_includes/candlepart-options.md
  • .github/instructions/spec-kit.instructions.md
  • .github/instructions/indicator-stream.instructions.md
  • docs/_includes/candle-properties.md
  • .specify/specs/002-fix-streaming-performance/implementation-status.md
  • docs/pages/utilities.md
  • docs/pages/guide.md
🧰 Additional context used
📓 Path-based instructions (3)
.specify/specs/**/*.md

⚙️ CodeRabbit configuration file

.specify/specs/**/*.md: These are ephemeral planning documents that track feature evolution and decision-making.
Unlike production documentation, specs/ files are permitted to:

  • Include historical context and references to past PRs (e.g., "Updated per PR #1496")
  • Use past-tense descriptions of changes and iterations
  • Reference previous tooling or earlier versions of features
  • Document the evolution of requirements and design decisions

Focus review on:

  • Adherance to Spec Kit conventions and .github\instructions\spec-kit.instructions.md
  • Technical accuracy of planned implementations
  • Consistency with repository architecture, constitution, and pre-existing instructions
  • Completeness of requirements and success criteria
  • Alignment between spec, plan, and task artifacts

Files:

  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/test-indicators.yml
src/**/*.cs

⚙️ CodeRabbit configuration file

src/**/*.cs: Focus on:

  • Mathematical accuracy: Verify financial calculations against reference implementations
  • Performance: Flag unnecessary allocations, excessive LINQ, boxing operations
  • Precision: Ensure appropriate use of double vs decimal for financial calculations
  • Null safety: Validate handling of insufficient data scenarios
  • Input validation: Check parameter validation and error handling
  • Lookback periods: Verify off-by-one errors in window calculations
  • Streaming support: Ensure stateful indicators handle edge cases properly
  • Memory efficiency: Check for proper span usage and buffer management
  • XML documentation: Ensure all public APIs have complete documentation

Files:

  • src/_common/BufferLists/BufferList.cs
🧠 Learnings (34)
📓 Common learnings
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.378Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.
📚 Learning: 2025-10-15T07:42:37.673Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/agents.md:0-0
Timestamp: 2025-10-15T07:42:37.673Z
Learning: Follow style-specific implementation guides for Series, Stream, and Buffer as linked in .github/instructions

Applied to files:

  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md
  • .github/instructions/source-code-completion.instructions.md
  • .github/copilot-instructions.md
  • .github/instructions/indicator-buffer.instructions.md
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/indicators/**/*BufferList*.Tests.cs : Buffer-style indicator tests must inherit from BufferListTestBase

Applied to files:

  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md
  • .github/copilot-instructions.md
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/*.cs : For buffer indicators, benchmark methods should follow the pattern: [Benchmark] public MyIndicatorList MyIndicatorList() => new(14) { quotes };

Applied to files:

  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md
  • .github/instructions/source-code-completion.instructions.md
📚 Learning: 2025-10-03T17:49:24.747Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1471
File: tests/indicators/s-z/Tsi/Tsi.StreamHub.Tests.cs:84-247
Timestamp: 2025-10-03T17:49:24.747Z
Learning: All indicator implementation styles (static series, buffer lists, stream hubs) must be mathematically equivalent and produce identical results when given the same parameters and data. Any drift between implementations indicates a source code error, not acceptable floating-point variance.

Applied to files:

  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md
  • .github/copilot-instructions.md
📚 Learning: 2025-10-15T07:42:37.673Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/agents.md:0-0
Timestamp: 2025-10-15T07:42:37.673Z
Learning: Before changing indicator code, ensure bit-for-bit parity with the Series baseline for streaming implementations

Applied to files:

  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md
  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown} : Keep indicator documentation current with library changes

Applied to files:

  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md
  • .github/instructions/source-code-completion.instructions.md
  • .github/copilot-instructions.md
  • .github/instructions/indicator-buffer.instructions.md
📚 Learning: 2025-10-03T17:49:24.747Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1471
File: tests/indicators/s-z/Tsi/Tsi.StreamHub.Tests.cs:84-247
Timestamp: 2025-10-03T17:49:24.747Z
Learning: Static series implementations are the canonical reference for indicators, aligned to original reputable author formulas linked in documentation. Buffer lists and stream hubs must match static series exactly.

Applied to files:

  • .specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md
  • .github/copilot-instructions.md
📚 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:

  • .github/workflows/test-indicators.yml
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/Directory.Build.props : Keep CA1707 suppressed for tests via <NoWarn>…; do not reintroduce analyzer blocks to underscore naming

Applied to files:

  • .github/workflows/test-indicators.yml
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/.editorconfig : Ensure dotnet_diagnostic.CA1707.severity = none for C# test files to allow underscores

Applied to files:

  • .github/workflows/test-indicators.yml
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/*.cs : For style comparisons, include benchmarks for series, buffer, and stream variants of the same indicator

Applied to files:

  • .github/instructions/source-code-completion.instructions.md
  • .github/copilot-instructions.md
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/*.cs : For stream indicators, benchmark methods should follow the pattern: [Benchmark] public object MyIndicatorHub() => quoteHub.ToMyIndicator(14).Results;

Applied to files:

  • .github/instructions/source-code-completion.instructions.md
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/*.cs : For series indicators, benchmark methods should follow the pattern: [Benchmark] public void ToMyIndicator() => quotes.ToMyIndicator(14);

Applied to files:

  • .github/instructions/source-code-completion.instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown,html} : Add or update indicator documentation in the /docs/_indicators/ collection

Applied to files:

  • .github/instructions/source-code-completion.instructions.md
  • .github/copilot-instructions.md
  • .github/instructions/indicator-buffer.instructions.md
📚 Learning: 2025-09-28T22:37:53.272Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1406
File: .github/copilot-instructions.md:37-55
Timestamp: 2025-09-28T22:37:53.272Z
Learning: For the Stock Indicators repository: Use double for performance in iterative indicator calculations, then promote to decimal when exposing price-sensitive or monetary results that require trading accuracy. The canonical numeric precision policy is documented in .github/instructions/source-code-completion.instructions.md and referenced in spec-kit integration guide.

Applied to files:

  • .github/instructions/source-code-completion.instructions.md
  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown} : Include comprehensive examples with sample data in indicator pages

Applied to files:

  • .github/instructions/source-code-completion.instructions.md
  • .github/copilot-instructions.md
📚 Learning: 2025-10-07T03:31:30.901Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1474
File: specs/002-regression-baselines/plan.md:292-299
Timestamp: 2025-10-07T03:31:30.901Z
Learning: In .github/instructions/markdown.instructions.md and applies to **/*.md files: For unordered lists, always use hyphens (-) instead of asterisks (*); indent 2 spaces per nesting level; use consistent markers within a document. Ordered (numbered) lists are permitted and should be used when sequence or priority is important.

Applied to files:

  • .github/instructions/source-code-completion.instructions.md
  • .github/copilot-instructions.md
📚 Learning: 2025-09-02T02:01:48.007Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1384
File: tests/indicators/s-z/Tsi/Tsi.Tests.cs:14-14
Timestamp: 2025-09-02T02:01:48.007Z
Learning: The Stock.Indicators repository uses centralized package management via tests\Directory.Packages.props to define MSTest package versions across all test projects, currently using MSTest.TestAdapter and MSTest.TestFramework version 3.10.3.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-27T21:10:12.886Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1627
File: src/m-r/ParabolicSar/ParabolicSar.StreamHub.cs:12-12
Timestamp: 2025-10-27T21:10:12.886Z
Learning: Inline comments (e.g., "// State variables") used for organizational purposes within classes are acceptable in the Stock.Indicators codebase. The Roslynator RCS1181 diagnostic for converting comments to documentation comments should be suppressed, as it's considered unnecessary noise.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-30T03:06:24.792Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1423
File: src/e-k/Kama/Kama.StreamHub.cs:80-144
Timestamp: 2025-09-30T03:06:24.792Z
Learning: In C# code within the Stock.Indicators repository, never use the null-forgiving operator (!) as it is considered a code smell. Use alternative approaches such as `.Value` property access on nullable types when null checks are already in place, or proper null-conditional operators.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-30T22:14:21.695Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1446
File: .github/workflows/test-integration.yml:3-8
Timestamp: 2025-09-30T22:14:21.695Z
Learning: For the Stock.Indicators repository, integration tests in `.github/workflows/test-integration.yml` are intentionally not run on pull requests when the test suite is minimal (e.g., only one test). The maintainer prefers to add the pull_request trigger back when integration tests become more prevalent. This is a library package not expected to have extensive integration testing.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-11-12T00:30:31.378Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.378Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/copilot-instructions.md
  • .devcontainer/devcontainer.json
📚 Learning: 2025-10-07T00:37:18.912Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1474
File: .specify/memory/constitution.md:175-175
Timestamp: 2025-10-07T00:37:18.912Z
Learning: Files under `.specify/` directory use their own versioning convention (e.g., Version, Ratified, Last Amended metadata) and should not have the standard "Last updated: <date>" footer appended.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/**/*.{md,markdown} : Use repository-wide Markdown linting rules for all documentation content

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/**/*.{md,markdown} : Document version-specific features clearly

Applied to files:

  • .github/copilot-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/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_includes/**/*.html : Follow established patterns in include templates

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-15T07:42:37.673Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/agents.md:0-0
Timestamp: 2025-10-15T07:42:37.673Z
Learning: Maintain bit-for-bit parity across Series, BufferList, and StreamHub implementations; Series is the baseline

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/indicators/**/*StaticSeries*.Tests.cs : Series-style indicator tests must inherit from StaticSeriesTestBase

Applied to files:

  • .github/copilot-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:

  • .devcontainer/startup.sh
  • .devcontainer/devcontainer.json
📚 Learning: 2025-09-28T17:00:13.651Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1402
File: .devcontainer/startup.sh:17-22
Timestamp: 2025-09-28T17:00:13.651Z
Learning: In the Stock.Indicators repository, uv is installed via devcontainer features in .devcontainer/devcontainer.json using "ghcr.io/devcontainers-extra/features/uv:1", not through manual installation scripts.

Applied to files:

  • .devcontainer/startup.sh
  • .devcontainer/devcontainer.json
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown} : Update examples in indicator docs when API changes occur

Applied to files:

  • .github/instructions/indicator-buffer.instructions.md
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/indicators/**/*{StreamHub,BufferList}*.Tests.cs : Do not use approximation, rounding, or tolerances in Stream or Buffer tests; results must exactly match Series

Applied to files:

  • .github/instructions/indicator-buffer.instructions.md
⏰ 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 (11)
.github/workflows/test-indicators.yml (4)

31-31: ✓ .NET 10.x version upgrade is consistent across all jobs.

All dotnet-version references have been updated from 9.x to 10.x with dotnet-quality: ga maintained. The cache configuration and action versions remain appropriate for this upgrade.

Also applies to: 72-72, 112-112, 166-166


16-17: ✓ Permissions are properly specified with clear intent.

Both permissions are necessary: contents: read for actions/checkout@v5 and checks: write for dorny/[email protected] to post test results. The inline comments improve workflow clarity.


87-95: Roslynator error handling allows failures to pass silently — verify this is intended.

The combination of || and continue-on-error: true is redundant (the || echo returns exit code 0, so continue-on-error doesn't trigger). More importantly, this change allows Roslynator analysis failures to be silenced in the workflow; only a warning is logged.

If Roslynator analysis should fail the workflow on actual issues, this pattern masks problems. If silencing is intentional (e.g., Roslynator is advisory-only), this is acceptable but should be documented.

Does the team intend for Roslynator analysis failures to be non-blocking? If so, consider simplifying to just continue-on-error: true without the || branch, or document the rationale in a commit comment.


63-63: ✓ lint-full job correctly depends on both test jobs for proper sequencing.

The needs: ["test-unit", "test-regression"] dependency ensures linting runs only after all quick checks pass, supporting the fail-fast strategy and preventing wasted linting cycles on broken builds.

src/_common/BufferLists/BufferList.cs (1)

36-54: LGTM! Clean refactoring.

The inlining of the default value is correct and has no functional impact. The default maximum list size of ~90% of int.MaxValue provides a safe buffer against potential overflow in list operations while allowing very large lists.

.github/instructions/source-code-completion.instructions.md (1)

10-13: Link standardization improves cross-document references.

Converting plain-text references to markdown links with file: anchors is a sound documentation improvement. The relative paths are correct, the list formatting follows guidelines (hyphens, 2-space indentation), and the change enhances discoverability without altering instruction content.

.specify/specs/001-develop-streaming-indicators/checklists/buffer-list.md (1)

6-6: Link path is correct and consistent with other spec references.

The file: URL and relative path (../../../.github/instructions/indicator-buffer.instructions.md) correctly resolve to the instruction file. The update aligns with the broader documentation link standardization across the PR.

.github/instructions/indicator-buffer.instructions.md (1)

317-318: Links verified—no issues found.

Both target checklist files exist at their referenced paths:

  • buffer-list-tests.md
  • stream-hub-tests.md

The links are correct and functional.

.github/copilot-instructions.md (1)

5-5: Net 10.0 multi-target addition is correct.

The addition of net10.0 to the multi-targeting list aligns with the PR objective and properly maintains backward compatibility with net9.0 and net8.0.

.devcontainer/devcontainer.json (2)

8-8: ✓ .NET SDK version upgrade.

Straightforward bump from 9.0 to 10.0, aligning with the PR objective.


17-19: ✓ Node.js LTS feature addition.

Adds Node.js LTS support as outlined in PR objectives. This enables npm-based workflows in the development container. Based on learnings, this feature ensures npm commands are safe to use in container startup scripts.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 864007b and 4515710.

📒 Files selected for processing (19)
  • .devcontainer/startup.sh (1 hunks)
  • .github/copilot-instructions.md (5 hunks)
  • .github/instructions/indicator-buffer.instructions.md (1 hunks)
  • .github/instructions/indicator-stream.instructions.md (3 hunks)
  • .github/instructions/source-code-completion.instructions.md (1 hunks)
  • .github/instructions/spec-kit.instructions.md (4 hunks)
  • Stock.Indicators.sln (2 hunks)
  • docs/examples/Backtest/Backtest.csproj (1 hunks)
  • docs/examples/ConsoleApp/ConsoleApp.csproj (1 hunks)
  • docs/examples/CustomIndicatorsLibrary/CustomIndicatorsLibrary.csproj (1 hunks)
  • docs/examples/CustomIndicatorsUsage/CustomIndicatorsUsage.csproj (1 hunks)
  • docs/examples/Examples.sln (1 hunks)
  • docs/examples/UseQuoteApi/UseQuoteApi.csproj (1 hunks)
  • tests/Directory.Packages.props (1 hunks)
  • tools/Directory.Packages.props (1 hunks)
  • tools/application/Test.Application.csproj (1 hunks)
  • tools/application/packages.lock.json (1 hunks)
  • tools/performance/Program.cs (1 hunks)
  • tools/performance/packages.lock.json (3 hunks)
✅ Files skipped from review due to trivial changes (2)
  • .github/instructions/spec-kit.instructions.md
  • .github/instructions/indicator-buffer.instructions.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/instructions/indicator-stream.instructions.md
  • .github/instructions/source-code-completion.instructions.md
🧰 Additional context used
📓 Path-based instructions (2)
tools/performance/**/*.cs

📄 CodeRabbit inference engine (.github/instructions/performance-testing.instructions.md)

tools/performance/**/*.cs: Place all performance benchmarks under tools/performance and implement them with BenchmarkDotNet
For series indicators, benchmark methods should follow the pattern: [Benchmark] public void ToMyIndicator() => quotes.ToMyIndicator(14);
For stream indicators, benchmark methods should follow the pattern: [Benchmark] public object MyIndicatorHub() => quoteHub.ToMyIndicator(14).Results;
For buffer indicators, benchmark methods should follow the pattern: [Benchmark] public MyIndicatorList MyIndicatorList() => new(14) { quotes };
For style comparisons, include benchmarks for series, buffer, and stream variants of the same indicator

Files:

  • tools/performance/Program.cs
**/*.{csproj,props,targets,sln}

⚙️ CodeRabbit configuration file

**/*.{csproj,props,targets,sln}: Verify:

  • Version consistency: Package versions, target frameworks alignment
  • Security: No vulnerable packages, proper security settings
  • Performance: Compiler optimizations enabled for release builds
  • Analyzers: Code quality rules properly configured
  • Packaging: NuGet metadata complete and accurate

Files:

  • docs/examples/CustomIndicatorsLibrary/CustomIndicatorsLibrary.csproj
  • tools/application/Test.Application.csproj
  • docs/examples/Examples.sln
  • docs/examples/UseQuoteApi/UseQuoteApi.csproj
  • tools/Directory.Packages.props
  • Stock.Indicators.sln
  • docs/examples/CustomIndicatorsUsage/CustomIndicatorsUsage.csproj
  • docs/examples/Backtest/Backtest.csproj
  • docs/examples/ConsoleApp/ConsoleApp.csproj
  • tests/Directory.Packages.props
🧠 Learnings (48)
📓 Common learnings
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.378Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1384
File: tests/indicators/s-z/Tsi/Tsi.Tests.cs:14-14
Timestamp: 2025-09-02T02:01:48.007Z
Learning: The Stock.Indicators repository uses centralized package management via tests\Directory.Packages.props to define MSTest package versions across all test projects, currently using MSTest.TestAdapter and MSTest.TestFramework version 3.10.3.
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.
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/*.cs : For stream indicators, benchmark methods should follow the pattern: [Benchmark] public object MyIndicatorHub() => quoteHub.ToMyIndicator(14).Results;

Applied to files:

  • tools/performance/Program.cs
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/*.cs : For style comparisons, include benchmarks for series, buffer, and stream variants of the same indicator

Applied to files:

  • tools/performance/Program.cs
  • .github/copilot-instructions.md
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Use BenchmarkDotNet filters to run specific categories or indicators during development

Applied to files:

  • tools/performance/Program.cs
  • tests/Directory.Packages.props
📚 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 tests/performance/**/Perf.Stream.cs : Name stream-style benchmark files Perf.Stream.cs

Applied to files:

  • tools/performance/Program.cs
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/*.cs : Place all performance benchmarks under tools/performance and implement them with BenchmarkDotNet

Applied to files:

  • tools/performance/Program.cs
  • tools/Directory.Packages.props
  • tests/Directory.Packages.props
  • tools/performance/packages.lock.json
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/BenchmarkDotNet.Artifacts/results/**/*.json : Use BenchmarkDotNet JSON result files from BenchmarkDotNet.Artifacts/results when creating or comparing baselines

Applied to files:

  • tools/performance/Program.cs
  • tools/Directory.Packages.props
  • tools/performance/packages.lock.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 tests/performance/**/BenchmarkConfig.cs : Keep BenchmarkConfig.cs as the single source of benchmark configuration (exporters: GitHub markdown and JSON; columns: Mean, Error, StdDev; logger: Console) and do not modify without maintainer approval

Applied to files:

  • tools/performance/Program.cs
  • tools/Directory.Packages.props
  • tests/Directory.Packages.props
  • tools/performance/packages.lock.json
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Always run benchmarks in Release mode

Applied to files:

  • tools/performance/Program.cs
📚 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 tests/performance/**/Perf.Series.cs : Name series-style benchmark files Perf.Series.cs

Applied to files:

  • tools/performance/Program.cs
📚 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: Always build in Release mode when running benchmarks locally

Applied to files:

  • tools/performance/Program.cs
📚 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:

  • .devcontainer/startup.sh
📚 Learning: 2025-09-28T17:00:13.651Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1402
File: .devcontainer/startup.sh:17-22
Timestamp: 2025-09-28T17:00:13.651Z
Learning: In the Stock.Indicators repository, uv is installed via devcontainer features in .devcontainer/devcontainer.json using "ghcr.io/devcontainers-extra/features/uv:1", not through manual installation scripts.

Applied to files:

  • .devcontainer/startup.sh
📚 Learning: 2025-09-02T02:01:48.007Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1384
File: tests/indicators/s-z/Tsi/Tsi.Tests.cs:14-14
Timestamp: 2025-09-02T02:01:48.007Z
Learning: The Stock.Indicators repository uses centralized package management via tests\Directory.Packages.props to define MSTest package versions across all test projects, currently using MSTest.TestAdapter and MSTest.TestFramework version 3.10.3.

Applied to files:

  • docs/examples/CustomIndicatorsLibrary/CustomIndicatorsLibrary.csproj
  • tools/application/Test.Application.csproj
  • docs/examples/UseQuoteApi/UseQuoteApi.csproj
  • tools/Directory.Packages.props
  • .github/copilot-instructions.md
  • tools/application/packages.lock.json
  • Stock.Indicators.sln
  • docs/examples/CustomIndicatorsUsage/CustomIndicatorsUsage.csproj
  • docs/examples/Backtest/Backtest.csproj
  • docs/examples/ConsoleApp/ConsoleApp.csproj
  • tests/Directory.Packages.props
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown} : Keep indicator documentation current with library changes

Applied to files:

  • docs/examples/CustomIndicatorsLibrary/CustomIndicatorsLibrary.csproj
  • .github/copilot-instructions.md
  • docs/examples/CustomIndicatorsUsage/CustomIndicatorsUsage.csproj
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown} : Update examples in indicator docs when API changes occur

Applied to files:

  • docs/examples/CustomIndicatorsLibrary/CustomIndicatorsLibrary.csproj
  • .github/copilot-instructions.md
  • docs/examples/CustomIndicatorsUsage/CustomIndicatorsUsage.csproj
📚 Learning: 2025-10-27T21:10:12.886Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1627
File: src/m-r/ParabolicSar/ParabolicSar.StreamHub.cs:12-12
Timestamp: 2025-10-27T21:10:12.886Z
Learning: Inline comments (e.g., "// State variables") used for organizational purposes within classes are acceptable in the Stock.Indicators codebase. The Roslynator RCS1181 diagnostic for converting comments to documentation comments should be suppressed, as it's considered unnecessary noise.

Applied to files:

  • tools/application/Test.Application.csproj
  • .github/copilot-instructions.md
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/Perf.StyleComparison.cs : Name style-comparison benchmark files as Perf.StyleComparison.cs

Applied to files:

  • tools/Directory.Packages.props
  • tests/Directory.Packages.props
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/BenchmarkConfig.cs : Do not modify BenchmarkConfig.cs (exporters, columns, logger) without consulting maintainers

Applied to files:

  • tools/Directory.Packages.props
  • tests/Directory.Packages.props
  • tools/performance/packages.lock.json
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Applies to tools/performance/**/Perf.Buffer.cs : Name buffer-style benchmark files as Perf.Buffer.cs

Applied to files:

  • tools/Directory.Packages.props
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/Directory.Build.props : Keep CA1707 suppressed for tests via <NoWarn>…; do not reintroduce analyzer blocks to underscore naming

Applied to files:

  • tools/Directory.Packages.props
  • Stock.Indicators.sln
  • tests/Directory.Packages.props
📚 Learning: 2025-10-07T03:31:30.901Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1474
File: specs/002-regression-baselines/plan.md:292-299
Timestamp: 2025-10-07T03:31:30.901Z
Learning: In .github/instructions/markdown.instructions.md and applies to **/*.md files: For unordered lists, always use hyphens (-) instead of asterisks (*); indent 2 spaces per nesting level; use consistent markers within a document. Ordered (numbered) lists are permitted and should be used when sequence or priority is important.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/**/*.{md,markdown} : Maintain backward compatibility in examples where possible

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/**/*.{md,markdown} : Provide migration guidance for breaking changes

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/**/*.{md,markdown,html} : Use consistent layout references in front matter

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/**/*.{md,markdown,html} : Use descriptive link text instead of generic phrases like "click here"

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown,html} : Maintain accuracy of mathematical formulas and calculations in indicator docs

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T22:37:53.272Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1406
File: .github/copilot-instructions.md:37-55
Timestamp: 2025-09-28T22:37:53.272Z
Learning: For the Stock Indicators repository: Use double for performance in iterative indicator calculations, then promote to decimal when exposing price-sensitive or monetary results that require trading accuracy. The canonical numeric precision policy is documented in .github/instructions/source-code-completion.instructions.md and referenced in spec-kit integration guide.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-30T03:06:24.792Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1423
File: src/e-k/Kama/Kama.StreamHub.cs:80-144
Timestamp: 2025-09-30T03:06:24.792Z
Learning: In C# code within the Stock.Indicators repository, never use the null-forgiving operator (!) as it is considered a code smell. Use alternative approaches such as `.Value` property access on nullable types when null checks are already in place, or proper null-conditional operators.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-30T22:14:21.695Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1446
File: .github/workflows/test-integration.yml:3-8
Timestamp: 2025-09-30T22:14:21.695Z
Learning: For the Stock.Indicators repository, integration tests in `.github/workflows/test-integration.yml` are intentionally not run on pull requests when the test suite is minimal (e.g., only one test). The maintainer prefers to add the pull_request trigger back when integration tests become more prevalent. This is a library package not expected to have extensive integration testing.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-11-12T00:30:31.378Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.378Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/copilot-instructions.md
  • tools/performance/packages.lock.json
📚 Learning: 2025-10-15T07:42:37.673Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/agents.md:0-0
Timestamp: 2025-10-15T07:42:37.673Z
Learning: Follow style-specific implementation guides for Series, Stream, and Buffer as linked in .github/instructions

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-07T00:37:18.912Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1474
File: .specify/memory/constitution.md:175-175
Timestamp: 2025-10-07T00:37:18.912Z
Learning: Files under `.specify/` directory use their own versioning convention (e.g., Version, Ratified, Last Amended metadata) and should not have the standard "Last updated: <date>" footer appended.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/**/*.{md,markdown} : Use repository-wide Markdown linting rules for all documentation content

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown,html} : Add or update indicator documentation in the /docs/_indicators/ collection

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/**/*.{md,markdown} : Document version-specific features clearly

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-09-28T17:07:40.145Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/documentation.instructions.md:0-0
Timestamp: 2025-09-28T17:07:40.145Z
Learning: Applies to docs/_indicators/**/*.{md,markdown} : Include comprehensive examples with sample data in indicator pages

Applied to files:

  • .github/copilot-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/copilot-instructions.md
📚 Learning: 2025-10-03T17:49:24.747Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1471
File: tests/indicators/s-z/Tsi/Tsi.StreamHub.Tests.cs:84-247
Timestamp: 2025-10-03T17:49:24.747Z
Learning: Static series implementations are the canonical reference for indicators, aligned to original reputable author formulas linked in documentation. Buffer lists and stream hubs must match static series exactly.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-03T17:49:24.747Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1471
File: tests/indicators/s-z/Tsi/Tsi.StreamHub.Tests.cs:84-247
Timestamp: 2025-10-03T17:49:24.747Z
Learning: All indicator implementation styles (static series, buffer lists, stream hubs) must be mathematically equivalent and produce identical results when given the same parameters and data. Any drift between implementations indicates a source code error, not acceptable floating-point variance.

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-15T07:42:37.673Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/agents.md:0-0
Timestamp: 2025-10-15T07:42:37.673Z
Learning: Before changing indicator code, ensure bit-for-bit parity with the Series baseline for streaming implementations

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-15T07:42:37.673Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/agents.md:0-0
Timestamp: 2025-10-15T07:42:37.673Z
Learning: Maintain bit-for-bit parity across Series, BufferList, and StreamHub implementations; Series is the baseline

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/indicators/**/*BufferList*.Tests.cs : Buffer-style indicator tests must inherit from BufferListTestBase

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/indicators/**/*StaticSeries*.Tests.cs : Series-style indicator tests must inherit from StaticSeriesTestBase

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/**/*.Tests.cs : Use FluentAssertions v6 exclusively (Should() syntax); avoid legacy MSTest Assert.*

Applied to files:

  • tests/Directory.Packages.props
📚 Learning: 2025-10-13T16:57:01.555Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: tests/agents.md:0-0
Timestamp: 2025-10-13T16:57:01.555Z
Learning: Applies to tests/.editorconfig : Ensure dotnet_diagnostic.CA1707.severity = none for C# test files to allow underscores

Applied to files:

  • tests/Directory.Packages.props
📚 Learning: 2025-10-13T16:55:59.321Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-13T16:55:59.321Z
Learning: Document significant performance changes in PR descriptions

Applied to files:

  • tools/performance/packages.lock.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 tests/performance/**/*.cs : Annotate benchmark methods with [Benchmark] (BenchmarkDotNet)

Applied to files:

  • tools/performance/packages.lock.json
⏰ 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). (2)
  • GitHub Check: linting (full)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (14)
.github/copilot-instructions.md (2)

113-113: ✅ Critical link issues from previous reviews are now fixed.

The file: protocol URLs have been successfully converted to relative paths. All paths resolve correctly from .github/copilot-instructions.md:

  • instructions/spec-kit.instructions.md.github/instructions/ sibling directory ✓
  • ../src/agents.md → parent src/ directory ✓
  • ../.specify/specs/ → repository root .specify/ directory ✓

These links will now render as clickable in GitHub's Markdown renderer.

Also applies to: 115-122, 183-185, 234-234


5-5: Net 10.0 target framework addition is appropriate.

Updating the multi-target declaration to include net10.0 alongside net9.0 and net8.0 aligns with the PR's .NET 10.x upgrade objective.

tools/performance/Program.cs (1)

33-33: LGTM! Documentation example updated.

The filter example has been updated from *External.EmaHub* to *External.Ema*, likely reflecting updated benchmark naming conventions.

docs/examples/CustomIndicatorsUsage/CustomIndicatorsUsage.csproj (1)

10-10: Package version upgrade is consistent.

The Skender.Stock.Indicators upgrade to 2.7.0 aligns with the broader package version updates across all example projects.

docs/examples/CustomIndicatorsLibrary/CustomIndicatorsLibrary.csproj (1)

9-9: Version upgrade is consistent with other example projects.

tools/application/packages.lock.json (1)

11-15: Lock file update reflects package version change correctly.

The packages.lock.json update for Skender.Stock.Indicators 2.7.0 is consistent with the corresponding .csproj changes.

tools/application/Test.Application.csproj (1)

23-23: Package upgrade is consistent with repository-wide updates.

The Skender.Stock.Indicators upgrade to 2.7.0 matches the version bump across all example and tool projects, and the corresponding lock file has been updated.

docs/examples/Backtest/Backtest.csproj (1)

10-10: Version upgrade is consistent across all example projects.

Stock.Indicators.sln (2)

2-3: Visual Studio 2025 version update is appropriate for .NET 10.

The Visual Studio version bump to 18.0 (Visual Studio 2025) aligns with the .NET 10 upgrade, as VS 2025 provides proper tooling support for .NET 10.


35-40: Improved solution organization with Tools section.

Adding the Tools folder as a solution item with visibility to Directory.Build.props and Directory.Packages.props improves discoverability of tooling configuration files in the IDE.

tools/Directory.Packages.props (1)

11-11: Confirm whether BenchmarkDotNet version change is intentional baseline lock or accidental downgrade.

Verification shows both versions support .NET 10 with no security advisories or known compatibility issues. However, I cannot confirm from available data whether this PR actually downgrades from 0.15.6 to 0.15.4 (PR metadata unavailable).

Key findings:

  • v0.15.6 (Nov 5, 2025) includes NativeAOT 10.0 runtime normalization fixes, directly relevant to .NET 10
  • No documented regressions or known issues in v0.15.6
  • All performance baseline files in the repository are locked to v0.15.4 format, which is version-specific

If this is a deliberate baseline lock for consistency (since benchmark metrics vary by version), document the rationale. If it's an accidental downgrade, upgrade to 0.15.6 and regenerate baselines to gain .NET 10-specific improvements.

tests/Directory.Packages.props (1)

19-19: LGTM!

Removing BenchmarkDotNet from test package management is appropriate since performance benchmarks are centralized under tools/performance/. The formatting adjustment has no semantic impact.

docs/examples/Examples.sln (1)

3-4: LGTM!

Updating to Visual Studio Version 18 (Visual Studio 2025) is appropriate for .NET 10 support and aligns with the PR's objective to upgrade the development environment.

tools/performance/packages.lock.json (1)

7-9: BenchmarkDotNet 0.15.4 fully supports .NET 10.0 — no compatibility issues found.

BenchmarkDotNet 0.15.4 lists net10.0 as a compatible TFM and was released on Sep 24, 2025. The downgrade from 0.15.6 to 0.15.4 while upgrading to .NET 10 does not introduce any compatibility problems. Additionally, no security advisories were detected for this version. The downgrade may be intentional for stability, performance, or other valid reasons unrelated to .NET 10 support.

@DaveSkender DaveSkender merged commit b59e839 into v3 Nov 13, 2025
13 checks passed
@DaveSkender DaveSkender deleted the dotnet-10 branch November 13, 2025 19:24
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 14, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

1 participant