Skip to content

Prepare Driver 0.1.15 completion, ETA, and recovery UX - #61

Draft
OziinG wants to merge 7 commits into
devfrom
cc-240-completion-flow
Draft

OziinG wants to merge 7 commits into
devfrom
cc-240-completion-flow

Conversation

@OziinG

@OziinG OziinG commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

The delivery sheet combines editable actual completion time, optional proof photos, and confirmation. After completion has been saved, photo retries keep the accepted completion time visible and locked so edits cannot appear successful without reaching the server. A failed completion save still permits time correction.

The change also displays the server-persisted final-stop ETA and elapsed time from pickup, adds administrator-link password recovery guidance and invalid-session cleanup, and prepares version 0.1.15 (Android versionCode 26, iOS build 15). Actual completion time remains separate from Rolling ETA. Password recovery uses the existing administrator-issued link contract.

Expo remains on SDK 56, with Expo 56.0.23 and notifications 56.0.26 aligned to the official dependency check. The existing brace-expansion override is updated to 5.0.12.

Fresh local validation on a7959e5 (Node 20.19.4):

  • Workspace typecheck and 174 tests passed, including accepted-completion/photo-retry regressions.
  • Lint, Expo dependency alignment, and diff checks passed.
  • Android Hermes export passed with one Metro worker. This is not a signed native release; the private Google services file was not supplied.
  • Independent review of the retry fix found no blocker.

Merge is held for #62: npm audit fails on unpatched braces and node-forge build-tool advisories. No audit exception or SDK downgrade was added. Exact-head CI failed at Audit npm dependencies: https://github.com/EVNSolution/clever-driver-app/actions/runs/37416689079. Workspace, lint, and both Android/iOS bundle exports passed before the audit failure. This PR remains blocked by #62.

Not verified: physical-device camera/gallery and end-to-end proof upload, signed Play/App Store artifacts, store publication, authenticated production recovery, and fresh local iOS export. Deployment is separate from source integration.

Refs EVNSolution/clever-change-control#240
Refs #1

Combine the completion time, optional POD photo, and final confirmation in one flow while preserving the existing server event and media contracts.

Constraint: The selected time is actual completion evidence and must stay separate from Rolling ETA.
Rejected: Separate completion and proof dialogs | They split one delivery decision across two confirmations.
Confidence: high
Scope-risk: moderate
Directive: Keep completion time and predicted arrival labels distinct in future UI changes.
Tested: npm run check:workspace; git diff --check
Not-tested: Physical camera and gallery selection; production proof upload.
Keep reset credential entry on the DSV HTTPS page while exposing login help and invalidated-session cleanup in the app.

Constraint: Approved server contract uses administrator-issued 30-minute one-time HTTPS links and no SMS OTP or app reset endpoint
Rejected: Add app reset API or deep-link handling | no approved contract
Confidence: high
Scope-risk: narrow
Directive: Keep reset token handling on DSV web unless the server contract changes
Tested: npm run check:workspace; npm run lint; npx expo install --check; npm run build; git diff --check
Not-tested: physical-device interaction
Present the persisted last stop arrival and server pickup-to-arrival duration on the Driver delivery screen while preserving the existing next-stop ETA and completion flow.

Constraint: The deployed DSV contract owns stop ETA, pickup time, route sequence, and timezone
Rejected: Calculate ETA from device time, distance, or final service time | those inputs are not an approved completion ETA contract
Confidence: high
Scope-risk: narrow
Directive: Keep this value labeled as final-stop arrival until the server exposes a completion ETA
Tested: npm run check:workspace; npm run lint; npx expo install --check; npm run build; git diff --check
Not-tested: physical device or emulator UI because none was connected or booted
Advance the public version beyond the deployed Play build and keep Android and iOS build identifiers explicit for local validation.

Constraint: Google Play already serves versionCode 25 and App Store Connect already received build 14.
Rejected: Reusing 0.1.14 or a versionCode below 26 | Store uploads require monotonically increasing identifiers.
Confidence: high
Scope-risk: narrow
Directive: Do not lower versionCode or buildNumber when regenerating native projects.
Tested: npm run check:workspace; npm run lint; npx expo install --check; git diff --check
Not-tested: Signed store builds and device installation.
Enable durable R8 minification, optimized defaults, and resource shrinking through the Expo prebuild boundary.

Constraint: The Android directory is generated and must remain reproducible from app configuration.

Rejected: Edit generated Gradle files directly | Expo prebuild would discard the optimization settings.

Confidence: high

Scope-risk: narrow

Directive: Preserve the template guard when upgrading Expo and review any generated ProGuard default change explicitly.

Tested: Clean Expo prebuild proof; workspace typecheck and 170 tests; lint; Expo dependency check; git diff check.

Not-tested: Signed production AAB awaits the EAS remote build because local native compilation exceeded the 8 GB host budget.
Constraint: Local release validation must protect an 8 GB host and stay distinct from Play candidates.
Rejected: Hardcode generated .cxx paths and targets | They change across generated native builds.
Confidence: high
Scope-risk: narrow
Directive: Stop native builds at the documented fan-out and memory-pressure boundaries before retrying.
Tested: npm run check:workspace; npm run lint; npx expo install --check; git diff --check
Not-tested: Production Play AAB remains blocked by the exhausted EAS Android quota.
Lock and display the accepted completion time during proof retries. Align Expo SDK 56 patch dependencies and update the existing brace-expansion override without changing audit gates.

Refs #1 and EVNSolution/clever-change-control#240.

Constraint: Delivery completion and proof upload use separate server operations.
Rejected: Resubmit completion after proof failure | It duplicates accepted delivery events.
Confidence: high
Scope-risk: moderate
Directive: Preserve the accepted completion time during retries and keep audit failures visible.
Tested: Node 20.19.4; typecheck; 174 tests; lint; Expo alignment; Android export with one Metro worker; git diff --check.
Known-failure: npm audit reports 20 high findings from unpatched braces and node-forge advisories; no audit exemption or SDK downgrade applied.
Not-tested: Physical-device camera and proof roundtrip; signed native/store artifacts; iOS export.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant