chore: align agent guidance and alert ownership#6
Merged
Conversation
…pp container Explicit input: false on AcceptInviteInput, AcknowledgeAlertInput, and CreateInviteOutput prevents API Platform from attempting body deserialization on endpoints that take no request body. Add a Docker healthcheck on the app service so Docker knows when the PHP container is actually ready. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ills Port the Signalist .claude configuration to Fall Guardian: - hooks/guardrails.py: PostToolUse guardrail script that warns on protected branch commits, staged instruction files, .env files, multi-layer changes, native bridge contract changes, and sensitive auth/route surfaces - settings.json: add PostToolUse hooks wiring guardrails.py, allowedMcpServers: [], and missing make targets in permissions - skills/hotfix: minimal-blast-radius workflow for urgent production fixes - skills/karpathy-guidelines: execution discipline for ambiguous or refactor-heavy tasks - commands/fall-guardian/hotfix.md: matching slash command - AGENTS.md: reference hotfix, karpathy-guidelines, and guardrails.py in the shared assets and improvement policy sections Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- align AGENTS and .claude workflows with the actual repo shape - fix shared workflow docs that were backend-only or used wrong quality gates - extract Flutter startup bootstrap into a dedicated service - move alert timeout reconciliation out of the screen and into coordinator/app lifecycle ownership - add coordinator coverage for lifecycle-pause timeout recovery
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
Architectural impact
Verification
No issues found! (ran in 2.2s)
00:00 +0: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository getAll returns empty list initially
00:00 +1: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository add persists a contact
00:00 +2: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository add multiple contacts
00:00 +3: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository remove deletes by id
00:00 +4: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository remove with unknown id does nothing
00:00 +5: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository update replaces contact with matching id
00:00 +6: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository update with unknown id does nothing
00:00 +7: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository save replaces all contacts
00:00 +8: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/contacts_repository_test.dart: ContactsRepository getAll_skipsCorruptedJsonEntries
00:00 +9: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository getAll returns empty list initially
00:00 +10: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository getAll returns empty list initially
00:00 +11: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository getAll returns empty list initially
00:00 +12: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository add persists an event
00:00 +13: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository getAll returns events sorted newest first
00:00 +14: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository clear removes all events
00:00 +15: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository add preserves location and contacts
00:00 +16: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository getAll_skipsCorruptedJsonEntries
00:00 +17: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository clear_isIdempotent
00:00 +18: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/repositories/fall_events_repository_test.dart: FallEventsRepository getAll migrates legacy shared preferences into secure storage
00:00 +19: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/contact_test.dart: Contact toJson / fromJson round-trip
00:00 +20: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/contact_test.dart: Contact toJson contains all fields
00:00 +21: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/contact_test.dart: Contact copyWith replaces given fields
00:00 +22: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/contact_test.dart: Contact copyWith with no args returns equal values
00:00 +23: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/fall_event_test.dart: FallEvent toJson / fromJson round-trip — alertSent with location
00:00 +24: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/fall_event_test.dart: FallEvent toJson / fromJson round-trip — cancelled, no location
00:00 +25: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/fall_event_test.dart: FallEvent all status values round-trip
00:00 +26: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/fall_event_test.dart: FallEvent fromJson_missingNotifiedContacts_defaultsToEmpty
00:00 +27: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/fall_event_test.dart: FallEvent fromJson_nullNotifiedContacts_defaultsToEmpty
00:00 +28: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/models/fall_event_test.dart: FallEvent fromJson_invalidStatus_throwsError
00:01 +29: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/services/backend_api_service_test.dart: ensureReady registers device once and stores credentials
00:01 +30: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +31: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +32: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +33: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +34: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +35: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +36: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +37: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +38: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +39: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +40: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +41: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +42: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +43: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +44: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +45: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +46: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +47: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +48: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows 30-second countdown on launch
00:01 +49: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/services/location_service_test.dart: LocationService getCurrentPosition_returnsNull_whenGetPositionThrows
00:01 +50: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows warning icon and cancel button
00:01 +51: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows warning icon and cancel button
00:01 +52: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen shows warning icon and cancel button
00:01 +53: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen countdown reflects elapsed time from fall timestamp
00:01 +54: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen countdown reaches 0 and transitions to sending state
00:01 +55: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen cancel during countdown prevents sendAlert from running
00:01 +56: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen tapping cancel pops the screen
00:01 +57: /Users/thomaslaure/Documents/projects/fall_guardian/flutter_app/test/screens/fall_alert_screen_test.dart: FallAlertScreen remote cancel does not send cancel back to watch
00:02 +58: All tests passed!
Manual checks
Known limitations