{"data":{"base_url":"https://borrowmyshit.org","blocked_items":[{"id":"RM-016","label":"Native store packaging/release operations","needed":"Apple/Google developer account ownership and release cadence."},{"id":"RM-017","label":"iOS universal-link domain association rollout","needed":"Apple team IDs, bundle IDs, and deployment ownership."},{"id":"RM-005","label":"Native push-notification production rollout","needed":"APNs/FCM credentials and app IDs."}],"core_endpoints":{"app_readiness":"/api/v1/mobile/app-readiness","camera_quality_check":"/api/v1/mobile/camera-quality-check","capabilities_ios":"/api/v1/capabilities?profile=ios","deep_link_resolver":"/api/v1/mobile/deep-link/resolve","field_audit_checkin":"/api/v1/mobile/field-audit/checkin","ios_bootstrap_bundle":"/api/v1/mobile/ios/bootstrap-bundle","ios_bootstrap_signed":"/api/v1/mobile/ios/bootstrap-bundle/signed","ios_universal_link_diagnostics":"/api/v1/public/ios/universal-links/diagnostics","manifest":"/manifest.webmanifest","marketplace_local_demand":"/api/v1/marketplace/local-demand","marketplace_map":"/api/v1/marketplace/map","offline_conflict_resolve":"/api/v1/mobile/offline-conflicts/<operation_uuid>/resolve","offline_queue":"/api/v1/mobile/offline-queue","offline_queue_action":"/api/v1/mobile/offline-queue/<operation_uuid>/action","openapi":"/api/v1/openapi","push_inbox":"/api/v1/mobile/push-inbox","service_worker":"/service-worker.js","web_open_resolver":"/app/open","widget_summary":"/api/v1/mobile/widget/summary"},"device_profiles":[{"layout_expectation":"single_column_touch_first","primary_contracts":["/api/v1/mobile/deep-link/resolve","/api/v1/mobile/ios/bootstrap-bundle","/api/v1/mobile/ios/bootstrap-bundle/signed","/api/v1/mobile/offline-queue","/api/v1/mobile/push-inbox","/api/v1/marketplace/local-demand","/api/v1/marketplace/map"],"priority":1,"profile":"iphone","status":"contract_ready","wrapper_path":"ios_first"},{"layout_expectation":"tablet_two_column_where_space_allows","primary_contracts":["/api/v1/mobile/deep-link/resolve","/api/v1/mobile/ios/bootstrap-bundle","/api/v1/mobile/widget/summary","/api/v1/mobile/field-audit/checkin","/api/v1/marketplace/local-demand","/api/v1/marketplace/map"],"priority":2,"profile":"ipad","status":"contract_ready","wrapper_path":"ios_tablet"},{"layout_expectation":"same_responsive_web_surface","primary_contracts":["/manifest.webmanifest","/service-worker.js","/api/v1/mobile/deep-link/resolve"],"priority":3,"profile":"android","status":"later_native_wrapper","wrapper_path":"pwa_now_android_later"},{"layout_expectation":"tablet_viewport_sweep_required","primary_contracts":["/manifest.webmanifest","/service-worker.js","/api/v1/mobile/app-readiness"],"priority":4,"profile":"tablet","status":"pwa_ready","wrapper_path":"browser_or_future_android_tablet"}],"generated_at":"2026-07-22T18:49:16.572919+00:00","launch_sequence":["pwa","ios","ipad","android"],"manifest":{"display":"standalone","orientation":"any","path":"/manifest.webmanifest","tablet_friendly":true},"native_store_status":"blocked_until_operator_approval","offline_conflict_replay_acceptance":{"acceptance_version":"rms-mobile-offline-conflict-replay-v1","conflict_replay_steps":[{"expected":"Queue item/photo/check-in draft locally and mirror it to offline queue when authenticated.","step":"capture"},{"expected":"Move operation through in-progress or failed without hiding retry/cancel controls.","step":"sync_attempt"},{"expected":"Mark conflict_detected or requires_manual_merge and expose server/local choices.","step":"detect_conflict"},{"expected":"Persist resolution strategy and field choices on the operation payload.","step":"resolve"},{"expected":"Return keep-local and merge-fields resolutions to pending for the next sync attempt.","step":"replay"}],"endpoints":{"action":"/api/v1/mobile/offline-queue/<operation_uuid>/action","list_or_upsert":"/api/v1/mobile/offline-queue","resolve":"/api/v1/mobile/offline-conflicts/<operation_uuid>/resolve"},"phone_tablet_requirements":["List pending, failed, cancelled, resolved, and conflict operations with status counts.","Let users retry, cancel, and reorder queued operations before sync.","Show conflict details before resolving; never auto-discard local edits silently.","Support keep-local, keep-remote, merge-fields, and discard-local resolution strategies.","After keep-local or merge-fields, return the operation to pending for replay."],"queue_actions":["cancel","mark_conflict","mark_failed","reorder","retry"],"queue_statuses":["cancelled","conflict_detected","failed","in_progress","pending","requires_manual_merge","resolved"],"resolution_strategies":["discard_local","keep_local","keep_remote","merge_fields"],"status":"contract_ready_native_ui_pending"},"operator_notes":["Do not claim App Store or Google Play availability until RM-016 is unblocked.","Use browser/PWA install path for phones and tablets today.","Use iOS bootstrap and deep-link contracts for the first native wrapper."],"pwa_status":"production_path_now","readiness_version":"rms-mobile-app-readiness-v1","tablet_layout_audit":{"acceptance":["No horizontal overflow at iPad landscape, portrait, and Split View widths.","Primary navigation, filters, and row/card actions remain reachable by touch.","Dense owner workflows may use two columns on tablet but must collapse to one column on phone widths.","Authenticated tablet Playwright coverage remains the visual gate when auth state or smoke credentials are available."],"audit_version":"rms-tablet-layout-audit-v1","dense_owner_workflows":[{"must_keep_visible":["primary navigation","critical counters","next actions","create item"],"path":"/dashboard","phone_fallback":"single_column_touch_first","surface":"dashboard","tablet_layout":"two_column_summary_and_next_actions_where_space_allows"},{"must_keep_visible":["item status","owner actions","condition evidence","share or recovery links"],"path":"/items/<id>","phone_fallback":"stacked_summary_actions_evidence","surface":"item_detail","tablet_layout":"item_summary_beside_owner_actions_and_evidence"},{"must_keep_visible":["due status","messages","timeline","return or dispute actions"],"path":"/loans/<id>","phone_fallback":"stacked_loan_sections","surface":"loan_detail","tablet_layout":"timeline_or_messages_beside_return_actions"},{"must_keep_visible":["request filters","status badges","approve or reject actions","item preview"],"path":"/marketplace/requests","phone_fallback":"filters_then_rows","surface":"marketplace_requests","tablet_layout":"request_filters_beside_triage_rows"},{"must_keep_visible":["quick filters","severity","assignment","review actions"],"path":"/admin/feedback-tickets","phone_fallback":"stacked_filters_and_ticket_rows","surface":"feedback_admin","tablet_layout":"filters_metrics_and_ticket_rows_without_horizontal_overflow"}],"split_view_widths":["1024x768","834x1112","744x1133","507x768"],"status":"contract_ready_visual_followup_pending"},"validation_contracts":{"contract_version":"rms-mobile-validation-contract-v1","critical_smoke_guards":["tests/test_project_continuity_docs.py","tests/test_regression_subset_matrix.py","tests/test_sqlalchemy_query_get_contract.py","tests/test_sqlalchemy_get_or_404_contract.py","tests/test_a745_route_warning_cleanup.py"],"desktop_mobile_browser_smoke":{"script":"scripts/run_admin_playwright_smoke.sh","subset":"playwright-admin","viewports":["desktop","mobile"]},"guard_membership_contract":"tests/test_regression_subset_matrix.py::test_critical_smoke_guards_stay_in_full_and_bounded_lanes","mobile_checkpoint":{"scope":"PWA, deep-link, offline, tablet-readiness, and native-wrapper contract checks","script":"scripts/run_mobile_execution_checkpoint.sh"},"operator_gated_scheduled_lanes":["api-local-demand","playwright-nav-more","authenticated-tablet-smoke"],"recurring_smoke_lanes":["smoke","smoke-bounded","mobile"],"status":"actively_enforced"}},"ok":true}
