| Dimension | Shared | Only in A | Only in B | Overlap |
|---|---|---|---|---|
| Sections | 0 | 1 | 3 | 0% |
| Commands | 0 | 0 | 2 | 0% |
| Section tags | 0 | 1 | 4 | 0% |
What each file covers
Sections
0 shared · 1 only in A · 3 only in B- − Claude Code
- + Testing Conventions
- + Unit vs integration
- + What to cover
Commands
0 shared · 0 only in A · 2 only in B- + pytest
- + pytest -m integration
Section tags
0 shared · 1 only in A · 4 only in B- − agent-behaviour
- + test
- + lint-format
- + code-style
- + testing-strategy
Line diff
jleist-clemson/acheron · CLAUDE.md
@@ −1 @@
1@AGENTS.md
2
3@.claude/rules/python-standards.md
4@.claude/rules/api-routes.md
5@.claude/rules/testing.md
6@.claude/rules/elasticsearch-mapping.md
7@.claude/rules/background-tasks.md
8
9## Claude Code
10
11Shared, vendor-neutral project context lives in `AGENTS.md` (imported above).
12Project conventions live in `.claude/rules/` and are **imported above** so they
13load every session — Claude Code has no glob-scoped rules directory, so each
14file simply names the paths it applies to in an "Applies to" line. They mirror
15the Cursor rules in `.cursor/rules/` (which *are* glob-scoped via `globs:`); if
16you change a convention, update **both** mirrors and the relevant section of
17`ARCHITECTURE.md` so the tools and docs don't drift.
18
jleist-clemson/acheron · .cursor/rules/testing.mdc
@@ +1 @@
1---
2description: Testing conventions (pytest, asyncio, unit vs integration)
3globs: tests/**/*.py
4alwaysApply: false
5---
6
7# Testing Conventions
8
9- `pytest` with `asyncio_mode = auto` — write `async def test_*` directly, no
10 per-test `@pytest.mark.asyncio` needed.
11- Test functions take **no docstrings** (the name is the description; ruff `D`
12 rules are disabled under `tests/`). Use a clear `test_<behavior>` name instead.
13- Build event payloads via `tests/factories.py`, not inline dicts, so the event
14 shape stays in one place.
15
16# Unit vs integration
17
18- **Unit tests** must be hermetic: mock stores/clients, require no Docker, and
19 run under the default `pytest` invocation.
20- **Integration tests** that need real services (testcontainers / Docker) must be
21 marked `@pytest.mark.integration` (or live in a module marked `pytestmark =
22 pytest.mark.integration`). They are deselected by default; run with
23 `pytest -m integration`.
24
25# What to cover
26
27Prioritize business logic and error/degradation paths: retry→backoff→DLQ,
28backpressure (`QueueFull` → 429), cache miss→hit, and graceful degradation when
29ES/Redis are down. Don't test framework behavior.
30
@@ −1 +1 @@
1−@AGENTS.md
1+---
2+description: Testing conventions (pytest, asyncio, unit vs integration)
3+globs: tests/**/*.py
4+alwaysApply: false
5+---
26
3−@.claude/rules/python-standards.md
4−@.claude/rules/api-routes.md
5−@.claude/rules/testing.md
6−@.claude/rules/elasticsearch-mapping.md
7−@.claude/rules/background-tasks.md
7+# Testing Conventions
88
9−## Claude Code
9+- `pytest` with `asyncio_mode = auto` — write `async def test_*` directly, no
10+ per-test `@pytest.mark.asyncio` needed.
11+- Test functions take **no docstrings** (the name is the description; ruff `D`
12+ rules are disabled under `tests/`). Use a clear `test_<behavior>` name instead.
13+- Build event payloads via `tests/factories.py`, not inline dicts, so the event
14+ shape stays in one place.
1015
11−Shared, vendor-neutral project context lives in `AGENTS.md` (imported above).
12−Project conventions live in `.claude/rules/` and are **imported above** so they
13−load every session — Claude Code has no glob-scoped rules directory, so each
14−file simply names the paths it applies to in an "Applies to" line. They mirror
15−the Cursor rules in `.cursor/rules/` (which *are* glob-scoped via `globs:`); if
16−you change a convention, update **both** mirrors and the relevant section of
17−`ARCHITECTURE.md` so the tools and docs don't drift.
16+# Unit vs integration
17+
18+- **Unit tests** must be hermetic: mock stores/clients, require no Docker, and
19+ run under the default `pytest` invocation.
20+- **Integration tests** that need real services (testcontainers / Docker) must be
21+ marked `@pytest.mark.integration` (or live in a module marked `pytestmark =
22+ pytest.mark.integration`). They are deselected by default; run with
23+ `pytest -m integration`.
24+
25+# What to cover
26+
27+Prioritize business logic and error/degradation paths: retry→backoff→DLQ,
28+backpressure (`QueueFull` → 429), cache miss→hit, and graceful degradation when
29+ES/Redis are down. Don't test framework behavior.
1830
