@deeeed/metamask-harness 0.40.0 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/adapters/manifest.json +8 -0
- package/adapters/mobile/bridge-runtime/cdp-bridge.cjs +5 -4
- package/adapters/mobile/bridge-runtime/lib/target-discovery.cjs +24 -5
- package/adapters/mobile/metro-config.cjs +94 -0
- package/adapters/mobile/start-metro.sh +13 -1
- package/dist/commands/device-target.js +3 -0
- package/dist/commands/run-engine.js +4 -14
- package/dist/funding-execution-context.js +35 -28
- package/dist/heal-bounds.js +1 -0
- package/dist/live-adapter-contract.js +2 -1
- package/dist/mm-harness-cli.js +1 -1
- package/docs/RECIPES.md +25 -19
- package/library/actions/extension/perps/mutation-receipt.mjs +12 -8
- package/library/actions/extension/perps/select_activity_filter.mjs +1 -1
- package/library/actions/extension/perps/select_market_filter.mjs +1 -1
- package/library/actions/mobile/perps/capture_performance.mjs +2 -2
- package/library/actions/mobile/perps/performance-capture.mjs +375 -17
- package/library/actions/mobile/perps/perps.mjs +56 -10
- package/library/actions/mobile/platform/bridge.mjs +59 -1
- package/library/actions/mobile/wallet/ensure_unlocked.mjs +60 -26
- package/library/actions/mobile/wallet/import.mjs +2 -0
- package/library/actions/mobile/wallet/select_account.mjs +21 -2
- package/library/manifests/mobile.action-manifest.json +47 -6
- package/library/recipes/mobile/perps/performance.recipe.json +680 -26
- package/package.json +1 -1
- package/library/recipes/mobile/perps/performance.background-resume.recipe.json +0 -56
- package/library/recipes/mobile/perps/performance.cold-start.recipe.json +0 -56
- package/library/recipes/mobile/perps/performance.homepage.android-background-reconnect.recipe.json +0 -159
- package/library/recipes/mobile/perps/performance.homepage.android-background-short.recipe.json +0 -157
- package/library/recipes/mobile/perps/performance.homepage.android-cold-disk-cache.recipe.json +0 -165
- package/library/recipes/mobile/perps/performance.homepage.android-cold-no-cache.recipe.json +0 -139
- package/library/recipes/mobile/perps/performance.homepage.android-network-recovery.recipe.json +0 -149
- package/library/recipes/mobile/perps/performance.homepage.cold-position-sample.recipe.json +0 -120
- package/library/recipes/mobile/perps/performance.homepage.ios-background-reconnect.recipe.json +0 -111
- package/library/recipes/mobile/perps/performance.homepage.ios-background-short.recipe.json +0 -108
- package/library/recipes/mobile/perps/performance.homepage.ios-cold-disk-cache.recipe.json +0 -122
- package/library/recipes/mobile/perps/performance.homepage.ios-cold-no-cache.recipe.json +0 -95
- package/library/recipes/mobile/perps/performance.warm-start.recipe.json +0 -49
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "Android Homepage Perps cold start without cache proof",
|
|
4
|
-
"description": "Prepares a deterministic live order, clears only Perps persistent caches, cold-restarts the app, and validates first visible plus lifecycle-fresh content on the physical Android device.",
|
|
5
|
-
"workflow": {
|
|
6
|
-
"entry": "prepare-open-order",
|
|
7
|
-
"nodes": {
|
|
8
|
-
"prepare-open-order": {
|
|
9
|
-
"action": "metamask.perps.start_state",
|
|
10
|
-
"profile": "open_order_testnet",
|
|
11
|
-
"provider": "hyperliquid",
|
|
12
|
-
"network": "testnet",
|
|
13
|
-
"market": "ETH",
|
|
14
|
-
"page": "perps_home",
|
|
15
|
-
"side": "short",
|
|
16
|
-
"orders": {
|
|
17
|
-
"state": "open",
|
|
18
|
-
"mode": "matching",
|
|
19
|
-
"market": "ETH",
|
|
20
|
-
"side": "short",
|
|
21
|
-
"notional": 10,
|
|
22
|
-
"leverage": 2,
|
|
23
|
-
"timeout_ms": 90000
|
|
24
|
-
},
|
|
25
|
-
"positions": false,
|
|
26
|
-
"intent": "Prepare the deterministic exchange state before removing local caches",
|
|
27
|
-
"timeout_ms": 120000,
|
|
28
|
-
"next": "start-performance-capture"
|
|
29
|
-
},
|
|
30
|
-
"start-performance-capture": {
|
|
31
|
-
"action": "metamask.perps.capture_performance",
|
|
32
|
-
"phase": "start",
|
|
33
|
-
"intent": "Start the evidence window before cache removal and process restart",
|
|
34
|
-
"next": "clear-perps-caches"
|
|
35
|
-
},
|
|
36
|
-
"clear-perps-caches": {
|
|
37
|
-
"action": "metamask.perps.clear_performance_caches",
|
|
38
|
-
"intent": "Remove only Perps persisted market and user snapshots",
|
|
39
|
-
"next": "restart-app"
|
|
40
|
-
},
|
|
41
|
-
"restart-app": {
|
|
42
|
-
"action": "app.lifecycle",
|
|
43
|
-
"command": "restart",
|
|
44
|
-
"settle_ms": 15000,
|
|
45
|
-
"runtime_ready_timeout_ms": 60000,
|
|
46
|
-
"intent": "Cold-restart the selected Android app without deleting wallet state",
|
|
47
|
-
"next": "unlock-wallet"
|
|
48
|
-
},
|
|
49
|
-
"unlock-wallet": {
|
|
50
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
51
|
-
"target_timeout_ms": 90000,
|
|
52
|
-
"unlock_timeout_ms": 90000,
|
|
53
|
-
"intent": "Unlock the fixture wallet after the cold process launch",
|
|
54
|
-
"next": "open-wallet-home"
|
|
55
|
-
},
|
|
56
|
-
"open-wallet-home": {
|
|
57
|
-
"action": "ui.navigate",
|
|
58
|
-
"page": "home",
|
|
59
|
-
"intent": "Open Wallet Home after the no-cache cold launch",
|
|
60
|
-
"timeout_ms": 30000,
|
|
61
|
-
"next": "wait-section"
|
|
62
|
-
},
|
|
63
|
-
"wait-section": {
|
|
64
|
-
"action": "ui.wait_for",
|
|
65
|
-
"test_id": "homepage-perps-positions",
|
|
66
|
-
"expected": "present",
|
|
67
|
-
"intent": "Confirm the Perps Homepage section mounted after cold launch",
|
|
68
|
-
"timeout_ms": 30000,
|
|
69
|
-
"next": "show-content"
|
|
70
|
-
},
|
|
71
|
-
"show-content": {
|
|
72
|
-
"action": "ui.scroll",
|
|
73
|
-
"test_id": "homepage-perps-positions",
|
|
74
|
-
"scroll_into_view": true,
|
|
75
|
-
"animated": true,
|
|
76
|
-
"settle": true,
|
|
77
|
-
"intent": "Bring the Perps section and order into the physical viewport",
|
|
78
|
-
"timeout_ms": 30000,
|
|
79
|
-
"next": "wait-order"
|
|
80
|
-
},
|
|
81
|
-
"wait-order": {
|
|
82
|
-
"action": "ui.wait_for",
|
|
83
|
-
"text": "Limit short",
|
|
84
|
-
"expected": "visible",
|
|
85
|
-
"intent": "Require the fresh exchange order to be visible after cold launch",
|
|
86
|
-
"timeout_ms": 30000,
|
|
87
|
-
"next": "capture-after"
|
|
88
|
-
},
|
|
89
|
-
"capture-after": {
|
|
90
|
-
"action": "ui.screenshot",
|
|
91
|
-
"path": "screenshots/homepage-order-cold-no-cache.png",
|
|
92
|
-
"intent": "Preserve reviewer-visible cold-no-cache proof",
|
|
93
|
-
"next": "settle-frame"
|
|
94
|
-
},
|
|
95
|
-
"settle-frame": {
|
|
96
|
-
"action": "wait",
|
|
97
|
-
"duration_ms": 2500,
|
|
98
|
-
"intent": "Allow the fresh visible frame checkpoint to finish",
|
|
99
|
-
"next": "finish-performance-capture"
|
|
100
|
-
},
|
|
101
|
-
"finish-performance-capture": {
|
|
102
|
-
"action": "metamask.perps.capture_performance",
|
|
103
|
-
"phase": "end",
|
|
104
|
-
"required_stages": [
|
|
105
|
-
"viewport_demand",
|
|
106
|
-
"socket_received",
|
|
107
|
-
"react_commit",
|
|
108
|
-
"next_frame_checkpoint"
|
|
109
|
-
],
|
|
110
|
-
"required_lifecycles": ["cold_no_cache"],
|
|
111
|
-
"required_sources": ["fresh_socket"],
|
|
112
|
-
"required_fresh_content_variants": ["orders"],
|
|
113
|
-
"intent": "Validate the cold-no-cache lifecycle and fresh visible order cohort",
|
|
114
|
-
"next": "cleanup-order"
|
|
115
|
-
},
|
|
116
|
-
"cleanup-order": {
|
|
117
|
-
"action": "metamask.perps.teardown_state",
|
|
118
|
-
"provider": "hyperliquid",
|
|
119
|
-
"network": "testnet",
|
|
120
|
-
"market": "ETH",
|
|
121
|
-
"page": "home",
|
|
122
|
-
"positions": false,
|
|
123
|
-
"orders": {
|
|
124
|
-
"state": "none",
|
|
125
|
-
"mode": "matching",
|
|
126
|
-
"market": "ETH",
|
|
127
|
-
"timeout_ms": 60000
|
|
128
|
-
},
|
|
129
|
-
"intent": "Cancel the deterministic testnet order after evidence capture",
|
|
130
|
-
"timeout_ms": 90000,
|
|
131
|
-
"next": "done"
|
|
132
|
-
},
|
|
133
|
-
"done": {
|
|
134
|
-
"action": "end",
|
|
135
|
-
"status": "pass"
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
package/library/recipes/mobile/perps/performance.homepage.android-network-recovery.recipe.json
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "Android Homepage Perps network recovery visible performance proof",
|
|
4
|
-
"description": "Keeps a deterministic order visible on Wallet Home while the selected Android device goes offline and online, then validates resident-to-fresh recovery at the visible frame.",
|
|
5
|
-
"workflow": {
|
|
6
|
-
"entry": "prepare-open-order",
|
|
7
|
-
"nodes": {
|
|
8
|
-
"prepare-open-order": {
|
|
9
|
-
"action": "metamask.perps.start_state",
|
|
10
|
-
"profile": "open_order_testnet",
|
|
11
|
-
"provider": "hyperliquid",
|
|
12
|
-
"network": "testnet",
|
|
13
|
-
"market": "ETH",
|
|
14
|
-
"page": "perps_home",
|
|
15
|
-
"side": "short",
|
|
16
|
-
"orders": {
|
|
17
|
-
"state": "open",
|
|
18
|
-
"mode": "matching",
|
|
19
|
-
"market": "ETH",
|
|
20
|
-
"side": "short",
|
|
21
|
-
"notional": 10,
|
|
22
|
-
"leverage": 2,
|
|
23
|
-
"timeout_ms": 90000
|
|
24
|
-
},
|
|
25
|
-
"positions": false,
|
|
26
|
-
"intent": "Prepare a deterministic live order before network interruption",
|
|
27
|
-
"timeout_ms": 120000,
|
|
28
|
-
"next": "open-wallet-home"
|
|
29
|
-
},
|
|
30
|
-
"open-wallet-home": {
|
|
31
|
-
"action": "ui.navigate",
|
|
32
|
-
"page": "home",
|
|
33
|
-
"intent": "Open Wallet Home before interrupting network access",
|
|
34
|
-
"timeout_ms": 30000,
|
|
35
|
-
"next": "show-content"
|
|
36
|
-
},
|
|
37
|
-
"show-content": {
|
|
38
|
-
"action": "ui.scroll",
|
|
39
|
-
"test_id": "homepage-perps-positions",
|
|
40
|
-
"scroll_into_view": true,
|
|
41
|
-
"animated": true,
|
|
42
|
-
"settle": true,
|
|
43
|
-
"intent": "Make the live order directly visible during network recovery",
|
|
44
|
-
"timeout_ms": 30000,
|
|
45
|
-
"next": "wait-order-before"
|
|
46
|
-
},
|
|
47
|
-
"wait-order-before": {
|
|
48
|
-
"action": "ui.wait_for",
|
|
49
|
-
"text": "Limit short",
|
|
50
|
-
"expected": "visible",
|
|
51
|
-
"intent": "Prove the live order is visible before network interruption",
|
|
52
|
-
"timeout_ms": 30000,
|
|
53
|
-
"next": "start-performance-capture"
|
|
54
|
-
},
|
|
55
|
-
"start-performance-capture": {
|
|
56
|
-
"action": "metamask.perps.capture_performance",
|
|
57
|
-
"phase": "start",
|
|
58
|
-
"intent": "Start the evidence window before connectivity changes",
|
|
59
|
-
"next": "go-offline"
|
|
60
|
-
},
|
|
61
|
-
"go-offline": {
|
|
62
|
-
"action": "app.network",
|
|
63
|
-
"state": "offline",
|
|
64
|
-
"settle_ms": 5000,
|
|
65
|
-
"intent": "Disconnect the selected Android device while the order remains on screen",
|
|
66
|
-
"next": "hold-offline"
|
|
67
|
-
},
|
|
68
|
-
"hold-offline": {
|
|
69
|
-
"action": "wait",
|
|
70
|
-
"duration_ms": 5000,
|
|
71
|
-
"intent": "Keep the device offline long enough for stream connectivity loss",
|
|
72
|
-
"next": "restore-network"
|
|
73
|
-
},
|
|
74
|
-
"restore-network": {
|
|
75
|
-
"action": "app.network",
|
|
76
|
-
"state": "online",
|
|
77
|
-
"settle_ms": 15000,
|
|
78
|
-
"intent": "Restore the selected Android device and allow Perps streams to recover",
|
|
79
|
-
"next": "show-content-after"
|
|
80
|
-
},
|
|
81
|
-
"show-content-after": {
|
|
82
|
-
"action": "ui.scroll",
|
|
83
|
-
"test_id": "homepage-perps-positions",
|
|
84
|
-
"scroll_into_view": true,
|
|
85
|
-
"animated": true,
|
|
86
|
-
"settle": true,
|
|
87
|
-
"intent": "Keep the recovered order directly reviewable",
|
|
88
|
-
"timeout_ms": 30000,
|
|
89
|
-
"next": "wait-order-after"
|
|
90
|
-
},
|
|
91
|
-
"wait-order-after": {
|
|
92
|
-
"action": "ui.wait_for",
|
|
93
|
-
"text": "Limit short",
|
|
94
|
-
"expected": "visible",
|
|
95
|
-
"intent": "Prove the live order remains visible after network recovery",
|
|
96
|
-
"timeout_ms": 30000,
|
|
97
|
-
"next": "capture-after"
|
|
98
|
-
},
|
|
99
|
-
"capture-after": {
|
|
100
|
-
"action": "ui.screenshot",
|
|
101
|
-
"path": "screenshots/homepage-order-after-network-recovery.png",
|
|
102
|
-
"intent": "Preserve reviewer-visible network recovery proof",
|
|
103
|
-
"next": "settle-frame"
|
|
104
|
-
},
|
|
105
|
-
"settle-frame": {
|
|
106
|
-
"action": "wait",
|
|
107
|
-
"duration_ms": 2500,
|
|
108
|
-
"intent": "Allow the fresh visible frame checkpoint to finish",
|
|
109
|
-
"next": "finish-performance-capture"
|
|
110
|
-
},
|
|
111
|
-
"finish-performance-capture": {
|
|
112
|
-
"action": "metamask.perps.capture_performance",
|
|
113
|
-
"phase": "end",
|
|
114
|
-
"required_stages": [
|
|
115
|
-
"viewport_demand",
|
|
116
|
-
"socket_received",
|
|
117
|
-
"react_commit",
|
|
118
|
-
"next_frame_checkpoint"
|
|
119
|
-
],
|
|
120
|
-
"required_lifecycles": ["network_recovery"],
|
|
121
|
-
"required_sources": ["resident_state", "fresh_socket"],
|
|
122
|
-
"required_fresh_content_variants": ["orders"],
|
|
123
|
-
"intent": "Preserve and validate the network-recovery measurement cohort",
|
|
124
|
-
"next": "cleanup-order"
|
|
125
|
-
},
|
|
126
|
-
"cleanup-order": {
|
|
127
|
-
"action": "metamask.perps.teardown_state",
|
|
128
|
-
"provider": "hyperliquid",
|
|
129
|
-
"network": "testnet",
|
|
130
|
-
"market": "ETH",
|
|
131
|
-
"page": "home",
|
|
132
|
-
"positions": false,
|
|
133
|
-
"orders": {
|
|
134
|
-
"state": "none",
|
|
135
|
-
"mode": "matching",
|
|
136
|
-
"market": "ETH",
|
|
137
|
-
"timeout_ms": 60000
|
|
138
|
-
},
|
|
139
|
-
"intent": "Cancel the deterministic testnet order after evidence capture",
|
|
140
|
-
"timeout_ms": 90000,
|
|
141
|
-
"next": "done"
|
|
142
|
-
},
|
|
143
|
-
"done": {
|
|
144
|
-
"action": "end",
|
|
145
|
-
"status": "pass"
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "Homepage Perps cold no-cache position sample",
|
|
4
|
-
"description": "Clears only persisted Perps performance caches, reproduces a process-cold Homepage position, and measures production-like Perps timing from the first usable Wallet Home frame with the device performance clock. Metro, splash, bridge readiness, unlock, and recipe orchestration are excluded from the Perps metric.",
|
|
5
|
-
"paramsSchema": {
|
|
6
|
-
"type": "object",
|
|
7
|
-
"additionalProperties": false,
|
|
8
|
-
"properties": {
|
|
9
|
-
"account": {
|
|
10
|
-
"type": "string",
|
|
11
|
-
"description": "Existing fixture account that owns the position."
|
|
12
|
-
},
|
|
13
|
-
"market": {
|
|
14
|
-
"type": "string",
|
|
15
|
-
"default": "BTC",
|
|
16
|
-
"description": "Exact visible position market symbol."
|
|
17
|
-
},
|
|
18
|
-
"sample_id": {
|
|
19
|
-
"type": "string",
|
|
20
|
-
"default": "sample",
|
|
21
|
-
"description": "Artifact-local sample identifier."
|
|
22
|
-
},
|
|
23
|
-
"snapshot_port": {
|
|
24
|
-
"type": "number",
|
|
25
|
-
"default": 3000,
|
|
26
|
-
"description": "Host port for the explicitly configured local Terminal global snapshot endpoint."
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
"required": ["account"]
|
|
30
|
-
},
|
|
31
|
-
"workflow": {
|
|
32
|
-
"entry": "ensure-wallet",
|
|
33
|
-
"nodes": {
|
|
34
|
-
"ensure-wallet": {
|
|
35
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
36
|
-
"target_timeout_ms": 90000,
|
|
37
|
-
"unlock_timeout_ms": 180000,
|
|
38
|
-
"intent": "Reuse the existing unlocked fixture wallet without replacing it",
|
|
39
|
-
"next": "select-account"
|
|
40
|
-
},
|
|
41
|
-
"select-account": {
|
|
42
|
-
"action": "metamask.wallet.select_account",
|
|
43
|
-
"name": "{{params.account}}",
|
|
44
|
-
"cdp_timeout_ms": 30000,
|
|
45
|
-
"intent": "Pin the device-owned fixture account before the measured cold restart",
|
|
46
|
-
"next": "assert-position"
|
|
47
|
-
},
|
|
48
|
-
"assert-position": {
|
|
49
|
-
"action": "metamask.perps.assert_positions",
|
|
50
|
-
"market": "{{params.market}}",
|
|
51
|
-
"state": "open",
|
|
52
|
-
"timeout_ms": 30000,
|
|
53
|
-
"intent": "Prove the real position exists before process termination",
|
|
54
|
-
"next": "open-wallet-home"
|
|
55
|
-
},
|
|
56
|
-
"open-wallet-home": {
|
|
57
|
-
"action": "ui.navigate",
|
|
58
|
-
"page": "home",
|
|
59
|
-
"timeout_ms": 30000,
|
|
60
|
-
"intent": "Persist Wallet Home as the route restored by the cold launch",
|
|
61
|
-
"next": "clear-perps-caches"
|
|
62
|
-
},
|
|
63
|
-
"clear-perps-caches": {
|
|
64
|
-
"action": "metamask.perps.clear_performance_caches",
|
|
65
|
-
"intent": "Remove only persisted Perps market and user snapshots before the measured cold launch",
|
|
66
|
-
"next": "prepare-local-snapshot-endpoint"
|
|
67
|
-
},
|
|
68
|
-
"prepare-local-snapshot-endpoint": {
|
|
69
|
-
"action": "metamask.perps.prepare_local_snapshot_endpoint",
|
|
70
|
-
"port": "{{params.snapshot_port}}",
|
|
71
|
-
"intent": "Make the configured local Terminal v2 endpoint reachable on physical Android without an external command node",
|
|
72
|
-
"next": "cold-restart"
|
|
73
|
-
},
|
|
74
|
-
"cold-restart": {
|
|
75
|
-
"action": "app.lifecycle",
|
|
76
|
-
"command": "restart",
|
|
77
|
-
"settle_ms": 0,
|
|
78
|
-
"runtime_ready_timeout_ms": 90000,
|
|
79
|
-
"timeout_ms": 120000,
|
|
80
|
-
"intent": "Create a process-cold app state without rebuilding or resetting wallet state; this node is setup and is not part of the Perps metric",
|
|
81
|
-
"next": "measure-visible-perps"
|
|
82
|
-
},
|
|
83
|
-
"measure-visible-perps": {
|
|
84
|
-
"action": "metamask.perps.measure_homepage_visible",
|
|
85
|
-
"target_timeout_ms": 90000,
|
|
86
|
-
"unlock_timeout_ms": 180000,
|
|
87
|
-
"scroll_test_id": "wallet-screen",
|
|
88
|
-
"from_test_id": "wallet-screen",
|
|
89
|
-
"offset": 600,
|
|
90
|
-
"poll_interval_ms": 1000,
|
|
91
|
-
"visible_event_stage": "first_visible_recorded",
|
|
92
|
-
"visible_event_grace_ms": 1500,
|
|
93
|
-
"animated": true,
|
|
94
|
-
"target_test_id": "homepage-section-title-perps",
|
|
95
|
-
"required_present_test_id": "perps-position-row-{{params.market}}",
|
|
96
|
-
"timeout_ms": 30000,
|
|
97
|
-
"intent": "Confirm the restored wallet is usable and immediately measure the direct-CDP transition to visible Perps position content without returning control to the recipe runner",
|
|
98
|
-
"next": "wait-position"
|
|
99
|
-
},
|
|
100
|
-
"wait-position": {
|
|
101
|
-
"action": "ui.wait_for",
|
|
102
|
-
"test_id": "perps-position-row-{{params.market}}",
|
|
103
|
-
"expected": "present",
|
|
104
|
-
"timeout_ms": 60000,
|
|
105
|
-
"intent": "Prove the real market position row remains rendered after the measured Perps transition",
|
|
106
|
-
"next": "capture-position"
|
|
107
|
-
},
|
|
108
|
-
"capture-position": {
|
|
109
|
-
"action": "ui.screenshot",
|
|
110
|
-
"path": "screenshots/cold-position-{{params.sample_id}}.png",
|
|
111
|
-
"intent": "Preserve native proof that meaningful Perps content is visibly rendered after the fixed viewport demand",
|
|
112
|
-
"next": "done"
|
|
113
|
-
},
|
|
114
|
-
"done": {
|
|
115
|
-
"action": "end",
|
|
116
|
-
"status": "pass"
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
package/library/recipes/mobile/perps/performance.homepage.ios-background-reconnect.recipe.json
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "iOS Homepage Perps long-background reconnect proof",
|
|
4
|
-
"description": "Keeps the existing simulator wallet and position, backgrounds longer than the connection grace period, then validates resident-to-fresh position content at the visible Homepage endpoint.",
|
|
5
|
-
"workflow": {
|
|
6
|
-
"entry": "ensure-wallet",
|
|
7
|
-
"nodes": {
|
|
8
|
-
"ensure-wallet": {
|
|
9
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
10
|
-
"intent": "Use the existing fixture without fabricating Perps state",
|
|
11
|
-
"next": "open-wallet-home"
|
|
12
|
-
},
|
|
13
|
-
"open-wallet-home": {
|
|
14
|
-
"action": "ui.navigate",
|
|
15
|
-
"page": "home",
|
|
16
|
-
"intent": "Open Wallet Home before the reconnect lifecycle",
|
|
17
|
-
"timeout_ms": 30000,
|
|
18
|
-
"next": "wait-perps-before"
|
|
19
|
-
},
|
|
20
|
-
"wait-perps-before": {
|
|
21
|
-
"action": "ui.wait_for",
|
|
22
|
-
"test_id": "homepage-perps-positions",
|
|
23
|
-
"expected": "present",
|
|
24
|
-
"intent": "Require the Perps section before backgrounding",
|
|
25
|
-
"timeout_ms": 30000,
|
|
26
|
-
"next": "show-perps-before"
|
|
27
|
-
},
|
|
28
|
-
"show-perps-before": {
|
|
29
|
-
"action": "ui.scroll",
|
|
30
|
-
"test_id": "homepage-perps-positions",
|
|
31
|
-
"scroll_into_view": true,
|
|
32
|
-
"animated": true,
|
|
33
|
-
"settle": true,
|
|
34
|
-
"intent": "Make the data-backed section resident before reconnect",
|
|
35
|
-
"timeout_ms": 30000,
|
|
36
|
-
"next": "start-performance-capture"
|
|
37
|
-
},
|
|
38
|
-
"start-performance-capture": {
|
|
39
|
-
"action": "metamask.perps.capture_performance",
|
|
40
|
-
"phase": "start",
|
|
41
|
-
"intent": "Start evidence immediately before the long background interval",
|
|
42
|
-
"next": "background-app"
|
|
43
|
-
},
|
|
44
|
-
"background-app": {
|
|
45
|
-
"action": "app.lifecycle",
|
|
46
|
-
"command": "background",
|
|
47
|
-
"settle_ms": 25000,
|
|
48
|
-
"intent": "Exceed the 20-second Perps connection grace period",
|
|
49
|
-
"next": "foreground-app"
|
|
50
|
-
},
|
|
51
|
-
"foreground-app": {
|
|
52
|
-
"action": "app.lifecycle",
|
|
53
|
-
"command": "foreground",
|
|
54
|
-
"settle_ms": 10000,
|
|
55
|
-
"runtime_ready_timeout_ms": 60000,
|
|
56
|
-
"require_process_continuity": true,
|
|
57
|
-
"intent": "Restore the same process and require a reconnect",
|
|
58
|
-
"next": "wait-perps-after"
|
|
59
|
-
},
|
|
60
|
-
"wait-perps-after": {
|
|
61
|
-
"action": "ui.wait_for",
|
|
62
|
-
"test_id": "homepage-perps-positions",
|
|
63
|
-
"expected": "present",
|
|
64
|
-
"intent": "Confirm the Perps section remains available after reconnect",
|
|
65
|
-
"timeout_ms": 30000,
|
|
66
|
-
"next": "show-perps-after"
|
|
67
|
-
},
|
|
68
|
-
"show-perps-after": {
|
|
69
|
-
"action": "ui.scroll",
|
|
70
|
-
"test_id": "homepage-perps-positions",
|
|
71
|
-
"scroll_into_view": true,
|
|
72
|
-
"animated": true,
|
|
73
|
-
"settle": true,
|
|
74
|
-
"intent": "Bring reconnected content into the viewport",
|
|
75
|
-
"timeout_ms": 30000,
|
|
76
|
-
"next": "capture-after"
|
|
77
|
-
},
|
|
78
|
-
"capture-after": {
|
|
79
|
-
"action": "ui.screenshot",
|
|
80
|
-
"path": "screenshots/ios-homepage-perps-after-reconnect.png",
|
|
81
|
-
"intent": "Preserve visible reconnect content",
|
|
82
|
-
"next": "settle-frame"
|
|
83
|
-
},
|
|
84
|
-
"settle-frame": {
|
|
85
|
-
"action": "wait",
|
|
86
|
-
"duration_ms": 2500,
|
|
87
|
-
"intent": "Allow the fresh visible frame checkpoint to finish",
|
|
88
|
-
"next": "finish-performance-capture"
|
|
89
|
-
},
|
|
90
|
-
"finish-performance-capture": {
|
|
91
|
-
"action": "metamask.perps.capture_performance",
|
|
92
|
-
"phase": "end",
|
|
93
|
-
"required_stages": [
|
|
94
|
-
"viewport_demand",
|
|
95
|
-
"socket_received",
|
|
96
|
-
"react_commit",
|
|
97
|
-
"next_frame_checkpoint"
|
|
98
|
-
],
|
|
99
|
-
"required_lifecycles": ["background_reconnect"],
|
|
100
|
-
"required_sources": ["resident_state", "fresh_socket"],
|
|
101
|
-
"required_fresh_content_variants": ["positions"],
|
|
102
|
-
"intent": "Require the long-background visible reconnect cohort",
|
|
103
|
-
"next": "done"
|
|
104
|
-
},
|
|
105
|
-
"done": {
|
|
106
|
-
"action": "end",
|
|
107
|
-
"status": "pass"
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "iOS Homepage Perps short-background visible performance proof",
|
|
4
|
-
"description": "Uses the existing fixture wallet without requiring a funded Perps account, restores the assigned iOS simulator from a short background interval, and proves that visible Perps content emits lifecycle-aware performance evidence.",
|
|
5
|
-
"workflow": {
|
|
6
|
-
"entry": "ensure-wallet",
|
|
7
|
-
"nodes": {
|
|
8
|
-
"ensure-wallet": {
|
|
9
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
10
|
-
"intent": "Use the existing fixture wallet without replacing its account state",
|
|
11
|
-
"next": "open-wallet-home"
|
|
12
|
-
},
|
|
13
|
-
"open-wallet-home": {
|
|
14
|
-
"action": "ui.navigate",
|
|
15
|
-
"page": "home",
|
|
16
|
-
"intent": "Open Wallet Home before the lifecycle transition",
|
|
17
|
-
"timeout_ms": 30000,
|
|
18
|
-
"next": "wait-perps-section"
|
|
19
|
-
},
|
|
20
|
-
"wait-perps-section": {
|
|
21
|
-
"action": "ui.wait_for",
|
|
22
|
-
"test_id": "homepage-section-title-perps",
|
|
23
|
-
"expected": "present",
|
|
24
|
-
"intent": "Require the Perps Homepage section to exist before measuring it",
|
|
25
|
-
"timeout_ms": 30000,
|
|
26
|
-
"next": "show-perps-section"
|
|
27
|
-
},
|
|
28
|
-
"show-perps-section": {
|
|
29
|
-
"action": "ui.scroll",
|
|
30
|
-
"test_id": "homepage-section-title-perps",
|
|
31
|
-
"scroll_into_view": true,
|
|
32
|
-
"animated": true,
|
|
33
|
-
"settle": true,
|
|
34
|
-
"intent": "Bring actual Perps content into the viewport before backgrounding",
|
|
35
|
-
"timeout_ms": 30000,
|
|
36
|
-
"next": "start-performance-capture"
|
|
37
|
-
},
|
|
38
|
-
"start-performance-capture": {
|
|
39
|
-
"action": "metamask.perps.capture_performance",
|
|
40
|
-
"phase": "start",
|
|
41
|
-
"intent": "Start the device-log evidence window immediately before backgrounding",
|
|
42
|
-
"next": "background-app"
|
|
43
|
-
},
|
|
44
|
-
"background-app": {
|
|
45
|
-
"action": "app.lifecycle",
|
|
46
|
-
"command": "background",
|
|
47
|
-
"settle_ms": 3000,
|
|
48
|
-
"intent": "Leave the app inactive for less than the reconnect grace period",
|
|
49
|
-
"next": "foreground-app"
|
|
50
|
-
},
|
|
51
|
-
"foreground-app": {
|
|
52
|
-
"action": "app.lifecycle",
|
|
53
|
-
"command": "foreground",
|
|
54
|
-
"settle_ms": 10000,
|
|
55
|
-
"runtime_ready_timeout_ms": 60000,
|
|
56
|
-
"intent": "Restore the same iOS process and wallet session",
|
|
57
|
-
"next": "wait-perps-after"
|
|
58
|
-
},
|
|
59
|
-
"wait-perps-after": {
|
|
60
|
-
"action": "ui.wait_for",
|
|
61
|
-
"test_id": "homepage-section-title-perps",
|
|
62
|
-
"expected": "present",
|
|
63
|
-
"intent": "Confirm the Homepage Perps section survived the short background interval",
|
|
64
|
-
"timeout_ms": 30000,
|
|
65
|
-
"next": "show-perps-after"
|
|
66
|
-
},
|
|
67
|
-
"show-perps-after": {
|
|
68
|
-
"action": "ui.scroll",
|
|
69
|
-
"test_id": "homepage-section-title-perps",
|
|
70
|
-
"scroll_into_view": true,
|
|
71
|
-
"animated": true,
|
|
72
|
-
"settle": true,
|
|
73
|
-
"intent": "Bring the restored Perps content back into the viewport",
|
|
74
|
-
"timeout_ms": 30000,
|
|
75
|
-
"next": "capture-after"
|
|
76
|
-
},
|
|
77
|
-
"capture-after": {
|
|
78
|
-
"action": "ui.screenshot",
|
|
79
|
-
"path": "screenshots/ios-homepage-perps-after-short-background.png",
|
|
80
|
-
"intent": "Preserve reviewer-visible iOS short-resume proof",
|
|
81
|
-
"next": "settle-frame"
|
|
82
|
-
},
|
|
83
|
-
"settle-frame": {
|
|
84
|
-
"action": "wait",
|
|
85
|
-
"duration_ms": 2500,
|
|
86
|
-
"intent": "Allow the visible next-frame checkpoint and Sentry span to finish",
|
|
87
|
-
"next": "finish-performance-capture"
|
|
88
|
-
},
|
|
89
|
-
"finish-performance-capture": {
|
|
90
|
-
"action": "metamask.perps.capture_performance",
|
|
91
|
-
"phase": "end",
|
|
92
|
-
"required_stages": [
|
|
93
|
-
"viewport_demand",
|
|
94
|
-
"react_commit",
|
|
95
|
-
"next_frame_checkpoint"
|
|
96
|
-
],
|
|
97
|
-
"required_lifecycles": ["background_short"],
|
|
98
|
-
"required_sources": ["resident_state", "fresh_socket"],
|
|
99
|
-
"intent": "Require a lifecycle-specific visible-content measurement cohort",
|
|
100
|
-
"next": "done"
|
|
101
|
-
},
|
|
102
|
-
"done": {
|
|
103
|
-
"action": "end",
|
|
104
|
-
"status": "pass"
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|