From abbae728434fa0670478e12216a1d94603a97daf Mon Sep 17 00:00:00 2001 From: Jeremy Date: Tue, 20 Oct 2026 03:31:05 +0000 Subject: [PATCH] test: synchronize caption browser dialogs and bound failures --- .../caption-dialog-ci-20261020/acceptance.md | 63 ++++++++++++++++ .../actual-captions.log | 35 +++++++++ .../captions-desktop.jpg | Bin 0 -> 103658 bytes .../captions-narrow.jpg | Bin 0 -> 45674 bytes .../cdp-regression.log | 3 + .../caption-dialog-ci-20261020/cleanup.json | 17 +++++ .../original-failure-excerpt.log | 6 ++ .../original-task-observation.json | 29 ++++++++ .../owned-cleanup-regression.log | 1 + .../qualification.json | 45 ++++++++++++ .../caption-dialog-ci-20261020/receipt.json | 41 +++++++++++ .../schema-cleanup-attempt-01.json | 13 ++++ .../schema-cleanup.json | 15 ++++ .../schema-reservation-attempt-01.json | 8 +++ .../schema-reservation.json | 8 +++ tests/browser_captions.cjs | 65 +++++++++++------ tests/browser_cdp_session.cjs | 58 +++++++++++++++ tests/test_browser_cdp_session.cjs | 67 ++++++++++++++++++ 18 files changed, 453 insertions(+), 21 deletions(-) create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/acceptance.md create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/actual-captions.log create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/captions-desktop.jpg create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/captions-narrow.jpg create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/cdp-regression.log create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/cleanup.json create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/original-failure-excerpt.log create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/original-task-observation.json create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/owned-cleanup-regression.log create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/qualification.json create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/receipt.json create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/schema-cleanup-attempt-01.json create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/schema-cleanup.json create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/schema-reservation-attempt-01.json create mode 100644 docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/schema-reservation.json create mode 100644 tests/browser_cdp_session.cjs create mode 100644 tests/test_browser_cdp_session.cjs diff --git a/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/acceptance.md b/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/acceptance.md new file mode 100644 index 00000000..449dd98e --- /dev/null +++ b/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/acceptance.md @@ -0,0 +1,63 @@ +# Caption browser dialog CI repair + +The cancelled obsolete PR105 duplicate run39349523584/job118390149863 reported +`No dialog is showing` at02:06:23, with no runtime exceptions. It produced no +completed page diagnostics before manual cancellation at03:22:40. The original +[observation](original-task-observation.json) and [failure excerpt](original-failure-excerpt.log) +retain its cancelled outcome and exact full-log/raw-response identities. A +same-head primary passed. This is a nondeterministic harness failure, with no +product-failure claim. A late modal blocking the old diagnostic evaluation is a +source-supported hypothesis; the hosted log contains no modal-event trace. + +The repair starts from published PR111 head +`0ba4db01f04a77c262eb4b397f88849e9688b5ab` on +`fix/captions-dialog-ci-qualification-20261020`. Its implementation write set is +`tests/browser_captions.cjs`, `tests/browser_cdp_session.cjs` and +`tests/test_browser_cdp_session.cjs`. Product code and all original assertions +are unchanged. The existing caption CI entrypoint awaits the focused regression +before launching the browser, so no workflow change is needed. + +Each modal expectation is armed before the triggering click. The helper waits +for the fresh exact confirm type/message, handles the selected decision once, +then awaits the original click command. Cancel retains the unsaved caption; +accept restores the saved caption; discard after a keyboard edit restores human +review. Unexpected and absent dialogs fail. No autoaccept or ignored protocol +error replaces these witnesses. + +CDP requests expire, timed-out replies are ignored, timers clear on terminal +outcomes, and socket closure/error drains pending requests. Click rejections +are observed immediately. Diagnostics skip a known open modal and otherwise +have a separate one-second deadline. The caption fixture reuses the accepted +browser startup and owned-child shutdown helpers, then removes only its own +temporary directory with bounded retries after all children exit. + +[Controlled protocol regression](cdp-regression.log) passed: a180ms delayed +opening reliably defeats the old100ms handling and yields the original-32602 +error; a blocked diagnostic expires. Event-owned cancel/accept/discard, +missing/wrong dialogs, trigger rejection, request timeout, late reply and +socket close/error cases pass. This controlled protocol reproduction does not +claim to reconstruct the original hosted browser scheduling. + +[Actual caption entrypoint](actual-captions.log), [source-bound receipt](receipt.json) +and [qualification](qualification.json) passed using PostgreSQL17.6, +Python3.12.14 and Chromium151. All original edit/draft/review/reopen/filter, +keyboard review reset, repeated-submit, cancel/discard, four-record exact ZIP +and390px assertions remain. The real browser observes modal decisions +`false,true,true`. The fixture uses the existing local controlled generation +provider; it is actual app/HTTP/PostgreSQL/Chromium evidence, with no live-model +or training claim. Desktop and narrow captures are retained beside the receipt. + +The existing [owned-child regression](owned-cleanup-regression.log), all three +Node syntax checks and `git diff --check` passed. [Child cleanup](cleanup.json) +confirms both owned handles exited before temporary removal. +[Schema cleanup](schema-cleanup.json) confirms the final preregistered fresh +schema was dropped and queried absent, with five records and zero workspace +Runs before disposal. The preliminary complete browser run used a different +preregistered schema, also dropped and queried absent. Its source predates the +CI-entrypoint regression call; only the final run is the source-bound acceptance. + +No heavy CPU suite, performance comparison, model-quality, scientific acceptance +or CUDA claim is made. Original failures and source attributions remain intact. +Root owns independent review, serial publication/integration after PR111 and +cleanup. The task worktree `/workspace/Tuldok-captions-dialog-ci-repair-20261020` +is retained-protected by its named branch until root accepts and disposes it. diff --git a/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/actual-captions.log b/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/actual-captions.log new file mode 100644 index 00000000..8fa4b2e7 --- /dev/null +++ b/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/actual-captions.log @@ -0,0 +1,35 @@ +PASS reproduced fixed100ms race: delayed180ms confirm rejects premature handling; blocked diagnostics time out +PASS fresh delayed cancel/accept/discard, absent dialog, trigger failure, bounded request, late reply and socket-close drainage +PASS unexpected dialog fails closed and socket error drains owned requests +[112014:112041:1020/032849.559242:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory +[112014:112041:1020/032849.565241:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112041:1020/032849.565717:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory +[112014:112041:1020/032849.565746:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory +[112014:112041:1020/032849.565752:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112053:1020/032849.581169:ERROR:content/browser/zygote_host/zygote_host_impl_linux.cc:279] Failed to adjust OOM score of renderer with pid 112055: Read-only file system (30) +[112014:112041:1020/032850.176012:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112041:1020/032850.250225:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112053:1020/032850.254782:ERROR:content/browser/zygote_host/zygote_host_impl_linux.cc:279] Failed to adjust OOM score of renderer with pid 112125: Read-only file system (30) +[112014:112014:1020/032850.278305:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: +[112014:112014:1020/032850.278374:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: + +DevTools listening on ws://127.0.0.1:46283/devtools/browser/5e6d27b3-ae4d-4450-985f-00473484f268 +[112014:112041:1020/032850.280676:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112041:1020/032850.280695:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112014:1020/032850.281416:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: +[112014:112014:1020/032850.285386:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: +[112014:112041:1020/032850.287808:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory +[112014:112041:1020/032850.287830:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory +[112014:112053:1020/032850.338429:ERROR:content/browser/zygote_host/zygote_host_impl_linux.cc:279] Failed to adjust OOM score of renderer with pid 112151: Read-only file system (30) +[112014:112053:1020/032850.379160:ERROR:content/browser/zygote_host/zygote_host_impl_linux.cc:279] Failed to adjust OOM score of renderer with pid 112160: Read-only file system (30) +[112014:112053:1020/032850.384271:ERROR:content/browser/zygote_host/zygote_host_impl_linux.cc:279] Failed to adjust OOM score of renderer with pid 112161: Read-only file system (30) +[112014:112014:1020/032850.405991:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: +[112014:112014:1020/032850.407079:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: +[112014:112041:1020/032850.407536:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112014:1020/032850.415146:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.Properties.GetAll: object_path= /org/freedesktop/UPower/devices/DisplayDevice: unknown error type: +[112014:112014:1020/032850.441651:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: +[112014:112041:1020/032850.441785:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112014:1020/032850.465917:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: +[112014:112041:1020/032850.466040:ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix") +[112014:112014:1020/032850.475312:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: +Caption Chromium edit/draft/review/reopen/filter/export, keyboard review reset, discard, repeated-submit and narrow layout passed. /tmp/tuldok-caption-dialog-repair/qa/image-caption-exports/run-Gj153o diff --git a/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/captions-desktop.jpg b/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/captions-desktop.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51d8745ba94bfbf51b5e1135e3844a4a88a8d570 GIT binary patch literal 103658 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

ssY8tp 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

