Specira sample artefact. Rendered from the governed default template on a fictional company. Names, figures and dates are illustrative.All artefacts →
SAMPLE
seeded demo data · specira.ai
Specira Mobile Platform Spec: Governed Template Rendering
Governed template rendering reference: Mobile Platform Spec default v2 (draft) definition d32b54b4…6981
Mobile Platform Spec · Project artifact SPECIRA

Mobile Platform Spec: Dispatch Modernization

Meridian Field Services: instructional example, not project evidence

Draft · watermark policy: draft_only template mobile_platform_spec v2 · pack: specira_default_delivery the screen inventory owns the list; this owns the delta
§1

Platform Targets

mandatory 1 decision1 evidence rule validators: platform_choice_cites_capability_and_evidence · minimum_os_versions_cite_device_share · distribution_model_cites_pipeline
Decision: cross-platform (React Native)

Why considered: the technician app is assignment lists, confirmations, and push receipt (standard CRUD-and-notification, no high-frame-rate graphics or deep platform-extension need); native would double the build for a four-screen app one team maintains; a PWA cannot receive background push reliably on the fleet's iOS devices. Who & how: E. Sandoval with the UX owner, weighed against the capability list July 17; the Airbnb React-Native retro reviewed as the cautionary case (its friction came from a large heterogeneous surface this small app does not have) (mobile platform[1]).

Minimum versions with device-share evidence: iOS 16 and Android 11 cover 96% of the technician fleet's actual devices (the MDM inventory, attached: device inventory[2]); "latest minus two" was rejected for evidence. Distribution: enterprise distribution, not the public stores; release cadence rides the pipeline's build without the public-review wait (deployment strategy[3]), cited.

§2

Native Capabilities

mandatory 1 decision1 evidence rule validators: every_capability_names_permission_and_denial_fallback · ios_android_divergence_stated_per_capability · permission_requests_are_contextual_with_preprompt
CapabilityPermissionDenial fallbackiOS / Android divergence
Location (arrival confirmation) when-in-use Manual "I've arrived" button, no auto-detection, explanation + Settings link; never a hard error iOS suppresses the dialog permanently after one denial (Settings is the only recovery); Android allows re-prompt until "don't ask again"
Notifications (assignment push) alert The in-app list still polls on open (rejected-to-polling[4]); a denied push degrades to poll, not silence iOS requires the explicit grant; Android 13+ now does too
Camera (proof-of-service, phase 2) camera Skip the photo; the assignment still completes Standard

Request timing: CONTEXTUAL: the location prompt fires on the first arrival confirmation with a soft pre-prompt explaining why, never at launch; a cold launch prompt burns the one iOS grant and converts far worse, the named anti-pattern.

§3

Offline Behavior

mandatory 1 decision1 evidence rule validators: offline_model_named_first_or_tolerant · sync_conflict_strategy_cites_data_model_concurrency · offline_mutations_queue_and_retry

The model is named, never left implicit for the first tunnel to reveal.

Model: OFFLINE-TOLERANT, not offline-first

Why: a technician in a basement or a rural gap must SEE their assignment list (read cache) and confirm arrival (a queued mutation), but must NOT create or reassign work offline (dispatch authority is the board's, and an offline reassignment would race the live state the realtime spec reconciles, reconciliation[4]); offline-first's local-write model would invite exactly that conflict.

Screen / actionOffline behavior
Assignment listReads from cache
Assignment detailCached
Arrival confirmationWrites offline, queued
Reassignment / overrideBLOCKED offline: a clear "requires connection" state

Sync & conflict: the queued confirmation replays on reconnect with an optimistic version check (concurrency[5]); if the assignment was reassigned away while offline (the race the blocking rule mostly prevents), the confirmation returns stale_version and the technician sees "this job was reassigned" (error registry[6], EC-03[7]). Mutations queue-and-retry with backoff, never a silent drop.

§4

Mobile Screen Deltas

mandatory 1 decision1 evidence rule validators: screen_deltas_cite_inventory_ids · touch_targets_meet_platform_minimums · contract_divergences_named_not_silent · realtime_poll_vs_push_decision_cited

The desktop list is the inventory (register[8]); this owns the divergence.

ScreenMobile treatment · rationale
SCR-001 dispatch board NOT on mobile: dispatching is a desk activity; technicians do not dispatch
SCR-002 assignment list Mobile primary: condensed thumb-zone list, secondary actions deferred behind a detail tap; touch targets at the 48dp Android minimum (the larger of the two for the cross-platform build); states cited (state machines[9])
SCR-003 intake NOT on mobile: intake is dispatcher-side
Arrival confirmation A mobile-ONLY screen, no desktop analogue; a mobile addition, not a delta

Gestures: pull-to-refresh on the list, swipe-to-confirm on an assignment (with a button fallback for the a11y contract, AT matrix[10]). Shared contracts: the mobile client consumes the same endpoints (endpoints[6]); the ONE named divergence: the list endpoint returns a trimmed payload for bandwidth (no position history), flagged here, not silently introduced. A one-to-one desktop port was flagged and rejected per screen; no shrunken board.

§5

Open Questions

mandatory1 decision
QuestionOwnerAnswer byBlocks
Does the phase-two proof-of-service photo need offline capture with deferred upload, or is it connection-required like reassignment (scopes the offline matrix's camera row)? Product owner with E. Sandoval At the phase-two scoping The camera capability's offline treatment only
Refs

References & Package Contents

In this export package

package [2] Device inventory: the MDM fleet report (the minimum-version evidence) ./mobile/device-inventory.pdf

In the Specira workspace

specira [1] Decision log: the mobile-platform decision app.specira.ai/projects/dispatch-modernization/artifacts/decision-log
specira [3] CI/CD pipeline: the deployment strategy the cadence rides app.specira.ai/projects/dispatch-modernization/artifacts/cicd-pipeline#deployment
specira [4] Real-time architecture: the technician-mobile poll decision, reconciliation app.specira.ai/projects/dispatch-modernization/artifacts/realtime-architecture
specira [5] Data model: the concurrency approach the sync cites app.specira.ai/projects/dispatch-modernization/artifacts/data-model#concurrency
specira [6] API contracts: the shared endpoints, the error registry app.specira.ai/projects/dispatch-modernization/artifacts/api-contracts
specira [7] Edge case analysis: EC-03 the reassigned-while-offline race app.specira.ai/projects/dispatch-modernization/artifacts/edge-case-analysis#ec-03
specira [8] Screen inventory: the desktop screen list (the delta's source) app.specira.ai/projects/dispatch-modernization/artifacts/screen-inventory
specira [9] Interaction specs: the mobile component states app.specira.ai/projects/dispatch-modernization/artifacts/interaction-specs
specira [10] Accessibility requirements: the AT matrix (the gesture fallback) app.specira.ai/projects/dispatch-modernization/artifacts/accessibility-requirements
Generated by Specira · template mobile_platform_spec v2 (draft) · pack specira_default_delivery lineage d32b54b4…6981 · page 1 of 4