nexo/HANDOFF.md

4.6 KiB

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