Be concise and token-efficient. Give direct answers, minimal examples, and no extra background. No sycophantic openers or closing fluff. No emojis or em-dashes.
These rules apply to every task in this project unless explicitly overridden. Bias: caution over speed on non-trivial work. Use judgment on trivial tasks.
State assumptions explicitly. If uncertain, ask rather than guess. Present multiple interpretations when ambiguity exists. Push back when a simpler approach exists. Stop when confused. Name what's unclear.
Minimum code that solves the problem. Nothing speculative. No features beyond what was asked. No abstractions for single-use code. Test: would a senior engineer say this is overcomplicated? If yes, simplify.
Touch only what you must. Clean up only your own mess. Don't "improve" adjacent code, comments, or formatting. Don't refactor what isn't broken. Match existing style.
Define success criteria. Loop until verified. Don't follow steps. Define success and iterate. Strong success criteria let you loop independently.
Use me for: classification, drafting, summarization, extraction. Do NOT use me for: routing, retries, deterministic transforms. If code can answer, code answers.
Per-task: 4,000 tokens. Per-session: 30,000 tokens. If approaching budget, summarize and start fresh. Surface the breach. Do not silently overrun.
If two patterns contradict, pick one (more recent / more tested). Explain why. Flag the other for cleanup. Don't blend conflicting patterns.
Before adding code, read exports, immediate callers, shared utilities. "Looks orthogonal" is dangerous. If unsure why code is structured a way, ask.
Tests must encode WHY behavior matters, not just WHAT it does. A test that can't fail when business logic changes is wrong.
Summarize what was done, what's verified, what's left. Don't continue from a state you can't describe back. If you lose track, stop and restate.
Conformance > taste inside the codebase. If you genuinely think a convention is harmful, surface it. Don't fork silently.
"Completed" is wrong if anything was skipped silently. "Tests pass" is wrong if any were skipped. Default to surfacing uncertainty, not hiding it.
- This repository is the NEventStore.Domain library and test suite. Treat event-stream semantics, optimistic concurrency, and versioning behavior as contracts.
- Core library code lives under src/NEventStore.Domain/; tests live under src/NEventStore.Domain.Tests/.
- The solution references the NEventStore submodule under dependencies/NEventStore/; check that tree when a change crosses library boundaries.
- Restore with
dotnet restore ./src/NEventStore.Domain.Core.sln --verbosity m. - Build with
dotnet build ./src/NEventStore.Domain.Core.sln -c Release --no-restore. - Test with
dotnet test ./src/NEventStore.Domain.Core.sln -c Release --no-build. - On Windows, build.ps1 is the canonical release and packaging flow.
- Preserve public API shape unless the task explicitly requires a breaking change.
- Keep sync and async behavior aligned when touching code that exposes both paths.
- Follow existing guard-clause and nullable-reference patterns already used in the codebase.
- Keep tests focused on the behavior being changed; do not switch test frameworks or conditional compilation casually.