ns5thH$u=ft>WYZxVhImV|?w(kP zs;ZgxI|xK>#>6~ZZVo1dTPQ(8uYw_|-1r2FY)IK;4ZBZ@3JcDivMR5b)BC+FvU=IzHQOIon-Q`(UhY3wwR>{ZTN!?p8I<=n1!WUDGv8|JFoRJ$lGFEC1Nzrp{Xv zo!6YJB{ye2%0`)a@HWgU$3T(VRqE=L6U67mQ;%|;WrMvug;dSza!2}91B$)SqX5w+CMp{QdTvdt?#hvb!zdcDcf&p6BHOQzOlI#dOLrC(BEK6hTsf?|?Ph zq5sl!4ZepF-Tb_Sl3hmbfX>ozfcu2yZZvZ!+3SQtJ``AO3e*r*`1Lk>b6L8|k#O53 z1OO+v@1rLg^~E^!I(j4D?BW{XyOJpYo@8RQ*ZV-tWRa>0zmohT_Gu?e*ttKe{(BOD z72cn=e)<#OHeB*<|AX9vmz4k^W{p0II<7+lOAt{iuqoQUpvHN-VdM6;)^-j{*t7pW z1jD6);7pe^>_ojFCY)ggoJ8X8Gg3I#mUyuBmRu3qvhv`NI?8pdZMI-eM&z6>Iq=sp zBKhn1pnQu)1tGxhc2ULdnP0~T^~=-P|Kh5QU(&BC^K*!(#P(-!Kui0#8B(%#cV-dP zvOQ?&A1g_%cc@?K0bK+)`+yd{#`EUksYmT4d&OfVy&867B4)uQ>b7LltsW-~W|M^1 z=+c;jD6X9k{MEww)n4;31$h3g1=Dr!RDaUn*o-V;zX<;wvjzdUT7LAOXg8)K< zRg|H-v2RgHOI=r)rvK=`>OfRly>OoyLpIBE&*(<3T{Dd>wV!~d2RjJ)MQU4?W;*2r zA-5v=!zwi&9X7^3G2T&!R4}+T$)~rSX{}u(P_-PMYU-*?&(!(dV>Q=~x2h zHR7?-2PEu(2Y%n?omaKxx_?!9a{?m6tWdp_0;E?{Dq4?`86%cY15p_X(w`;ZOCM8tTTPkY3z^&It9yMvs}cke`50yq*41X;v9h+LQK-tIB9f zxJC&E+pyjo!N9IpH5f8e(pzcYy`SBeI9B(hvp0>onm$jlkk!t~rBRzus_i$M?4XnW z9OyaSKjb~fYyOlJSWr?XII_tXU0%IDicjiHR5fPCM`c`pEwpKbW#j;gWMkEA_}peq zD)8^4E0ypA(iJ|j;q{$KdBKQmMLbRAzdh_(sB)E9U10@(JGuHO3Go z25Agy1F77p+0(@(3G`Xj-*`o&&lauM_@%6Z&wkhXktB{4z03Z@W0;{$FIijBy|mQA zhpkYAPijN6mcPGYkB4%B+OLYl66z1ZBA_=#U4_d5`pd2QwXc^AFh-^O0p`k;j+qk< zYR>7q$p+W^%DN1}n-IdVkV8=*(hSzy!pNVa>~fdyVE4*~`&mYuZV@NCiojbZgB_!N zOYRwNS#_;2uAKF&F{RH&cy)VAVcykCqExw!=X*GM1TGC1LuHflwFQzzRjK{U4+%y&TvN8^6r(T@wh^&AHAz=W=1Sh;;w7Jzy`^d4xb^d9gz#-d z`()h39B)a@1iX2qXMq`9NU)g&Y|pD!gBmz#T0Hxr*ob|gFWWpQzcX(DG-!po~jo4RF)a127ropPSAspWCM zt?PYYaCEJKA`YG><~3rOBDo@=Cs-`2Tlbdn5|;6TYETScaQ{0m63DKAdXYT>R&QK{ z5Zp3!9Lur(%x}L%M;e=MSB^2eWao#nvqNpWLD;S|suimxM1Pn}Uh3iZcG}H@X4&!9 zlo_Q$kq3|flcs{x3oi~B*ptWrz#kA7ntJRb>Q&oEH|nSbbXU9kTjTS3%Q*O0gP$jE z@Xq!=FMIdiKa_EF*}^pzRaeQTnW`V|vbo80jmKVMPa+?2kYTZE^WL1o|9_C>vH;b= zjp1`Nw4SKP)V;u8+%V^LwluM;H;+wvK|84P^_$*SbJ8*9xU}nDaoN{7jg!8RF`H+s zzmaTE|JP$beCOm&`cB3kJu@K7x#j&>{;~ebR9MA)J?Cmu#C&PTW3$pR+_G=ck%RoG zRP@IbD_O~?x6L?4&4Cb1g*&NXUEor`rx;IxdIii)_!%U1ffz-81RK(lXwKnUK~5Ol z=iq1Il0fdO*XhbHF-iOP6TO-4zI1xvi&;Gnn&n^eM1< zOUfZ^fMKI15XJRJq5OPWqf|V$RQ#>T!qMIWd>ccVc{xcN9Nv7S<9WIKJBEn>yI`j^ zh~@$7e3WA0f`5Q7X}cFQ=DTE2BDo$|O#Ij|u^GI}8Ewk_er4=^Zv?E%cq52@z@jvH zM9pg0897nMW7=O8A=DvvLp&|ETdjL1VlDaE3Y8>#zS~v*yvzv z0@9b{Gib-1jayi#Dy)jUF)mr48@AG3_=ce`%R{8fVx20>jvaTA6Ig~W{^N=GLw2kF zBRlabmkffBLhM*5wMhQ%UiEbJPk?97{1d+Hg37da$Gnt$+rtlpVqa-k{sh$M{RFst z*vqUucSQ90sG?q|pzA=q#lQl`W~M-J>bmkp5Z>9?zE)CR>{l^K;*{AoBa>s zoK0eq*rSPA_-KUHgj|lZh}Ci9uE^q%Mqy*L@RY+@l30IPl?8UN|1sE=I`RmrUi2|= zNhitA()s?gcD^x>*`(bP7I8^qnJ+R%hvPt(UV@;?9>Q5UdKB4#YUks{rt)P?^~T2| z9ED=sp0I-zSPL~D3NRT=rAYQ`uVIiS${p}^e3LVK@U-hnU099x?sW|Hs~Yhc&gW`@+~z5l|4&P*fm6x)M49DkYFmQwUubB>_SakSb!Q zg`NV2Dv$u7N)OFOZz`d8sY($9MG!1s*4fLo);VYI=RWs4d+&Sies=zVkz_t&jLbR4 znD2bYuQXh`K6qb6;}^ybSv56mv&(1YDd2RFpYprY>-qj%jEckuz|n zK2cPldV8IGh}udm=qc#STof-`>VDQl1SE>O19=#94xiS!2BJ7viHAZUJC+SMHtNNz za+XI0iD{--fS>ZOtW4L4mmt|wH7dd@Q5|eE3%MYapF8|B`qNvH`tw*+!$pHSksLv zBlm?Q4zrR{ZnbY#_z&)TV-q6)e5&D>J3)kJ?8J;G?IZ*z1uE7w+rL;#@9rMoG#+N# zllwmh%l-@HZsACjacZwH*yzE>IAHuYD56IXGc|jyUq;VYye)yC7cLkKdX{t#9_pA$ zQ+nF__{;u}du7<*pK_CTR8F7C_+`=L+$Rt1%bL%8S=e4?%GGznH}3`C|9R-1&c_E% z!`yD?IBXnV;3hGDutA#Uj&~oFe#RFnMf)Bb(SG)!2GZ!8(9s05^TI4B@W1Q*^*kJG zDdwUMR)M7CC0raup+8S+L_bohxF`vKQ!k$Z029DFcjh-9LUM>=t%jj1?`mxpfgs@R zQn?>&Rz++F{)s7L4h@Q+sZul`E25&L<+(%{@YN>v=@P%I4a>-!j||)fh_tu$8rETy zampo`JTPqu4{G=KEI4{^{LgW6@aGuWM`msH{XR}aevT1ti#w7#KgWsR&#|YDX6+XK zHvXRfJV|%vt^RlFy@#h#8*;N%ob$LA#^EP+5M)BktHu{oMWH`yevz#iwEo&PuF06X zO*jTUm(Pvbe6!0-4YO?sfKJVi z@2&hlPEUXj-CiL+9aI0BEBKRBaTAFI36$7axus4RdSWZCHnT#XGyISKJ|N0}ne=EO zyF_b{3zr2QRWM<3Y{6op|AohxO%=YIw5F6ufGtDqA^K0}PprS(F?zvR6Pe|7VL_Z@ z`Xv)mX?^4QsofgIHq4#$7`+if_XLzjdJdwee@kW8Qabkbakvk=_H(uJVuQqpQ6qEF z<{KZD_E!w1j6!LK@G;+)Ely@jm2aP1%hSEXJSHXMZo(gIRlzYMomPW0EtON*KRS zRI%2%JY`GeFs^OuG^mo1GDdqpK?gRMtytq{=Vql-W88~ApKX4ghE0v?Q#TOP5o6p- z<)qrBV#X5H2e0~?E?CN}$ak;_4GPj&F!RA`oFAA+=mFtldGEVeu6 zD9ZTM3aq~}Y6^<^pyl9Aw`hS+6(Q5pb)q5U{R03%)ThT|C33h|0X^so_7~->Dp_h+?UabEq88z|L~R1>78qXOlioz=IxK4zkFz`R*$5j?8D-2>?%O42Of_SWA1h3Cw$ zU_8HP=a_QR=|{!kQ=s&oY}**xg=D|+SUrQlKPRCU(a7*>`bwevRP% z#_OM#fMz?*=S)f=v4BP0-MW>MTiG&8@;}&YuJnoXneOEZc>?*t_BChn_re~vL&~dP zgnqDX#0ULe*#G9tQ2pGsA8egkZ+M0=^$?4?PTa&utpV@rj&Yd?o*kP4Lp+7+Qaqk6B;}*;@{e-@d;( zps8jacvYuuL5Ta-z&B)*`X|Qck=b$6@pI@>oWb3ndt_-EGA#VeRBMa5+j)}`T9RCMHD36}m25!62_GW%!LTR{2#kS8IuMKl|l+>U8rg_%-r zFJ(7Z)N-ub0@18U)f$ogv<<^^D+|T(&s*Y-!6q5+v^fHAFF`XaBTdf`zx!Rax!slYD_LxaNu=b48~w}>XOAb5to`IwV5 z0eXQ#=mFXXvo_sdcR#bmH|nUtUHEZnJ`!psklQ#&@g@Z@uTzQ@<=#y5zD@J%O) zHz#}+qpEZ_Ra%}9 z&57D;fp=HMFL<4-zkz(1b`evK zXCkEak)BZT{jnrrf3kc_zT zqrt0U;)>wo@Ll-r)vLP$F~>!wI~SCiH?q!u#rcCX%}~zuDrvKe!HZJMgM*f~<*7R6 zdgaPip6tnpUqYPZp!`|}OXCp!+zfe3OTlUv%G#SXl%Zgy(!Y}%=*rZ!21*9#bjSLm09OwLbM)#n&1 z>J*l6%R~r}R)WA+vT6ZJqcWccd)(4;LOm<1r1UCjQp&RBtH6S0GpVu z82;|5g!`F$f!D8jU2{WBI8@~}8^HlZeJ!C;6yEL^v3=7u&m3$_BIk|vw%|CWN{}y6 zsuE3cov%M8L^Y?z5}oy)wBZj$LG;|JUN)U-E<$8dky2K-542#zvqN8~KeRE*$IKuO zCBP4*+VB;1!qtlC%VxKBBP+-%kGU?~`*5$&*ZX78%Lp->lP?s8gB4TYH1OdjanRL( z%ILdO3U=L$akw7U@!>W)0uZUJm3Q3S3BFV!MOzkCyANERsI`|cW_%GOd(~EVMI}_G z<~0T0={uR5iMW0e`7$*e@SwooYaeG_58y3OnpXrPV4s4tySV{5s4d5PU|}cldn=V(F-!TKTc0 zRNV(VkyTz;WdT(B8b#eJP;7acR=&NutZ^B2g_ z)hua{NIfrD@o~Gi{eiTL@jgJD{rSaDE?JlSNlLxh>Q7Uk8m>RsOg-rC%JqwiGe@p_ z^s}co`z$L~MsZ}f3VQ(~2NsUijOJ+4<@G=y_N82`#3s&6pq=cf^|?HzRL~YjS_MCE zFJ?~B`<`yLehtVjF?Afs9-&+oOfz}UAcU+0O!&fU%kQ}DoH~)Hf;}0H%IUV?;a%#& z0dxDQ6+Bo-lNoT$d9>A}G>ibT_l$1(bfVLbs;Zwae&W=bvkv{efF7hb2h0R$mWX5a zLh86u$GhW;6)%KIEPfdOMcL#OX-v5Y<}2BEv6YE=Wua2EsXQd43xj>WN$?f&q^2rS z`yR$C09dP6?CZx1qAuJ6aY+cCJ#f1Pbt7umy3$-whb-BM;ZgktJN5p(eL{FFIL zmWom}HN_sz18A7(iV$hTr3>j6iIqmo4>+3W((a2^fJV3^W2n55gJFPVmk>(g+CIMt zl}lXqR!zzPqF+2b@41gMZ8+c8UcX$;?{k8?18kfOm|(BmDso{sc{tQ%ITY-;$s~fN(V!cFN@NHjhD@_BN^`G?yUpIN!wnFiejy|6pua$pCCiaQlX72LeGvBjgX4CBUEDR22{`YANjb;~Y z-eBzz0aGttl-y*zKJ!$=soha2fVBLwXoVyS@|XNBCZ;F|!LZjANC+7ZOG_IaM5)8) z;Xo8`a3)5{fSXZM*vGFI%2*YyrxEOSmrjegG^kDvp4~V7T zT&zGrx?`HeFB8M>i$zqw+{y!*6{QqFk``!JS zAG3G*zUv=u=Dqzg<`#)1-mBvSxzkd2D1TN&-C{iq_PEYM#1w+^jJ>^+XTqsO1Y5GN zP&2;0t&i9zw8ZDv65j2s_A$zB|2^9h!NEfQ656TF(>Gs5lJ<_Yoost}o%;TyQ+oBI z_Zo){7T-J4*z+4{^|{Gnx?Z4}SWU`w(3_k+#$F1AL9MRWPBfgLW`NT#aPV4Qxke?xDSiEURT+G z#k6nHPK;yR*D6O5y-8f5!l|leBa2J-nAtRm-~@e;gducFK?n;m*onFJ zh9xGNTh9E>U4Z^{==*W1js>J(+$z>U_hq$_vP$(w$-x}pLMN%SuTIz5Y+mxnsTw`sz86njITv~RMG-3d zcDN(LMV1OCKTn9@#RYX349!EWVozud%D-vz^T`pmHE89_E%e55LueMxCb- zD>=jQ)5iyQfb%DAcJ->)=|ZzA-Dk}?R(^k?JOp0-GaJHK<9gR)Hui)+diM7(?fDbs zft&BoY>1bk@>xQBqJL+<+x)`Kt@9&3F@yOZ2ZkEr5Z+;G_7!b)EFRKBtb;*2v6VNO;t z21N+qT-yf&ykokgy+XRfs8d|beQ3vFmtEd+&H8xV4UiLpcJ5xDwenS|>J#tvp ztE&eCpzwysziW5{%azol7c}?u;Nsw;0ZOCUZ>p#3Xp%{Uku-#I0L$&HYz?f4p5+O= zZp<1ikAAxV2ZRfp0m^FrXNO#PbeoXpf`bTf_&|L&st*Vo9ye-MKX_+|Xb$;$0N5hTw1 zL4**x^oN`0rOI~)r(>R`4sFHWas9oNbDfQ?efOt~BOlLCWyfEF{rAs+DU@rq03Y$S z$WqxF-0;=5w7%N|PRH+Lb27i`3YYC>rCg14O1kK0%66vbT(d&g={f*yJ6zpqOYhCz zf7wGG83y;s-O_s$_r)9=_{A(>T8(wN{|??>|3ZAXKjBM1das^Nw{$F12{R%h;ysPq zvQ=tQ%f`!#x)iLsw@>E(jzs0Zdssv+FXG)nd+GJpi|MLjWo9Ehl{}a(PfUfkqP(W+ zA?p_p?a4j1YF;s;dDWiAO3yvwbdKWfmTzomuaAelVavZXr{)D49pVpb9}vm9kB{zT6a>?bF5YlH z#0*X-=c#&=eMLL(t=&^~(m4B4;rqI%`Q)h@TR*#}m!Gj=wru{#E>CxL&($0q$Q#Xi z6Y`U@s~|Zj@}G7*hW^ubNFR6F#tPdW>R+8-f3FY!yyfvLwer$AO4u4!qNDsdHj(_wf_rmNDG$u^nJ4kjv2HSh zGz7m#Eeh6Y??cJtp0DS8SDviM+rPN+vQRsz2YNnx;Fm6ZA4j)dprYT-CXbXBPTu9o z*w!h4DN|nQu6CAk%50n#+{W^pE2f6IL_kAR>|g|lKBGwAQB3~L7c-`W!kzJ?8MLx1 zQF1}E>Ab2*){@9^u#J-(%p(iUL_sgZMVikG16*C*%> zL&a`;mz`LH>*Hv#C+iCpVct)Umb|9Rkgds)<91Tg-h@$yM72r^HM-&g|JGFS)*%Pw z7~4qcPm8FXSY3NTd#Hs$FWpm}CZ%rDMKJ6NSfLGm)v5X>I(y<>V*aZ^)QaS2F$~=V zvw>FeCRq2V$3(WrwFZpKXfI?kFJ^x62nA2yRJBNtU;Y3ZKw4#W#nrk7rH)LTO)@M$ zR5#N#r8woa@5l>=Etf$2MC-!>d#f4gT-2a=AMfPj5Wtivkk7KhB36Wx0$We2ha8RATyzv7#YBJrF21#L8x<$AX2XGKHM8^LDMs6 z3cfae2}93I3MuSTf3c&|bbQ+3;ea&Rp)Oa_X!%b5J5OT>jI%?7sa*>Rm?CvHsrFX- z>!oHfq7kTE%Sa(Obrs^K$}zw0C1^vYYPuNZN~iB_*j0!bS4tFR&+Wlt8}MLdu?3f# zxpsO=MLu{p7kxE;6EnllamlwXSK*Ym2G^krJ=a%Cz2+ZWfResD*K+GyN>p&^u8p3e3_uVyf(?0P7A99a3JyeO;Zj`V5hOXd2 z6ETQ5d;Ox#;XQT()=kVEaKm2-l{h(cA%mP5hb$^6v=r_{yf zY+hK}tai0YK($8!xbdlZoo=gI zoS>v@JiI;SNL;P)*Jzh~B)+?1GNW#3YUs+ub8ISTk$8#%3Z4pWQJX2!r@$^ySk`GD z`MZ#^5@HJR^S4Qt*tpO9$I?>&CNtdcVw%&p8U080AIzFGPXEU(NY3GV{;m6W*qS!~ z9XkJ6D&mjOnWbPEKN`&fd;egYEJE)GvY7Ld|8YkD*MIi@anE^f@CP#k_)pBS;oaOh z3IT7dKMABuWcWpSN^ZMACsemf)a4=Jp9pyFUs^tWqzqyI|%;<3Z}6%?p3}`kN+aq72mq}C7Ij*G}AH#dGX`5N$#8-*hiSl zchB7>#xr@d*uIbQ!b=yarAoQC7p59S3_g(;NUy$*ZAJLpvC9<7Td-5_zYV?OX3UZj zcpCIaGu*Rmwc4s?-Hhw`-w6#&$`7{GTOa;tMWl6)?@g~viuc<;y7T6bW-i3+o!g$c z2%diVdvBiqshPl&2Rhd4Zeg0zfA7xyKQ*&@{s?i_@9W?G)hEvWKk}oS={|9o|c@+%uWJM$wKi!OorPEUMsKUYM3ewb~a;s1L2{11*;eG(Smts?xb za3?R~SAiO|b!HZQ0kBkyht?k_wA>GSO_WO?Z7(WIozL;fIV*?d^8*X0Fz zD$ElLJ#TE!W7F&9Hrr(ii?u-wTY+Ygb$fL?SrRlNUM#8jJ@)@#m3W?Z@7E-PXF9Gk z^}`RgFJ&j!D}YsZn4>tKH z-Xk_2GUtb0o@M)2KjySBwDocwx#)HJGOQmrF(s}w^XO;JdJiib^>3+%KTADWI%y`O zRt%V(Nr5)#Nk7Wgd*8C}WpDrB;qRxN`l;3MyZ(a=8wY&pH(7^E0|T1nr+Y27?>%Pw z_o4s4&Vaxd)bZqMzC0({+&L);~iJ<>7)7y&*n| zinaN#qB2{7|5QfDAr_M^{lsAAhUA~nXF2I*UMW6kzIS&Er}+@V%}Qi-fWou^3r36R zEw}(f7q!>DU&!e!{UZ80Ap;fZ(QX%*Bh}2?lkAyZPu?hK#rUoccf)lb^=1vewG>A> zsUkCzaY=?>3#la9VR1_#9?*s8faUcQqL?&C$5oqa5O~4%j{mje13tITJXn$5?RDz= z#c065As3aZG8+K4&aW5O+TF5(6w5jyLM>KF2(u#s;)~pQRtr<9+9ucTy03M(kJV2A znj25PaZ{sMC3f;6k+zEov$4?NO0^}^xhfShfiH0CI&`W|Vkz+6(`H)a&gIj&`r^1j zmn$Z>V+W=rDt@rtvi<7d@xCLw>)XX2Y-ub~VIl=l*>Z(G%hwX2quXDSDFSM>y)We} zi}BjbZ>nxpGf&Ta2I^gZea+s@nV`_&@vf3S&+gl4qOoD%AtJnGIT!&?DG zDl4~-qN`~Q;e%`8xrB007UB?_{ z*Z}~!cR42tMwVm%?R&$_*X1QCIiA931t>yBy1opyyd%fO&1~!C z7}VB@JlCy*$TD3<5*I(u(lxm@VV|RFCUjFC!azY!VYjo(^{&vFl=SSCBc_fQj^&5< zDHO<|hCOn%U2#Ui<#IsxG9DL88+*5@-~%P&4`G#MQP54xIyh8Q)+(N=k?xdw%j1jk zlLMtsL8V@6eh6dc6ScU4maDX&P(MLaS>JmbUh6Rb{foe)^aTPKB(c@_ayQZ=BQHqi zD~weE&yF)fr5Ni!H?%!rzu|syYyN4gmR8PJu}yHOa;K?l6-U;7C0O<`hfuyxUWhN(HE`YAKeq4XTPJN1u z1yKBY&gkB$GH@GA^-FNhwicaiJkc{;7;NRm5f^tJbD3V;mE$soJAeq*2hEk@#5zrB zdgTc2vARAnb|s&C!}rUS^??d~DoeQp!s-`SF<_lb%0j4{9Ro1l9n<|{n$jk<^Z0?= z#p4-3(<5q1rRxUUq&HH6dCKcJLk=WNP zGLccFhpxrH(~y7mI?k;^-#TsB^pf91%5HVsG(fJ>#d@iIH8kA(O%d&mI`yVO#NtEc z14dN%)=zr8Kk>$`g$w+y&_CZpK_u7I zeJ970Am%1>P1_PYTvHUYb&b(|x53frG24FEKf>2zs0%s<1(uJSXE-8U4L4z*Pab~8 z_HQA-KMVOeR`|#{)TKK-R12k)NlEKmLAW@Fc2y=H6~|5@%cRE!Ey4T+EyJOQ!)g78 zK?>nil^azlh_Up0N!j8O9R`e8h#ppM4dJ6`k+MO5YlM@tXqE$~1>^jq&xgO-(7Oi` zVPfrr0}m8jiI1Wm#$K=uRrk)(@rl4~ILsSKDcLbQ1nuiQ2lJzYPkr0XQI)Mq(}f1u z<-bdqPBY%wGKn}$61)H&O!2kXV)pp*^~`c=GdN90sS=tI{<2cu8IW3Rm~7O3S8)qw zm{sQ-7R^%SKO%=b+`nYOQ2`y1LM=UTGuHN@F&6s0s7x}QsAC>RUd6#;2A*x5WcXD# zn)^POM<`1xFy9iFB$?f z=MX!l#i1#f@94sGp~MVy6>W0Yf~I*HB+R6^raH7RXt`gAg}{_m^aXN_ z)tZA#fkR!#pnbt5do3@1e}0Lv&=x9b^cOy-%M{>7{=oHGoVTofa0#B{|Ipu3P*VK}nM>*<`sQSHl(ZlZ8>1=R$wE4$ zu*58M*LSjy+?-^tgYacBq40SakkT1pbj@zPpff<0)=*(VY=|N088pA#dVE5rA`oBe{wUdDO1EQe0J)8YRdFMOe54?CKkPeexWom36Y~ZmLt~9=J>tA`lG`79KW+a6dXHCi6F)Vg`GCj-wX2{k5 zWSc0d!;9BWk~v^WsVM1fupmgVU4IY*O zNS8U*2-hu(qP+?O5@<3iXsBNHbn`0u2iqIrCL}6qzbQmK;K_h-9gFxcC+*Q4ABY(| zwJNNN_ia#(lrkz%H&GqO>AKmlz7=Urpgvlufb|n#?hS(j%UMf%VxD*@!rMQh&3n3}}VwsC>%RwdW66!p!$K5xlq#v~t4U2#@g%rYPm zX#Vw41~0b2<63W)#7TJ)?L;nFXkwzYcfrP4p(uz)4RQ{Wibc;nJtdaR=|JzVtAr9n zVyNKe1(G2mX7y`!uu84K4Akno_7ApWS1gBQ_y*st47{{4Ju=r@xnbCEbe50wsIw&m zK)<+groa&6Vz?WzaeFYZ}x?C4-_C{ zijRmjmXdk|8cUtt$OdJnUU8lqz~rWkM^)LtA()z^nPZ+$^f8jJiC{(W1w!D}@b@!V z>lWz>(*m6vb|>t7IHe5z* zl;%!Ul}MI^I)bs*RwY;hSZ+(}MJZ>WODh>kM|FZh{a1DISVg?8Cy0x7Shf>pVlYUd z%*zAO6W7ZSj~CA5DL{QH5tE6A>YU|aP#?*JuIgpdjS7`P2x(Q!+Gpyizr1yrh94|O zAn$U**m}CDv)cV}%n!DY_0z{0%m*T#|WW4Z+**F z8y|RkGoue)yi8UfOiQX6Pxxd^SE9c~Eiq%7F-glxYx1X0)-c~~rm0&c%N?hoZSy;0 zI*-lRn9|FkyyI7jsfievab&d5s`%tDb_EVI0~Zv?PfaDHz|I#1m3nf(Nwaztipby_ z{S>A7cm>LEiTK)ixB?rVG8B;#I8nVSd?faxYD&NxrpES2p zZsO{(%G?08@Ccgc$tB8w!R5y7FX!unYAh6D1eQ@d7V2|Pb_aOFztAJV{DcZ?(Jo#t zH>E@X4<%_gA(t4=5)Z>%&^(p&l3ru(KkH+&&?D`M9fc=#)}@xo_M^pDOkYS2dp+sL z`&KcSe;iaS<1o7{vU)B_Wfgb+V=vW7dsewE`?W|#Ae+Arz>G$S*(>;FI#)@a}`(6dvs=aCRj$8!rpeg!)mUb#mW8GdOveG+*FCN2v%l5QcrltM}`08 zcf$HiD$#D0XX-ml?%ZHw6Z|*edY825LzNsm77r{q??aCc_X0-diG5H zX{+*J$P)BOJGR1O1q-o`*_D6SrR2WH{9(S-(I0G!6TuRZ?bM5AZehG0MX?Pu0HFpz z@oL=7b>xv{=qt>|^DG{A7-8?jSu6GO6bH!6Ljj3)+x*?(xzEf|^V$!-pU&-yKp0yK z-E2E)BjnFM+L5iwXKnvAtD2f9SWYmm@jjKA(-7q4?uV0u$-E86Dq83!j>Bj$B(&YO zYvUz$(0{R~b!bvgAT`yyhWy@vFId*lwjI;Y$Q2%_gKD>+#ml}1z;Cw?S;VMaYi}O7 zMb@q(`Wt#(3Q9%$!mRNyA=Nx&K$iba(6L!MXcAO@jrBf+fK)QEJi>KpIXby~z zl%H^auo~Ax*&irA889O~UVW#czf4&m(;Rh}*B(UzN&9d@{NKZ6%9K-ho$qNcxN~@% zP@YFTdO?KvrYyGE)(Xbt4(mXhV1}i`Qu-L&t6-kt?IZpYxX0hml<4R8;qX#@pYu0n zF9+y)Wtp(V3rV9E2~0Po%|RI+z}_(s4K+*`e&N7<)|tR~=^`dWSE(hl9_;yZY}F&c z9jVs(QmZKfk{C}ziGd=?g^yC!)UVc$23@{qNZdT|BwnxiaDLZyoSn@ibcB?m`%Yb= z+*&!qn&Bx0#D)QjAZRf$xfzK?kIpJ6-c4Wi^-MKgGA8DM0p{G@^zIrj{v69%BhT^E zruQE#`Y!VGnc#g-B^vol>n2%DSkpnpO6lGG5KL2O*p8;n-FI~!f~dnvOXZFYz11{; z8eQn4l)OxZa>0UW;B}s__dtZfC1ZqCXF7;mu97jznJT7i?+!Z>mF%y-^I#(bxqs4X zO)I_m(WbLOLi{&_>vAmJlX$U+9( zCyZ_k9j^X(+BxTq{(7vXLAK-meoSqZyxcY5N~ekFCt;$sY|1OyaTO9lQHOvQm*L?N zSeNPdP+I`x5Klr7i5z}`(k2)6{Y?wrA<#J>u{Dub!Fj4*t+;yf_u2Q6xg(-+{OoTu z=fu2>DHR|@I%YT$itSA9Cm0oH?$1(HN^aKKqzZ87T)yKXfJ*V{!Hlery1{(fcUK_~ zk}y1yudxJiMKP@x#pRC#M{CS-4M}+x5qXU;4Y;a-LrO^g2z6QH6?P-BJVzYY1qZSo z$&&*Jl|7CkM|k^k`wEZ+7J^ECDsw@F{zo;81%;QH5CRwu819Z)MK?ZIRe6NhOajWy zftT!%+_(u~reh(`@b?RnPv_h_KZ^|Yv?$-BJ(-8{yT&1>jBqcZMhZ}vM^~+{wPaTu zQv8k7+-oDq9I~5it+DSJ&JKHOq5HYHh1%*W&(sIWZjU*WOYQ6P3V^@8L^ZEf4 zq0Ud*8Gl2n4+hRuD?Xq5I=l)GLqWBhlq-0T2HSNp9A89A;1|RZi_Cc54%-Qtd}*O* zPp;JcCWI@Ut{yA`6A=z5*o~Vz;xSkQ$0q8hqY23Z&62BzK5~hIv69gI_7Z2yvcPr= zY6lc_VxLSb;+v?!DD}wPo<}=naX*}A9?IrJh923 z(PAhpx5u|`?%fjgrLK&UqA;PSJzcDG)Uac`T~T&yOPX~VJst_JeE6jQT4qC90b3@z zlk?@Om*7+gvXa0gJtE+c(n^VRAQ}$HY&{nw@Mz3$8knmi)sv&U-`8|2~Zvc}%0*yKdK7$jTOe4yTqGF{e@*&t;6iYw0e+ne&CKdRfI z5RL_>OAOwdF@z?5!#ZF}*t9`1nff;r@BErXRr)td;V%%`zn~QI_wmGPmx@(H=B8in zZ=-5>R2aMEvN9IfV+)vkrh8p%NI8W+lCdTLco=c)Qqxje%BVEANt5qVB;3FQFJ4?7 zcBa>Ha$?B+oWgi?@Y)%d>sYoSeu`T8k%8(&e43@vyN&`Cm&2*_rooAd<=b6fS=ya} z_9I>#Ew>mEWg-wQ4~kb@q;q)XiKh7DU+P$tlrGPQ@fKakg=iECtp;<5xb%o{tv~R@W4`(t#;n4R~v$ zvSep&Pe1Ga@9||Le_}RS%6k^l;fn@}!>&=~&`nRE|f zS1Yn*$Mt&H_cZo`^ISx#8$0z8sfyPK977<~ZW(t+M%Q6=E|=KdqH#ljNfz{LbIl1( zVi$VKbH{X}!>)^UJdBs_0X>~vshdU(cvbq2(LZ%ayLIj?x)}H8NZT3}TvKs(c}3Rf zn@X1YuzI&PgKcOVOOHf<7D?Brq#F;=I$~CkF{9=qqDSR8U<8824>lkRJS+Zm?{PPA zo^F~jnMpmO+gw`AI~>ZHf;_FQ4-hnm z$xxQd*1Q@66}|r4`DGv{_zN z{sP@eHMDhCtkx4DK;c-hjLlnjN>7c`>F=p#q_3S0T}3PJI|%(2?Y`RW%lPi39uq>8 z>$tN%13wqCYSQyypLKntk9M61PhM_Ug6~_US~vioJR!k%?=mJB>Jih?RnT(1gApA} z9wefgj}H0{N%$4#E4dQ$4BV=Rz98-Hc~@B5I}r7Kp_Ek_z%|BrPqSMn+0f3pVdTjJ z5YB^SO&|jj0m;1LN(F7}r-N|#fm;<~6#Ixi=_bx}P;Ivsh*4YzRRw1tJmPxj+5ldB zTf^1D0h=nZVsJ(e)Rdx6t3(39z4VG($oFys7?|OTUMhbSkd?m*#xD3JSsRD78<`Nh zbj;i03?#q7=w50x)5qUdjRaFsNAT@#PW$CzG5?s!}tUl@=`)G&@* z)w4tT&W3zGnF_a%F7IBlPKoDR(?V^JyoSi)l)-W7(eJD%w_x$g8RC^I zKsvu%nr8EW%B&oZWXTsP*k#p}c@lY$a&4kfMU?NR{?&M~($ZVm#)tr^Qi%|F)VzU@ z7i~t%q@7@RS+*3jS*_L9keUi)Z=_f@dm*}xiTQ=UTM94^BSD7MxmuxAiuLg*unm`# z&A|7kojfOwaDKlK85}<038BgXsrj8ltRUiE^Vl%k-iCjop`~S6{POLuD5)@$-%7H> zj&F1Z-|o=?HN0X>U83Rmr!XV+7x)32bp7l z!iS>Wv^(hTz~jYoz)%OeZF_yQp5*$ZOp)bdWh@t(_pk!(k`E>3MIsQv#0VC*|E9Lv-q4)BvvRzHii9 zo)#FpqpbN}5`DV`Io z0?q%z_o>qZXNPqr<2qj1JY7)m&bvJ}yF=YQWZOHUzHIm1Nx&ZTj=iq+T)(@91?|n; zpbNsSQO5VtQkGUh0Bnm1kv_{pZnZ@c$xQ64@x?(iabRY}jm@1Yr*F+kJ%GDfVT9-3sA3(ihRW;iu z>gN=UjG3_xBm9h)5{c($rni=Qfsj~GZjZ@_%fxDB>h^+3hxV;J6h|58_yigNqu9FZbA%1d5k=%MB?!==+pq8_iw!9hj#Rp^?hv3nQ3l zj^8WqIIOu;CvgAC=Gm|=ZzRj4P0#q7tp|HtbI{AGNN;wjyU06}dDIS4f3>KgLpi)C z$~c1&4aUy}6B%7g3=6+RD_W-oZ>%w96R}ukZzCKnI^T&HWBJZi5{*Kh_BXcPF6ney zJE?kzlRYZhM*`SV@k{TcJ~5KY+&(uB ze}7a;%%S777CnpV#Zv+OBbYk$RYKL4m&L1iZz=jvd^Z!z!Qr*Y)ZqwJ`C*BTil(FF-z^;iaQc_H^hMVMs8?abU@~llg(cmPY1nW zygO0pbGE=`_#IaP+di?}%u$|ih|mXTk0E~(0+=cE{}JMfQs{TZd~{pe2s=J4x_KJP2qeltFd-}h56P|eShjcqhPBZqmV zK-uC(@`29#`q+7C4U;*6jWYQm`Lh$N@v^;=McK9sAPXgrW(dg9?N| z0-+ZXaJ!Y>6A~aar3467LNB61KnMX90!UYy0t%ucShnYvbI+M?{o~HunS1`Y_v9bK z%o_6Y&RTEQdY|X{JjL5-1IEIV6N;D1yX5YSjywAKCiG>q$S_M3wN0YNsFh0r0@1~u zkJ@JYoOT$O@5|4))^zk5^~Vr(nQz!#GPO@_$iaw?)g<(Vg@2@n}izGX@(w;u~WZ*}{=te9ZC1ZWTp zXpk@Qp|aF6X4`Up0jm)giv%T(?Fs>a3|TaWjR$8ZXN5SF>rUm{<<_H`+}Z%wZ=Mz# zn!P93M6yhJ3aJPet&w+!Zgn2}Dc9T<1BZCN`7VNm0(_~HV#~}Z+#D7}U9w$we$`f$ z8FfzV%vaDep}x10P+M&kv{k4^UP zQc|qD`vRLoany(*RUk~eo-^G3V?a2lgBl@(VVn}B#-A^+>k!s2PvcU22H1F?z%;gc zFX`e+qiFjM?^n3;E{LFAlR_<;ZkXTR8-NI(MKT+$Rm_1})2DKwGS!Ez&%bg8@odFT zz$Bu{l<3*EqRQ0NHLUBMd6mS5yq}REOOJKj^hN3g2Lf2^3M?Imb4|(^z~cmis(be_ z#`4qKCi%osFB?{c{1fGuV>6<7xXqe9ccfp6PG5`^7Os^BOCKV&93>xAk-51@QX4Q8 zRF}3%K3|YJBcABMV6rr|w@p+!_V#ka+#mh| zM%1|R!F`r5Q-E`qOF}XUMl~EOoe+tvdI(y1%i$m-gpMe;PFZoLR>2h7-*mPXWyF_Q znW(^Ejr2YC%LkX!A~TO0DlyH@WfLGj^8;xzsf}u!#vs-EF<#oW*A0%CRwq;;$ww*6 zU=_q9(!o)T=6;M5m9F1LrUyU=@DVD6?`HSTi5Vii+tusD#t&1f@1Fd=h?aEK^m1r` zB`fxTyFbw-p0wj$R$=u}d!zz8 zbg|;4tRS)#Q3i5KnYQGW0pIW!+W}2Y%ZtmHysEHP423TUnJCcj%aB)+wlW1;0w_?^8=f zGR)K1zRj(}@x7Y~+L(b5PfoSoh{T1lb@4f$Fue9)UVvtma{)Z6U~y9J!}>yWd!R-D`{r%gYk5@!Gr(jW3OROzikl5! zaEnHpKg~=vUR#!>rQ__YGV~J(iRVYDp*TGzZu%ijCJA|dkZN@eU)cI3*EME#&@H31 z^vn;R%qCs^~fMI z?JfZy`^DwildhttUt=XRO%7qd@$$q8lvJz5hzbDJO)&bh@k;(4=yioX3{cgf* zLoC@kz;-%Zrml`HmM*0$kC<==Kk;eE?oQE;&A>8&y}^+&KYk(k__&Wxfi zrT09fAc3l4XUs%0Nf3SBagi>Txfg#-a8c$hvD2m}u2Wy}dD-i+to_?y78;!tw<&E{_x7;)aAy5?B0j} zN^3(#&8uhpJ7E<`&Lb097do)u>W%x!@<(Uu^3$3?KXO&2ZkI$Ba*7H1hFYpHtH&DX#hzx(_U_!QVd(&aP6q598|+$E;@*b*GIx8L_tWlYN=IC)akr7i z_l)2APHk4Yk!{deabL_l(W>rLLNR-is?4wQTCix34L#x!zl32IsiKJay+I3RqaZ3v zRg8KU4Yt^!pLx9YJ0DH~tiSQkKaJ4 zCJ}n1e0^E_nKk}eCZB76@AG0A<^F9`Z#{2$Uiktl8NP;bz}OE*k=-~ekqR0~OHe86 zI?w)5J?t4kAyXH+9=s5o~)G6|P=aDf3tcdKA^xAAKS#==RyTpQo4Ykm{Gy+8ak~>u@>z_?0!a4D9x! zx+8VLYv;-*l{JxPOZQjox!}eonNBZk-MKf?9!R(fvV^IoZdhAwRpUE*9Y-;x5|HQE zaHHOrYbO&Dv*jq>^>Hgl@)<@=dRwlVkr?ifVVi5?mdpP*QSOe<_Vo(I9Ls_Pual)G z*l8RmLia#z9RoyBE&e=b{_JKW=Hqd(ih9&C2I-@y!H)FJ+T6p9u1))i*D_6ZoN)Ba z{@({{@-+W3b85?Jdm^54nGdNbw;3<-sR;eLQx}>$8fw!IM}l&^>E(}q_=9R*8>!k; z*&WpWvkA^t$Aam$tTK{u3f32m2mVc9KA8MJPCUYgH}=-I1CI5MtA232&rqtcfwY_& zjAG+;K4kHzRml;Jt{UeK0v_FYSTLsYyq-2S@uJ)oG#Czv)?lEF%4-1py-yz8Vka&8 zA7|Xrf6S|}ad(Ucr{Z9*guV@`2=4vXl_WYh$pSO@U{Bjwa*qNeO! z#9t`6ekgon*l8q<<&-fr=hI#L$C)ntf4@fjn$8^~1bL3FlL-%9c>O6HXK(&=Rv`hP zdOSWlwNqWIe!!ycZvs1(46yPjdwA_O)BJ+hrRB2je~ zQC~g;c7C4<;l?*)xX+KSZhvQcUt?5vb^_(XhepUURRM;nR*tG5tA@>`&X)`!L$Sdeinb!3?_@K)eE1EjPzHdy4X@UA{4y(L? z&2_bNZizyQGGv-++se04Fhg2mi^rM#3hX?pl($x)LU@iU&@BwN+29csE|(6ZDzf>H zXR0o}`t56R{d#L!p*Zgxwl^#3f?rlZRkDiCh!l%1MVGCuan{uYN+=~WUw(aCVS|$L zo^&-c=Tkqa%LL3-Ul^BBv`qttKnENZ4!-19Bnhc4cQ*pSu)o{ARet@dw*9(0k@O02y zs4umpl_Qg}F^73Mt>8e-Pd1-N(tgQ@mGk5$2=952ZN~m{K)xj0J6ej&H_7ApuNaX( zZ$>f9$byVga|ds8l>JZ$=B2dNQ>e>Hhi{h8m(TQ^c)FQslTh8wD730L_o+XHvvd9$d=TaZj>u$S+l7xAIzg*Vj^kOY}0zUW9Ln> zluNJDMZQP9yyBA;Bar!(Td3O2P%Cs`txmbK8GS9CE4hQP^9M_O@o{;(kv@IQ=lrcL zzZE#5b~-%DGVM7`6!|FS8@8bM*Lq4wZ`f$g`1(c&hJJT>R5zR~Ju*3Onv5{-eXcUu zIG4J+_(Ui{xlq_vN0zXWj{M{XH?#HDDsn|SLqHVNvG&|k3YtB?R_i7FH4icr{d0>c zvttEmX&Nd%YNpA?@KY1xueY~26B7BgmbH%+%>vA$F0j7Cq=$Nul^PTZ!I)zLY5lR)D4ch| zN>oYsas?+9+@UEKVX)GUiXv#b+($$D>?!VJ^L{Q%Cq9NDQZ$}cV_$dnUh|*#AgzVB zxlKZZxc5}?uW|6wt#bg%9SLEGN0neNIcUr+>*`W#AE`#ePi>4+KKCK;i^N{!{)xti z-vQTExcP=fD^+Qa(eWE>nMSzhLA#+codN`m9lv3}jFNG~` zQxUs6+!e8sE0gK}B3rKh{eHOqj%)0Pn53kM0`&$6fWCH_soQv6B|CI+UL#TflA&?W z_XDE(VK&tpL%}%Ic~dzRsklPQ`eeJgBrO$HE1VLQAz}y^q*BIe14XLHee7=#FUkG)vK< zf*Yal&uyR9hBRy4<&<)WNW6jqhtLsVNQ)nugNV$#<&9Uu^FoTK$!g4_t-K|qDpHI> z(4vFdlry6Mdq*z`U^Qln#RH=AS0}6Mj8=>@T+<=tg{}2v!0RjT5eUYsms!IauN;j{ zlRg0NTia!3Up$+!i~>t~>0oI}I-7x7wD;!U<6j6cXx+L;+TUNa9pdyOITUMNK|#IV za)L!yV^>OJaHHgo<>ZO9VdVg0hYC*FPzYRCj3iwuLvLc7_8&qTz3qtlQM4qbeBf$} z_N6-uve~A_#ATG(P*#iTr;LJ%vS7q*Kt44(Wp)oB`DUr$67g&Wqw8vsj#<#CT+8Qx zjmr(%&w*l&(EjKkzGZ*uqkx@k(@AC6W4h+%WL`muEmzx<3z!3Z%D~q5BLocj& zF91&){f^8uuK*tQ?p#6!7_`Z@de`}B*I7`Ll15OPjQ~L8vG|*Ovgf~0vl93%_oS7o zGS7XX1##`^vQJ=dB+XH;^eVvr!@ljO>bIgrj|CU(-ClzaNRBSXZL8D=P0xNTTD2cN z`2WE}#Md|hv7z179nVHkF}hLqp?8@7_8|XH=v~?~#uQ=q)?+J9anMF)VG-jQ^@>H% zwACN0D_ZT2B&A2lIlSwK$H&=D_@*l*lf=-K)|L*N0FC^&kJNZ?jA%YTO91jpuR%#E z^RrtsuSG_6dWlXEk1-M6_Ma*=(3sc$J7jqxZd~&6qp5aZusebwxgzI27nuz9=klo6XsM?kXMCP{gpm=|ua!ZS;;0{LLDHC5Z5K%^9X z%jC$Mtk##$JkG^lb)Tw?>E}j410fuueAt0I;odLX3jg2>S_&Tre9W0oYR6tN$3dmm z`hwhXrUDRsZGL{WJFP9#qUwuW&A6A8A7M4^N?zVyb78SQl~YBXE@bMj>{CBf1&&@E z%?k2s(Z})}%cxbvSePrup~$wJTc}N^QQ){}F2AWEcqOv1)G){PkW_`&&vWQR9XI0U zVXkEIx=NI=j{@<%qc>Tq{6~VL!h8VmrSsV6$$Ms*j+u~eFBgjEfD;4ZDqxiXA1@nj zvQj~??4HZsQ6ziu-Ca~vZac#^* zsKhoz0@FDwCPQk&-u3R^P3>Ud2uN~e#Aj%K$fNp8P0YB+i^Bq*yN}Mlo>6&I%D9#> zG?IbI;VfnHTBK({)u-6Hc?gSX=is zyi`=NB1wsjSnJIe3;h+Je(RVufEG$OOBhq+c8#sp@exH%w;B7 z^;pklY&h6UDMhR-b}JNRR5#B#+cNBfQa`TmLN@M+d5n+(pg0R}8Au1^_*`fJbnOy% z6xPk5{7 zs%GsZaWHL|)p$Meru3pr>tBu^&s4~a=?JmIbqLMGO^kQXbo=nFN>P~=kR-+ibPwZ0wL z5wzeiY{!T689|P8h@A;BYp5Cd`6ZL4a0I;W*!qi(*Q!`V{)na~=^4Qy!j57KpHiS3!bGCdLHa8sgvGujh zi{U#rX!#2Y5e1iu#^QQ!+1pTvs^Nz;!-WXrob?spm4lkVQP-{t2Px5`t-Gdl{cl%= zKvfso``&{;c!r)&`abch9)Yk31seYpXnA*3Siw>#9Z~+g;NblO_F<D>Q&^3c7 zOrdk>kVyv!sWuR)IvZP~ygxMaJ_&l2U`a_VDaBRFQEeD;5WmZybcjQ^RO?$|iR@^8 zuL+egLWd58X`VlWm%WcB-wQs>Oo^hCP{kBvx1UZ( zel4}8+hN`>pmj+ElB_~Z6q0qwOOOr8Y_o_BO}@4AAPY4qRnAh`0zJRQcf!scX}Wku z_10z6_3?87P!lsUxJ`D-3mg9Mh1KP%LRa?u7^T&&Q&+YtF__HfIsO?x+WbTL=B}?+ zi_}uEIuwsI#WVpG6fj9mPVIBT@vo1b(>!zKE**fsiqv+vmK66azys2D3fxC(Ih8

*FM|mO5oHO=Q%YbQqV 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 literal 0 HcmV?d00001 diff --git a/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/captions-narrow.jpg b/docs/plans/lab-workflow-reliability/reports/caption-dialog-ci-20261020/captions-narrow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28a1549efe1fa6b77a2e4737f46337f93575f981 GIT binary patch literal 45674 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[file,require('node:crypto').createHash('sha256').update(fs.readFileSync(path.join(root,file))).digest('hex')])); +let ws, session, inspect; +const dialogChecks=[]; const errors=[]; const pause=ms=>new Promise(resolve=>setTimeout(resolve,ms)); -async function until(fn){for(let i=0;i<150;i++){const value=await fn();if(value)return value;await pause(100);}throw Error('Timed out');} +async function until(fn){const deadline=performance.now()+15000;while(performance.now(){ - fs.mkdirSync(qaDirectory(root,'image-caption-exports'),{recursive:true}); + await require('./test_browser_cdp_session.cjs').verifyCDPSession(); const server=launch('python3',['-u','tests/browser_server.py','--port','0','--data',path.join(temporary,'data')],{cwd:root,stdio:['ignore','pipe','pipe']}); let output='',stderr='';server.stdout.on('data',data=>output+=data);server.stderr.on('data',data=>stderr+=data); const port=await until(()=>output.match(/127\.0\.0\.1:(\d+)/)?.[1]); await fixtureAuth.register('http://127.0.0.1:'+port,path.join(temporary,'data'),root); - launch(process.env.BROWSER||'/usr/bin/chromium',['--headless','--no-sandbox','--disable-gpu','--no-first-run','--no-default-browser-check','--remote-debugging-port=0','--window-size=1400,950','--user-data-dir='+path.join(temporary,'browser'),'about:blank'],{stdio:['ignore','ignore','inherit'],env:{...process.env,HOME:temporary,XDG_CONFIG_HOME:temporary,XDG_CACHE_HOME:temporary}}); + const browser=launch(process.env.BROWSER||'/usr/bin/chromium',['--headless','--no-sandbox','--disable-gpu','--no-first-run','--no-default-browser-check','--remote-debugging-port=0','--window-size=1400,950','--user-data-dir='+path.join(temporary,'browser'),'about:blank'],{stdio:['ignore','ignore','inherit'],env:{...process.env,XDG_CONFIG_HOME:temporary,XDG_CACHE_HOME:temporary}}); const active=path.join(temporary,'browser','DevToolsActivePort'); - const debugPort=await until(()=>fs.existsSync(active)&&fs.readFileSync(active,'utf8').split('\n')[0]); - const tabs=await(await fetch('http://127.0.0.1:'+debugPort+'/json')).json(); + const debugPort=await waitForDebugger(browser,active); + const tabs=await(await fetch('http://127.0.0.1:'+debugPort+'/json',{signal:AbortSignal.timeout(10000)})).json(); const target=tabs.find(tab=>tab.type==='page' && tab.url==='about:blank'); assert.ok(target,'Expected the explicitly launched blank page target'); ws=new WebSocket(target.webSocketDebuggerUrl); - await new Promise((resolve,reject)=>{ws.onopen=resolve;ws.onerror=reject;}); - let id=0;const pending=new Map(); - ws.onmessage=event=>{const message=JSON.parse(event.data);loads.observe(message);if(message.id){const task=pending.get(message.id);pending.delete(message.id);message.error?task.reject(message.error):task.resolve(message.result);}if(message.method==='Runtime.exceptionThrown')errors.push(message.params.exceptionDetails);}; - const send=(method,params={})=>new Promise((resolve,reject)=>{pending.set(++id,{resolve,reject});ws.send(JSON.stringify({id,method,params}));}); + await new Promise((resolve,reject)=>{ + const timer=setTimeout(()=>reject(Error('CDP connection timed out')),10000); + ws.onopen=()=>{clearTimeout(timer);resolve();};ws.onerror=()=>{clearTimeout(timer);reject(Error('CDP connection failed'));}; + }); + session=cdpSession(ws,{onEvent:message=>{loads.observe(message);if(message.method==='Runtime.exceptionThrown')errors.push(message.params.exceptionDetails);}}); + const {send}=session; const evaluate=async expression=>{const result=await send('Runtime.evaluate',{expression,awaitPromise:true,returnByValue:true});if(result.exceptionDetails)throw Error(JSON.stringify(result.exceptionDetails));return result.result.value;}; - inspect=()=>evaluate('JSON.stringify({url:location.href,ready:document.readyState,notice:document.getElementById("notice")?.textContent,body:document.body?.innerText.slice(0,1500),viewport:innerWidth,documentWidth:document.documentElement.scrollWidth,overflow:[...document.querySelectorAll("body *")].filter(e=>e.getBoundingClientRect().right>innerWidth || e.scrollWidth>e.clientWidth+1).map(e=>({tag:e.tagName,id:e.id,class:e.className,right:e.getBoundingClientRect().right,width:e.getBoundingClientRect().width})).slice(0,30)})'); + inspect=()=>send('Runtime.evaluate',{expression:'JSON.stringify({url:location.href,ready:document.readyState,notice:document.getElementById("notice")?.textContent,body:document.body?.innerText.slice(0,1500),viewport:innerWidth,documentWidth:document.documentElement.scrollWidth,overflow:[...document.querySelectorAll("body *")].filter(e=>e.getBoundingClientRect().right>innerWidth || e.scrollWidth>e.clientWidth+1).map(e=>({tag:e.tagName,id:e.id,class:e.className,right:e.getBoundingClientRect().right,width:e.getBoundingClientRect().width})).slice(0,30)})',awaitPromise:true,returnByValue:true},1000).then(value=>value.result?.value); const click=id=>evaluate('document.getElementById('+JSON.stringify(id)+').click()'); const fill=(id,value)=>evaluate('(()=>{const e=document.getElementById('+JSON.stringify(id)+');e.value='+JSON.stringify(value)+';e.dispatchEvent(new Event("input",{bubbles:true}));e.dispatchEvent(new Event("change",{bubbles:true}));})()'); await send('Page.enable');await send('Page.setLifecycleEventsEnabled',{enabled:true});await send('Runtime.enable'); @@ -67,10 +75,14 @@ function launch(command,args,options={}){const child=spawn(command,args,options) assert.equal(await evaluate('document.getElementById("caption").value'),'A dark canvas in a procedural rectangle test scene.'); // Unsaved caption changes survive cancellation of a navigation prompt. await fill('caption','Keep this unsaved caption'); - const blockedNavigation=click('reload'); - await pause(100);await send('Page.handleJavaScriptDialog',{accept:false});await blockedNavigation; + const discardMessage='Discard unsaved annotation, rights-note, response or judgment edits?'; + const answerDiscard=async accept=>{ + const event=await session.withDialog(()=>click('reload'),{accept,message:discardMessage}); + dialogChecks.push({type:event.type,message:event.message,accept}); + }; + await answerDiscard(false); assert.equal(await evaluate('document.getElementById("caption").value'),'Keep this unsaved caption'); - const reload=click('reload');await pause(100);await send('Page.handleJavaScriptDialog',{accept:true});await reload; + await answerDiscard(true); await until(()=>evaluate('document.getElementById("caption").value==="A dark canvas in a procedural rectangle test scene."')); await fill('record-review','human_reviewed'); await evaluate('document.getElementById("editor").requestSubmit();document.getElementById("editor").requestSubmit();'); @@ -84,7 +96,7 @@ function launch(command,args,options={}){const child=spawn(command,args,options) await evaluate('document.getElementById("caption").focus();document.getElementById("caption").setSelectionRange(0,0)'); await send('Input.insertText',{text:'A test view. '}); assert.equal(await evaluate('document.getElementById("record-review").value'),'draft'); - const discard=click('reload');await pause(100);await send('Page.handleJavaScriptDialog',{accept:true});await discard; + await answerDiscard(true); await until(()=>evaluate('document.getElementById("record-review").value==="human_reviewed"')); // A matching draft caption is visible before review filtering and must be excluded afterward. await openName(names[4]);await fill('task','image_caption');await fill('caption','A dark canvas in a procedural rectangle test scene.'); @@ -101,14 +113,25 @@ function launch(command,args,options={}){const child=spawn(command,args,options) const release=await evaluate('document.querySelector("#release-result a").href'); const archive=await fetch(release);assert.equal(archive.status,200); const zipPath=path.join(temporary,'captions.zip');fs.writeFileSync(zipPath,Buffer.from(await archive.arrayBuffer())); - const {execFileSync}=require('node:child_process'); execFileSync('python3',['-c',`import json,zipfile;z=zipfile.ZipFile(${JSON.stringify(zipPath)});m=json.loads(z.read('manifest.json'));assert m['format']=='image_caption_v1';assert len(m['records'])==4;assert len(m['warnings'])==4;assert all(w.startswith('Small image:') for w in m['warnings']);assert set(m['split_mapping'].values())=={'train','val','test'};[(lambda rows: (len(rows)>0 or (_ for _ in ()).throw(AssertionError('Empty split'))))([json.loads(x) for x in z.read(s+'/metadata.jsonl').splitlines()]) for s in ('train','val','test')]`]); assert.ok((await evaluate('document.getElementById("notice").textContent')).includes('4 export warnings; inspect manifest.json.')); const desktop=await send('Page.captureScreenshot',screenshotOptions); - fs.writeFileSync(path.join(qaDirectory(root,'image-caption-exports'),'captions-desktop.jpg'),Buffer.from(desktop.data,'base64')); + fs.writeFileSync(path.join(report,'captions-desktop.jpg'),Buffer.from(desktop.data,'base64')); await send('Emulation.setDeviceMetricsOverride',{width:390,height:844,deviceScaleFactor:1,mobile:false}); const shot=await send('Page.captureScreenshot',screenshotOptions); - fs.writeFileSync(path.join(qaDirectory(root,'image-caption-exports'),'captions-narrow.jpg'),Buffer.from(shot.data,'base64')); + fs.writeFileSync(path.join(report,'captions-narrow.jpg'),Buffer.from(shot.data,'base64')); assert.ok(await evaluate('document.documentElement.scrollWidth<=innerWidth'), 'Narrow caption layout must not overflow'); - assert.deepEqual(errors,[]);console.log('Caption Chromium edit/draft/review/reopen/filter/export, keyboard review reset, discard, repeated-submit and narrow layout passed.'); -})().catch(async error=>{console.error(error);console.error('Runtime errors:',JSON.stringify(errors));if(inspect)try{console.error('Page diagnostics:',await inspect());}catch(diagnostic){console.error('Diagnostics failed:',diagnostic);}process.exitCode=1;}).finally(async()=>{if(ws)ws.close();for(const child of children)child.kill();await pause(200);fs.rmSync(temporary,{recursive:true,force:true});}); + assert.deepEqual(errors,[]); + fs.writeFileSync(path.join(report,'receipt.json'),JSON.stringify({status:'passed',command:'node tests/browser_captions.cjs',source_commit:execFileSync('git',['rev-parse','HEAD'],{cwd:root,encoding:'utf8'}).trim(),source_sha256:sourceHashes,browser:(await send('Browser.getVersion')).product,catalog_id:JSON.parse(fs.readFileSync(path.join(temporary,'data','.tuldok.json'),'utf8')).dataset_id,dialog_checks:dialogChecks,exported_records:4,zip_sha256:require('node:crypto').createHash('sha256').update(fs.readFileSync(zipPath)).digest('hex'),checks:['cancel preserves unsaved caption','discard restores saved caption','keyboard edit resets review; discard restores human review','draft exclusion and exact caption ZIP','reopen, filters, repeated submit and390px layout'],scope:'Actual app/PostgreSQL/Chromium caption journey with existing controlled generation provider; no model-quality claim'},null,2)+'\n'); + console.log('Caption Chromium edit/draft/review/reopen/filter/export, keyboard review reset, discard, repeated-submit and narrow layout passed.',report); +})().catch(async error=>{ + console.error(error);console.error('Runtime errors:',JSON.stringify(errors)); + if(session?.hasDialog())console.error('Page diagnostics skipped: JavaScript dialog is open.'); + else if(inspect)try{console.error('Page diagnostics:',await inspect());}catch(diagnostic){console.error('Diagnostics failed:',diagnostic);} + process.exitCode=1; +}).finally(async()=>{ + if(session)session.close();else if(ws)ws.close(); + await stopOwnedChildren(children); + fs.rmSync(temporary,{recursive:true,force:true,maxRetries:10,retryDelay:100}); + fs.writeFileSync(path.join(report,'cleanup.json'),JSON.stringify({temporary,removed:!fs.existsSync(temporary),children:children.map(child=>({pid:child.pid,exit_code:child.exitCode,signal:child.signalCode})),scope:'Only test-owned child handles; all exited before temporary removal'},null,2)+'\n'); +}).catch(error=>{console.error('Owned caption fixture cleanup failed:',error);process.exitCode=1;}); diff --git a/tests/browser_cdp_session.cjs b/tests/browser_cdp_session.cjs new file mode 100644 index 00000000..0be82af4 --- /dev/null +++ b/tests/browser_cdp_session.cjs @@ -0,0 +1,58 @@ +'use strict'; +// Test-owned protocol requests and modal expectations share one socket lifetime. +function cdpSession(socket,{timeoutMs=15000,onEvent=()=>{}}={}){ + let sequence=0,closed=false,dialog=null,expectation=null; + const pending=new Map(); + function fail(error){ + closed=true; + for(const task of pending.values()){clearTimeout(task.timer);task.reject(error);} + pending.clear();expectation?.reject(error); + } + function send(method,params={},budgetMs=timeoutMs){ + return new Promise((resolve,reject)=>{ + if(closed){reject(Error('CDP socket is closed'));return;} + const id=++sequence; + const timer=setTimeout(()=>{pending.delete(id);reject(Error('CDP timeout: '+method));},budgetMs); + pending.set(id,{resolve,reject,timer}); + try{socket.send(JSON.stringify({id,method,params}));} + catch(error){clearTimeout(timer);pending.delete(id);reject(error);} + }); + } + socket.addEventListener('message',event=>{ + const message=JSON.parse(event.data); + if(message.id){ + const task=pending.get(message.id); + if(!task)return; // Replies may arrive after the owning request timed out. + pending.delete(message.id);clearTimeout(task.timer); + message.error?task.reject(Object.assign(Error(message.error.message),{code:message.error.code})):task.resolve(message.result); + return; + } + if(message.method==='Page.javascriptDialogOpening'){ + dialog=message.params;expectation?.resolve(dialog); + } + if(message.method==='Page.javascriptDialogClosed')dialog=null; + onEvent(message); + }); + socket.addEventListener('close',()=>fail(Error('CDP socket closed'))); + socket.addEventListener('error',()=>fail(Error('CDP socket failed'))); + async function withDialog(action,{accept,type='confirm',message:expectedMessage,waitMs=timeoutMs}={}){ + if(expectation||dialog)throw Error('A CDP dialog is already owned'); + let timer,triggered,own; + const opened=new Promise((resolve,reject)=>{ + own={resolve,reject};expectation=own; + timer=setTimeout(()=>reject(Error('CDP dialog opening timed out')),waitMs); + }); + try{ + // Arm the event before triggering. The action itself may wait for dismissal. + triggered=Promise.resolve().then(action); + triggered.catch(error=>own.reject(error)); + const event=await opened; + if(event.type!==type||event.message!==expectedMessage)throw Error('Unexpected CDP dialog: '+JSON.stringify(event)); + await send('Page.handleJavaScriptDialog',{accept}); + await triggered; + return event; + }finally{clearTimeout(timer);if(expectation===own)expectation=null;} + } + return {send,withDialog,hasDialog:()=>dialog!==null,close(){fail(Error('CDP session disposed'));socket.close();}}; +} +module.exports={cdpSession}; diff --git a/tests/test_browser_cdp_session.cjs b/tests/test_browser_cdp_session.cjs new file mode 100644 index 00000000..2f05d359 --- /dev/null +++ b/tests/test_browser_cdp_session.cjs @@ -0,0 +1,67 @@ +'use strict'; +// Controlled protocol timing proves synchronization/deadlines, not product UI. +const assert=require('node:assert/strict'); +const {cdpSession}=require('./browser_cdp_session.cjs'); +const pause=ms=>new Promise(resolve=>setTimeout(resolve,ms)); +const message='Discard unsaved annotation, rights-note, response or judgment edits?'; +class Socket extends EventTarget{ + constructor(){super();this.dialog=false;this.decisions=[];this.held=[];this.timers=[];} + receive(value){this.dispatchEvent(new MessageEvent('message',{data:JSON.stringify(value)}));} + send(raw){ + const {id,method,params}=JSON.parse(raw);this.lastId=id; + if(method==='Runtime.evaluate'&¶ms.expression==='open'){ + this.held.push(id); + this.timers.push(setTimeout(()=>{this.dialog=true;this.receive({method:'Page.javascriptDialogOpening',params:{type:'confirm',message}});},180));return; + } + if(method==='Runtime.never'||method==='Runtime.evaluate'&&this.dialog){this.held.push(id);return;} + if(method==='Page.handleJavaScriptDialog'){ + if(!this.dialog){this.receive({id,error:{code:-32602,message:'No dialog is showing'}});return;} + this.decisions.push(params.accept);this.dialog=false;this.receive({method:'Page.javascriptDialogClosed',params:{result:params.accept}}); + for(const held of this.held.splice(0))this.receive({id:held,result:{result:{value:true}}}); + } + this.receive({id,result:{result:{value:true}}}); + } + close(){this.timers.forEach(clearTimeout);this.dispatchEvent(new Event('close'));} +} +async function verifyCDPSession(){ + const oldSocket=new Socket(),old=cdpSession(oldSocket,{timeoutMs:500}); + try{ + const click=old.send('Runtime.evaluate',{expression:'open'});click.catch(()=>{}); + await pause(100); + await assert.rejects(old.send('Page.handleJavaScriptDialog',{accept:false}),error=>error.code===-32602&&error.message==='No dialog is showing'); + await pause(100);assert.equal(old.hasDialog(),true,'The real protocol opening arrives after the obsolete fixed wait'); + const started=performance.now(); + await assert.rejects(old.send('Runtime.evaluate',{expression:'diagnostics'},25),/CDP timeout: Runtime.evaluate/); + assert.ok(performance.now()-started<250,'Late-modal diagnostics must terminate within their own budget'); + console.log('PASS reproduced fixed100ms race: delayed180ms confirm rejects premature handling; blocked diagnostics time out'); + }finally{old.close();} + const socket=new Socket(),session=cdpSession(socket,{timeoutMs:500}); + try{ + for(const accept of [false,true,true]){ + const event=await session.withDialog(()=>session.send('Runtime.evaluate',{expression:'open'}),{accept,message}); + assert.equal(event.type,'confirm');assert.equal(session.hasDialog(),false); + } + assert.deepEqual(socket.decisions,[false,true,true],'Each newly observed dialog is handled exactly once with its selected decision'); + await assert.rejects(session.withDialog(()=>Promise.resolve(),{accept:true,message,waitMs:20}),/dialog opening timed out/); + await assert.rejects(session.withDialog(()=>Promise.reject(Error('Trigger failed')),{accept:true,message}),/Trigger failed/); + await assert.rejects(session.send('Runtime.never',{},20),/CDP timeout/); + assert.doesNotThrow(()=>socket.receive({id:socket.lastId,result:{}}),'Late timed-out replies are harmless'); + await session.send('Browser.getVersion'); + const pending=session.send('Runtime.never');const rejected=assert.rejects(pending,/socket closed/);socket.close();await rejected; + console.log('PASS fresh delayed cancel/accept/discard, absent dialog, trigger failure, bounded request, late reply and socket-close drainage'); + }finally{session.close();} + for(const kind of ['wrong','error']){ + const socket=new Socket(),session=cdpSession(socket,{timeoutMs:500}); + try{ + if(kind==='wrong'){ + await assert.rejects(session.withDialog(()=>session.send('Runtime.evaluate',{expression:'open'}),{accept:true,message:'Wrong prompt'}),/Unexpected CDP dialog/); + assert.deepEqual(socket.decisions,[],'An unexpected prompt is never autoaccepted'); + }else{ + const pending=session.send('Runtime.never'),rejected=assert.rejects(pending,/socket failed/);socket.dispatchEvent(new Event('error'));await rejected; + } + }finally{session.close();} + } + console.log('PASS unexpected dialog fails closed and socket error drains owned requests'); +} +module.exports={verifyCDPSession}; +if(require.main===module)verifyCDPSession().catch(error=>{console.error(error);process.exitCode=1;});