feat: bootstrap package structure, exceptions, and store interface - #2
Conversation
- Add pyproject.toml with hatchling build backend, Python 3.11+ constraint, and runtime/dev deps (fastapi, httpx, pytest, ruff, black) - Add SyncError base and three domain exceptions (WebhookSignatureError, DuplicateEventError, ReconciliationError) in exceptions.py - Add abstract SyncStore in store/base.py covering last_sync_at tracking, idempotency checks, and the webhook queue interface - Add InMemoryStore in store/memory.py for use in tests only https://claude.ai/code/session_01Q344Pi4fXu3Z5BncPAjvM6
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1c02199a69
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Callers need the event_id to call mark_event_processed after committing the payload. Returning only the payload made acknowledgment impossible for webhooks whose payload does not redundantly embed the event_id. https://claude.ai/code/session_01Q344Pi4fXu3Z5BncPAjvM6
|
@codex review Generated by Claude Code |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 04e2ea2431
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
pytest, ruff, and black are not runtime deps — pulling them into production installs is unnecessary. Consumers install with pip install -e .[dev] for local development. https://claude.ai/code/session_01Q344Pi4fXu3Z5BncPAjvM6
|
@codex review Generated by Claude Code |
|
Codex Review: Didn't find any major issues. Breezy! ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
…ion process ADR-002 captures the decision to define SyncStore as a Python ABC rather than coupling engine components to a concrete backend. Also adds a "when to write a new ADR" section and an ADR index to CLAUDE.md. https://claude.ai/code/session_01Q344Pi4fXu3Z5BncPAjvM6
- 15 tests covering exception hierarchy and all InMemoryStore behaviors - pytest configured with testpaths and pythonpath = ["src"] for src layout - CI runs lint (ruff + black) and test jobs on every push and PR https://claude.ai/code/session_01Q344Pi4fXu3Z5BncPAjvM6
|
@codex review |
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
docs/testing.md covers layout, naming, fixtures, mocking patterns for webhooks and REST, and a table of required scenarios per module. CLAUDE.md now states explicitly that a feature without tests is not done and links to the guide. https://claude.ai/code/session_01Q344Pi4fXu3Z5BncPAjvM6
and runtime/dev deps (fastapi, httpx, pytest, ruff, black)
DuplicateEventError, ReconciliationError) in exceptions.py
idempotency checks, and the webhook queue interface
https://claude.ai/code/session_01Q344Pi4fXu3Z5BncPAjvM6