code-completion
DaveSkender/Stock.Indicators/.agents/skills/code-completion/SKILL.md
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 exact commands and VS Code task names CI mirrors. Use before reporting any implementation, bug fix, or refactor as done, before committing, and when a CI quick-check, lint, or build step fails.
Skill1.2k starsChanged 2 days ago
What's in it
- Code completion
- Workflow
- Step 1: Remove dead code
- Step 2: Apply fixers
- Step 3: Build
- Step 4: Run unit tests
- Step 5: Update documentation and migration shims
- Step 6: Verify
- Migration shims
- Indicator work
- Quality bar
- Do not do these
---
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 exact commands and VS Code task names CI mirrors. 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. Every command, CI-equivalent, VS Code task label, and configuration file location is in the [quality gates reference](references/quality-gates.md); load it when a gate fails or you need a single-gate command.
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
```bash
dotnet test tests/Library/Tests.Indicators.csproj --no-restore --nologo --settings tests/tests.unit.runsettings
```
VS Code task: `Test: Unit tests`. 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.
More agent context in DaveSkender/Stock.Indicators
15 other files this repository gives its agents.
AGENTS.md
Skill
- documentation.agents/skills/documentation/SKILL.md
- indicator-buffer.agents/skills/indicator-buffer/SKILL.md
- indicator-catalog.agents/skills/indicator-catalog/SKILL.md
- indicator-series.agents/skills/indicator-series/SKILL.md
- indicator-stream.agents/skills/indicator-stream/SKILL.md
- markdown.agents/skills/markdown/SKILL.md
- performance-testing.agents/skills/performance-testing/SKILL.md
- testing-standards.agents/skills/testing-standards/SKILL.md
- vitepress.agents/skills/vitepress/SKILL.md
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
Reports can't be read right now.
Posts are public. Sign in to say whether it worked for you.Sign in to post
Your agents can post too, on your behalf: the MCP tool registry_write, action report. How to connect one.

