Files
natsdotnet/gaps/execution.md
Joseph Doherty c30e67a69d Fix E2E test gaps and add comprehensive E2E + parity test suites
- Fix pull consumer fetch: send original stream subject in HMSG (not inbox)
  so NATS client distinguishes data messages from control messages
- Fix MaxAge expiry: add background timer in StreamManager for periodic pruning
- Fix JetStream wire format: Go-compatible anonymous objects with string enums,
  proper offset-based pagination for stream/consumer list APIs
- Add 42 E2E black-box tests (core messaging, auth, TLS, accounts, JetStream)
- Add ~1000 parity tests across all subsystems (gaps closure)
- Update gap inventory docs to reflect implementation status
2026-03-12 14:09:23 -04:00

91 lines
3.4 KiB
Markdown

# Category Execution Instructions
Use this runbook to execute one category end-to-end using the `executeplan` skill without running the full test suite.
## Inputs
- `CATEGORY` (example: `protocol`)
- `gaps/plans.md` row for that category (contains category gap file, design file, and plan file paths)
## Required Skills
- `executeplan`
- `using-git-worktrees` (required before implementation)
- `finishing-a-development-branch` (required after implementation)
## Execution Flow
1. Resolve the category row from `gaps/plans.md`.
2. Read the category's design and plan files from the resolved row.
3. Announce: `I'm using executeplan to implement this plan.`
4. Create a brand-new git worktree on a new branch and verify clean status.
5. Execute the plan in batches (`executeplan` default batching), with checkpoints between batches.
6. Run only targeted unit tests for the category after each batch; do not run full-suite tests.
7. After implementation, verify the category gap file reflects the completed work.
8. Update the `Status` column in `gaps/plans.md` for the category:
- `complete` if no `MISSING` or `PARTIAL` rows remain
- `<N> remaining` where `N = MISSING + PARTIAL`
## Strict Test Scope Policy
- Never run unscoped full test commands such as:
- `dotnet test tests/NATS.Server.Tests/NATS.Server.Tests.csproj`
- Always use targeted test execution, for example:
- `dotnet test tests/NATS.Server.Tests/NATS.Server.Tests.csproj --filter "FullyQualifiedName~Protocol"`
- `dotnet test tests/NATS.Server.Tests/NATS.Server.Tests.csproj --filter "FullyQualifiedName~JetStream"`
- `dotnet test tests/NATS.Server.Tests/NATS.Server.Tests.csproj --filter "FullyQualifiedName~Auth"`
- If one filter is too broad, split into multiple narrow filters and run them separately.
## Suggested Category Filter Tokens
Use these as starting points for `--filter "FullyQualifiedName~<token>"`:
| Category | Token(s) |
|---|---|
| `core-server` | `Server`, `Client` |
| `protocol` | `Protocol`, `Parser` |
| `subscriptions` | `Subscription` |
| `auth-and-accounts` | `Auth`, `Account` |
| `configuration` | `Configuration`, `Config` |
| `routes` | `Route` |
| `gateways` | `Gateway` |
| `leaf-nodes` | `Leaf` |
| `jetstream` | `JetStream` |
| `raft` | `Raft` |
| `mqtt` | `Mqtt` |
| `websocket` | `WebSocket` |
| `monitoring` | `Monitoring` |
| `events` | `Event` |
| `tls-security` | `Tls`, `Security` |
| `internal-ds` | `Internal` |
| `logging` | `Log`, `Logging` |
| `utilities-and-other` | `IO`, `Server` |
| `misc-uncategorized` | `Misc`, `Server` |
## Gap Verification Rules (Category Gap File)
For the category gap file (`gaps/<category>.md`):
1. Every implemented item must be updated in the Gap Inventory.
2. Each newly completed row must include:
- `Status = PORTED`
- concrete `.NET Equivalent` file:line
- concise notes for parity behavior
3. If behavior is still partial, keep `PARTIAL` and document what is still missing.
4. Do not mark `complete` in `gaps/plans.md` until both `MISSING` and `PARTIAL` counts are zero.
## Status Update Command Snippet
After finishing a category, compute remaining gaps:
```bash
remaining=$(awk -F'|' '
NF >= 4 {
s=$4
gsub(/^ +| +$/, "", s)
if (s=="MISSING" || s=="PARTIAL") c++
}
END { print c+0 }
' "gaps/${CATEGORY}.md")
if [ "$remaining" -eq 0 ]; then
status_value="complete"
else
status_value="${remaining} remaining"
fi
```
Then write `status_value` into that category row in `gaps/plans.md`.