Complexity: M · Blocked on external: SMS API access (via Pet Data)
Scope
Implement the Composition -> SMS hop as a ChannelAdapter-shaped read that pulls the animal's current SMS-sourced card through Pet Data's extraction (no second SMS connector in this service) and returns a ListingSnapshot for diffing.
Where the shelter's SMS exposes an API, that access lands in Pet Data's config; the listings service consumes Pet Data's extracted current card. This is the drift-prone manual-entry hop, so it is the highest-value check in the epic.
Out of scope
Dependencies
Acceptance criteria
ADR: docs/adr/0033-listing-sync-verification.md. Epic: #302.
Tenant-data path: high-risk, blocked.
Complexity: M · Blocked on external: SMS API access (via Pet Data)
Scope
Implement the Composition -> SMS hop as a
ChannelAdapter-shaped read that pulls the animal's current SMS-sourced card through Pet Data's extraction (no second SMS connector in this service) and returns aListingSnapshotfor diffing.Where the shelter's SMS exposes an API, that access lands in Pet Data's config; the
listingsservice consumes Pet Data's extracted current card. This is the drift-prone manual-entry hop, so it is the highest-value check in the epic.Out of scope
Dependencies
blockeduntil available).Acceptance criteria
ListingSnapshotbuilt from Pet Data's current extracted card for a fixture animal (asserted; the Pet Data client is mocked).src/listings/opens its own SMS connection or imports an SMS SDK (grep-asserted); the SMS read goes through the Pet Data client only.ADR:
docs/adr/0033-listing-sync-verification.md. Epic: #302.Tenant-data path:
high-risk,blocked.