feat: caregiver push flow + hexagonal architecture#4
Merged
Conversation
Expanded all skill and command definitions with concrete workflows, local-project rules, and quality-gate references. Enriched patterns.md with hexagonal architecture and caregiver-flow conventions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Restructures src/ to Domain/Application/Infrastructure/UI layers following ports-and-adapters. Adds the full caregiver model (CaregiverLink, CaregiverInvite, CaregiverPushToken, AlertAcknowledgement, PushAttempt) with invite-code linking, FCM push gateway, and a SendFallAlertPushMessage handler that dispatches alongside the existing SMS path. Fixes the dd( blacklist false positive on ->add( and removes a non-existent Rector skip rule. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sets up FriendsOfBehat/SymfonyExtension with bootstrap, services_test config, and behat.yaml.dist pointing to the test environment. Adds feature files covering device registration, fall alert flow, caregiver invite, and alert acknowledgement. Adds PHPUnit unit tests for all five application handlers/services. Fixes DebugFakeSmsControllerTest isolation by clearing the file-backed store before each run. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New Flutter app for caregivers with device registration, invite-code linking, FCM push notification reception, and alert screens (ActiveAlertScreen, LinkScreen, HomeScreen). Uses firebase_messaging for data-only push handling in all app states. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the phone-number contacts form with an invite-code flow: the protected person generates a code (POST /api/v1/invites) and the screen displays it with a countdown. Renames AlertPhase.sendingSms to sendingAlert, adds createInvite() to BackendApiService, and updates localization strings and coordinator tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reflects completed caregiver model, push notification infrastructure, Behat test suite, and Flutter invite flow. Adds NEXT_IMPLEMENTATION_STEPS.md with the remaining work towards a fully functional end-to-end push notification path. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mirrors the FakeSmsStore pattern for push: FakePushStore persists each dispatched push to fake_push_inbox.jsonl, FakePushGateway writes to it instead of logging, and DebugFakePushController exposes GET /debug/fake-push (non-prod only). Adds an end-to-end Behat scenario that verifies the full chain: invite → link → FCM token → fall alert → push dispatched. Also clears both stores before each Behat scenario. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
backend/src/to Domain/Application/Infrastructure/UI layers (ports-and-adapters)CaregiverLink,CaregiverInvite,CaregiverPushToken,AlertAcknowledgement,PushAttemptSendFallAlertPushMessagehandler dispatching alongside SMSFakePushStore+GET /debug/fake-pushendpoint mirroring the existing SMS debug toolingdd(blacklist false positive on->add(and removes non-existent Rector skip ruleTest plan
make test-behatmake testmake phpstanGET /debug/fake-pushreturns 1 messageflutter testinflutter_app/🤖 Generated with Claude Code