who_need_help/docs/verification.md

7.1 KiB

Who Need Help — implementation verification

Observed on 2026-07-18 in the local workspace. This report separates observed results from product limits and unknown production properties.

Verified MVP capabilities

Requirement Status Observed evidence Limit
Urgent medicine-help flow Implemented and tested Request creation, discovery, matching, start, handover, two-party completion, and review rules are covered by the Phoenix test suite and exercised in the local UI. The product coordinates pickup of an already purchased or reserved legal item; it is not a pharmacy, medical, or emergency service.
Extensible categories Implemented and tested Categories and validated text/select/boolean fields are stored in PostgreSQL. Proposal, vote, approve, reject, and merge paths have automated tests. Coffee, cinema, hiking, and other social activities are intentionally a future Activity mode.
Map and discovery Implemented and browser-verified A headed Chrome session rendered the MapLibre request map, marker, controls, attribution, and configured OpenStreetMap raster tiles. Tile requests returned HTTP 200 during the check. A production operator must configure a tile provider appropriate for its policy and traffic.
Private matched chat Implemented and cross-client verified A message sent from the helper browser appeared in the requester's browser without reload. An earlier Android emulator run also sent a message that appeared in the requester browser in real time. There is no unsolicited general-purpose inbox.
Foreground tracking Implemented and cross-client verified Android emulator coordinates created an active tracking session and appeared for the matched requester. Stopping sharing made the session inactive and removed raw current positions. No background tracking or route history is implemented.
Privacy settings Implemented and browser-verified The profile exposed hidden, approximate public, exact for active match, and explicit exact-public options. Blocking and current-position cleanup have automated tests. Exact public location remains a user opt-in; legal privacy and retention text still requires jurisdiction-specific review before launch.
Reputation and anti-abuse Implemented at MVP level Handover codes, two-party completion, double-blind reviews, unique-counterpart ranking, optional movement/proximity evidence, reports, blocks, abuse signals, and moderator audit paths have automated tests. The system is not bot-proof and does not claim identity verification. No punitive numeric policy is enabled without measured and approved thresholds.
Social profiles Implemented as manual links Public links can be attached and are visibly labelled unverified. OAuth/social-network verification is not implemented.
Voluntary thanks Implemented as an external optional link A helper can expose an optional link after completion; the UI states that the platform does not process the payment. The platform does not provide payments, escrow, refunds, tax reporting, or payment guarantees.
Android client Debug client implemented and emulator-verified The native package org.whoneedhelp.mobile.debug launches the same authenticated LiveView app. Login persistence, map, chat, and foreground geolocation were exercised on API 37. The final Docker emulator image separately passed boot/install/launch smoke verification. Production signing, a public production origin, Play Store publication, background tracking, and iOS are not implemented.
Multiple web/worker instances Implemented and locally verified Docker Compose and kind each ran 2 web and 2 worker replicas. The project probes cross-node Phoenix PubSub using different BEAM nodes. Kubernetes web/worker pods were Ready with zero restarts at the final observation. Local PostGIS is a single instance. Production database HA, backups, and recovery are operator work and are not claimed complete.

Reproducible checks

  • ./scripts/test.sh: 121 tests, 0 failures in the final run.
  • mix format --check-formatted: passed in the final run.
  • Android Docker build target: testDebugUnitTest, lintDebug, and assembleDebug passed; the final lint report contains no errors or warnings.
  • Release Android guard: a release build without WNH_BASE_URL failed as intended; release configuration accepts only an explicit HTTPS origin.
  • Helm lint, template rendering, server-side dry-run, rollout waits, readiness checks, and cross-node PubSub verification passed in the local kind cluster.
  • Browser verification used headed Chrome. Fresh requester and helper pages reported no console errors or warnings after the final rollout.

Local generated evidence (ignored by Git):

  • output/playwright/final-request-map-chat.png
  • output/playwright/final-privacy-profile.png
  • output/android/final-image-smoke.png

Android artifact:

  • android/dist/who-need-help-debug.apk
  • SHA-256: 4df66ec90e056c70f08841db2f0aa6178ba9cb64d4882478cd2cba88f5731003
  • Observed manifest values: version 0.1.0-debug, minimum SDK 24, target and compile SDK 37.

Configuration finding

WNH_DEBUG_BASE_URL is a required Android build input, because the trusted same-origin value is compiled into the debug APK. Its concrete local value is read from the repository's ignored .env by scripts/android-build.sh and is passed to Docker with --build-arg. android/Dockerfile only declares ARG WNH_DEBUG_BASE_URL; it contains no URL default.

The example http://10.0.2.2:4010 remains only as unit-test data for origin matching. It is not a runtime or build default. The ignored .env is also excluded from the root Docker build context.

Database observations

The final local Compose observation found 2 users, 1 help request, and 7 messages. These are local scenario data; the database is not assumed empty.

The migration 20260718114233 and reverse block lookup index blocks_blocked_id_blocker_id_index were present. An actual EXPLAIN ANALYZE for that reverse lookup selected the index. The table contained no block rows, so this confirms query shape, not production performance.

Exact production capacity, minimum CPU/RAM, and scaling thresholds are unknown: there is no representative load dataset or target-environment measurement. The Helm chart therefore does not invent resource limits or an HPA policy.

Known work before a public production launch

  • Configure a real public HTTPS origin and production-sign the Android app.
  • Operate PostgreSQL/PostGIS with backups, recovery testing, and the required availability model.
  • Load-test representative data and traffic, then set measured pool, resource, autoscaling, and action-limit policies.
  • Add pagination or bounded loading where real measurements show that request, chat, moderation, or leaderboard result sets require it.
  • Publish jurisdiction-specific emergency contacts, privacy, retention, prohibited-items, and voluntary-payment guidance after legal review.
  • Add OAuth identity verification only if the product chooses to make verified social accounts a trust signal.
  • Design the separate future social-activity mode rather than mixing it with urgent-help safety and ranking rules.