Add driver phone/PIN accounts and Android 1.0 device build#121
Conversation
Constraint: app-only local commit; server and Shopify code remain read-only. Rejected: require route assignment before storing driver profile | returning verified drivers need profile/token state before a route may exist. Confidence: high Scope-risk: moderate Directive: Keep self-service token scope explicit before adding future server APIs. Tested: npm test passed earlier with 156/156 after these changes. Not-tested: per-commit isolated device smoke not run.
Constraint: app-only local commit; native build output stays ignored. Rejected: rely only on default Android resize behavior | form fields still need explicit input navigation and checkbox affordance helpers. Confidence: high Scope-risk: narrow Directive: Prefer tested UX helpers before wiring more form-specific UI behavior. Tested: npm test passed earlier with auth form UX coverage. Not-tested: per-commit isolated Galaxy manual keyboard pass not run.
Constraint: app-only local commit; schedule ordering remains client-side until server route history exists. Rejected: keep Today-only copy | drivers need current and future route visibility from nearest date outward. Confidence: high Scope-risk: narrow Directive: Server route APIs must return valid deliveryDate and timezone for deterministic ordering. Tested: npm test passed earlier with route schedule coverage. Not-tested: real multi-route production data not replayed.
Constraint: app-only local commit; server-backed tabs remain placeholder-gated. Rejected: keep route list as the only live page | Home, Routes, Earnings, and Profile need distinct primary app surfaces. Confidence: high Scope-risk: broad Directive: Do not enable history/profile/earnings/deletion live paths until server contracts and integration tests exist. Tested: npm run typecheck, npm test, npm run lint, source-layout, native-release, architect review, and Galaxy install passed earlier. Not-tested: visual QA screenshots across all Galaxy nav modes not captured.
Constraint: plan-only document under clever-driver-app; no server or Shopify implementation changes. Rejected: implement delivery-server endpoints now | current authority is documentation and future prompt handoff only. Confidence: high Scope-risk: narrow Directive: Treat token scope, route history migration, feedback sync, profile freshness, and timezone as server entry gates. Tested: git diff --check docs/server-implementation-plan-driver-tabs-ia.md. Not-tested: server implementation not attempted by design.
Keep the existing driver app IA while removing route wording drift, clarifying gated beta semantics, and making the restored iOS prebuild source reviewable under native release guardrails. Constraint: APP-only session; server and Shopify implementation stayed out of scope. Rejected: Direct server/API implementation | Required future server needs are captured as plan-only docs. Rejected: Committing local Apple signing team pin | Source-controlled iOS project must not bake in local signing authority. Confidence: high Scope-risk: moderate Directive: Keep route history, profile editing, account deletion, and review/tip sync visibly gated until server contracts exist. Tested: npm run check:native-release; npm run typecheck; npm run lint; npm run check:workspace; plutil -lint iOS plist files; xcodebuild -list -project ios/CleverDriver.xcodeproj; git diff --check Not-tested: Actual EAS/iOS archive build and Apple signing authority confirmation remain external.
Constraint: Driver auth protocol remains unchanged and diagnostics must not print full phone numbers, invite codes, tokens, cookies, or auth subjects. Rejected: Server-side auth changes | production log evidence showed the endpoint works and the observed failure path was mobile request visibility. Confidence: high Scope-risk: narrow Directive: Keep invite diagnostics redacted and environment-focused unless a new auth protocol plan is approved. Tested: npm run typecheck; npm test src/app/authDiagnostics.test.ts; npm run lint; npm test. Not-tested: Physical-device invite smoke; no connected/trusted device was available and Android SDK path was missing.
Drivers need newly published or reassigned routes to appear without reinstalling or signing out. The Routes tab now supports a manual refresh and refreshes when the app returns to the foreground while preserving selected route state and progress. Constraint: Server auth and route visibility contracts remain unchanged. Rejected: Polling routes continuously | unnecessary battery/network cost for this release. Confidence: high Scope-risk: narrow Directive: Keep refresh messages non-secret and do not reset active route progress during a route-list refresh. Tested: npm run lint; npm run typecheck; npm run test; git diff --check Not-tested: Physical Android install before this commit.
Refresh driver route assignments on demand
Phone-only returning-driver lookup now falls back to invite-code linking when a saved session no longer has route access, and verified drivers land on the Routes empty state when no current or upcoming route is assigned. Constraint: Server auth/API behavior remains unchanged; route absence must not masquerade as an auth failure. Rejected: Allowing arbitrary phone-only sign-in without verification | would bypass the invite-code proof for unlinked or recreated drivers. Confidence: high Scope-risk: narrow Directive: Keep route-empty outcomes distinct from auth failures and require invite-code proof before trusting unlinked phone-only sessions. Tested: npm run lint; npm run typecheck; npm run test; git diff --check
…ut-route Let driver login continue without assigned routes
Pin vulnerable Expo transitive dependency ranges with npm overrides so the required audit gate remains useful without a breaking Expo downgrade. Constraint: CI runs npm audit --audit-level=moderate on every driver app PR. Rejected: npm audit fix --force | would downgrade Expo to a breaking older release. Confidence: medium Scope-risk: moderate Directive: Remove these overrides only after Expo ships fixed transitive dependency ranges. Tested: npm ci; npm run lint; npm run typecheck; npm run test; npm audit --audit-level=moderate; npm run build; git diff --check
Restore driver app audit gate
Keep the Expo dependency range at the patch expected by the project health check so main stays deployable after the audit override change. Constraint: GitHub Actions runs npx expo install --check after build and audit. Rejected: Ignoring the CI alignment check | would leave main red immediately after merge. Confidence: high Scope-risk: narrow Directive: Use Expo install/check output as the source of truth for patch-level alignment. Tested: npm ci; npx expo install --check; npm run lint; npm run typecheck; npm run test; npm audit --audit-level=moderate; npm run build; git diff --check
…ignment Align driver app Expo patch
Constraint: Production route-access lookup may include nested INVITED status on phone-only route choices. Rejected: Requiring a server-only deploy before mobile recovery | connected Android dev builds should tolerate the current production envelope. Confidence: high Scope-risk: narrow Directive: Keep token fields redacted in diagnostics and avoid strict parser rejection for additive non-secret DTO metadata. Tested: npm run test -- src/domain/routeAccess/routeAccess.test.ts; npm run typecheck; npm run lint; npm run test; npm run build; npm audit --audit-level=moderate; npx expo install --check; git diff --check Co-authored-by: OziinG <145884442+OziinG@users.noreply.github.com>
Constraint: Past assigned routes stay visible until server completion, and completed routes must not reappear after refresh or relogin.\nRejected: Removing only the app-side past-date filter | would leave route completion as local UI state.\nConfidence: high\nScope-risk: moderate\nDirective: Do not connect Completed/history UI until the server endpoint is explicitly planned; preserve replay before assigned-route loading.\nTested: npm run typecheck; npm run test; npm run lint; git diff --check\nNot-tested: Live Android device smoke and production deploy.
Consolidates the completed cross-session driver OSRM handoff: the app accepts additive geometry, metrics, and stop snap points from assigned-route while keeping legacy responses usable and displaying safe pending/unavailable states. Constraint: Validate OSRM route guidance without adding sample login/session-loader/admin backdoor behavior. Rejected: Coupling smoke validation to operational auth bypasses | route evidence must remain testable through parser scenarios and normal assigned-route data. Confidence: high Scope-risk: moderate Directive: Keep OSRM fields optional and fallback copy safe until production server rollout is verified on devices. Tested: git diff --check; npm run typecheck; npm run test (141 passed). Not-tested: Android export/build in this consolidation pass; prior handoff reported check:workspace and build:android success.
Keeps the third verification lane from this work: after the server assigned-route OSRM contract and driver parser/display changes, internal QA can load a gated route session, reset driver state, and open native map navigation from the active stop for smoke testing. Constraint: This is a QA/internal validation path gated by __DEV__ or EXPO_PUBLIC_ENABLE_ADMIN_SESSION, not a customer-facing login redesign. Rejected: Dropping the restored AppRoot change as unrelated | the user clarified it is the verification step for the OSRM route work. Confidence: high Scope-risk: moderate Directive: Do not enable EXPO_PUBLIC_ENABLE_ADMIN_SESSION in customer production builds unless there is an explicit internal-release gate decision. Tested: git diff --check; npm run typecheck; npm run test (144 passed). Not-tested: Physical Android smoke run against deployed OSRM server.
The driver route UI now treats Route Details as the re-entry/menu surface: active routes can continue tracking, each stop row opens Stop Details, and the current stop is highlighted with Processing. Route-level maps stay in Live Tracking and launch the default map app with ordered stop addresses before coordinate fallback. Top Back/Menu text controls were removed; Android hardware/gesture back and horizontal swipe now perform internal screen back, while Assigned Routes/Home still allows app exit. Constraint: User QA found the fake in-app map misleading, Start Route -> Live Tracking had no reliable re-entry path after Back, and the top Back/Menu text controls were too high/non-functional. Rejected: Keeping Open in Map on Route Details | Route Details should separate review/re-entry from live navigation. Rejected: Keeping top Back/Menu text controls | navigation should use native back actions instead of placeholder header text. Rejected: Marking every uncompleted stop as current | only the active navigation step should show Processing. Rejected: Coordinate-first route handoff | it hides the customer-facing address context when valid stop addresses exist. Confidence: high Scope-risk: moderate Directive: Keep map launch in Live Tracking, keep Route Details as the stop-selection/re-entry hub, and keep Android back consumed by in-app navigation except on Assigned Routes/Home. Tested: git diff --check; npm run lint; npm run typecheck; npm run test; npx expo prebuild --platform android --clean; ./gradlew assembleRelease; adb install -r dist/beta/clever-driver-0.1.0-d725f87-back-actions-20260604180414.apk; Android smoke verified top Back/Menu removal, hardware Back returns Route Details to Assigned Routes instead of exiting, horizontal swipe returns Route Details to Assigned Routes, and Assigned Routes/Home Back exits to launcher. Not-tested: Multiple-map-app chooser on a device without Google Maps as the saved default; live production route data beyond the QA session.
Route review taps now stay read-only until the driver uses the current-step controls, and the accepted truck icon is wired through Expo's iOS and Android icon config so device validation sees the selected branding. Constraint: User requested publishing the existing dirty app changes through deployment cleanup. Rejected: Completing route progress from route-detail stop selection | accidental taps can mark prior steps as done. Confidence: high Scope-risk: moderate Directive: Keep stop selection as preview-only unless an explicit current-step completion control is invoked. Tested: npm run test; npm run typecheck; npm run lint; npm run check:source-layout; npm run check:native-release; git diff --check Not-tested: Physical iOS/Android install and EAS remote binary build before this commit.
Merged the current main app shell into the driver route release branch while preserving explicit stop progress, unfinished route visibility, OSRM route metrics, map handoff, and generated mobile icons. Resolved the proof-note label conflict in favor of main's current English copy so the shared MVP flow tests remain canonical, and kept release evidence generation aligned with the source-controlled iOS project. Constraint: User requested deployment from a clean local state with the work left on main. Rejected: Rebase/squash onto main | a merge commit preserves the existing route-validation work and avoids rewriting the already published branch history. Confidence: high Scope-risk: moderate Directive: Keep route-detail stop taps preview-only; delivery progress must advance only through explicit completion/arrival actions. Tested: npm run check:workspace; npm run lint; npm run check:native-release; npm run release:evidence:seed; npx expo install --check; npm audit --audit-level=moderate; git diff --check; npm run build Not-tested: Owner-controlled EAS signing/store deployment and physical-device smoke evidence require external credentials/evidence gates.
Deploy driver route validation candidate to main
Render the server-provided normalized payment bucket in route, live-tracking, and stop-detail views so drivers avoid asking for payment that Woo/admin has already confirmed.\n\nConstraint: Driver app consumes server payment truth only; no login/auth redesign, payment/refund mutation, or checkout/order creation change.\nRejected: Infer payment action from legacy financialStatus/paymentStatus | those fields remain compatibility display data and can conflict with Woo payment reality.\nConfidence: high\nScope-risk: narrow\nDirective: Keep malformed normalizedPaymentStatus responses fail-fast until a versioned compatibility plan is approved.\nTested: npm run check:workspace; npm run lint; npm run typecheck; npm run build; npm run check:native-release; git diff --check.\nNot-tested: Physical iOS/Android device smoke, EAS build submission, and store/private distribution approval evidence.
Show canonical Woo payment status in driver app
Uses the signed static preview contract when present and keeps the existing noninteractive mock as the safe fallback. Constraint: No mobile map SDK dependency is being introduced for this first rollout. Rejected: Native interactive map integration | Server-generated preview is the urgent first step and avoids new app-store/runtime permissions. Confidence: high Scope-risk: narrow Directive: Keep fallback copy visible for missing, expired, or failed preview images until device smoke proves production stability. Tested: npm run typecheck Not-tested: Real-device image loading against production preview URL remains an external gate.
Constraint: Drivers need to verify the server-generated route preview before starting a production route. Rejected: Require Start Route to see the preview | that records a route-start event just to inspect the map. Confidence: high Scope-risk: narrow Directive: Keep this preview non-interactive; turn-by-turn navigation remains behind Open in Map. Tested: npm run typecheck; npm test -- src/domain/route/assignedRoute.test.ts; Android SM-N981N Route Details screenshot loaded server PNG preview.
Avoid cropping server-rendered route previews on narrow mobile cards by preserving the full image inside the preview frame.\n\nConstraint: Static preview PNG is wider than the mobile detail card and must show the whole route until interactive maps ship.\nRejected: Leaving resizeMode cover | It hides route segments and stop markers on real devices.\nConfidence: high\nScope-risk: narrow\nDirective: Do not use cover for route previews unless the image aspect ratio and visible bounds are explicitly tested on phones.\nTested: npm run typecheck; npm test -- src/domain/route/assignedRoute.test.ts\nNot-tested: Fresh on-device screenshot after this visual-only resize change.
Prevent the saved-session restore effect from retriggering when the selected route changes, and avoid blocking the home transition on secure storage persistence or toast rendering.\n\nConstraint: Home must not alternate between empty and assigned-route states during automatic app restore.\nRejected: Retrying route restore on every selectedRouteId change | It can loop route loading and visibly flicker the Home screen.\nConfidence: high\nScope-risk: narrow\nDirective: Keep startup restore effects guarded to one attempt unless the user explicitly refreshes routes.\nTested: npm run typecheck; npm test -- src/domain/route/assignedRoute.test.ts src/app/driverMainTabs.test.ts src/app/config/driverRuntimeConfig.test.ts; Android reload screenshots /tmp/clever-driver-home-restore-loop-fix.png and /tmp/clever-driver-home-restore-loop-fix-later.png.\nNot-tested: Release-mode performance trace.
Current Task should read like normal task context instead of an oversized callout, while its paired actions stay visually even.\n\nConstraint: Keep the change scoped to Current Task density and avoid broader route-session redesign.\nRejected: Shrink global button defaults | Other screens rely on the existing button hierarchy.\nConfidence: high\nScope-risk: narrow\nDirective: Use the compact button path for dense in-card actions that must share height.\nTested: npm test -- src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check\nNot-tested: Device/manual visual smoke
Route Sequence stop rows should show only the basic stop address, without recipient or generic helper subtitles.\n\nConstraint: Keep depot/progress state intact and avoid changing stop detail or map behavior.\nRejected: Keep full formatted address | City/province/postal/country clutter made the sequence too heavy.\nRejected: Keep recipient subtitle | The requested sequence view should leave only the address.\nConfidence: high\nScope-risk: narrow\nDirective: Use formatStopStreetAddress for compact in-session address lists.\nTested: npm test -- src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check\nNot-tested: Device/manual visual smoke
Driver App CI should remain available for manual verification without spending Actions minutes on every PR or push.\n\nConstraint: Reduce GitHub Actions cost while preserving an on-demand verification path.\nRejected: Delete the workflow entirely | Manual CI is still useful before merge or release checks.\nConfidence: high\nScope-risk: narrow\nDirective: Re-enable automatic pull_request/push triggers only when CI budget policy is settled.\nTested: git diff --check\nNot-tested: GitHub manual workflow dispatch UI after push
Route Sequence should keep completed and upcoming stops quiet while making the active step easy to scan. Constraint: Keep the change scoped to Route Sequence typography. Rejected: Bold every route sequence address | It would reintroduce noisy emphasis across the list. Confidence: high Scope-risk: narrow Directive: Keep timelineTitle regular by default and add emphasis through state-specific styles only. Tested: npm test -- src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check Not-tested: Device/manual visual smoke
Arrival completion should talk about delivery photos and clear next actions, not internal proof-media records or upload identifiers. Constraint: Keep existing proof capture/upload behavior and offline retry semantics unchanged. Rejected: Expose proof media ids and raw upload errors | Those are implementation details and create noisy warnings for drivers. Confidence: high Scope-risk: narrow Directive: Keep ProofMediaUploadResult reasons for control flow, but map user-facing copy to short delivery-photo language. Tested: npm test -- src/domain/proof/proofMediaUpload.test.ts src/domain/proof/proofPhotoCapture.test.ts src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check Not-tested: Device/manual visual smoke
The stop completion screen should not explain missing or successful photo state; the final completion action already enforces the required delivery photo. Constraint: Preserve capture, upload, offline retry, and final required-photo validation behavior. Rejected: Replace Proof Item with another placeholder phrase | Any placeholder copy still adds unnecessary explanation before completion. Confidence: high Scope-risk: narrow Directive: Surface photo messages only for actionable problems, not normal selected/uploaded state. Tested: npm test -- src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check Not-tested: Device/manual visual smoke
Stop completion should present one Add Photo action and let the driver choose camera or album only when needed. Constraint: Expo ImagePicker keeps camera and library launches as separate native entry points. Rejected: Rely on camera access inside the system album picker | iOS and Android picker UIs do not provide a stable cross-platform camera choice contract. Confidence: high Scope-risk: narrow Directive: Keep the app-level Add Photo choice as the stable UX boundary; do not expose separate photo source buttons on the form. Tested: npm test -- src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check Not-tested: Device/manual native picker smoke
The Add Photo flow should follow the driver app design system instead of showing the native alert style. Constraint: Use existing text-only, rounded white surface, thin border, soft shadow, and blue action treatment from design.md/AppRoot styles. Rejected: Keep Alert.alert for photo source selection | Native alert styling conflicts with the app's card/sheet visual system. Confidence: high Scope-risk: narrow Directive: Keep photo source selection as an app-owned sheet; reserve native pickers only for camera/library entry after the driver chooses a source. Tested: npm test -- src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check Not-tested: Device/manual native picker smoke
Android system navigation can cover app-owned bottom sheets, so bottom-attached app chrome needs an explicit clearance rule. Constraint: Preserve the existing 56px Android bottom chrome clearance and apply it to the custom Add Photo sheet. Rejected: Rely on SafeAreaView alone | React Native SafeAreaView did not protect this custom absolute-positioned bottom sheet from Android 3-button navigation. Confidence: high Scope-risk: narrow Directive: Any future app-owned bottom sheet or bottom chrome should use APP_OWNED_BOTTOM_CHROME_ANDROID_CLEARANCE on Android. Tested: npm test -- src/app/appLayoutMetrics.test.ts src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check Not-tested: Physical Android 3-button navigation smoke
Photo source choices need clearer action affordances without making the bottom sheet visually taller than necessary. Constraint: Preserve Android bottom-navigation clearance and app-owned sheet styling. Rejected: Keep the native secondary cancel button | It cannot express the requested red cancel affordance cleanly inside this sheet. Confidence: high Scope-risk: narrow Directive: Keep photo source buttons compact; avoid increasing sheet height when changing color or state styling. Tested: npm test -- src/app/appLayoutMetrics.test.ts src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check Not-tested: Device/manual visual smoke
The photo source sheet should keep three actions visually consistent while preserving Android navigation clearance without excess empty space. Constraint: Keep the requested blue source borders and red cancel treatment. Rejected: Increase sheet height to express action separation | It made the sheet feel too high and heavy. Confidence: high Scope-risk: narrow Directive: Keep photo sheet action and cancel button minHeight/font size aligned when changing future sheet styling. Tested: npm test -- src/app/appLayoutMetrics.test.ts src/app/routeSessionBehavior.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace; git diff --check Not-tested: Device/manual visual smoke
The photo source sheet needs visually equal source and cancel actions, so button boxes use fixed height and controlled text line boxes instead of relying on minHeight. Constraint: Device screenshot showed source buttons rendering taller than Cancel despite matching minHeight intent. Rejected: Keep minHeight-only styling | Android text metrics and padding still allowed unequal rendered button heights. Confidence: high Scope-risk: narrow Directive: Keep photo sheet source and cancel actions on fixed equal height unless a visual QA pass approves a new density. Tested: adb device screenshot inspection; git diff --check; npm test -- src/app/routeSessionBehavior.test.ts src/app/appLayoutMetrics.test.ts; npm run typecheck; npm run lint -- --quiet; npm run check:workspace Not-tested: Fresh rebuilt on-device visual smoke after this commit
The app carried three platform-specific icon files that were byte-for-byte identical to assets/icon.png. Point every Expo icon field at the existing root icon and delete the duplicates to shrink the mobile source package without changing the displayed icon. Constraint: Ponytail pass; no new dependencies or image tooling, and no UI/runtime behavior change. Rejected: Add PNG optimizer dependency | Existing icon already did not shrink through the available native sips tool, and adding tooling for one asset is not worth it. Confidence: high Scope-risk: narrow Directive: Re-add platform-specific icon files only if they intentionally differ from the shared root icon. Tested: npm run check:source-layout; npm run typecheck; npm run test; npm run lint; npx --no-install expo config --type public --json; npm run build:android; git diff --check Not-tested: Native EAS APK/IPA size, because this pass changes source icon inputs only and Android export verified references.
Photo proof already uses expo-image-picker; the barcode scanner path had no current UI wiring. Remove expo-camera/barcode-detector/ZXing and the app-side barcode proof boundary instead of carrying a native scanner for later. Constraint: Keep current proof flow to photo upload and signature metadata only. Rejected: Keep barcode domain hooks | no current UI need and it keeps scanner dependency semantics alive. Confidence: high Scope-risk: moderate Directive: Reintroduce barcode proof only with approved UX and native dependency justification. Tested: npm run check:source-layout; npm run typecheck; npm run test; npm run lint; npm run check:native-release; npx --no-install expo config --type public --json; npm run build:android; npm run build:ios; npm ls expo-camera barcode-detector zxing-wasm; git diff --check Not-tested: pod install is blocked by local ios/Pods ReactNativeDependencies cache mismatch against RN 0.85.3; EAS/APK/IPA binary-size measurement not run.
The main tab bar was using the same large bottom clearance reserved for app-owned bottom sheets. Keep sheets safely above system navigation, but let tabs use the smaller Android system clearance. Constraint: No new native inset dependency for this small Android-only spacing fix. Rejected: Add safe-area/native-insets package | unnecessary until device variance proves fixed clearance is not enough. Confidence: high Scope-risk: narrow Directive: If this still varies by Android gesture/3-button mode, add a native WindowInsets bridge or safe-area-context in a separate issue. Tested: npm run test -- src/app/appLayoutMetrics.test.ts; npm run typecheck; npm run lint; npm run test; npm run build:android; git diff --check
Constraint: Samsung physical-device capture showed Android already ends the app window above the three-button navigation bar, so app-added bottom clearance was double spacing. Rejected: Keep a fixed 24dp Android tab clearance | it still left the tabs visibly floating above the system bar. Confidence: high Scope-risk: narrow Directive: Do not re-add Android bottom-tab clearance unless testing on a device mode where the app actually draws behind the system bar. Tested: npm run test -- src/app/appLayoutMetrics.test.ts; npm run typecheck; gradle arm64 release build; adb install and screenshot on SM_N981N. Not-tested: iOS physical-device layout.
Only draw the map route line when the server sends road-following geometry, while keeping numbered stop markers visible for preview orientation. Constraint: The current mock/server geometry can be only depot/stop vertices, which renders as misleading straight-line routing. Rejected: Render every routeGeometry as a route line | it makes non-road geometry look like real navigation. Rejected: GeoJSON symbol markers | MapLibre glyph/layer behavior hid markers on the target Android device. Confidence: high Scope-risk: narrow Directive: Server must provide dense road-following geometry before the app shows a route line. Tested: npm run test -- src/app/routeMapGeoJson.test.ts src/app/routeSessionBehavior.test.ts; npm run typecheck; Android release build and adb install. Not-tested: User-owned visual validation of final numbered-marker screen.
…-tabs Lower Android bottom tabs
…-size Shrink driver app assets and unused scanner code
Keep map preview markers while hiding fake route lines
Constraint: Existing Shopify invitation flow stays administrator-managed; no SMS provider or automated Shopify signup request. Rejected: Phone-only route lookup | cannot authenticate an existing account on a new session Confidence: high Scope-risk: broad Directive: Keep account bearer and route-scoped bearer separate; never persist PIN or invite code. Tested: 241 workspace tests, typecheck, lint, native preflight, Android/iOS export, Android APK/AAB build, and SM-N981N physical smoke. Not-tested: Real invite registration/login because Shopify invitation creation is user-managed; Play and iOS production signing.
e4268e4 to
2244023
Compare
Constraint: Stay within Expo SDK 56 compatible patch releases and keep the existing runtime architecture. Rejected: Disable audit or Expo alignment gates | would hide known dependency drift from release verification Confidence: high Scope-risk: narrow Directive: Re-run npm audit and expo install --check whenever the SDK 56 lockfile changes. Tested: npm ci; 241 tests; typecheck; lint; native preflight; Android/iOS export; npm audit with zero vulnerabilities; Expo alignment; Android APK/AAB build; SM-N981N install and launch smoke. Not-tested: Play and iOS production signing remain owner-credentialed external gates.
|
CI follow-up: manual run 29316966941 passed workspace tests, lint, native preflight, evidence seed, and bundle export, then exposed transitive @babel/core/js-yaml audit findings. Commit d5621ca7c82a5a164f9698aa73bf7f273bcb05b6 applies npm non-breaking fixes and official Expo SDK 56 patch alignment. Local clean-install verification now reports 0 vulnerabilities and Dependencies are up to date. Final APK SHA-256: 172756f11eb924fa701b534361c4abd7c019002811cc87c6b01bd0496f5e2371. Final AAB SHA-256: 8896939d51aab8f473e8754cca98b6807efd058d735e362b9a8744a407c8d560. |
|
Final verification passed on head d5621ca7c82a5a164f9698aa73bf7f273bcb05b6: manual Driver App CI run 29317601515 completed successfully. Workspace tests, lint, native preflight, release evidence seed, Android/iOS export, npm audit, Expo dependency alignment, and whitespace checks all passed. Shopify signup/invitation creation remains explicitly user-managed and was not requested or sent. |
CLEVER PR review completion
변경 내용
Shopify 가입/초대 요청 제외
Shopify 가입/초대 생성은 사용자/스토어 관리자가 직접 수행한다. 앱, 서버 변경, agent 자동화는 Shopify 가입/초대 요청을 생성하거나 전송하지 않는다. 이번 작업에서도 해당 요청은 전혀 보내지 않았다.
서버 선행조건
PR Scope Grouping Gate
검증
Concurrent Work Gate
PR 검토 에이전트 종료 조건
Context/wiki completion
Linked issue close evidence