- name
- code-completion
- description
- Quality gates for finishing work in this repository — dead-code cleanup, Roslynator and dotnet format fixes, markdownlint, build, unit tests, documentation, and Obsolete migration shims — with the VS Code task behind each gate and the files that define the commands CI runs. Use before reporting any implementation, bug fix, or refactor as done, before committing, and when a CI quick-check, lint, or build step fails.
# Code completion
Run these gates before reporting any implementation cycle as done. The VS Code task behind each gate, and the configuration and CI files that define them, are in the [quality gates reference](references/quality-gates.md); load it when a single gate fails.
CI builds `src/Indicators.csproj` and `tests/Library/Tests.Indicators.csproj` with `-warnAsError`, so a warning that passes a local build fails CI.
## Workflow
### Step 1: Remove dead code
- Delete commented-out code, unused usings, variables, and helpers.
- Strip debugging aids such as `Console.WriteLine` calls.
- Delete scratch files (`.bak`, `.new`, `.debug.*`).
### Step 2: Apply fixers
Run the fixers:
```bash
dotnet tool run roslynator fix --properties TargetFramework=net10.0 --severity-level hidden --verbosity normal
dotnet format --severity info --no-restore
echo y | npx markdownlint-cli2 --fix
```
VS Code task: `Lint: All (fix)` (it builds first). The Roslynator CLI comes from `dotnet-tools.json`; run `dotnet tool restore` first if `roslynator` is not found.
### Step 3: Build
```bash
dotnet build "Stock.Indicators.sln" -v minimal --nologo
```
VS Code task: `Build: .NET Solution (incremental)`. Zero warnings and zero errors.
### Step 4: Run unit tests
VS Code task: `Test: Unit tests`; the command and the runner's options are in `tests/README.md`. The runsettings filter excludes the `Regression` and `Integration` test categories. Run `Test: Regression tests` as well when an indicator's calculation changed.
### Step 5: Update documentation and migration shims
When a public API or indicator behavior changes:
- Update XML documentation on every changed public member.
- Update the indicator page `docs/indicators/{slug}.md` — the documentation skill owns its structure.
- Rename or remove a public v3 API only behind a delegating shim — see [migration shims](#migration-shims).
### Step 6: Verify
Run the read-only checks CI runs, and confirm each exits clean:
```bash
dotnet tool run roslynator analyze --properties TargetFramework=net10.0 --severity-level hidden --verbosity normal
dotnet format --verify-no-changes --severity info --no-restore
echo y | npx markdownlint-cli2
```
VS Code task: `Verify: Quick checks (build + lint + unit test)` covers build, Roslynator, markdownlint, and unit tests; it does not run `dotnet format --verify-no-changes` (`Lint: .NET format` does). When a `{Name}Hub.cs` or its test changed, also run `bash tools/scripts/audit-streamhub.sh`, which CI runs in the quick check.
## Migration shims
Obsolete members live in `src/Obsolete/`, each `[Obsolete]` with a message naming the replacement and `[ExcludeFromCodeCoverage]`:
| File | Holds |
| ---- | ----- |
| `Obsolete.V3.Indicators.cs` | v2 → v3 indicator method renames (`GetX` → `ToX`) |
| `Obsolete.V3.Other.cs` | Other v2 → v3 type and utility bridges |
| `Obsolete.V3.Suppressions.cs` | Assembly-level analyzer suppressions the shims need |
| `Obsolete.V4.cs` | Non-breaking shims for public APIs renamed within v3; removed in v4 |
- A v2 → v3 change also updates `docs/migration/v3.md`.
- A rename within v3 adds a delegating member to `Obsolete.V4.cs` with `[Obsolete("Use … instead.", false)]`, so existing callers compile with a warning.
## Indicator work
A new or changed indicator has a per-style file set (series, buffer, stream, catalog, tests, regression baseline, benchmark, docs page). The indicator-series skill owns that checklist; this skill adds only the gates above.
## Quality bar
- Zero lint findings, build warnings, and build errors.
- All unit tests pass; the repository targets ≥ 98% line coverage, reported to Codacy from CI.
- Public API changes carry XML docs, an updated docs page, and a migration shim.
## Do not do these
- Do not suppress, ignore, or defer a warning to get a gate green; fix the cause.
- Do not run `dotnet test "Stock.Indicators.sln"` as the unit gate. It also runs the regression and integration categories, which are slow and spawn the SSE test server process.
- Do not report work as done from a build alone; the unit tests and the read-only lint checks are part of the bar.
View on GitHub