Skip to content

chore(spec): re-mirror OpenAPI spec to committed monorepo contract (Task-15 PR-3)#2

Merged
AminDhouib merged 1 commit into
mainfrom
chore/task15-spec-sync
Jul 16, 2026
Merged

chore(spec): re-mirror OpenAPI spec to committed monorepo contract (Task-15 PR-3)#2
AminDhouib merged 1 commit into
mainfrom
chore/task15-spec-sync

Conversation

@AminDhouib

Copy link
Copy Markdown
Member

Summary

Re-mirror the vendored OpenAPI spec to the committed monorepo contract (post-MAIN-08 seam, monorepo main @764cc09d) and absorb the contract shift:

  • Deletes now return 200 with the deleted id (was 204) — the client still discards the body and returns None.
  • Invalid input now surfaces as 422 VALIDATION_ERROR (was 400) — 422 maps to SendlyValidationError, and 400 still does too, so except SendlyValidationError catches either.
  • templates.list is cursor-paginated (limit/cursor); contacts.list was already cursor-based.
  • Error envelope's additive fields (success: false, error.details.errors) leave message/code parsing unaffected.
  • Consumer-facing break documented in CHANGELOG: NO_PROJECTVALIDATION_ERROR error code on contacts bulk ops.

Gates: pytest 81/81 (incl. full contract coverage), mypy --strict clean, ruff clean. Vendored spec byte-identical to monorepo apps/wiki/openapi.json (blob 383f05a2).

🤖 Generated with Claude Code
Session: https://claude.ai/code/session_01GqTuJ7noGQrSC6UMwgfiT8

…ask-15 PR-3)

Sync vendored tests/fixtures/openapi.json to the committed spec merged to the
Sendly monorepo main (@764cc09d). The client stays thin (opaque Mapping bodies),
so absorb the contract shift as behaviour clarifications + test/doc updates:

- Deletes now return 200 with the deleted id (was 204); no_content=True still
  discards the body and returns None. Delete tests reworked to a 200 id envelope.
- Invalid input now raises SendlyValidationError from 422 VALIDATION_ERROR (was
  400); map 422 -> SendlyValidationError so `except SendlyValidationError` keeps
  catching validation failures. Added client + bulk-op 422 tests.
- templates.list is cursor-paginated (limit/cursor); dropped the page/pageSize
  test and docstring. contacts.list was already cursor-based.
- Error envelope additive fields (success:false, error.details.errors) leave
  message/code parsing unaffected.
- CHANGELOG.md added; README error table + templates example updated.

Gates: ruff check + ruff format --check clean, mypy src (strict) clean,
81 pytest passed (incl. 5 contract).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GqTuJ7noGQrSC6UMwgfiT8
@AminDhouib
AminDhouib merged commit f8d7d98 into main Jul 16, 2026
2 checks passed
@AminDhouib
AminDhouib deleted the chore/task15-spec-sync branch July 16, 2026 04:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant