- 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
3.4 KiB
3.4 KiB
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.mdrow for that category (contains category gap file, design file, and plan file paths)
Required Skills
executeplanusing-git-worktrees(required before implementation)finishing-a-development-branch(required after implementation)
Execution Flow
- Resolve the category row from
gaps/plans.md. - Read the category's design and plan files from the resolved row.
- Announce:
I'm using executeplan to implement this plan. - Create a brand-new git worktree on a new branch and verify clean status.
- Execute the plan in batches (
executeplandefault batching), with checkpoints between batches. - Run only targeted unit tests for the category after each batch; do not run full-suite tests.
- After implementation, verify the category gap file reflects the completed work.
- Update the
Statuscolumn ingaps/plans.mdfor the category:completeif noMISSINGorPARTIALrows remain<N> remainingwhereN = 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):
- Every implemented item must be updated in the Gap Inventory.
- Each newly completed row must include:
Status = PORTED- concrete
.NET Equivalentfile:line - concise notes for parity behavior
- If behavior is still partial, keep
PARTIALand document what is still missing. - Do not mark
completeingaps/plans.mduntil bothMISSINGandPARTIALcounts are zero.
Status Update Command Snippet
After finishing a category, compute remaining gaps:
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.