From 80485fc0007d62b31dcea64ae29a781bc366a942 Mon Sep 17 00:00:00 2001 From: Ali Younes Date: Sun, 18 Oct 2026 20:53:29 -0400 Subject: [PATCH 1/2] Prepare EternalMonitor 0.3.1 release --- Cargo.lock | 4 +-- RELEASE_NOTES.md | 35 +++++++++++++++---- host/Cargo.toml | 2 +- ios/TESTFLIGHT_NOTES.md | 77 +++++++++++++---------------------------- ios/project.yml | 2 +- proto/Cargo.toml | 2 +- 6 files changed, 58 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index abd221f1..a088dbab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1169,7 +1169,7 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "eternal-host" -version = "0.3.0" +version = "0.3.1" dependencies = [ "cc", "eframe", @@ -1201,7 +1201,7 @@ dependencies = [ [[package]] name = "eternal-wire" -version = "0.3.0" +version = "0.3.1" dependencies = [ "tracing", ] diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 2d276f41..fd7f1250 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,13 +1,34 @@ -## EternalMonitor unreleased +## EternalMonitor v0.3.1 -- Windows and iPad can share diagnostics automatically with support, queue events while offline and retry after reconnecting. Automatic sharing can be disabled in Settings. +Install the Windows and iPad 0.3.1 updates together. This release includes Intel +hardware-encoding fixes and automatic support diagnostics. The affected Windows +10 / Intel Iris Xe device and physical iPad Pro M5 still need customer testing. -- Windows and iPad now retain bounded support logs across launches, including device/build details, encoder/decoder errors and stream summaries. Export iPad reports from Settings → Diagnostics. Windows Copy logs includes native FFmpeg driver errors and removes pairing credentials. +### What changed -- Fix Intel Quick Sync startup by converting capture frames to its supported - NV12 input format for H.264 and HEVC. -- Try the other Windows hardware encoders when the preferred encoder cannot - open, before falling back to CPU encoding. Record each failure in the host log. +- Intel Quick Sync uses its supported NV12 input format for H.264 and HEVC. + Windows tries the remaining hardware encoders before falling back to CPU + encoding and records each startup failure. +- AMD keyframe requests survive delayed encoder output, improving recovery when + the iPad requests a fresh frame. +- The Windows host sends queued audio between video packets, reducing audio + loss during large video bursts. +- Windows and iPad retain bounded logs across launches, including device and + build details, encoder or decoder errors, connection history and stream + statistics. Windows Copy logs includes native FFmpeg errors. On iPad, open + Settings > Support > Diagnostics to copy or export a report. +- Both apps automatically send support diagnostics while running and retry + queued events after reconnecting. Reports include device details, PC names + and network addresses. Screen content, audio and pairing credentials are + excluded. Automatic sharing can be disabled in Settings. + +### What to test + +Update both apps, keep the PC and iPad online, then connect over USB with Apple +Devices open on Windows. Stream for two minutes and check whether the hardware +encoder warning returns. Test H.264 first, then HEVC if you use it. If a problem +continues, send the time and time zone, a screenshot of the warning and the +Diagnostics upload status so support can find the reports. ## EternalMonitor v0.3.0 diff --git a/host/Cargo.toml b/host/Cargo.toml index a7d700b5..48aa8b23 100644 --- a/host/Cargo.toml +++ b/host/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "eternal-host" -version = "0.3.0" +version = "0.3.1" edition = "2021" [dependencies] diff --git a/ios/TESTFLIGHT_NOTES.md b/ios/TESTFLIGHT_NOTES.md index ac3e8b2e..950826b5 100644 --- a/ios/TESTFLIGHT_NOTES.md +++ b/ios/TESTFLIGHT_NOTES.md @@ -1,58 +1,31 @@ -# EternalMonitor 0.3.0: What to Test +# EternalMonitor 0.3.1: What to Test -v0.3.0 is the current stable release. Install the Windows app with iPad -v0.3.0, TestFlight build 143. The Windows installer is unchanged from -v0.3.0-rc.1. It passed the automated tests on the reference PC and a physical -iPad; the hands-on checks below remain. New users can follow SETUP.md. +Install the Windows and iPad 0.3.1 updates together. This release includes Intel +hardware-encoding fixes and automatic support diagnostics. The affected Windows +10 / Intel Iris Xe device and physical iPad Pro M5 still need customer testing. ### What changed -- Lost video fragments can be requested again within a bounded repair window. - The window follows real WiFi timing: it waits for late and reordered packets - instead of discarding their frames. The quality popover reports repaired - fragments, dropped frames and jitter. -- A USB connection uses Apple's device service on Windows and the same negotiated - session as WiFi. The app can take over when a cable connects and reconnect to - WiFi when it disconnects. USB needs Apple's Apple Devices app from the - Microsoft Store, open while you stream. When an iPad is plugged in and Apple - Devices is closed or missing, the host says so and offers to open it or links - to the Store. Accept Trust This Computer on the iPad. -- PC audio uses 48 kHz stereo Opus. The iPad's audio setting mutes playback without - disconnecting video. Quiet packets are compact; Opus packet-loss concealment - covers missing audio. This version does not provide Opus in-band FEC. -- Pair with the six-digit host code or its QR code. Remembered hosts use a token - stored in the iPad Keychain. Regenerating the host token requires pairing again. -- Hardware and on-screen keyboards, sticky modifiers, indirect pointer buttons - and hover extend the existing touch and Pencil controls. -- Apple Pencil draws as a Windows Ink pen with pressure and tilt. Drawing mode - ignores fingers on the canvas, mutes PC audio and asks for the highest USB - frame rate. In Clip Studio Paint, choose the Tablet PC setting. -- The host offers 30/60/90/120 fps; the iPad requests 30/60/120 fps. The lower limit - wins. HEVC remains optional. YUV420 remains the default encoder input because - the AMD encoder does not accept BGRA; BGRA input is opt-in. -- The host shows client, USB and audio status, rotates its session log, and can - check for updates. The Windows installer configures its firewall rules and VDD - task permissions. Continue checking these Windows behaviors on your hardware. +- Intel Quick Sync uses its supported NV12 input format for H.264 and HEVC. + Windows tries the remaining hardware encoders before falling back to CPU + encoding and records each startup failure. +- AMD keyframe requests survive delayed encoder output, improving recovery when + the iPad requests a fresh frame. +- The Windows host sends queued audio between video packets, reducing audio + loss during large video bursts. +- Windows and iPad retain bounded logs across launches, including device and + build details, encoder or decoder errors, connection history and stream + statistics. Windows Copy logs includes native FFmpeg errors. On iPad, open + Settings > Support > Diagnostics to copy or export a report. +- Both apps automatically send support diagnostics while running and retry + queued events after reconnecting. Reports include device details, PC names + and network addresses. Screen content, audio and pairing credentials are + excluded. Automatic sharing can be disabled in Settings. -### Please exercise on a physical iPad +### What to test -Pair on the local network, test H.264 and HEVC, then type and scroll through the -keyboard and trackpad. Connect, unplug and reconnect USB. Play audio and check -sync, mute and a Windows output-device change. Walk toward the WiFi edge and -watch repairs rise without long freezes. On a ProMotion iPad, try 120 fps with -the virtual display at 120 Hz. Draw in Clip Studio Paint with Drawing mode over -USB, including pressure, tilt and a resting palm. Report the GPU, codec, host -log and visible error. - -On the reference PC a physical iPad streamed the 2732×2048 extended desktop over -USB-C for 30 minutes at 58 FPS with no dropped frames, and 3440×1440 over WiFi -for 30 minutes with 19 of 105,600 frames dropped. First-install trust, timed -takeover and WiFi fallback still need the hands-on pass. Pairing controls access but does -not encrypt video, audio or input, so use a trusted local network. - -Known issue: on the reference PC (NVIDIA driver 591.86), Windows once stopped -with an NVIDIA kernel error about two seconds after a USB connection switched a -running mirror session to the extended display. A bounded retest of the same -build and driver repeated that switch five times, and later runs repeated it -again, without a crash. The driver fault is not understood. If it happens, -report the GPU driver version and the time. +Update both apps, keep the PC and iPad online, then connect over USB with Apple +Devices open on Windows. Stream for two minutes and check whether the hardware +encoder warning returns. Test H.264 first, then HEVC if you use it. If a problem +continues, send the time and time zone, a screenshot of the warning and the +Diagnostics upload status so support can find the reports. diff --git a/ios/project.yml b/ios/project.yml index 12ea2af6..4f8df9b4 100644 --- a/ios/project.yml +++ b/ios/project.yml @@ -31,7 +31,7 @@ targets: PRODUCT_BUNDLE_IDENTIFIER: com.eternal.monitor TARGETED_DEVICE_FAMILY: "2" SUPPORTS_XR: "NO" - MARKETING_VERSION: "0.3.0" + MARKETING_VERSION: "0.3.1" CURRENT_PROJECT_VERSION: "6" DEVELOPMENT_TEAM: "9X79V37Q89" CODE_SIGN_STYLE: Automatic diff --git a/proto/Cargo.toml b/proto/Cargo.toml index a51e43a1..d718e50d 100644 --- a/proto/Cargo.toml +++ b/proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "eternal-wire" -version = "0.3.0" +version = "0.3.1" edition = "2021" [dependencies] From 59f2c835d77f8ff4212360b407f5d1b836dab36e Mon Sep 17 00:00:00 2001 From: Ali Younes Date: Sun, 18 Oct 2026 20:58:59 -0400 Subject: [PATCH 2/2] Update release snapshots and allow cold share-sheet loading --- host/tests/snapshots/pairing-qr.png | Bin 132250 -> 132115 bytes host/tests/snapshots/performance.png | Bin 176830 -> 176652 bytes host/tests/snapshots/settings.png | Bin 201870 -> 201699 bytes .../software-and-display-task-failure.png | Bin 212617 -> 212439 bytes host/tests/snapshots/stream-connected.png | Bin 159869 -> 159691 bytes host/tests/snapshots/update-banner.png | Bin 198444 -> 198266 bytes .../ConnectScreenTests.swift | 5 ++++- 7 files changed, 4 insertions(+), 1 deletion(-) diff --git a/host/tests/snapshots/pairing-qr.png b/host/tests/snapshots/pairing-qr.png index d9351a8848a326be55887388cb38a013f3f4e544..8ccfe89bfa317bb37fb4cbd41c89eca53fbfa779 100644 GIT binary patch delta 993 zcmbQ$$uYTuV}ddh^Q}hJt*VUGf9o5!Z7;Vde5A7dZkcv?Z0XfdWa8_8mV^5*9z1AQ zYw!HX^2^_z=H}Xed*AK*t=HGb_p`s?Zt3;l?5Fpt-#^>;``yylRqJ*>vy#(L0-4v| z-hQX_x@^pjg1)0k&1=`@GN^o9z;4?zS>3-7$&z}AegDq~{4~FH|Ni46os)BNb2snb z&wt?AGcktWzpG1Pk8iym=dam%=EB`<}p$JZ;1>(5KCub+SRtgqiZ8()_RH+Q_>R~@ftmhgv_+v8!$CP%vgZ;gh%fZP+_?&W0c+hTC^)zt7Fd z%iFkj?_rei0R`7zd#CBl{~3Gg_a{nZtVQ-4%xeOFtYu{0T>Ne;H2v$}p1*%WWK5mUjN8-;#zERJ5hDEM8vt+BV)_no+)N7CN7jS)IO zrUS#pZ%)I{nuA3KJ6RHvlZ6|e7M=WSW^Qg-_J*bWZYlfs?6nt5ThW7H-LLw->7|TJ z74@B1q`Ds5fBE6Vgx|6YgJ+_?rc%STZV8FK}KG-?ex?HT`^}5}S!s>oN zAG&Av{`S3mWM^^u%iogMPx# delta 1154 zcmZvbZ&1>A9LIkso0;aWbt;=;H}lWjrE6;V2h_H6HPh_6GF?-r<#Y~2{^&p%f_fF` zq&AvNaOK^u^DZaI4CK!No}$hfv#k?;iYSU=g@d*=NeJA}J@P!i4?YjR4?g$)ykGA( zm$i@2-gone54^lNS`rPTc^L8^GU@z|j`*neI7h0c7p77<#q~1zIe)D-&rLjM;1km^8aw@Cm-* zn9(=^8kO2z-W3#j4rf2Btq_zWz`41lCNvuTwS`$DRN5PHWQU6P(hDOovT~T)RyIi| zaStlVyRA?>-Fmx)alN%Q!=*m8{4;c?MsqgqDr*EfV)P5i^7^bB06`F5hIp03;S8MV z4>smK(vG!c@Ra29ydM=%xj7Q4LYpLtx7$ncW^s}NSv+z1FH5I719UlyAmKW4dS zE`2OA?3LLIUL+22?KmVKtVHO+fl?7n=3G!t=GhIGEPSkRwK=5y70Mz#7O0-!AlJ0) z^WjJ&Q3G)T!Ih?i%~5(=aQj#bW0E9a(fWTs9eR|P3!qRaSWyCR+f?qAiG0F#xHbAW zOA2LoYKCz*9I37j&WwuO-#62?GtK{p+m+SE3xoMk8UD;%UV>OIAJgkY=!;}iy@A`c z?r;!y_pV^;)WMf%B-9~IYpbuF0x>yvdP!l!n?bQZ diff --git a/host/tests/snapshots/performance.png b/host/tests/snapshots/performance.png index f6c21a0e42b395df6c9a8888ab4b2fc7f52d4c07..71f250f0ed2357bbfacd493f88e851a4e96009c3 100644 GIT binary patch delta 1396 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 Wr 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 st%4+r{~~@7NW%( zAp*8m8OtD2iUA=6WS1o>Dj-OJK%%l_1Co&KeZSXEXXgLrz4Knrsi#Hm&Aq?x_F2A> zWKBuFJ>}w}aWlU-x#Y|ei-INNzGx#vgX;n$#~HPo9d_pYxSe}KHxg)GvU=Z(zF)KN z#N10tn(8Hs@=CC}FUu&_-J*{L2V52Ei-nSV?ctKXfT2FEQEc|iP<|hx_%(Oz*MXrS zRSHd)^1Y1V^kFh$U+{%qi|KkJ)4z>M|RME9bhD9KxP3)DRD{ zg=5(kisONr5sKlZ*f>8|@osLJwOL`^teI~e_i8iqx|8SYZ6(h`1+xRSX9CN_W}{er znx@^n_xQ6f{PrDxHra-le#q@k%;QFx-GE$v^qD&C)}_Hg$=;El>yK<1Z?>9lu=DJm z#F0F`-MqEuium`NP6*R;A@cXZ4JLqb?)tj8vYYAsjg`??x(<=^}n`wIO z_;uRfIt`8DiQDiIMQ)iQW~PQo@07)L@-*%6S4^bW2AW3#qh20w zQ7+F_EjLsJ8Yakf8S)8bB4dY0*_LT+!;qxq>e5=J-o&uC?y0ZQmC`Bk>`W0F>V*fr zh)ngvT*E^{HQg{#)|4(`(=<`E8X0>?7Rg}LLS*{$zg(#urJGN%6;{MK^GY~fbD2QX zSsyBR9{O8AuC7$B_hNThu_^Js#;3j#M^krXiE4##hBcwB&~?g<0S>PqPN5#rL-umh zki02`Ee$#P_V~Z>GZHn~1wW+j9VuCxvS)?gz6saU(@--@! zP~%@xZdbBwF?G5S%~PcJ(zGB(pd3`rzRFPUU=YdZ6ydOj+{AaLcX()~xZl z#uxN54O`A%le|bIy1grlyxwFGnaOgIvgO83$J*vhlPg;m&7L2Bt_uQrS|_0qCQDPd zqvQ9(f#7RTg7A=88N;_qFpYZn^*y^PJY3#_4{1go(NLhY`xQW^YoqZYDlgK1IvhT~H?td2nS z&p%Z9vHRRV`&jYV(YWByQVLXNh3-3Ft!swrvJ;X2WkZoPtzQc{y~*KKsBqLDGevA@ z46K*MHrcBEh!NY^em>jNdU%baI+5Blog;-7bEB=j-LmV7ze9r)p$ZwN_{njsv_p=; zq#K{pMW-DNpDaAp9?qHw-H6t(D?@dN;^ywIyKAlg66!Db<7L-qM6%=9PlUWr$uV1* zJpXy*#4k2ZJEJr&`D*dGF7f*=MG@Up4zuAxq_D}!4>&OxkxH&?N|A=qVzUsO~DuW1)C z)DdTRLO2^&WYY?B16v8A6Tz6HJUtS)PM+*aO#TR^0sLaQF)`aqoc>1=1&*==&SwCw@2+IpA65# zu+N3WD07dkXo(Wa^`-LekpTH|W{*u~8JE!cDWKH!ROuRy6asC_y#D9qyS)0EwK?Lk zumI((z)Q|!KRb7w#HT%9Dqp{0L(eL)Y89cA2lE^aj>gBC=N4zQC&aaStGlddmuV&mt&7j@ zZ-Im4G0htDCzQp?+nHnQsoHYuZa9=`?6Hxm-eq3Hn`vpySt26hnfg6#G{YbNFc^=b-D!WkFt2 ziMGetG~?`nu33S~S%u<1?_rV=#7W<=Uwpf7`^GJI*8k>QVJVQYN;h&>@9QZR>RHel zT&S-;C=`0Ghx6HWk=j3P<}TH z#o48ALO=PqJDSk&3&q~-UZ)Q-MOe+&!%&J3SI)LGz&jBX93K_FhDweC8@&C-6W984 zg(q8L8(aE%>vkF5+X0G~swB#$mj9ns3Y#NnYa(hmkKG zObTxcMWvHha_F6+Y4QBH_GoFGShJZS))@b?@KpbuVuyGLtdR}P?8nkfB@D9Cl6s=J z#MaJ^_mABxhN9m*J)E38tw`*V4EU*_CBUl8WOC5>=Uln`8RPl|TT!#d^M}H~Es*#! zQD$FJo3vCv)Q3Z-FrwSudGw%jopJSE534fh77r}L==7+FyEXq=`iMq;?T8Y+#Qc># zIHN8h-ei|9bv_?Bb~97LF}>1QXq)7Q;L?G5ugt20r?CkHg@*FPx^!_bj#y4??+r2) zO#BT@)nXX-j@44>Qowq|)G|Z_2Y7%ca-}EP&^9i&um@WtP#Ypf`1EpK>1&<>iu5W@ z41L&GCC&pWkUFUR#iAU2tpuV!$Z)zBy8lOP3 zyvIy&XGRTa?&s>y9$G5Y@r3V|A=pyE-A;*(FU7rhDkn_?BGXlC<0DOA{t~Lgj zXfFsC-&;?Z>^U({gDBb?w6VCMXaZ{6C3z8+qMxVra`Uu%>!XKOV#9yDM`F-Lwc;UL zbRo8zb9SA^e>I13+MVIz@T%I5F2#hgVAOGA=LSHAq=!%?uRG*$5oD}&AA4WRs|^_?Ig@B{=_b5$Aelv zqqV}pq72()ln`HN%Xoi(e*^t!e-2+YDO0g6_JLFE3>tLL21v77=nuK$BJ_g<|FOn% zx6zz#@)@&KfRcOodV!2SFxKua>CwzKn)#=X@KllOaZ*R zWT8itbe_Yj);!5duJ_&%>fa3;JprwEBi6KFJlvI0X#_0HK7|9iXH{oU*xZ_v0E&fO z7-l}!MHliXf`NE(509K9eX4W%`3??>jY4&Q$;0fDrS!2|^s1vpyqdlQ7<&CSUG!gCmhtZ1kZs3Nc|Q7 zFUfsi#qQFpVL;|U;}Lbu6)`44hGl*nn$$4wjl#HAy6t<2_obh9v;mW$L2@i@j zTXA}QWY2h-+J#mh2&gnth{K}G(yPm;1+e33TGT2PFLz13MI^$ZTiqXdo)uLw)m?cp zf%<(G&3K!FmH5-;2Vwk|4~-^(V&|e+e2o+$R*>2lY(Ia#5+^n65d40juWfh=;~w=MPLFk6QUV@oxMJtr`nEG_X|4h z*7(@utfK(a$bt{f9odsxkM*yV5vHt?5r3g4eKeR}muQn!Xd1KgV5(-qqu6LghwR!7 z-oU?da(n^^prO|BP>Qy)fh_6NVv-5gEw_T})GYo)_ zwmjM+5!bt!9hzOCL!V>=r917%fUJ=Mv9Hhp5ph}DxT562inYm$02B$EEIo%J2@x=& zgIjwXi{&gz*Y9B2ntPCPla|r-V2Ben= zYi)jXM>)c_ygjQd82o6Kb?K`MrSV)wqOI)fz|pU9+S&<~Je+ctw+@eMKrr&oRsBnr zTrj1g?Dj4vCe-NqaG`P9?(8Mj!$8G$!DJqCI6a7aGo#S6H0xA4F_LB z6)qp`Ea_QM`Yr{SWGqac6-ZYdUSWM+;vLmeua|lw=iZIydU*TT+QeX=Wo}t&za+sHh94 zPkWj+hJ}ac2RQ3EqrgAfN{0GNEr3hp)&Q99C)2DWR=tV}scBsXiij+#WbB2SVD*>b*MYO@YXz0G3wveMggcSEQ zifY{i?LkdkM^?nx@H*=2Z5&y;Soe~d(-O0f#9`(m)-jJx>n>XBwg$*YIxm98L+xAU z+xu^CU|2OHo%!H(a|=m;%u}$KAE7<|Zc)a$1v}`vmY7Cw{ z%~}J&dt0jwhLEeb63K>%kQ&Cr+ZL~!m)nSFLj@SsF1DQ?w+L#`(Y(9a^#D&M0||5% z#(*fpF@SPd?$QbFoeUSX?%ItTn=|}FZBmoWJMN|4N+d2EPOEhl4W6|N@0!kGj5p7A z?})Gj(!HoKGkr&MrTIk8x;^k*g3(anGywP^At4DEMV$M6;_QONhKXg)h6ke0Li>ad zvIQ?fqmCV`Y>9j6_uJmpmxxn#^paFvY}4b%3(Nt?OkW`%Wrk*0Qy{SE)f-Hf8!|803(;7cx|BmLZ-_^SMd1k${#%GbAF*Mc8 zkP7Gih;YKZs+~Ni19QI2*$t!xRoVm|y_7fuy`S3y6wsXkgDnsQ!O{ev@cggsy-Nq% zOQ*-fJk<2Q2+frNz^gAZjrB8me5Ms>GSHt;qv^3Wbwyiz6ZXJOG`NVSlKj0uvcQ@- z$8qG-%rek`xT+b>$|of+vIR@ky6=HULA#+No3<@!y&zaj(6wjj54yW8piq0Efovq7 z0wEL!8l>OmQ=oRzLZUSbv5KtEfeI~@AVsGzZgXSi1^`p$!5AAI9YtDT>0s6hW$+(1 z5H@RVymgfu@*|O@&#s`nFBP9Uj!bHhxeN(30c@2MaakbPzL$tM zMorP<=FHUrCAA2I^8<1%7~E*4HA=^em2kJj=krdeHX+q|2oUdM=Dl99=z7@6L?tcp81{0@cU!x>LMfyR^O()XL2!IjC6({}})h zD_oNdN=Nf_LYp9*Tn2i4wh9#DHx0p_-rn9Ma27GDbEtesxI}!`{ZUaVk%T>jP`3yV zoNLR<UkD0xGq%`f|&&gc>$3&r3(Q~;hvv`AEcxPMYhj4Zu8bHXN=&YRKT!rF*;`c1iS@C~9ZV|{eg?(47Qc_8F z40?S6g}j>y#EWZ)s+KG)1pSYuuoTxroi#uG21aOwd+e^AnS@s(3Rad109w;PrLxYt z{GjTBElBaY6VLnCsdcBKnOsfR@N1W?Jsm}QE&O~Zu!ZZ0@4LY>C}?}};t-wAp^e?3 zb&-*R5$P9Rstcxg87gRJ;pbx67Xf|G{xc*0j1KWX!b29t|E!5ZP)`cQHL(p&pMBho zor_t-WqpJ~&c(yu0&e$ubHnSTF18xgeZYyF-}up>>ipMqWL^htthl6}1s#9x;>aPQ zBQ6%|-U&fK(@2Y$Qil1cfC0_#i0N-;!YSEIv$pn#>{*PS&WBsbgE|r(4k(R)BC13Q zaGc^Z=aID~P&RJ<{yYTVh_^}AnN&CI1dn;Dr&(U9-kxvP>}ak9s#|)9_XXPt6b9? z5!{}+p3HoNQav!WdVD&28yVFu;eDvduV)*^BOtFIUy8MdXP||+()wKuKk(hTi@@$Bf)vC1;Xm$F!J}Bh-M$Y0)#^M61krJ zm;AQx#oDAmfQWJ_s0CkB)X>CPB|t%zAyp(t1S0s$I6JY@JP3H8CK9ou3Jr~)Cd2!a z(h%|ODsY;7y8w)K$iXlQne)6Oq9Q34E?GbTQ-8SGaV!Ga7|?IYZuW>DaY<6+tH9Ig zVC!89kG-CuDV8L+&po>i0K+1r!L`^I@{k5>(+#V0juI02~dAps-jhLx;#X6NrP#*?hi(CHH)~2SABK z;!Fd)M zRZ5%~fXu%N7ZS#~@V-7J0BgW*8f(@<5JtAuT_`y$X<(!H zq_xn7D$Y!nF@eagTX+idpqp+UrPuDr$b_D4D+9Ax)pxITMfA(L%Cxix_!%h znKL--;h@w;Dd`cQ zhvp^$=q7Mo9* z>5QX+so8XtSvl3c zqZSgvRz)C11-GE2d85D%Eq~paK-!u>J11l8sgwFU zCu%aHT9QaPk9_7_kG8G?B$|8>bDg`C{XY@J}B2yvgjQ;MVwjvb86z*#CxOW_mHv70o=?D2rh*CBMln#Hvv-X2d zqE*d^$+?G32`rD;&1rOcPI$Jk=(CDDBE~2ue`f^0ZnN`8&`(-0AXCl^La=D z^HRW}k%vGQ&J`8@m_Y6Q32!vTH;#Cd0!Wf<3U`W!de7jrXNDIK?mnVM`N$pQpYE>% zqk5)1?&qr)TFw!C>|wv*~ddEV`>A$kfR|Bz#;deWoMo*U27Bnd>&|u z4r7lJlmN3+(Pf*kX$C5Z+m`(}NDR&gvlEO|M2E0%p?`Hh+3NgXFp=s(ld!)0nHKCn zJMwZsJ87`TGigWjJBzcQy-Qhk_0}X_J^BUb!S%y5oEMK6r?eEu(&KMu9gw0CwM zu=j=~3{ei>D+!P@=T1N6n;g&_*{Q*QW04!N5*MhZV#3K%*hXt_aQD~!XQ7hc&!h-(1m|LUE)8FcL!KtxcF1&kxcph`8PR{ zLg>T)TY$1np+3!9#iBViC$j@wS*+rL0sE}};3*ZbmhwtJ_XJ?(dXUXZGeI^mD;o%x z(oS>E0W z9dcmxbPJrbOTeJ1x7=440V_Sp;7Ee&)yF38!P>%mE?}>Rev_jFjkUbP_Z0lS#Ron~ zhzlMZ+gAe+?ot<|W{}0juBw26DzX<09I|)9H;+Jba5wB)S(dr3!$qDbAx<#{f;HU0 za$UD46jLc|-1W;3liWKWpbm0WcsLChw!c<4FVlP&H$gHqkmf=5Egf;1edLI@KE@rg zw4D6~T+0Xtjm<7TCujcsI}&`3qQKB3yYRwG{`9yF5)at4a^4E^S{+7T9H%)doNU_^ z1wIx9_FurA?Ite~yZUq-tzU&ROTy-^wzQl}SX~EWHA&w_=FU51>st114ow28VJ&6P z0K)QpMa5<`4Xt9!5}s&WZXMpAHm@dmeh5Ku4$N6krH=0c;0r?!%nHkRNXE53HW#WU z;v5j|td2Zr?@fW7v3Yw!OK^`xlY+nk7e7dr0?l_N0p>?8IQvUTKWZe#CwQ$-68eSz zEmie;*7p)jYBYnB^hQABuH=Ffa-22Ep|AqB8iWaU2GnMfq^!Eyt-fzTDu~x<(6M-+ z`%n6y;;z(O4B5|X1pdFV@D1^i?evD=$;rv1Z+YkED1MvyM@+kZcgqtBYY=v$0d>!U zk>0|LTWe=!wW1R?M}7b_k=X^Ds0YyX6xzrx+WD{{J}6Vrj@zlUX4gxp6p&bxVbS5F z)eG1o0t7oRbsJdNu5hy=2*jZ@eSzC!VvhvZwzdn0>v5?j8}wq|{dujVoL#qra_cZC zfWBm0*V;9^PXCl4Xkl$O0Tj4`03vi>`As%^2kHs;6o)(%A9bmG4;Ejnfo! zc~+M52pr*}FhGx%5y~Fs$CKDF>yoWDfI)PN7k;ZC(Ka}3=~_EYXxKuRqQKyww51f- zURlo?4Zy^{YIUEX9A`azH^K87o?0KM49He{!B{`efaT4}um;Nh0YHLJhqKG!upTyS zKH5SEgK#Q-3XJ93k(kC+eCkyc-XyqH2XbOY8Gs#F;MAw29$E@lirj#j+n#Iea`h z9fPE_3Mh@G&IB~GdmxP4F|-wqb+}leilS*!fZi1#sKgDawGs~nN+Dauqs)!l2n<;M zngW&J@BhydL_KKg^l~H{QIaHgRWN-NHVj}IP`}C8{fbAS&&GQ+-K8eN_D_{-YP;%aD2B5sbzF@1M9f1x08H-T_Yk zk1^7i{WU7Gm@X}hq?QAacIpl|d`=jwy-;xcojuoumlP?h?U?!QtQAMppf0vh`Ox)) zcvS~2DeYjQSQfy+6R@7Oxn%?`kDm*w!8nTORIL(U0g=kmlN<3ajDUY0#R*bQJTM1e z+#gE@HI$Xkx*wby+wwzj$<=P*DWtzL7%07sodY>{8v#NFstaq3^WPqFBpk9DcT0YE z18n$z4bnY}bMM2pWfUtABRt3#S7W;V^IufLArL5id=~~Vf-DqR#%aoi9g;}c4Z|sG z0T73@zocIWWFX%l9~j&sr+ko2^1rg)6q@vWDK~yH@H&`#r*TbsJ9^dm(Ahn9B4^rE z!*K*K1*@TGso}|-eZCZ|2#dGiHpd5!kyLPTnd;GTPvjAR5il~Oq2tCozysKS0B8y5 z1W_>3YmZB_g1U9>tpcU9A76;ioB_}6S zTE*gNVQ4{%%?r8m~bTJ{-u5Ga1yY2 zhM-N~2G=@#gDJC#{C`heu;dt0v3M!V4H@q0mY~) z*dDM01x_^^!k3b1*kS@O{cb#{00~%6JunJ44iysVR^R4aN^O?#Y%;FGF|6U;nzS)*Dh}GjFbYl&5{4p&K|g!JejHcWAdyg`Uy}k0 zLv^HmF^ehQDZ-gBl+=U>UJk;3F0CV88 z04>ARgYOe?l<*q6$q1$N}uG5q;^R*?!TCMr>v0@lZ*_LBF=0N}ow3ckN`66_Ph z!ha>|cVT2U-|0tp_^W`?uLDnFrl6eM(0dXWc#~RUa#|#~BzUnBmUMB+A~DPa8VN26 z+A(uAF*FotqX6px^}S~SyG*F2e>5{!f1h5pR_Y0WqNrQ%eEr$XOf&AXy>K$_vP4f(qXR z<|6|tGJ4vyQC*&+e!+h~Mp#ANi09EEhvIPtSSGlniOJPSAVt^yAL8;Bz}0Rh93G-b zmABU+@)?l?)8vSo)50%TbMB^qHehAN_3$XH{K8N0{x5*-uRl+I_AQ)`ODiFs*YP(x}z@ThhjAwM?I zx(yI-A$}p}UyGI@?X9gnPi{{Bmo)pYza*K~)PD&hZmrUPzxK{pW}{SS_s>O(e||~r z?FzS9-S+2nSOcs6OYvpi{*|ARzTd=Caz>+9kEQ?hSpfz9+4j-SEqDI9|J45ipy{bU diff --git a/host/tests/snapshots/software-and-display-task-failure.png b/host/tests/snapshots/software-and-display-task-failure.png index 0b89a887af1b2a88d6ccd4acc219d697c0427020..55c30f54a503d0296e194d7bcdac226110d9c134 100644 GIT binary patch delta 1444 zcmZvcdrVVT9LL+DR2{B!KG5)*VrQaZBsxK)*kwBL5$KedPO)CpMZy$HMc3BKy$S&o z(4uT2>ug<&I3dtX2c=kBrj&|EI|tZ`(o0)Q<<%#p&)d7!WXU9+(7`7-0B1~UbNHz(r3xtncphd(O+()II{{MkeKJiDT z>E?3{19$s(=+9>gq~&W!I)>LdtaQO#~C6aTdsQ$K;~xhNqtdL z9nba^P3@=@y4RAX@+hMUa1!r+O!mhVbc`*F^*l+3!oJ<5L$sEy>_KXAMoY(dW7B&F zx?(N5oeTM4+b-dBBguY+tGh@!8;v1wH1RcEhB%ZtIT>xpfTx=^8qN31!viA(kavfS z+?5!!rD<&`#omZqmA2P{Xz8|ay0sw~9e>|e2YGV+Q*dA@9daaDp2VTHIBVCMEte~{ zOzR}$P10reUsfCK7XZ`==%qfhF#)zu?f-(?KKjeV^}b^V+Y9-Ez*wB|e4B_FygTms z8St>p4_yVAz*{a@rv|5zZ%%CPX3WWn#!F2c=_TK38ou*H68>guHw78sTCEl2tLbE~ zTs#iVs<#nMpBK2azV@R?r6bswvUaK(`NYZoJY(L8rO)b_J65uCXVQ3?Pq}Etxqk!QB&&DpTnuFw|vi`&dIZtDs6= z;^N2%#%9dN~p{6mdMPyg)PkY4yZxmJo!v-PhRk6pj1kbcuV#@>bnb@~)da@!OpUXGb z)mIyy+|9~m6*LW23VdS0$WF=`5=1C|8_ycJ72Ep(<>^LP7YY)38-+c$Vx8YLSOe7N4XQ{OSsg3oC^z>vY-X27@*w)U}IObEEv8y}dVqm_d{$dSw&oBN(W zU+IccTwz3uXND#)A+2E3;8kev0>UYqo*nD_U9oEZE6lbzG&LjO-_Pgen;%#Xg?7+M z@~VfL-S!Zn@4F)ij~A+bDl5%b-bn2|8tXXn=Zj5HAi7O#k#aC@IpAMWez*?_O3{ui z)K=p=Y~4K1m>{qRbI48v%Bi67DAlw=#oFvj4Q3I}{Jm8Ss864wDIU7Ck28|fEH%lBpVq)zz71%;WjHpOfL3(poGTAF#MYb&_cOf4W2q|p)l3BxpN^_#o zb@NigeuK(BAiZ(~9?PR}7PMhmPqX-42xvBeC7!c?WlQ9*?0XZP_xw%(ooiAF3}QrS z@rPsRo@;c~I+?x679y(GxX6`CB8|MmwrKQ#b~*#Dlpm=Dytf4_H?a30j}rY~;_*Jo z7*7f!*_u~X%Em3k*46CBmPRVbICaKi*UO>X R^_bw=`Az1wmalV4{sn`WKn(x@ delta 1526 zcmZ9MeN@tC6vr_tD=lW0=22n281q!x$(Alqc2=#qW~^<^GcB!LwN*m+5}?9QYek+) zGBS>-xaJmRM_e<*7xZVD=>q2#6{Q67B4moZsJ#8)=YIHCr{|pKp7T8CKIh*1{XF+7 zpukdZ;N{hGlD;m9IveG8Hfm0D6gp@NFkt#PLzmC!+lJlUP_c`D$~B!i6BV<6aHRf@ zsO{~$2Ij7E#uq#c#`fO+R#^TBU6aIGOlCaPIUVlGS{F?KPYEqJO^SM|;gu@saV)GI zu-pON0o6q2_4uOhcwI@G$hbVyx|cC17s$BYmlz8NaIPgN^W+@N*dqjA-Vg|VQc5bOz;JgE8$@s>T# zghy(vVgO2&^bbi^1D;->E4bE~fOY@NnXGSgr^$}QU6Zb6dldjs3Qe^0#YIx_(N?1N z`f*X#mMWU&A(QPE0$2S9RVoc~HT`ns*CWA;mVhf>K@85gj?8)?mO|*?InGNhJTGEBEa`me{%h}dY z;9M%}xnld$S!H!thePskon%qdtBX)Jg<>6S^v8hALM%VvL zF5Cn-=s>^s%jm1$v`)Ve=76#vo6~Y$=PPob?@isG|E`(Y8RQ`l5xfI`^MvJdyGG?l z86MqCNzb7NMV-S6wh0JrH456DzG6^V&oIaDq*colST72Bl_w~a^2&&a2#XMKb36tr zyy!}cx*G?7abi*mdUBQdib#)gz`N#;??fQ{Im+&EILAOZSKxkzZxYi>$3*P{|E)~h zvhIxss-VMbbqP6dpM?pAjx}qI>=l z_xC^{oVdT)%$DEri2|SE`aRr&_43VrmPh!cvUCb_BZ>;$H_N1TX ziQIx`S>?ZEqgI_3jU@o^`hor}j@R^9-^P;#+MbN@D5f?T=ihZUz=&!Yy_w!(x}V;v zw%dJf7`|pRIv7}10r(Fg^sn_24Lv_K&|uFeCvw#+2g-5*bjAgCUxzmEcS;_FOTsXD zx=Znsa+0?WCDHHd3~cl~Y5XTnV9lGLBag6CzjAUw(b$`|vO;qQr;1YW!ORuHL`!6{ z@?>|4l4&%di29Wn^l%x0Vq{~Oecg;#eAbRAwieGm4@F|JIW~Rtgd(l3xs*fHA5@+i zYCvtDd!c8(Lzx>to2uV3e)(4P4Pag|h)AWmfnm+%G9J|>(6no)uz@Nq=+M%*5aGSq zg&b!-It>VgiKgh6^M|9!%%u*b;h=?v$$3<32vxePdM*gf%M5Dz=j99d{fDmVV*8Q zd5}I{NG=@YF)LD;DJny@s+O1Y4v`gI-DOYO3UM! S0_7-VCGXh1UG&+3)BgjW_jfD+ diff --git a/host/tests/snapshots/stream-connected.png b/host/tests/snapshots/stream-connected.png index 5c024bafee96b5755219c9f101e78dcf5c0d06e5..448607d1e719522db2565f99825efd667c1643a9 100644 GIT binary patch delta 1422 zcmZXUdrZ?;6vtaM!$-Ex=y-(EWDZMrdmK&9KEE4)$iNm2KDjYjEI(9v*#Jp+{0MyJ^- zn9f|vHnm-Di0NLER`k5q)k5~*y%qwf6fru=Y01`y0C#>n4{~_6W!cl|wKpXlQ#W2W zZcuR_dN@Y*apjL)x{;A)4ARnEed&7Z83KSY3A5O9=0UAs}s;bAX z5=s)9-8Y&Q`EmPY6oVRI!gh0a5r0TpTvRs{C6O5ub6dkhzo<7g0XL0*Wo9PQ|F%ak zks%NlnY$uNsqRL2qK)o(|KE-?EFwNkS!Q;LnPY-XHGZ9F7=Q2A^`Z`pCs_+Y%R+(z*a<{n1!JQa=`6t)AanMepTZy}B-8B(IPxk7WuFJ5ClUkoJI3#}%WBDfj#nGjAWVR8F4E9fXCyvoE86wu? zwCJ#x=8gPmsemS)yB%%g0*6{__7_Yfk%X-6LCeADhiDSTi-6I=+NN_0dnQ$RJao)g zrpW0n?$)UVGodn*xYIcdqaWc&sIC%!1TpZ%$myoqi}?)3xr;<1(c=H#O4P{oE~#mU z`^nzT`L-blWotR=NK`wDt^8}J1oCde%{d&-X~@eKyB|llO1V|jl1_1OBH&wB^smbn zd45?vmQXnLI9#kb)MhXVW}|tJYDuFT$?ioY`*mgE+oY%aMt^c~=Y4K=PaU>ir){YF z^%5=sobq!iC9G6hqTw0^HSMz<)A-%Dc4^I0!E^?{Kfaj#5_3>4cAA8PyaeBXjhIZsU6Fx9fTFAlftTQ#Si3hGR`BF}86 zFmV0aL2}m4)yy;bh8_a)@RA#?=4=t$G-AD=l!x6~Khi+0EST*ylW+ng6jba3yV;Px zmU!NY_^~pE9LW{9o4|@vVez0){|DXmgnutqJc9Y7lqX29w#}+Jk(p|ixyx}xwUuC? z7b+vAQB@I)_NpYaJhHTsGQJO|WhrO0=8p;du(h6lng`O*y95^0-@h?cOi{eGF48lw zASz9WvA5y=Ue3yOvKm08?B>(^b delta 1586 zcmZuxX;4#F6n;S^RjG_x#g35Ff?FMog0d#0<5C7Yno)`iTTp4y!4fQDk_o)WQbjr$ zb+m;b?F&4j$Lo5xMwApp80CVQy3X}a{=Tj>T%#f;>SU)~qx6><=1=Wpx2k@ay*v0# zd}}(F2T$Xbxy>zf^exqThiYYNI?QPR{DuvdkAm~TRkLBwFD^~;#&)V%oj2^;GZV1S zE(ED_6K5VImerExw-c@Xl%*4DP_vcEGh35z_ObFQJS?Y`VyJ7OeAI$~(v@CA3wQej z8_cY^v(($gUc;po0#Tg6zkV;M_kylI)wJikzDkPVElEec0vCdzD^!PwCy$|;_TK7s zDQjr$bCUSF75wfCK?;z=i4!cQ3Nh*-X&=G)YWQ)iKNB@_$ER*NoV4~UkflJVq=V{F zDD>i_A7LSY|7?l$(un_w{+7D{lAoWfcnPoXxvgI@oFJN#}h>GdtEhzrvEm$npG0lTF39TGqo}b37DGf$(=Z|YzIywf?mY(-?k2&GQ zA5_Y^g49Fzl)Kr?-La{aWN4LGLYI*M$0Pyv==oIz4k%aCbndk0OQa0Npulup`mW!dI}M`XTL{=O0c9i_a*$1*lZ%y7Vy z`JxACRg{R^WczW3U5SfdQ*ZGsh4@LZprD|V$Skrq{dMl!$xWWj4K32kJAl<)XBxXm zX360H;nr!5o`^2EGNhb+!R;=DnLyQ~G2ZOQclqM<+m2L*^mBw(@#923L!y97-V3z4 z1{=9(LNWUMH#D-%8(_@E;iY!wP^Av5)A+5t5pjpdk z!!Fi(OCLf)Wif{ni4(5n2+e?0vE#39zLRrKC80k!np~5NzLh-fRuIhLGJ8%qXG?7F9YN=3gK?%_IJB0>!^i|o5fe&BYevF*`dEfDAf3?nLyY%o?H z6Zx2imq5oQcQgX`KK8hhT}6QJ>Ibj#4i28?9(fN$U3pt)4P>7!tnBL_xz;RhAA9); z3NJgzE=Y;QOI#mI?k!F9E)qb0DABg-9Q?FgT+j|GdwbJ#t~~wmy1KmDQbT0W(8}~_ zg!hPY^=$2;Lrh=pX^O!B>ub$Tr5y#RLWgA;&#El76O!}df3U2tS*nDKmL zVsEp2jFiTEP_&v0O#(==rNg>g=SbBHjE-+fVrl);FS~2rGe*j`Dki~?3j(tuL1-z{^#jn< zECyfASL_47G3ZxhNGXH3aAT+nWwtw6%CO@aRYY0Wz@y^fXwY8X_ClP+2!}B_*P}%F zd{ZXqEQGoMIA-_c4j?KQb`>BixGb%HstQOlGB~ zHE+ohRNLrPBE$h9BHK)7^P`sMJJPYv*|>*!na`>ZSY*zxEuK)97gX^Mw%3?%7o{*1 z9{)C-uSI`agr88s&-8)!Jslyz98Sa0vM3PAn2yZjg0Q~AG4e$cn&NZCBp?vD=SI;Q zAr`s?_%~am=GAOxCOD%CLx4(AyJQSOIc|7#-!dMLxNjK-gMmZkU99l(6xB%->Au{5YfJH4kwbsW! zYvSVL4=Jc|G0M{dGs&oM^1Tyq$YE<;?ZDIh!8R;>~KIQTo&*_gjqN zJEHnj_T)roQW(j$SH>Yc9fjxi)ID+0{3sCJ+W0HoH18xHM1?tzf(ucx`?t=?Bpld`v5WtP=fG! z!GIO+C8KQT$zHe2u}bky7^s`O5~zy1cO#}a%_tWe^YpHkqLj7XD}XO1y&<{}3*RZI zpj=n;J%fl1X5CVB6tP;ZL zsU^Yc?8hAXPhv>HWj=q{6k1O{EZx*Y(^h&WUV|ur&7u73*IN85`V@L0yp%}aI{zkd R+YD6br$u^*1MD5l0cGr3I0iP?Sc&@q!8t1Y*?=L%C#hEI1&EqpfHQ91%5ykgU=w z-kNApA_9rlsi+`m705y4Bmx3*iHaJOOUPZMgj|%|PkQ1nb=;ZVA3M9V@4nCXz4lYy zwOsGhi}2>dp+`dT4WXYkpkSD$T0<)-A*&Tn)8YMl_;mMMy7I|CnRU&tuh)FAxEB|L z%OtWQuQK|;`~>o&@d26P4-%OR>V>v)qHdfDX1l)_eUmJ|Fgdx?sa%eFBla3Z++AAD zY>O&dMYuXqNHcy-KT;h#+3g(Uxp2T*f`GQtJp4uG@hD z%PMu%z#h-MI61ih+e_zY(l`Rv)V-iX6#Helrh)F5`>L6n_YHnt=iw=v08(*4rVPKL zqK|ozUwDnL*+XT`rgBVvcq=S)B#i3VapybZrbBHdz#8-ci+5<;!5ENU_5CAevUcV2 z2QGqRkgryDn1B8bGWtV_zx_#fb_f-9clBeQhtErOIE>r{xwDV12mr>cf@f*$WU$ES zF`BH;1Jdx8`!$#rkzA|wuXnwK#BjdFn25Z&U7MQd;d#=5c?)(2iSUuFL^Y z^-IoWKE`~+NO9Q$Y|1to4>>ffuI z!)YvBg^!auGcnCT{(OsjmBUmiHNZ&lcyjV)2uJoSK2-9~(a2Hmm zR4L#aso@;Gj#EsE9XFEST;h#w;uS8n#4t^(aZPg6o3I;#cpmPbXq+&&54G@#is^Bj z@b+qFM6w@_TBKBoG@#6DhM^I1^bb?N^caDwd3M6#dJeh5AnQ@6|1RQi{JV`{Yyyt7 z+SG78S~bDyu>IjQJG;5y;>iH1`D%Quf5PC*;1I0P%sQ!Q zI6Gg?w(RpvlX?m5zYf}8q&Q<9ZkuSY&!LK3(0pVl_wG4I4g`75?fsAf2E`q}$;PV8r>nR_XWHjR4YyY@Mt#H^2&NS{ zy-0OXZ#i8;KE-FhNK=zI$`X-Wq4<_W6(~73)}&VybZsC!$Y~mxy>8>pt=W5}v5fpr z=;p7UG2?H5vtk|w5$uoR4aefiC;Uh$CM|?E*2=;O77?QQDC4fzpu7+(qwwW`pg0F7 zFr6jkAwmZ%+#W|a_(R6VmZypLmI9XyNNi?ZK`vsBLGa>?R?UzZ`|Gb{)Ci=Q87?1R zU#q7<`YQok7R4TD+Hq@8&F73~btTcZAci@VK8Yj_vR{EZf?5?7c}6AElN5wQ3?|>A zos^@Q-AU+}FQ;TxR-GnCK3(;$aIg-lHjseH>s?$;y`>Rni9H=|xKkZlp2j>UQ|F9o zt6n(-LbpvAvI>5e-x2Spxcl;>{{B3VS1x``zBXFl>NxmOxuOBVr4oF4sTiN}-dyI7 Zeo;Kg<<0~bLU7nf_#tIu-TLjt{{w>stf2q^ diff --git a/ios/EternalMonitorUITests/ConnectScreenTests.swift b/ios/EternalMonitorUITests/ConnectScreenTests.swift index e0164d28..17370a0e 100644 --- a/ios/EternalMonitorUITests/ConnectScreenTests.swift +++ b/ios/EternalMonitorUITests/ConnectScreenTests.swift @@ -73,7 +73,10 @@ final class ConnectScreenTests: XCTestCase { shot.name = "support-diagnostics"; shot.lifetime = .keepAlways; add(shot) app.buttons["diagnostics.export"].tap() let share = app.navigationBars["UIActivityContentView"] - XCTAssertTrue(share.waitForExistence(timeout: 10), app.debugDescription) + // On a cold simulator, Apple's remote share-sheet container can appear + // before its contents finish loading. Still require the document and + // export actions once the remote interface is ready. + XCTAssertTrue(share.waitForExistence(timeout: 30), app.debugDescription) XCTAssertTrue(share.otherElements["EternalMonitor-iPad-diagnostics"].waitForExistence(timeout: 5)) let documentType = share.otherElements.matching(NSPredicate(format: "label BEGINSWITH %@", "Text Document")).firstMatch XCTAssertTrue(documentType.waitForExistence(timeout: 5))