SailfishOS build shows blank white screen — Expo Router cannot run from file:// URLs #6
Open
opened 2026-09-24 09:39:45 +02:00 by hermes
·
2 comments
No Branch/Tag specified
fork_main
merge/upstream-split2
main
epic/multica-issues
mobile-android-v0.0.2020
v1.4.197-fork.106c133f12
mobile-android-v0.0.2017
v1.4.197-fork.e70577e42c
mobile-android-v0.0.2016
v1.4.197-fork.f8f0f3b15b
mobile-android-v0.0.2015
v1.4.197-fork.d56b487dc1
mobile-android-v0.0.2014
v1.4.197-fork.6c4799beb8
mobile-android-v0.0.2013
v1.4.197-fork.c1a9e9a252
mobile-android-v0.0.2002
v1.4.178-rc.2-fork.5a4bfee641
mobile-android-v0.0.2001
v1.4.178-rc.2-fork.ace0288c09
v1.4.178-rc.2-fork.693c7628f6
v1.4.178-rc.2-fork.ce9b5347a6
v1.4.178-rc.2-fork.43ae5731ef
v1.4.178-rc.2-fork.40a468c8e7
v1.4.178-rc.2-fork.8b0bedaff0
v1.4.178-rc.2-fork.84ce595582
v1.4.178-rc.2-fork.a89a45a44a
v1.4.178-rc.2-fork.b86c888a64
v1.4.178-rc.2-fork.48a2aee821
v1.4.169-rc.0-fork.6e4bea8a91
v1.4.169-rc.0-fork.1fe68d8d6f
v1.4.169-rc.0-fork.430e1e1fed
v1.4.169-rc.0-fork.a9420037a8
mobile-android-v0.0.37
nix-1.4.153-rc.3-gcp-epic-2
nix-1.4.153-rc.3-gcp-epic-1
nix-1.4.144-rc.4-advanced-sc-4
nix-1.4.144-rc.4-advanced-sc-3
nix-1.4.144-rc.4-advanced-sc-2
nix-1.4.144-rc.4-advanced-sc
nix-1.4.144-rc.4-picker
nix-1.4.144-rc.4
v1.4.103-rc.2
v1.4.103-rc.1
v1.4.103-rc.0
v1.4.102
v1.4.102-rc.1
v1.4.102-rc.0
v1.4.101
v1.4.100
v1.4.98-rc.10
v1.4.98-rc.9
v1.4.99
v1.4.98-rc.8
v1.4.98-rc.7
v1.4.98-rc.6
v1.4.98-rc.5
v1.4.98-rc.4
v1.4.98-rc.3
v1.4.98-rc.2
v1.4.98
v1.4.98-rc.1
v1.4.98-rc.0
v1.4.97
v1.4.96-rc.2
v1.4.96-rc.1
v1.4.97-rc.0
mobile-android-v0.0.16
v1.4.96
v1.4.96-rc.0
v1.4.95
v1.4.95-rc.0
v1.4.94
v1.4.94-rc.2
v1.4.94-rc.1
v1.4.94-rc.0
v1.4.93
v1.4.92
v1.4.92-rc.1
v1.4.92-rc.0
mobile-android-v0.0.15
v1.4.91
v1.4.91-rc.0
v1.4.90
v1.4.90-rc.3
v1.4.90-rc.2
v1.4.90-rc.1
mobile-ios-v0.0.15
v1.4.90-rc.0
v1.4.89
v1.4.89-rc.2
v1.4.89-rc.1
v1.4.89-rc.0
v1.4.88
v1.4.87
v1.4.86
v1.4.85
v1.4.84
v1.4.83
v1.4.82
v1.4.81-rc.6
v1.4.81
v1.4.81-rc.5
v1.4.81-rc.4
v1.4.81-rc.3
v1.4.81-rc.2
v1.4.81-rc.1
v1.4.81-rc.0
v1.4.80
v1.4.80-rc.3
v1.4.80-rc.2
v1.4.80-rc.1
v1.4.80-rc.0
v1.4.79
v1.4.78-rc.6
pr-5674-evidence-1781757132
pr-5674-closeup-1781757176
v1.4.78-rc.5
v1.4.78
v1.4.78-rc.4
v1.4.78-rc.3
v1.4.78-rc.2
v1.4.78-rc.1
v1.4.78-rc.0
v1.4.77
v1.4.76
v1.4.75
v1.4.74
pr-5559-screenshots
v1.4.74-rc.0
v1.4.73
mobile-android-v0.0.14
v1.4.73-rc.3
v1.4.73-rc.2
v1.4.73-rc.1
v1.4.73-rc.0
v1.4.72
v1.4.72-rc.3
v1.4.72-rc.2
v1.4.72-rc.1
v1.4.72-rc.0
pr-5434-nim-highlight-evidence
v1.4.71
v1.4.71-rc.2
v1.4.71-rc.1
v1.4.71-rc.0
v1.4.70
v1.4.70-rc.1
v1.4.70-rc.0
v1.4.69
v1.4.68
v1.4.67
v1.4.67-rc.0
v1.4.66
v1.4.66-rc.2
v1.4.66-rc.1
v1.4.66-rc.0
v1.4.65
v1.4.65-rc.3
v1.4.65-rc.2
mobile-v0.0.13
v1.4.65-rc.1
v1.4.65-rc.0
v1.4.64
v1.4.64-rc.2
v1.4.64-rc.1
v1.4.64-rc.0
v1.4.63
v1.4.62
v1.4.61
v1.4.61-rc.2
v1.4.61-rc.1
v1.4.61-rc.0
v1.4.60
v1.4.60-rc.0
v1.4.59
v1.4.59-rc.1
v1.4.59-rc.0
v1.4.58
v1.4.57
v1.4.56
v1.4.55
v1.4.55-rc.0
v1.4.54
v1.4.54-rc.1
_gh-attach-assets
v1.4.54-rc.0
v1.4.53
v1.4.53-rc.1
v1.4.53-rc.0
v1.4.52
v1.4.52-rc.2
v1.4.52-rc.1
v1.4.52-rc.0
v1.4.51
v1.4.51-rc.10
v1.4.51-rc.9
v1.4.51-rc.8
v1.4.51-rc.7
v1.4.51-rc.6
v1.4.51-rc.5
v1.4.51-rc.4
v1.4.51-rc.3
v1.4.51-rc.2
v1.4.51-rc.1
v1.4.51-rc.0
v1.4.50
v1.4.49
v1.4.49-rc.2
v1.4.49-rc.1
v1.4.49-rc.0
v1.4.48
v1.4.47
v1.4.47-rc.1
v1.4.47-rc.0
mobile-v0.0.12
v1.4.46
v1.4.46-rc.0
v1.4.45
v1.4.43-rc.0
v1.4.42
v1.4.42-rc.8
v1.4.42-rc.7
v1.4.42-rc.6
v1.4.44
v1.4.42-rc.5
v1.4.42-rc.4
v1.4.42-rc.3
v1.4.42-rc.2
v1.4.42-rc.1
v1.4.42-rc.0
v1.4.41
v1.4.41-rc.0
mobile-v0.0.11
v1.4.40
v1.4.40-rc.1
v1.4.40-rc.0
v1.4.39
v1.4.39-rc.1
v1.4.39-rc.0
v1.4.38
v1.4.37
v1.4.36
v1.4.36-rc.16
v1.4.36-rc.15
v1.4.36-rc.14
v1.4.36-rc.13
v1.4.36-rc.12
v1.4.36-rc.11
v1.4.36-rc.10
v1.4.36-rc.9
v1.4.36-rc.8
v1.4.36-rc.7
v1.4.36-rc.6
v1.4.36-rc.5
v1.4.36-rc.4
v1.4.36-rc.3
v1.4.36-rc.2
v1.4.36-rc.1
v1.4.36-rc.0
v1.4.35
v1.4.35-rc.1
v1.4.35-rc.0
v1.4.34
mobile-v0.0.10
v1.4.33
v1.4.33-rc.2
v1.4.33-rc.1
v1.4.33-rc.0
v1.4.32
v1.4.31
v1.4.31-rc.3
v1.4.31-rc.2
v1.4.31-rc.1
v1.4.31-rc.0
v1.4.30
v1.4.30-rc.1
v1.4.30-rc.0
v1.4.29
v1.4.29-rc.0
v1.4.28
v1.4.28-rc.7
v1.4.28-rc.6
v1.4.28-rc.5
v1.4.28-rc.4
v1.4.28-rc.3
v1.4.28-rc.2
v1.4.28-rc.1
v1.4.28-rc.0
v1.4.27
v1.4.27-rc.1
v1.4.27-rc.0
v1.4.26
v1.4.25
v1.4.24
v1.4.24-rc.0
v1.4.23
v1.4.23-rc.3
v1.4.23-rc.2
v1.4.23-rc.1
v1.4.23-rc.0
v1.4.22
mobile-v0.0.9
v1.4.21
v1.4.21-rc.2
v1.4.21-rc.1
v1.4.21-rc.0
v1.4.20
v1.4.20-rc.0
v1.4.19
v1.4.18
v1.4.18-rc.6
v1.4.18-rc.5
v1.4.18-rc.4
v1.4.18-rc.3
v1.4.18-rc.2
v1.4.18-rc.1
v1.4.18-rc.0
v1.4.17
v1.4.16
v1.4.16-rc.0
v1.4.15
v1.4.14
v1.4.14-rc.0
v1.4.13
v1.4.13-rc.2
v1.4.13-rc.1
v1.4.13-rc.0
v1.4.12
v1.4.12-rc.0
v1.4.11
v1.4.11-rc.0
v1.4.10
v1.4.10-rc.3
v1.4.10-rc.2
v1.4.10-rc.1
v1.4.10-rc.0
v1.4.9
v1.4.9-rc.1
v1.4.9-rc.0
v1.4.8
v1.4.8-rc.0
v1.4.7-rc.2
v1.4.7
v1.4.7-rc.1
v1.4.7-rc.0
v1.4.6
v1.4.5
mobile-v0.0.8
v1.4.5-rc.4
v1.4.5-rc.3
v1.4.5-rc.2
v1.4.5-rc.1
v1.4.5-rc.0
v1.4.4
v1.4.4-rc.0
v1.4.3
v1.4.3-rc.3
v1.4.3-rc.2
v1.4.3-rc.1
v1.4.3-rc.0
v1.4.2
v1.4.2-rc.10
v1.4.2-rc.9
v1.4.2-rc.8
v1.4.2-rc.7
v1.4.2-rc.6
v1.4.2-rc.5
v1.4.2-rc.4
v1.4.2-rc.3
v1.4.2-rc.2
v1.4.2-rc.1
v1.4.2-rc.0
v1.4.1
v1.4.1-rc.5
v1.4.1-rc.4
v1.4.1-rc.3
v1.4.1-rc.2
v1.4.1-rc.1
v1.4.1-rc.0
v1.4.0
v1.3.52-rc.3
v1.3.52-rc.2
v1.3.52-rc.1
v1.3.52-rc.0
v1.3.51
v1.3.51-rc.8
v1.3.51-rc.7
v1.3.51-rc.6
v1.3.51-rc.5
v1.3.51-rc.4
v1.3.51-rc.3
mobile-v0.0.7
v1.3.51-rc.2
v1.3.51-rc.1
v1.3.51-rc.0
v1.3.50
v1.3.50-rc.1
v1.3.50-rc.0
v1.3.49
v1.3.49-rc.2
v1.3.49-rc.1
v1.3.49-rc.0
v1.3.48
v1.3.48-rc.3
v1.3.48-rc.2
v1.3.48-rc.1
v1.3.48-rc.0
v1.3.47
v1.3.47-rc.0
v1.3.46
v1.3.46-rc.8
v1.3.46-rc.7
v1.3.46-rc.6
v1.3.46-rc.5
v1.3.46-rc.4
v1.3.46-rc.3
v1.3.46-rc.2
v1.3.46-rc.1
v1.3.46-rc.0
v1.3.45
v1.3.44
v1.3.43
v1.3.43-rc.1
v1.3.43-rc.0
v1.3.42
v1.3.42-rc.1
v1.3.42-rc.0
v1.3.41
mobile-v0.0.6
v1.3.41-rc.0
v1.3.40
v1.3.40-rc.0
v1.3.39
v1.3.38
v1.3.38-rc.3
v1.3.38-rc.2
v1.3.38-rc.1
v1.3.38-rc.0
mobile-v0.0.5
v1.3.37-rc.4
v1.3.37
v1.3.37-rc.3
v1.3.37-rc.2
v1.3.37-rc.1
v1.3.37-rc.0
v1.3.36
v1.3.36-rc.0
v1.3.35
mobile-v0.0.3
v1.3.35-rc.7
v1.3.35-rc.6
v1.3.35-rc.5
v1.3.35-rc.4
v1.3.35-rc.3
v1.3.35-rc.2
v1.3.35-rc.1
mobile-v0.0.2
v1.3.35-rc.0
v1.3.34
v1.3.34-rc.1
v1.3.34-rc.0
v1.3.33
v0.0.1
v1.3.33-rc.3
mobile-v0.0.1
v1.3.33-rc.2
v1.3.33-rc.1
v1.3.33-rc.0
v1.3.32
v1.3.32-rc.0
v1.3.31
v1.3.31-rc.1
v1.3.31-rc.0
v1.3.30
v1.3.30-rc.1
v1.3.30-rc.0
v1.3.29
v1.3.29-rc.1
v1.3.29-rc.0
v1.3.28
v1.3.28-rc.0
v1.3.27
v1.3.26-rc.4
v1.3.26-rc.3
v1.3.26
v1.3.26-rc.2
v1.3.26-rc.1
v1.3.26-rc.0
v1.3.25
v1.3.25-rc.15
v1.3.25-rc.14
v1.3.25-rc.13
v1.3.25-rc.12
v1.3.25-rc.11
v1.3.25-rc.10
v1.3.25-rc.9
v1.3.25-rc.8
v1.3.25-rc.7
v1.3.25-rc.6
v1.3.25-rc.5
v1.3.25-rc.4
v1.3.25-rc.3
v1.3.25-rc.2
v1.3.25-rc.1
v1.3.25-rc.0
v1.3.24
v1.3.24-rc.3
v1.3.24-rc.2
v1.3.24-rc.1
v1.3.24-rc.0
v1.3.23
v1.3.23-rc.2
v1.3.23-rc.1
v1.3.23-rc.0
v1.3.22
v1.3.22-rc.6
v1.3.22-rc.5
v1.3.22-rc.4
v1.3.22-rc.3
v1.3.1-rc.4
v1.3.1-rc.3
v1.3.22-rc.2
v1.3.22-rc.1
v1.3.22-rc.0
v1.3.21-rc.6
v1.3.21-rc.5
v1.3.21
v1.3.21-rc.4
v1.3.21-rc.3
v1.3.21-rc.2
v1.3.21-rc.1
v1.3.21-rc.0
v1.3.20
v1.3.19-rc.13
v1.3.19-rc.12
v1.3.19-rc.11
v1.3.19-rc.10
v1.3.19-rc.9
v1.3.19-rc.8
v1.3.19-rc.7
v1.3.19
v1.3.19-rc.6
v1.3.19-rc.5
v1.3.19-rc.4
v1.3.19-rc.3
v1.3.19-rc.2
v1.3.19-rc.1
v1.3.19-rc.0
v1.3.18
v1.3.17
v1.3.17-rc.5
v1.3.17-rc.4
v1.3.17-rc.3
v1.3.17-rc.2
v1.3.17-rc.1
v1.3.17-rc.0
v1.3.16
v1.3.15
v1.3.14
v1.3.14-rc.1
v1.3.14-rc.0
v1.3.13
v1.3.12-rc.4
v1.3.12-rc.3
v1.3.12-rc.2
v1.3.12
v1.3.12-rc.1
v1.3.12-rc.0
v1.3.11
v1.3.10
v1.3.10-rc.1
v1.3.10-rc.0
v1.3.9
v1.3.8-rc.4
v1.3.8-rc.3
v1.3.8
v1.3.8-rc.2
v1.3.8-rc.1
v1.3.8-rc.0
v1.3.7
v1.3.7-rc.2
v1.3.7-rc.1
v1.3.7-rc.0
v1.3.6
v1.3.6-rc.1
v1.3.6-rc.0
v1.3.5
v1.3.5-rc.2
v1.3.5-rc.1
v1.3.5-rc.0
v1.3.4
v1.3.4-rc.3
v1.3.4-rc.2
v1.3.4-rc.1
v1.3.4-rc.0
v1.3.3
v1.3.3-rc.2
v1.3.3-rc.1
v1.3.3-rc.0
v1.3.2-rc.4
v1.3.2
v1.3.2-rc.3
v1.3.2-rc.2
v1.3.2-rc.1
v1.3.2-rc.0
v1.3.1
v1.3.1-rc.2
v1.3.1-rc.1
v1.3.1-rc.0
v1.3.0
v1.2.3-rc.10
v1.2.3-rc.9
v1.2.3-rc.8
v1.2.3-rc.7
v1.2.3-rc.6
v1.2.3-rc.5
v1.2.3-rc.4
v1.2.3-rc.3
v1.2.3-rc.2
v1.2.3-rc.1
v1.2.3-rc.0
v1.2.2
v1.2.2-rc.3
v1.2.2-rc.2
v1.2.2-rc.1
v1.2.2-rc.0
v1.2.1
v1.2.0
v1.1.33-rc.4
v1.1.33-rc.3
v1.1.33
v1.1.33-rc.2
v1.1.33-rc.1
v1.1.33-rc.0
v1.1.32
v1.1.31
v1.1.30
v1.1.29
v1.1.28
v1.1.28-rc.1
v1.1.28-rc.0
v1.1.27
v1.1.27-rc.0
v1.1.26
v1.1.26-rc.0
v1.1.25
v1.1.24
v1.1.23-rc.2
v1.1.23-rc.1
v1.1.23-rc.0
v1.1.23
v1.1.22
v1.1.21
v1.1.20
v1.1.19
v1.1.18
v1.1.17
v1.1.17-rc.0
v1.1.16
v1.1.15
v1.1.14
v1.1.13
v1.1.12
v1.1.11
v1.1.11-rc.0
v1.1.10
v1.1.10-rc.0
v1.1.9
v1.1.8
v1.1.8-rc.0
v1.1.7
v1.1.6
v1.1.6-rc.0
v1.1.5
v1.1.4
v1.1.3
v1.1.2
v1.1.1-rc.2
v1.1.1
v1.1.1-rc.1
v1.1.1-rc.0
v1.1.0
v1.0.100
v1.0.99
v1.0.98
v1.0.97
v1.0.97-rc.0
v1.0.96
v1.0.95
v1.0.95-rc.0
v1.0.94
v1.0.94-rc.2
v1.0.94-rc.1
v1.0.94-rc.0
v1.0.93
v1.0.92
v1.0.92-rc.3
v1.0.92-rc.2
v1.0.92-rc.0
v1.0.91
v1.0.90
v1.0.89
v1.0.88
v1.0.87
v1.0.86
v1.0.85
v1.0.84
v1.0.83
v1.0.82
v1.0.81
v1.0.80
v1.0.79
v1.0.78
v1.0.77
v1.0.76
v1.0.75
v1.0.74
v1.0.73
v1.0.72
v1.0.71
v1.0.70
v1.0.69
v1.0.68
v1.0.67
v1.0.66
v1.0.65
v1.0.64
v1.0.63
v1.0.62
v1.0.61
v1.0.60
v1.0.59
v1.0.57
v1.0.56
v1.0.55
v1.0.54
v1.0.53
v1.0.52
v1.0.51
v1.0.50
v1.0.49
v1.0.48
v1.0.47
v1.0.46
v1.0.45
v1.0.44
v1.0.43
v1.0.42
v1.0.41
v1.0.40
v1.0.39
v1.0.38
v1.0.37
v1.0.36
v1.0.35
v1.0.34
v1.0.33
v1.0.32
v1.0.31
v1.0.30
v1.0.29
v1.0.28
v1.0.27
v1.0.26
v1.0.25
v1.0.24
v1.0.23
v1.0.22
v1.0.21
v1.0.20
v1.0.19
v1.0.18
v1.0.17
v1.0.16
v1.0.15
v1.0.14
v1.0.13
v1.0.12
v1.0.11
v1.0.10
v1.0.9
v1.0.8
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3
v1.0.2
v1.0.1
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
donach/orca#6
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
The published SailfishOS build (RPM
harbour-orca, e.g. version 0.0.2014) opens a blank white window on the device. Reproduced and root-caused on a real SailfishOS phone (Gecko 115 WebView viasailfish-qml), and confirmed with jsdom reproductions of the shipped bundle.Root cause
mobile/sailfish/qml/harbour-orca.qmlloads the web bundle via afile://URL:which resolves to
file:///usr/share/harbour-orca/www/index.html?platform=sailfish.The bundle is an Expo Router web export. On startup Expo Router calls
getInitialURL()(returnswindow.location.href) and computes the initial route from the URL pathname (extractExpoPathFromURL→getStateFromPath).file://URL the pathname is/usr/share/harbour-orca/www/index.html— an absolute filesystem path that matches no route in the app. Expo Router therefore renders its built-inUnmatchedplaceholder:<div class="expo-router-unmatched">— visually a blank white screen. (Verified: loading the shipped 12 MB bundle overfile://in jsdom renders exactly this placeholder with no app UI; the?platform=sailfishquery does not participate in route matching.)file://. The obvious fix —window.history.replaceState(null, '', '/')inindex.html— throws aSecurityErrorin Gecko (Firefox ESR 115, which is what SailfishOS WebViews are): history navigation is blocked onfile://URLs, for bothreplaceStateandpushState. Verified on-device viasailfish-qml -e.http://127.0.0.1:PORT/?platform=sailfish(e.g.python3 -m http.serveron/usr/share/harbour-orca/www), the router resolves the/path, the initial route matches, and the full Orca UI renders (verified via jsdom: ~8 KB of real UI: "Orca", "Connect your desktop", "Pair Desktop"…). Theplatform=sailfishquery parameter is preserved over HTTP and still selects the Sailfish code paths (isSailfishWeb()), so HTTP is not a downgrade versusfile://.Evidence matrix (jsdom, pristine 12 MB bundle, no patches)
file:///usr/share/harbour-orca/www/index.html?platform=sailfishhttp://127.0.0.1:8484/index.html?platform=sailfish/index.htmlis not a routehttp://127.0.0.1:8484/?platform=sailfishSecondary issue found
The bundle uses
Array.prototype.toReversed()in module 3272 (thediagnoseConnectioncode path).toReversedexists only from Firefox 118 / V8 105+; Gecko 115 (SailfishOS) will throwTypeError: ... toReversed is not a functionwhen the connection-diagnostics flow runs. Worth polyfilling or gating.Recommended fix
The bundle is fine; the problem is entirely in the SFOS wrapper/packaging. Two viable options:
Option A (minimal, no re-architecture): local HTTP server launched by the app.
/usr/bin/harbour-orca-launch, POSIX sh):python3 -m http.server <port> --bind 127.0.0.1in/usr/share/harbour-orca/www(daemonized withsetsid, log to~/.local/share/),http://127.0.0.1:<port>/?platform=sailfishinsailfish-browser(or better, launchsailfish-qml harbour-orcaand point the WebView at that URL)..spec: install the script in%install, keep everything else identical (still noarch).Option B (keeps the native window): QML wrapper starts the server itself.
%build) toharbour-orca.qmlthat starts the same local HTTP server on startup and set the WebViewurltohttp://127.0.0.1:<port>/?platform=sailfish; kill the process inComponent.destruction. This keeps the app inside the Sailfish window (better integration: notifications, camera/getUserMedia, single app lifecycle) at the cost of the "no compiled code / noarch" simplification.A one-line temporary workaround that already works (until this is fixed) is to serve the installed
www/directory over local HTTP and openhttp://127.0.0.1:<port>/?platform=sailfishin the browser.Long-term: consider a native/QML phone client, or upstreaming
file://support to Expo Router.Fix in progress on fork_main (uncommitted): native-window loopback approach. harbour-orca-launch starts python3 -m http.server on fixed 127.0.0.1:8484 then execs sailfish-qml; QML points at http://127.0.0.1:8484/?platform=sailfish, external links still escape to Browser. sailfish:bundle now inlines a Gecko-115 toReversed() shim as the first <head> script. Verified locally: real staged bundle serves 200 at /?platform=sailfish with shim before bundle code, noarch RPM builds with /usr/bin/harbour-orca-launch (755) + python3-base Requires, mobile suite 4677 green. Caught one packaging bug already: nixpkgs rpm points _bindir at the store, fixed in CI with --define _bindir /usr/bin. Still needs: push + CI sailfish job green + on-device proof.
CI confirms the fix path: run #6286 mobile-sailfish job success, RPM harbour-orca-0.0.2015-1.noarch.rpm built with /usr/bin/harbour-orca-launch (755) in BUILDROOT. Remaining step is on-device proof: install, launch, confirm the Orca UI renders from the loopback URL.