110 lines
4.6 KiB
Markdown
110 lines
4.6 KiB
Markdown
# Handoff: client-validation / FCM ACK Smoke
|
|
|
|
Date: 2026-05-29
|
|
|
|
## Active Route
|
|
|
|
- Milestone: `agent-roadmap/phase/product-foundation/milestones/client-validation.md`
|
|
- Task: `agent-task/m-client-validation/04+03_fcm_ack_smoke/`
|
|
- Plan: `agent-task/m-client-validation/04+03_fcm_ack_smoke/PLAN-cloud-G07.md`
|
|
- Review stub: `agent-task/m-client-validation/04+03_fcm_ack_smoke/CODE_REVIEW-cloud-G07.md`
|
|
- State: incomplete, blocked on valid signed push payload or scope decision.
|
|
|
|
Do not record raw FCM tokens, auth tokens, signing keys, private endpoint values,
|
|
screenshots with secrets, or unredacted logs in tracked files.
|
|
|
|
## Completed In This Loop
|
|
|
|
- `agent-ops/skills/common/plan/SKILL.md` and
|
|
`agent-ops/skills/common/code-review/SKILL.md` now resolve split predecessor
|
|
completion from both active task paths and `agent-task/archive/**`.
|
|
- Archived predecessor is valid:
|
|
`agent-task/archive/2026/05/m-client-validation/03_smoke_preflight/complete.log`.
|
|
- `apps/flutter-test` now initializes Firebase and `NexoMessagingPlugin` at app
|
|
startup, after callbacks are registered.
|
|
- Widget/integration tests can construct `MyApp(initializePlugin: false)` so
|
|
deterministic tests are not tied to Firebase/FCM runtime setup.
|
|
- `apps/flutter-test` has direct `firebase_core` dependency.
|
|
- Local `cd apps/flutter-test && flutter analyze` passed.
|
|
- Local `cd apps/flutter-test && flutter test` passed.
|
|
- Remote `cd apps/flutter-test && flutter pub get && flutter analyze && flutter test`
|
|
passed.
|
|
- Remote app run with
|
|
`ORG_GRADLE_PROJECT_nexoSmokeApplicationId=com.tokilabs.mattermost` initialized
|
|
Firebase/plugin and saved an FCM token.
|
|
- Remote push-proxy direct sends returned `{"status":"OK"}`.
|
|
- Device logcat confirmed FCM receipt and ACK request:
|
|
- `NexoFCM : >>> onMessageReceived ENTER`
|
|
- `NexoFCM : onMessageReceived type=message ... ackId=...`
|
|
- `ReceiptDelivery: Send ACK=...`
|
|
- `NomadNetwork: POST https://mattermost.toki-labs.com/api/v4/notifications/ack`
|
|
- Placeholder and unsigned payloads were rejected with
|
|
`Notification skipped: signature verification failed`, which is expected.
|
|
|
|
## Current Blocker
|
|
|
|
Notification display and downstream behavior are still blocked because the smoke
|
|
does not yet have a valid server-generated signed push payload.
|
|
|
|
Confirmed PASS:
|
|
|
|
- Archived preflight dependency.
|
|
- Remote readiness.
|
|
- Firebase/plugin initialization.
|
|
- Device token save, without recording raw token.
|
|
- FCM receipt.
|
|
- ACK POST request evidence.
|
|
- Invalid/unsigned signature rejection.
|
|
|
|
Still BLOCKED:
|
|
|
|
- Valid signature pass.
|
|
- System notification display.
|
|
- Notification tap/opened event.
|
|
- Channel/thread routing.
|
|
- Inline reply.
|
|
- Dismiss action.
|
|
|
|
Remote integration note: `flutter test integration_test -d emulator-5554` built
|
|
and installed the app, then produced no runner output for more than 40 seconds.
|
|
The local ssh wrapper was killed. Treat this as inconclusive, not PASS.
|
|
|
|
## Continue From Here
|
|
|
|
1. Keep active files in place. Do not write `complete.log` or move the task to
|
|
archive until code-review flow decides it.
|
|
2. Decide whether to provide a valid signed push trigger or split the remaining
|
|
notification UI checks into a follow-up task.
|
|
3. If continuing the smoke, use the remote environment from
|
|
`agent-ops/rules/private/testing-env.md`.
|
|
4. Continue with device `emulator-5554` and:
|
|
`ORG_GRADLE_PROJECT_nexoSmokeApplicationId=com.tokilabs.mattermost`.
|
|
5. Do not print the raw token. Keep it only in the remote shell env used for the
|
|
push request.
|
|
6. Re-run push with a valid signature, then collect redacted evidence for
|
|
display/opened/routing/reply/dismiss.
|
|
7. Update `CODE_REVIEW-cloud-G07.md` first. User-review or final archive
|
|
decisions remain code-review responsibilities.
|
|
|
|
Useful remote evidence paths already referenced in the review stub:
|
|
|
|
- `/tmp/nexo-flutter-test-run-after-init.log`
|
|
- `/tmp/nexo-token-logcat-after-init.txt`
|
|
- `/tmp/nexo-smoke-screen-after-init.png`
|
|
- `/tmp/nexo-send-response.json`
|
|
- `/tmp/nexo-after-send-logcat.txt`
|
|
- `/tmp/nexo-send-response-nosig.json`
|
|
- `/tmp/nexo-after-send-logcat-nosig.txt`
|
|
|
|
## Source Files Touched
|
|
|
|
- `agent-ops/skills/common/plan/SKILL.md`
|
|
- `agent-ops/skills/common/code-review/SKILL.md`
|
|
- `agent-roadmap/phase/product-foundation/milestones/client-validation.md`
|
|
- `agent-task/m-client-validation/04+03_fcm_ack_smoke/PLAN-cloud-G07.md`
|
|
- `agent-task/m-client-validation/04+03_fcm_ack_smoke/CODE_REVIEW-cloud-G07.md`
|
|
- `apps/flutter-test/lib/main.dart`
|
|
- `apps/flutter-test/pubspec.yaml`
|
|
- `apps/flutter-test/pubspec.lock`
|
|
- `apps/flutter-test/test/widget_test.dart`
|
|
- `apps/flutter-test/integration_test/plugin_integration_test.dart`
|