From e5a72a00c262857f0865f92daa120bf354d3d36c Mon Sep 17 00:00:00 2001 From: huangruiteng Date: Mon, 26 Oct 2026 20:20:05 +0800 Subject: [PATCH 1/3] feat(explore): inherit machine exploration mode across Goals Signed-off-by: huangruiteng --- .../rfcs/desktop-execution-frontends-v0.md | 2 +- .../desktop-execution-frontends-v0.zh-CN.md | 2 +- .../device-desktop.png | Bin 0 -> 92706 bytes .../goal-inheritance-desktop.png | Bin 0 -> 93316 bytes .../goal-inheritance-narrow.png | Bin 0 -> 37617 bytes loopx/capabilities/configuration_ui.py | 37 +++- loopx/capabilities/explore/README.md | 43 ++++- loopx/capabilities/explore/README.zh-CN.md | 32 +++- loopx/capabilities/explore/activation.py | 8 +- .../explore/composition_frontier.py | 2 + loopx/capabilities/explore/harness_gate.py | 19 +-- .../capabilities/explore/machine_defaults.py | 107 ++++++++++++ .../capabilities/explore/research_evidence.py | 4 +- .../capabilities/explore/research_frontier.py | 8 +- loopx/capabilities/explore/turn_context.py | 16 +- .../machine_configuration/builtins.py | 8 + loopx/chat_goal_configuration_api.py | 2 + loopx/cli_commands/explore.py | 25 +-- loopx/cli_commands/quota.py | 1 + loopx/cli_commands/registry_admin.py | 1 + .../cli_commands/registry_admin_configure.py | 4 + loopx/configuration_catalog.py | 1 + loopx/configure_goal.py | 11 ++ .../capabilities/explore_configuration.ts | 26 +++ .../control_plane/effect_runtime_handlers.ts | 1 + .../test_explore_machine_defaults.py | 159 ++++++++++++++++++ .../explore_configuration.test.ts | 24 +++ tests/test_chat_machine_configuration_api.py | 43 +++++ 28 files changed, 536 insertions(+), 50 deletions(-) create mode 100644 docs/assets/explore-machine-defaults/device-desktop.png create mode 100644 docs/assets/explore-machine-defaults/goal-inheritance-desktop.png create mode 100644 docs/assets/explore-machine-defaults/goal-inheritance-narrow.png create mode 100644 loopx/capabilities/explore/machine_defaults.py create mode 100644 tests/capabilities/test_explore_machine_defaults.py create mode 100644 tests/control_plane_ts/explore_configuration.test.ts diff --git a/docs/architecture/rfcs/desktop-execution-frontends-v0.md b/docs/architecture/rfcs/desktop-execution-frontends-v0.md index 738ccac9f0..74267fcc19 100644 --- a/docs/architecture/rfcs/desktop-execution-frontends-v0.md +++ b/docs/architecture/rfcs/desktop-execution-frontends-v0.md @@ -111,7 +111,7 @@ editor or storage path happens to exist. | `todo_replan_cadence` | Device default + Goal override | Reuse review frequency while allowing a Goal's work rhythm. This is completed-work review cadence, not the automation timer. | | `multi_subagent` | Goal only | Child model, capacity, responsibility domains and delegation bindings apply to one Goal's team and resource boundary. | | `peer_task_coordination` | Goal only | Coordinator identity must refer to a member of this Goal, not an inherited unrelated Agent. | -| `explore_harness`, `explore_graph` | Goal only | Exploration strategy and opt-in affect this Goal's planning and evidence graph. | +| `explore_harness` | Device mode default + Goal override | Existing and new Goals inherit off/evidence/planning live. Explicit legacy enabled flags or Goal mode override it; profiles, composition scopes and external delivery authority stay Goal-local. | | `progress_review` | Goal only | Drift mode and threshold belong with this Goal's pinned acceptance contract revision. | | `reward_memory` | Goal only | Private provider binding and enabled Agents are Goal-local; a global preference cannot spread that data binding. | | `lark_kanban_heartbeat_sync` | Goal only | The target board and synchronization follow this Goal's binding and audience. | diff --git a/docs/architecture/rfcs/desktop-execution-frontends-v0.zh-CN.md b/docs/architecture/rfcs/desktop-execution-frontends-v0.zh-CN.md index 53d752dea7..9cd1326499 100644 --- a/docs/architecture/rfcs/desktop-execution-frontends-v0.zh-CN.md +++ b/docs/architecture/rfcs/desktop-execution-frontends-v0.zh-CN.md @@ -86,7 +86,7 @@ manager Agent,也不把连接器硬编码到 Codex。 | `todo_replan_cadence` | 设备默认值 + Goal 覆盖 | 复用复盘频率并允许 Goal 工作节奏;这是已完成工作复盘频率,不是 automation timer。 | | `multi_subagent` | 仅 Goal | 子模型、容量、职责域和委托 binding 属于一个 Goal 的团队与资源边界。 | | `peer_task_coordination` | 仅 Goal | coordinator 必须是本 Goal 成员,不能继承无关 Agent 身份。 | -| `explore_harness`、`explore_graph` | 仅 Goal | 探索策略与 opt-in 只影响本 Goal 的规划和证据图。 | +| `explore_harness` | 设备模式默认值 + Goal 覆盖 | 已有与新建 Goal 实时继承 off/evidence/planning。Goal 的显式模式或旧 enabled 标志优先;规划 profile、组合范围和外部交付权限仍属于各 Goal。 | | `progress_review` | 仅 Goal | drift 模式与阈值绑定本 Goal 固定的验收合同版本。 | | `reward_memory` | 仅 Goal | 私有 provider binding 和启用 Agent 是 Goal 局部配置,设备偏好不能扩散数据 binding。 | | `lark_kanban_heartbeat_sync` | 仅 Goal | 目标看板与同步遵循本 Goal 的 binding 和受众。 | diff --git a/docs/assets/explore-machine-defaults/device-desktop.png b/docs/assets/explore-machine-defaults/device-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..18ab96f1d3edf955740f53387114e0d93f37c46d GIT binary patch literal 92706 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/assets/explore-machine-defaults/goal-inheritance-desktop.png b/docs/assets/explore-machine-defaults/goal-inheritance-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..09d2daa30cdb37af2f56743b165573b92790ec74 GIT binary patch literal 93316 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 literal 0 HcmV?d00001 diff --git a/docs/assets/explore-machine-defaults/goal-inheritance-narrow.png b/docs/assets/explore-machine-defaults/goal-inheritance-narrow.png new file mode 100644 index 0000000000000000000000000000000000000000..b44f44c8e65ced7fb202285c96cf1aafe04d8e2c GIT binary patch literal 37617 zcmcG$2Q*v_yDyIDeGpx=(IR>$`Y01ZM4|*yA|cUB5WO3n5k&No9zuxTi54Y7f)HrCA>J6W))oh|CUr|SUcK3BQZu*|TQ5#IBdLxEI+i?0O zoj@q*^|yI+8XrS3bOuS3c=Rfz!NeCa!K8R!{5BfA8*?*GGetJWTG!u4^{r1fIlOD& z?Y70Hq||sQ56mOGODyW{g;Te(BgNE+XIPMEHDY#7G>zH;F&azVs-=w$r&dzKBEvTk zSR`k7ViJ;s(?1-ECZ6H`4}X*^Bbuku=|^S2(cV)jhwDlYe+_pfbFUpAAMVIFeIHIU zE-|n1SnPK-9)Q38*^@fay*1aFe#!K`bhYrWRKS4{=7bmv^& zY(CeG{rG*6Mr~Zzrg()*k&Hq3c=<){deiBNPP%Zma!?~Wg_lo1$Nar*w3*%SUteGL zI#o@4duQ2nyTR9@!S_SZ>B+msKff9Sj-Kmf#~?Wsr~G#)q^K@juD;WmkQ;Q8vAsO> zVjx>Vi>>GP%81CV3Vx@`2VZ+CYwiy{m%RUF-2Ib~mwRhC$%hADu}Bhxe)NZuOe7ks z#U4NxlIK6&j4N5-vo#w<#lCmt`rhi8odO4!qVKMD>cyMiEAA6fvUU~JKib)Da-C_N zsPmRdu0@7ldbB;i{NutyFNU|So=pEaZJ^v zg<6SR{+Dd@>b%zCsJWDA6|gsYLvA2`ir?)?GT{2|o<8ZjQp_Z7o2SArQ4aSJbIvN4 z`H@!D~BCCZ_O31^)S&Zh3E-TyS?f zjOyvj5TT2fjhEHk!yTOqp7tTm&z3tk{q?H4cavz&4SlC0t~*W0Y*e~X7^8+M70vS; z!}U-h)8Xj;Hyu=f9qx{}g!h=_P!-o0<{0=Rl1Wv4WEhkp4c+6v^ z*6I46EkBqVsc3q=4*M&mwHpzUcdLia(o%cq90V*H{J-P0ysFa=U@r zFgHiKPxqu8peQeit6`>9rnFK;nPhQjSqu2k$?Xp0n=%iEU*7ug0RP&mXA1Att_Otz zCOLzJS~AY#PxAjXo%|uYDz`LkA!FI-zo&`&nBe@%muInT{d__iI7>#Ko`@AT7)C$o zXRF^ym<`#N=I2Dc4ZCPfCwf)2M=%2Q_bc{*tRU z`LQHZbGfNqCy)|t;babBQOKW4AmKdbLYqk8$#92jkLR5;&_6)cxp9Y6H>&>g9q7Mm zRv6U2cIDMfX(5Z+-LlRLu`gRI?hnBw-ZOJ)klOb8R%~Wmq>b3`(=)4bZt&SE5VGre zEC9D-r9V^_bSKmoJvgB4#Q_)8@jP^>H`nq*j~tKheoBKzG@0hH&}&-lYHijCH@juf z-}7h%_%*?suOB0#uVM9al^PsIO0+Mo{-_%GirJs^b6M=quFR5l`tCjXsIz!)HDIGE8q6=m*D1tUkG?_+pU*#*|frb5cYjw1YN#fpUx1e!}YwN>}$-g;%>m)DlPrbk+Hp*9v;ODq) zt|pLoMH8PQ%Mseydi7ia6kRI6!7P0D#4Uvn7mZ6Ud#{g|?hsKhSNQEa3tM>67+!Xt z?-FS`es59dg)3DZS&0`=NcY9 z7%Azy`FQA)tZ=jgbHc*O(MDpCX-PP|$%hu^H&!EU0S#w6l(`65~Q z^jN~mqM}zJN|7@Sc~O$fXvXi7MXlt?$3PMPnx)n@D&@Gf4=x%?a0)k?PW9*pp0yrH zH?t{tUAkS*sQfV_>`na303*1GYurlYVeGcCHykcxcE!g}kACY(6|C7tG$M-O6vC(U z({8ZhKPIzIyJV_cz&E3VJu-3@mo62Z+W@^0}8)5pYrg2kJr6X8II}l z#?uqO_6P@V+=(Pk_3fXZMqV0l*U{Nuq&*5c3#w9`g#S z@!`e_RSogq?N1`o1_%37LCPlwbN-+3ud)XoaQ@nXau*AN!g^P~O7HuDT~m<}GHD77=ubIEL^+C2-*P7ek6`@aD}91{zAVEmG(yol z4SgDM#JMKDIb2c?hMPO?*x?O_G{@A>8CwQKWW1;BVl(uZvE{L=up7AWo>2GOD?_`T zg}$kP{p>2r%2=xqJU*^%RK3-J_ARqDt1OSF`HFITR<65C2J?9^CUJKr1SzJJ3amN> za{~5EY2>Mt4mi?Zo*l}B_f)`aG+!L|19KNHEV9w2|0SRc@72*kSvjq5A8Hpu4`*q# zaX)a)^!+65v}FzYn{w`FgWtaUt%4j)S!CL-bQ_a>JlkRDV*x{H=*KfO!grn7Btvoi zP`^TmE*u>13`Fm>F|U?>zNFqXX&mG6z$FM*jUAzn+RAB3bN?W`P9DpjmZku}N908Igjy z962t7Ml!!Sje+9ptyVG-AE(PBg5hE2>gmE3Z{?G4S``sy$@%_(O48YDfGnu&+>~*X{ReQFn6W<<2fo5 z%-9zl?8M);bSb`SFmtXU5DB}gi7nXvqgEh_*MQ*G^j!HCKZJ8m$$4D1a-}#7Y2Aru z)ZWK5!x^GOvq+m>2L%&ii%T$y9V4o{0=)RP6#R`>+@YU44Rp}UwWa@PHh_HPk z&EeXnS+n27v`Epsmy^z;ljgtmkwNw}Up-1`Z}bjsp-a}7mwzAGvTkn^LKO$m@=Ncj zWHdqszxDeUDTi;PKa9#W?5U?PE7uN6x`R^Kkr)(=m>jtS>UCcAGU zdJr^TOP@nf=WEu22W4K5ZApn>j7M=K#8R5i$!LC-{ejtOV^f;5)lg!zyyFuwDASMJ zVCi7;DjP8oSxWdJe(q6`@>(gGdOi8m`mGL@ihG?08spouu_Chxe*5cAoo362Yu`VV z-+BAQ=>6cOSwSUez`?lZHVxY+7}I`@$O|A>qV_RkfSIy?t3a#-i;D= zd3j+GXAp{e!Va~Io)(Ty8JMhyWas>7pOsIKMNu$Ix~^2uIZv`M$Z-!c_uo=jZgd;% zyOdNzE8?l@V>W6 zC$!^Cz!woCws~c=(Yh@XhM9y{%fkdo9^ohc&qfUAdhQEZDUXrz6(LS}kiRze7CuM$ zv6vj=p`R-Hc_m&@40|;_<0Ir~RMOPBVie{}=$8))OV#=(lcKf*8$cH`t`GBj04GO|#x({G_ zTEFe0aKkgN+KQ&-vx%wsZe5m)>=jpkNxtY2Fx&p*@+0xE;+Kq9I#MbP;h-i-b@d}sdO8$5W05lbKiL&( zb67>W?)-m)fuYo~YHDf)2jPmGC_F;8&68_#UeS?ADDzcl%9_N<)v84G`t-3D1%uAp z^WE>vYiz=)qgjvwKKeD7NS!O$@*nnR4%IO2-DBl;Vf!&JmY!7&J=1wX#7Ua`M9ys% zUw%5)9P5@t|CCFE^c9vmn)XlN%P9*;+Z{AfA;1dp^|6m9>1QpqALAd**pfuj30ya?_Zh?|0^)qCCR*U{MTdqV zx_R5EsQK#u7hnE&X!Uadnv4Eyl>OOVcB%PEuW-gb!-%N9yWbybiTXD!0I(+v?8R^9 zjsAyFzg+iUyZ`K&+~+fV1XPns`PemvPT8UVKkNRF z$~71!PipK2az4f~$T)oK#TV}EOnhxlUD)2DQ?>(>NqOu+iKxGasJxb_*}g` zzcvqV)pB~>x*N*_)Z!0}d5L?yUGsoZlXHOXZv|}KJ)8Z`eZm&C!*5Mf9>CB%o8B?! z1tYW8CL4|bx-|hng3eayGL<8K_e#~tVs4O<+id$864nbmn2EaKv)#>i&MR0XRs*ov z!iq}H6OXOgj~5huAB$K{;)kRP8VBz5$-q>tOz}721<>)k%a{q!FcG`IRY5ZV=`YW( z9_5}M^KC!qOkmUTQSKqDMFJE?)+#eAxlZFO${4q%TLxx0xD4bd!oMrUNpc&zvsA0_2bU?OJogOoy8wH)01hz#K)?R%3Jlvbwi;1N z^=w*R(r0tJYSQ;p_D%1{e_ZPr8%ncTD!GSSZvRq`%E*Q8TU=rb!>s?MbcTxtt z2d-F_D_?c)ydP1?g~97Q{l7$fM|ZIJ-+F?~45!j+dYvUDxwvvl`a3 zR>#U2gl-Mjk+SEKHSY{4PgUGEG{5|}6-gY*kCye&L)1EuUnp*syAq}4CaYTGGwZy! zKHWdyAMPe=U0_o5 zm1G}NTEs7nnJ*tdkFfD$@_1!Z27shd8&?AJk$d>Vj$EPa&V)yfErFC=9Iis!3+~r< zEpBAGh6IRid{OU8fG7R^^ZROCp7IYoY&!vxLxsC;{tDI&WeZetlGH~KOExJt z`KM#>(ywqqCb(gqEp8GF4IR*B@dK-R5uilL^sMyvmOZjbR*K|0a5nV45G8f`!W*xy z^CCna4D&Z~d_l_+Z1-SfTVfyLv#Ohu6Lp>xq`Lla2>tA9^9v`+K_k5Js{R{`y1i<* zxmM@oJFz-kR%MoAX#U3Ms$qnK!+g2^q0C&mZ!r&UyfLECIUmbFNJmsW|G=*NURIWL zY64mn>zF-q+mB+|dT2FzCAmi4#{Zz+*)WUmXn(_-Pb_Yo0DFlsge7NCZ#y5aq&j$- zD*^6T!I)mR4o#-T!w2R{eeo>|o4%E*WK+X&OcJB&wEm%7=#mSFgC|RE5y>c=i18Ya zLV_o@{W$mpZ4nsPUmkZi13w67z4B60Xnxqyj)CF)gCq2fu$|m@Tai{#?{)J!;`N68 z+kRp)dhJ^Kd1Udda@a%jA7akyHzixbgl3g*^#*NgEy;$?76+eyFj~qPfk(MN?m8R%?ekN5XTloiDhD zMOAtCc%rQt{vZW#^aS2#;_4jUAijFz`^*7z=LvP$Tr}g4*&EXsYI66VTetVeEBL=y zEpnSpn%}R;S<#c!8gG%69C@VYT#FydxEF@6!WFGUulMUkZeW3K(B|_r8mc%wY`X@- zdgGC^LexfR&KzkB!4WleKW!$5%DQbd4bOo~lx)+VUxIpsRT6WFn8^1Eqw-4$3hz6f zlZ?wc5w{_DXBCD;ImkT1Tt9&Dk@Zy;D=SM}nNY|nS?B(fl;y68kRu-A8S!RVT)OF- z^Fm2?#_g+PNBJ2D-HG?`s3o-HxALhuY`Z9pOcZBth2EEH;Y;I*rX^Dp*9*jLE#BGt z;S$x?<@2Z+_my-%b)*|5Z6Tj+P<82MD$#w$kFBpFpV%BFw+6eVVDMzf(6mKEvfdX( zsqbu9X*+VDt1o=fWW-ma%HkD%ZrK!w`*leUw=+s7!5CXlO;Cqtmt`%x?Y)lN3wKCW zT#55&Ev3RWxEy%VtB&?QKC(mB+bX$}Q~c+Z?vJB^Nu}rN+6~*WMQQaC(OwNbA3yfS z&lwfpiiq`0(Xvm<G=XY(?rad z@GSl;v&!CXTZw9V8h#k@yaugbu?YE+8z3Otc?#Uh)WgZ6B!8CdX+QLwB0Y)Wwht~_ zrz7DF^?>p5;)qz&Y6_a?gG{T%nrU4wf}HjRi%F9<6)pG_no}0(^ZoOzDwNmWfDrJN z;+N3;1o{ttFDiK4-)s2r@BS2bH_33ZSrteh7&g7Bb~@qHxQhi>q_3+cYUfT=j6Yf> za`vZjCo)kI#)^I7srmediRdSJ+wssqbQ2@abKONgVGn)J9(!E7XzvND%bc$9VM4Sb zCTOmQ;?}MB?z-ASWh}SQq+y?AU!#^7_MSI}lTN7t!Wbmev;0!QsM*SNoyAsBSC{kT z*Jv4c=a3(P+NXN#jiDCV8s#jh`*bvAp0~0FVffJ&*^RgxR0!2^@1tVP69+AoT$;1X zvLwg@@X0F~7Z=?3JrMM+$sV2Rvc8_|GDgpyH~fv~KqzakUs@HmzTjqUPS|C^5xd^^ zOe}1bG%C4Fz?a_AzS+V`m4|=X$pJf|GK^vuCh#ZfBHc@Um+@S-sRr-!8Uj!FDnNyY z7Ee-(2q~CR!_2ojyqB3-$*h$l$yipiyB|&8rf8k4(JGl>Q8ihT_Kf7xh{;n5C->q# zNAF4EE#4BglJ6mozXi(o_2wdup*VR&vkj9hk#?caM$dhqj?MgxWoVV@4y38=_uUv~ zEtcPao5~fU-bHsMke!#~?WY$XL)xDW?$h~#2-7)crj;r@Koz6Bk>jiQe1s&9W|}!& z$nR!cu0e5a?n;Ho?8-SRnJuP&L~Bw3G)}c&(2j240xI@ZHf{Wp;U&8yTTPUqJ0_=x=Ac9G6njIG3Q%`+IZpBm3U% zAFj0O-sdSVonxA?GQQ!?1{WTh)dA;Npb_B_X4asTWJ#V$?W1+! z+(d>~s~0CNq6K-=b|(*cX&5mY&3zRzdgOuAOqRqQGw+uO#?_8>HvgD}B7LHC5?yKk z1s*DxJX^| z>Z$hPEWk`XCc~mu={K(lA?PU)L>FtD?j*|p87l@73vQr!gKz4IrWH2nHmBcQk}}ur zHuiii)qwgCc>mLxigOeCW6mP;<;lwxl)O*=VcORGGk)#A@rzq^ddyD_j9sZ9$?f>;h!E;7{ws{L|7m&8kycVE}-X|x2k6!3zsO1CC z0dq!b5CkO(<>SqB5#Wkfok7Oute1T@0q(rG_FOl^Z@s1ytVSxa$3$kKh&i3P2Gfeb?XKVZ?m$H7p< z8s75vW*b$N{h$qyBoO~EKm7H0OEJ8FfRrw8b3pm@GEjIh2c^|8nHm-6WNf?sWHVU$ zi@8kJul=ava|_G#S+)o zB|WnRBJ6SlDuK5l)(F3NeG;m=R(-TySLHJ0Y|{=o1Mt9E&;$idGLt@chF=IyO(K3xVd9V;r}hh~2pzcz74} z00h(IPpb2Iboxq%$OyQAHIe+arMXlPM|k*#6OBn0YT9fiL)OPrb3H+EyXrtNAUYq~ z4ApWC^h0;};(!TiHOb482g#HH+ZuCg$0%4GIaPcY>dR=JA2R@7#?`Uurz;2uDDFlknYLauvJ`zKL@U zK(0NdUbwP}e?lK)qCLzyefF+n z%hi-ldI%%5w%4p_=|MRZBlDptbJ}DxUbzlEf?3Ad@e_-TbGyRmc1su$lev1Ft8V+% z$(vms`^!Uo1%yn_RZ5t8pX!hqxS0P*kA+923qs>XPzxWIlO%u19oN|^}=!rdH z=0vR`6w&U6q97CV=GuJPqr|E61ou$-m~*t{TD4$~{KJ^bVr@={50_mgFPm`$lU9Wa zq9G1ZO7LavnD4~}*Bt}oK2J^T_^$M~RcKwjJy`sr-ee>x09~)nxp3+-wOwTQT6dFN zxWz9cSF&^w%N*!Dpnlzev|ngF-;-pmT74J6gzeDUC{AdP~h!+b-(bW;oxU{UdElK+xzdu^G|+E;usS3SQGY zS%W2@JUue}DBRTp4y+od!?(A9$jH27y?TZ9b1s*RPIS4CioICOIY<8GWJir^M*YkMmcy^bjCgpy<_guby0@7If#TtLks zh?vlh#z_`%00~t`q#@k6)^qtwfkrGO8}=~yNGA`By}-op1cmkL#T>s2zDxP75oA9y z6#e%64}Ydl%vTT`x&}RiU2d-n2tdWt%Pm~c)3E$v7UXLdCz~s_vd39*W&#PVVnbQmV{K80nm(+9Y^95 z&+Kv=s_iSQ9iSAMd*4%+mLXWU3l&zG1RdaHg|Au-Ka6n_UnRsbIl%P`%(ID%b&CWA zuhq>-T2$~IvcsLlPUqc?sWX4qixRzLP^kGxz4C*@2voq2NiW;1qe`c64Lp7?m#fI; zx0X$f-eBUegoTx)dbqi0HtqB)K--mVKPKWi;CMf{6sr)$=`Zv5I77YpBFtWhKiLnz zL~vVr=@sAl5J}0#oTOH}R{3KR_$esBQdYm=4w4*|!JUBe+oS(n>TO|)F}XAHiiESi z{rDL=?&(y}>ECr^m{DBy9ouUuu0aSjn>uJpD8+Vr@)S;C+q!ed$vSWg)~C!nfbBcB zK2ev+Pd(^kdc%IIF`y~%ueKxSJKWf=A@8NnGei2yFoE(A@mkePolIkP28-P(L~dh0 zt+I%T5pF`g&|=SUxJ5FZJ0!BkNkKNZGrzP=j0p*%Sv=OVVeC(|7Ztv=ZYT)pf%Cs} zqrp8<*@X-qXK2i%m*BtVnEY2MzV=PkDu~k6FHv{1#Dr6mgn^|}6j_J?2%S`H^0uLxl1P#P&3ax%8ZNQ0i}~mF`UYA!n6cq@ zh6~!nA(Z$VQe1;cj9z#lFb&!%`G3P=)TOD0fPbWo!t0=Y z*`Tq#{`~nfKmeFRHauxO%K$azI^y3z+ipIFNaG;{;Pk*t zXg&sP2S(0Rb}#fk6STbl!6tO{)}R}!C3WjD->B}2K->+u$e-UUnJjnOF$l={1x$w! zjmy2z&%L*xxIbSbFo9XHZt6UjXR{vx7z9{U1XJ941wLzWq{PB+cTnqUl6BQu z;za;>V6lFs;kkkem^iC$@a>_W@oJ*Bw<1d0Ph7@j2U#TTsYTDMn#y3pGtE)Kd%eh* zRnfNsMir##qKiI&GrKzC8mY7wohfyin!;Aw3rf_rtJSfNt-YHPOq0~q%Tqc5sdm>B9!KhhRII&Vi zpZ`|Hl1tNHqay8O7*0Uu1g41sq5pXt&4UlRq&xtpO{i+T6`6gS>C)KpThi(K<8GKd zgX);y&^(tLWg7QpcugQCkpdEfNGvyNo`F8qQKcKV=8L{ZBq}Tq3orQ-tyvo9(~Ukw7Hcc(}c{2 z80ceFsf2zeqw*dm@^?DOFXnCg9|y15C^uyKfpb>O5-=0NaPh{=O>m1gO^r&-qp2V; zE2ZF)ntt{4_lTveYNJ4%&5ueai&(l+7J4I9&jWXd;g`ukiMo^nRgPu?skv=f;vT@A z@ZN4Q7d@^!Y+2hZv z;|i}$N}RxznUM_lQ~)lu&*mgXyZrK z2C$hTneQdB(;^b= z`}L!pt6eF6k3i&}xR$2|k*CIk*;rtA$sBh5Fu)BY`|s6Wfw-T?d{;{^1P7xy#2{DA zo8|+CD0&yhYA&0K>;?Z#Ro%XaHxt!E;%tZ<88k{;zm1jMAyT9*4=%oQn$er9tgID{ z$KEH)Aa;b#h$hWr*7gT4*S-dZaV6fxV4|7b_tEviYlOi}sv{fCc7-9ykQ+SggS^ z;P-im$Q8;^(vwIWK%UItxmiIa7#0N-UXBEprMn-J_M*})ay4p6SK7Ja_$Ee6`tx~v zVvjAv%`dK%uV9AFCDgc`uW9Z@b&dF{*t`TMo$cJpg-y8bb)?qQ&~mxQLR^2?Ef&H- zdd`@0$py2&NOU#5OF6}su5!;;y+#%Z66#}Fs|Dbdj=1Xmzmr(;@5s1y(ho(5Fjy^)GWlH|8s8O`w2^Bk9LNRK0b#qMo! z{5)Ez%W_`Etd#S}%AIUBLE^VCMI8(78|qh_@(9HWiS0d&Yn-$;v;>%BH(#cbsSf%; z4*r^=S!>sGGK5Xz26kKoHniR}0r||h5kKho5XR$Pl8xdw=}Ts1sg+iRM7 zz|*5A82Lr@sI}aq1f%LC$0w{(0p+E-#*va+CJ~pDw7Yt9!(o+jYR=4FA#X{gQrv#- zFqf6dR{cmMv)u^h%>HY_MPHT5pI~V*irW$k=wq+UYcZ8|*fH^qooyO4g8s5=*Wvy4 z6GtiYWgk(gtt%M1vNpI@zFdQ9~{8M>;;qSd%(=1JaU7BC#kBgp_w3 zGXJXQG^+;d7`0YnTYp}NOee#-b1A97^*E#||7)1yu5~Vx6RygE)oW3i_Oz;@?}Dx3 zQ+kYj@i`5G)@7bA)K(d#BxwqC{l@Qo(dph;`{IM&zVzL8Jf{a|j`s-KhU+@jOLBo1 zIEJqCU5KL?J#R`?Rwc5+`G;Z%)$4NfF7#Tl(cf(Z{WOXqZ{%y)x{6*YYGBf@2u&cJ zBihPo=`Szk#0FGz3JUwz5U)e>#ERBzW}Q%iNh5xCEgg4_?9_FlL^a|G4@HU2C7tWX zTwXi^-#BTI$DF8E{{Wah$y0{Rj-{gDuyiDeFW95h_$YbMZA>T6z$dciZm$mAl|UHh@{R_y?T5<)`^h{UJ2gnAb6(xjd6q%F+{BxG2=cjgdtnhW2qw`W(O=R-a~ zU&)j%zJTFG;dqkn-(--)TR&201Uf4)BSeeGlN_hd71v zXlY1mcM9Lx2NvIws%kmYs*g9@&L(pbHUcy9(?0gVIhE15YTr#ghi=Dr9Ur)P9a#86$44L(iFhukATV43&I+OBD4e` zuQJJJ$}Ajq5Xdr*&o;n7!WJ&@`d?pk@!P!T!~LWQD?7ZWzrGb`DwfeQs-`1NAZ!P4 z-X`lEMZ6CLr`L|p5;Cp803zRCJIfc<(Kkk)jy{9#kPF*r+R0oq(r0J(aD-DdP}$T*1G9fHh7eaU+nC*k zn7Dux?QZs8hK>&a87v4@z1J(1uArI2Yz_SV)fnVXQVNQ-(XzsT4=s>ic@Nue!95^8 z&tG9$m)iI+a$C@%wn7NP{~6K~8eQX{yE)2%8F3rEy$$DTuC?9+Jgb{8uW_bO*Dzu6 z*#mY5fh?aK@94Kj428-8`h8MImkDbd%zBR@!Y0veiqZKq5Og8|t3$zF)w*u?M#cX~ zxlXH?E!6fry2DE1@y=bAxBmk3jK2-d9VsB3aJ6cSL3|q{o;r)G2pa>ZLuTcF`U??u z{{X0jAUKYzj=_TWKj-1D^Fji0#%S{vlHskq-s$%b4j_Af9QGhN1_XZ&B6jB9hy)Pd zBAldyPL6r;deVeG-ITCe0HXQY_+1VNP$hY*LPYrb`vB&rVE?QVPZ82l?<|$!_|VvP z>z@t^5bP5Mt>sEDEDl~(VJo@(tu={U4ZEsqCy3dJ}i%ZtHGoHnJrj?*)?|P53 z$LqTEn`FERr?x`XUI|PR3*CIVw(7l{nse7i<+DynWC`3PkoSQ?hR=3viB}han9tnV zLU?1YqMV+v*v&2wviZqG&h2;ibc9w_LdxSuGlv-LJ}s{V{xtV^!sJS5^{rrb2C$R~ z_ufp;M!?s5|kKZV@Qq|MYRkULuSe2IJkg1B0yp|8=c3lo_!(z60F9MJMS{{yShEQRq zNW(5xXy{&b$wl+C^+lOQD+??-58nc-{i&uV7;H7v^%OG9O+lG!i(E_w7jV^g`xQ1u zsk05E9w^67e!N?HCC0 zT6tAh41?BvpJQID2AH^-)cl>z=@tYU%g}MVtrqz{zA{U|khhmE`4-?@0XjjWIC6$` zNn|2YvPP$J<--pQS;7y2vhV33f^F!@;ScsaCr<|1I&x0c}#)^LR?;}^A&Oji%m8L8~!7=B4FoS1vN4`-*A!_Bq3yvKN zosV1#)3@YEy6}JYWu}{-tKnM}-phIF-?DeB(^P}$;g9!sb*hgvJF;m%5eGH@j5=LE zkKyQwzuHyl+C5{-L9Ue;$E`TZioH5-&R8)k$ScxMqInOe>Z2(`w^@^ExIQeyQrT$b zbY%|+{Q7WViNLI)Pa`~p)#*>SI~CxKuNdez+~=9F7TOEb+-IX3%AF;`w9|2EwbFR$KFF;Rk)Q8UX!74udWyKM+sjNscBTb0;TfB}zYN--FTm{W-@%+HTExNaomiyqts&?Ri zZAMA#z^1_moi!`kLn|BpxwvQUQZ~VH5=4qzn7IexdcW5vj==GWwH17MUTzN7(1w%( ziDI2t4LF2#0LzXnbLh|Kkc?A5J{xgo`WTXvk-?ZtWN*l*Ei#Jb9g`hDAwo5BT=y8> z#SdgEljIM1HM?Z}d(ef6=9z+z<@qjdy>eSW$3d)u>m)9T_4_-k(2|ODS6}bD)Ba1^ zl3MzP^J?=*Vqr%uZJP&Sp2*&DEa?HS5l}LDr7?^T@sz^z53p7p=bF5vn#yQCcgu#h zx!OvXx`j@iKHPxOdiGL3lb{N+evrEdQt4uPo{4#%LkxuVXXSr22nh#U1|AYjRJ1&I6W?0r3dQkC ztmn%RQId6E6>i1Z#x-C+M!cwSQ!`dldMf3+Yo9rO@axSxT|6EP7HXMXWnv9!rwI_l zX)J-w72&F-2w9?bgjUm&?o^^7Nf<6r0(HfYI<@KrZ!y}<#C(U%U2-SrUCDgji07BA z9#hDQ$bF65q#Y&o6^Z53?3eBDkjj(wvV=Lb;$|w32iL?tpejeq(PEWVmjj*MsDT(bV zZo(Y?9_AOj@!f8_KgXKRhZo{8$iQnK%yqhN->I(l70qfvtMn6Z#HU#oZ<%_DI)|!{ zvS`ZYCLw=fZPogFOzq-6;UCE#1<+6Z^=1t77;*rdgb;N?wJg`oL4X(NB{D%Y5LMlX*IICRfu;w zdo;|`!ro{B=q8WX#x5YVX~dqh;c-z6*vHAJYHCJLBC6&jteaL$I5Ak;tj9?W-D|b3 zdidjoEnj&ZJ^Ku%{dp9ZAEIS{Vb(i8x|T^g;%IZ5w@c2_uZ&kC38?z{D2{rbU)3JaQL{l3LRsy=*&m&bMbfYYrXdk^_-O2I{eM4R^G^j{P`b!vs6S1NXt4wj)Je2VB>;iatRo8j~ zwDcmNagYlD@;qG)U=fCYDKmJ?qB0STS7`FbAVV#N0_zlvIs87DcW%1y6TELFRC#%^ z;TPa}41{7>IU26yV2gs0Dg2u;XbeUfdx0eRWgf(Nb^~Z_3xv?s7iXoGlc}RAzMyyi zvUDqHMJ%Cd#(cKN!29_>MDphzrw<}c`30$#cWF zq(3$#potNdm^pKrg{2$RyIpGKl7Ye|R0h;)?MiL}=%RS%(A#;w457a(1UONbXzfCN z{CsoT;UE(w!EhCOE#!3uY1^kfX* zwBJ--2aO+|XhJvm1$akfwkZHbSDyP2F#~Z1mPVIh6Y6Jn5SVzt?84N5i0}OTWEZZj z(jJfeh;EdN!Fp~^t4e+h_GKR?TaM(RqgFQ<1Nb*PPHH+}_ zLzvXz$0Nb106f8~!*$A04mvsWK(3Y9d;}jb_!&6rRNnf8R2PoHwRr)>uQCUQ;r+H| zFe;jMzvyUU@KNL1Us5?5uU}RZ)^aL@fP)8kw&UFpD5?Gl6uZ)4B%zwT>}*8RUouf4 ztp~sAG>A4`1OjDTj+wA{`T@J!POBe&{?Z&HdqdI{V%n&hqJs~Ekb5%+5(->WD-qK4 z>u0pq3W7eG_}9RkW0Ci?hsR&M@>=L+TCwDsg+~iec%Q)2Utr(NCR}^B{ZrM5-oeh7 zw!7FDbUf{b1lZkyoa`*h za6`}Vnj(jXu!O|3$XvIYu=yDC=#53SYsy&nVyXi?*SH@pp6i%#mrkN&ftVeD+RKmscC_f7&i&9ek>T%nr6OR6tF z1)6zj!-{cxMN4nqrgEe!6_=KLzu1SJ++CvsA$FIkhzftE{L-3|+ST!vZSh z?JjN~)-Up4VZN#(y&HZe>Wm6ze(BJpV3B?ce(V`lhdQ|*5>B@r;*-G=iJ@V7CZ!N< z`lHH)oi_ou5f;Ii`3jI^nlr$M&MeV{jWjc7YwXP@LBD_99BwfR2I=M6?F#$kuVhbK z&pS`nj|oq#s$j{Y&xDiJUTDOiU!<>}9ItM|tu&A!5vBRLFzSLYv0S-McSKnmY!b6| z#?M)WZ%$7|rTFg*{Jf;7?{~W06zF?2=&&gAx2|GnWU(Rk`8(2YjFaF^^!&~hEe3&P zw-)T-&l*#(Gjb`~EqtN4YEtbr-mH}G1n{DS@p_1O5YwjRLx6ABmS#qqh7H>t%TVa~ zhM&-O@N^q6GQsdNB-dtJN6kSIGJb0ka@%V5Gh1b-omjtvs?$|M{4Ep+wx!Rz&jLfk z`S2VEc%FtPe?~bxUE*@G#UI$8D_wlj2zKHXXQ2`|eBbobXfrfcZKzTB$O#-Owms@J+y7SIKaVv&~S%Gsy&Ba~g8m1P)V;iUh+iynR)f4)4!GZalktkQjQb>w%;vX`M_*A(w74k(m}l z*bQtj5eF(_Dw6e9XRe#CZ>;yH)YxHH6P-GJnK<5()y+Z*`7p7u9-g)l{t!PAlVE|O zjD0NkJWl+5#1&}JkMhrXTz{c=b$bOAChwgoHIvyWq@vg|>#1F36O*zDBpUo6a-sIt zmVzK4wLY$)h+7i|D<7Ai^t4rR?dv$NkU14@0r|0))kE)e{dGNm7^mkNV;efoOpw7&Y^ckRGhB) z0!=UWMyvE}F-8;JkaBtgt=;9AFPw{W#uELw0}bKDR6WOnPX;cT-=6`={#Yc~SPJ&9jF&DT6;8g z8%UzTR0)|06+$vZocsH}d++O9``Xug_CDwQ*YB6CwZ7}~d4~JB@B1ketYmH{yf6A6 zxQ2MEt3+)n_;K5Tq1gS!c}9UabCW-L`U&A$1tBM2quwueed|;;`Y2vx-^PX@KBrQQ zptm!mPt_wz9M5q zvYFb>eB(EfOp+IADrfFKptAlE(=6Z|Jd(d2(YM;Ey~02LC~D7nB*ZxG+*9C#Q%-|y z7+S{2BeA*WjyS7b)F(Lyx`lZMP-HI z#!fr4**Np+fuort;Vcrq`dM57Ux~IIB%L{?*;Yy*qugI%DX*vG9hCu6qgKF*%x0~g zBbrU02wXYfJjAB7_YQBCyx~`ZG=1{3iq|d{3X7f72TLofhC6-Hio{O##so!w+R~3%ZyI}n_*7T3Mt#^-Bg$_O+Ydqq}zR=bwh@2w_X+_{o@5^A_Fwo}=N$w7o9x-t1>NH-VJouDF zO%F7*iO1hsa7{`MNehCiJ3KA7HnO=%ZYHhqRkML-^yw8$CXxB^Tl7-plI3OPhTj|J zYlo^=>tND4ExOCeqk(+O@lL#V!Z{N;CXUGR0!0^+?SPzVV~W_|O%D~j$`fpwF*n8< z#aRywIP9D))@JP2LA)}(So4whaJ!`0bk(PBec=}mr|>l5_#EnvgG)pZ=Uuf;Q8$;8x&i43UU9EQWC4U9!RMsAa;wnkmMAlQIrrz0`!@4_{VYvGC1x>Y!g0dV3?+ zRcm1Ac?4L4{_~!EBLTr9pL7DgCx9Vev!7b7@kiU_yK|?}Tt;abr!>{B&X~TD%F)BG zoshIqMJsi$-@O%mXZvrZD#TuXe+v^Z{D)bB!+glerLH@?vIlD{dxgA;qWR7wQ6Oyz z+?B?vad%I0DpeHcpFU@hM&&bE^Zvb+ycYQ~nNlgOvga9kn0viFt6wP?UD?JbdxQ6N z$@W{@-4o>1Zf{`w`nN+xGm{HR1sP+vs)AFmNOF=MO}tvQ-E2B{ zh32(K*Uk68|GIYQjV6Cl&!c9ZHOg+Qw(q>XhPnh#>`!gL?mS)V!0RwxZw$2V1{0=+^dNY1ForX4o5zT1U@l+QS!*-yu5Lz-Q_tLGz!cK;X+WX`k@uZgd!&i1VDET9@QFb*-*EmFDegVW`}!6AqJGS0kfQ&1)G1E z2&vf7g`0bt@=&5aLqsAhtIjq&gW*A)j)!NiIr@ywpkFtin9ck?aTR_E>%f#B=@s*+ zY%Xv#y?)|L@%ptW@P5K;PORc0OWUl&1=er&QW&`?7GKVlWd~P&6ABtMqLrWKk{|!X zORS2yibp&ORepgW;a&0vu3rK{hPGXTW4ik#{d*Y)D!I0xQ)Oo3HrP1E*k>G}rw-G; zwdEd1s*a}pz;xF5)I3H&?+AaBC6fdJ9`E(#M9+w(vo-)8A^`)H1~d>tMg&4y(4&rs z%}9{#1K{Wcx>-ckB=Ok#6s3}oOz9-{} zqxS|PDiko2n&UrC!^ok*bL*NNdVfZ8;1HEfSZjXIId8Z1X~JXwNe6uos0fUWjWZyj z@g79qG#uA@$MWSDftHuSOin*7^grY9e%-!`4|*m2{TJG(;&)2)J7z&pn*RRjN7hA2 z2QN&%#Ep4wktW%xRyu97?Jb9xv!kYX(q?OzK1P})jFzL&H0&51L{rZrxrMIMM*Yb3 z^w+b=0x$&N#Zt@DE1Tkl>R%So>N1Yt;z;;unL=*#QC8I#|9xy?g zD~K$b>Ud-<`hj$%?CbEaGVdw9$BtY)1be|yxidOq)!bIaKfAVhlIVEIf^SW(9lI7+ zgfgE!&_rKAOH4A7_>GsoStJhj z1Sj!|@W8m^_YOX}mrhP`c&oy4ptKC;N*hrDxAAY@(x>+cbXB;mDJ@k*CKKaQSfNc@ z>DCJ!j}uSv5&uYD%4X`QaWdE%%i+y#NSWi^(XyH49wp|TDTnGBmMk5)Bo5MWnDnW@ z!<{0_oXXI>G`MU)F;g3zZu;@g%Rc#yFU?zcyk4pZuCw8lsdvyJlY_0s>xjP;PpB<_ zdbL4WBC7;1O*b;Eh;(zkVs(6q|0VLb&2h}iZ~@dy{LmrsI#Rq`q)TTs(CR@qwYIE@ z^ydogPuA*zN{MUlNaM8?Tm@Iw^9svSl?3Frlgl`!lfw$7H-}$DN51(>;m>dK+JkKC zxMvQq_VJU>cBJHHj1JZH>^b&hx*Kz$9EEXTq(9&46R zT@@qp#e#QUG*sGwcbdK>Lbqo@a*TmM{!f@PE-F_eWDPS#cZqqN4 zoIspGq{^kU4lL=0Yu!Xsj(!*LJbGwGYFnlSy8=blQ?AKT_^noi3tBA?8;Pf`AZ%sC zXU4wI@*{`IiX8SfjIE88+SSc9ukgs?Sl6K%p$COWHOA&7jG%oWqS0M_&d}G&9~PdOF)^_F1U0G?vo`-8Pkv->c|Y^17fsJ{s6iOs@^a+izd>J+)|+@MsR z6|2L;UR+%y&HF5hzWxrT^_1vZ{U^~`W`Fa2-gKKq51g;>-<`O_WsRYdQCR;**QWEk zUbEBo7}b{TV_Hc#3D_S4b@=W)db-4OTxTP8_X_QbCr7NJ9#CIBGbPp}_U+e9@p*dY z{qVI^fBv)kvmydjnfoZ40b$?%kf3NX+GJQE5INZ`e!gmQC?P8G*)|UPt2U8@?Q`ni zRg1UXnt!j|Q^Sa~J^@y<+zr_zW19liIfYa|#aoUBacP@(vMj$^Mzh_^Ua(CE$M4T& z`we1e3zOK6XRy6ICtIzy_kzU0>4N2`zjB^;*h0jVj~N@C*1JYoQ712ZWoz&`CN&Eo z(??+4*CdEb6`SkYNDg#XH}pB!&RMH}B_~In&S7w5)zQ^1IF&QXaIHq%E;+n@8E5X| z;Wq{?NJ|o)tJTAPgqzW0B3BZ?MJ{`NPENL|udUXPcdC_Nj#tgd{}dNr8FYo=0frID zD-zl{R^Gah)Fi=UBbXchY`cfz{v8rOZ^bL>OWdWE>p2e2tx3=sOs3yRsEZ<**jIyZ>3_bAdS|PNqPG5EBt{}g*8=L!`};SD0#RIsC*h@RLLTcy-R#+Wezt&RRO?VzI>mxnk~tq$5eiq) z;doAO|AEeOf;8nJ5mO7{Y{>2eni5bB@7GGJ*V&w(x*&MQM3^{V`d%m_&BCT8Z6CY# zsW?ycL1)tI>hHp~8`&FL8EW$=L*eI%Tg$4u+? zg}QjNImGPB=T~m$fH^ZeP7XC1*yyu3NApe4gN0M})3=cYX0t8@-E7S{aN2C*VGj>l zf-4&Wmp8!O6s0h+Hz2j1C$E&;lHAHm2j76vrD9>?dK zoxAIpc9Hc36Nwyb3AqM~Gs4mXoq8_)v`$b2|_qL8P#O?R6J08(?bzZvFsd-iVu0I+f5u+!{1tJH0|cU&DY&||GQV;ra84!GiFFV(c;t# zg}NIP0hW5&)zz(K&xdk`iyVnt%DJGm4((pfK#fO$CJ zDji7IzejPdjQuMkGr8_=$@$hw%6LN4bqs4d6i=CatVZ^H6JL{wPsl;5Id>*D>hD*s zHTOWuulR*p{M%n2nI5^aZE~Su7k>{_IX{Bp^VH16%qx16GrRV#dSb*;`Fz1~>)86zJXd2$E3f7G z#$YLw zHi6oJ4d?w750J9F<=JizJ$;|CWNhP<%_bFnG;X6O=q8*D-zK`FO8=@owM|_08xuyk z!+lylpf1LUYQE7AxY}rRq3-({eb!&whLXdKr-VP{WaOCI?1X!rxYR;oZ@!1ID5QO} zMgE5pXp*#7C4@QQZiVR;a}u(;v4y<5bGEy^joCl-K*q#hNsQC$>jYfkHg@P}-=a;Z z?XW1^KOW}2E$-hUpHte!+On?3?#;bJ-j*d|%LV#}(p5~e-*j`GSM3X$&}`f2E4gpw z!XJ$btH+A^VVY3&+CF3Qg77Sm;XXcUb6|BmmGZo5w_LBYT7PBe7@}ly2PY<=%p|nM6O3rBMPTj;+ z4Loto4oVDyjyZ%^N^N40!HUN~`V*?)5t6D!x?yOg4lU|NP)88B`LVn62{IE_q<*ra4vI)Q&N zw#RvFpeGaaOH}LzVWWvoV~O+4|IlV~L70)U>9oRcSZrK4C!u!+rqvI|i_b01yU0|fefqZ(Y;t6Yj3FE#IbmJ{^yUEdCKiK$BjvFPWh?NUI-8h&EK*3Aj#B)a#QkM z2s+XFnnXeKb{Y&{<)ftpt05!v*q4IXoX4wn8aGdWmyDN25-kM(UK?9YFn*Vt@{$se z5?bIsAa+V-a*UQ>lfS#lv(3lDH<*i=(OLpyk-1tJisc6+Z(}B)?m85p)K~$Z`bv5GF&vGsf zypGj2A`6hIq);`&Ub4>y((#u;+t;1(9`D?gmh}F#qdoZL_D2F+Z|{;C*m6RYVA8{e zMP&Gar&cf}=yCmtOFM+ic8wC%O4r4w<2}!Nx~^(_Vp_)cUfGkM6SeC*!voi~PF)IZ zo85gT;P3CxJErdfQazPGdXBMLyds8 zdVS@#$0WzaIrXXS;EPZF$pnJM*Do^M8iEpIB9fQ?v2Y|M@S<_pYx=)>a{msrSPQwMl-SA`Nd}Zsr5f#~{A~i?QL`2v( zHvG`TnHvszd6SoulWHXm8w2{A9SpTp2DL3NX$2aCky#t3t9AH{TV6jK-=qw1GThq- zfa@}t`YmnHC_y8TA9Q~V!zaty7M@~tMv3wIpyr%ey)Gj%!*oloa3S1ZnUsDc)ERqp zmc~~$<{c;+wc-KWo9hf6?_7B4sfQLr3c(m?KULHuV^{eyq5xGmMhxpw0@LJbc2IuO2*<3auXk|7EB!yHSpFYY5dG&MLn(Cq zq>m>K=u1z3hj{&znZPUMKQD?1jVQvJLe&xb#2LwBvnxo z$o+_jV`mW_;dgPS>pC2syTFISrGmacYFzlWd^%+B;3p+vfygwb#DtmxvS?v#cRN?t z5$07};(#Y)@Y10Y8uygou8g!_uaTBR;bvf)1wvG^61F%Mq0wzKHI%LY~r ziNeQ*Wy}j;q->jGvQoF6hcN5_=%+A=Z*lSlv>r`QbFA=b=Mmp~P-wz#OU16V31%pM zmT)ov==L92DZa9AU+GC$pUt5S{oY=rxHJOor@r?{+$Yf$iHlf|@e5&) zpzC+IbypHrD!4e`PdOpZTWiXOK9E*IX};F3R5cMfV*!sho-8nicJd5{?1!>aFyK55 ztx77q(-naG>HB=&`)IquPI!naZv}&#W~D%ryGHKk7mkAkF215i=yH8| zeA%AD-(scnF+MfRKG;hG2i*0d+>F8SLpUdY{@%e@-a^QfNGD`uA#gDesFMdzGkgj% z=Q@^XNxgE=zqJ0=e1{2$adW<9{7;$k+JmU)t9}Y>I9v%IB_PFWG2XH#a$BBi9-jcQ z$(QfZNARm#_QAtVBT|@}K;I=TzG!ONxyg)}YpFUHhz;0(b}gMt85Ha0z$Kr6B@13YcK@d^FF&ivC&fEA(g;W~P`fGfZ&^mm*-C95iLdaQ>3I(#b zJKW`ea5!HpRnXS)9nu4%z?Wq8N_O@}4g>rtOng%;RmFL8mO%Y8y~0r=ESJNYN|t5c zh#3;DvZ|7a*G2!h8OZTJ!|x3DfPee|V<8+`Rt~&WPNJse=!C~{&r5Cbk2Be=G?e2y zw?S0#n>&9SIV!m^_{}>`vs%agI;X4zg#x}%pD2fY4sLb@q-t$$DSdH6q*3?1${P+8 zvUqHhO`D#%W0?bGzl_6Lk6x2bN<->(EldstU;(8IIZ8F;y*5ih=bw& zgegX6%ZNEI-XVdgx5aMCwkX0ZsGKnN8Mr5`^f>bLQCs27XFpqE6xSxMdrbVvcZgCB z+$Po}%?akVKjo`YNg$JAWn^|-+I(sDlm^SOqPI#s`W)*G9GXOpZlmhOP-+x{?tH5F zS}OO;fc+(9WC}U+fRR>5mS$?SSCv)P4yShN!GN{45*9bMY`Rc)tF~VbdeUl{@6Y8( z1?CfEs+_y5q@3P%f2F7E|Npw|{0mv?e~TRcKW1Y0TO{nf@kz*B?%%P1EoH9F*`SGT zD_GimG5;5_{7x5!FSi0`Mi0DM>_LEn(oN8E&$>gE{%Wb+B_0_hqq#^Yg&2b)D5=U3 zBEX!>A~Bky-m0@a`0Lf@YhS|EeY}@=98lEpQLM0y-+}HiW#8rn{LLhx1a&sV_5_d?r=+{1~!^)=V#9b(0wuUTi=SkFbo~ z_X`u|Dw~@-(>pM)H|R9uJ3It0^Gr`{OZfF1SF`jAXtUrIi3U5dW@C|!hUj{HPa z9u8py6$^+ZD1YCPk3i(Ij7A#4m^c9AHzjk}Z$LjA5~I2`!Q}ASu_yR+|F(mnPUN&c ztnr|9YrCnV&|ii4cB-pfQ`%)3H|aS>9_UA;#~r~UPD9Xw!=sY1co?&)p|pF;7rcz| z8Kq3qJB>$1NYzSKs@|@C-RTn4bD#3|<)I;x%!OXh14FD#nV@ zzs0%1f>6Zy<1je0EbetXFf8>Q?@S@+jzcixz(-i`;0^DA77L_Rg`1~76j8!Pa^Oa+u9B{pjYJlYm_hZXi*)G~^iFHqQ-or)6 ziy=8qpMt$v-rINJrRKkahuRC+Y*9K{+zFy^yl4brv`h9OiMNUuqYudjQ>-Gh%Hh_6_wkeboVs2nfY3lif1WskRIGSl zCu{9oofml(fMNz#MmEd%&&t1w#=_HnP0lfEs!TY?YOHqompf7WmkdihQRpIk z9`-Kv`g)0Ew73Cq-;TaG%z$u66Fno(Qa8iqPras~0d@_`FQ0C+rBir*OjTJBb`PI9g)_Z9TN2l9_r z1uy-Q!mugUUycelPqz=Z-ebsd7{xJ081LXh;Fb>=i0p3TLpzJ|eT01v6@bpn1 zuIv;rAM8w&@@oKh9^rydkopHw@dxB)H&DrOdaWy5@dsSup9tgW=&C0`1H8ZQ{tQq{ zg2^io^=sT?+8ekiI2Bi5IZ2u{NgzzLT5UbBHj!``0L!QceTw@qhCF}p=O>SzuAGfz zLOnY2>Ham{0Ej=VXRU2OSi<{m!86BQP`PggC-B|o=lU*31;s>QETuI#Pr~8z6=UGo;&St`Y>2|CI0Dw?ds)z z6&j-aPBkUmd@+t}rQwuEx&_J-fWNDoK-d-4I2N@-cpH-f zo!=@S?PCuXNwTM8lpgg`~DI(5+CR(@CIUSs#h@Us? zbjrvJ=RHrzZUl!c-zWK7(BPiq>|Au|_M0f5Xxovm8#qWi2#OolE3t5h$OgX=zi(=% zfXI1@Pi1n=H31ST4ByjKbh_-d;k2OKkSrAi>ZL?W^_>>4lMkIYKhq)8d2I5X4Vi0J zmskr0F#tv6eK2zgYCk+RWdvCJ&)baaubmEZY+6~bVMO8Y*KCjq)Kd@td8`4B9#nUA zEO3zD!WT*oFqDICr`BvM^BA~tGQpH4rvddm{#r!{R>BWPT~kvssa5PWsau-pg45dD z)NTcTr~K#0(d&w=;kkKwo?0lL=N6m^F6Q z+2N;X?9X0HBskK>Q6{mHJA~&tPd8?5M_y(bkK6`Sh0EWBg>e94pg1E3?FI5xd_Kid zzb^VwkR%d5KRS}ZmWYhk3QPvr~Y(_*KIXr9=+_dBA&0t!mhLUMUUBJOXo<#I0e zY@wx1=_1l2J!WC|ZFF3VNK6=sNX~r6b5=a555>~dZmr7OOl7{ZrHDCVF0PM&tPK|1 zU}vlm(%Lt~cjaT@bp1NsDp8SlHJPRg=cs(y=Ldw<99Yg^%~d3LoHz(yQ7c;W+}Vw_ zb=;R9Sa@IfCeJZkL3a8Ta~F;M`p%j9!y0v$^h{_-!^7Q{RMj?w3c{hJq_sC8e+y8G z>%i_X{~lvL$$JZ$pu+uTg4Z;yZ)=9%g^m^x^xbvM`xW2LGwRAbG)IKA$d>6g<4Y$( z2exWbu7LPB!sD35(|v+oji?4e)!|A`M$zAs>gey~4*${;99M`Fo7(Nac5jqtnh`GOr%}obp z!h`li@@kuzeUwU~diXt>(dGyc@{3y6)=S%+g4#@2hEH6(Xl+2>cd=Y;Zu!TglKfuh zTvMZ()&I35mjrsTbkA1#njH#;&sM3qlh+tNySay+Y7rWE(mRc6Rekna8Lzg;X3J`9 zaqBd*g54hK04N5v8C2GchV2{BMY=Q7Rh#&Sosp~wOoQRuH|RwzFhQIrN_XJZh=&S5 z-1LI}c%wA52$fUuV5-A#0vim!UJ0iQ&E+7Aosk;45=S5CDb3n0-U%{c!bEN8)YiV0 zC%9+>s@=PW=z&_xk)QeQNs4S;9KFghjxUVj*(T3ZGQOWr7HgEpoOO{7I2R^!pZW6{ zY-h)kQzw9h!RpgJuLJh4`bS{A7)qwL*lgFQ*$H#GALN12Eu|0|J zw{`?Fxh&!0Ipc~{f`$y=@hlEHSQ}jxt{APL%-I&@j!=kXiB2nSGjNF#b7&;JkqnoS z0Q@>>7fD8)-Y`Cgfh-$8OaD+G8DJy2LtW7l5O^0G@H+_-?Y(_#g`o1IL6rqwfJTEY z^IS0e96%5*f@TD<{qJCXB3AR<2N#-sV=06b#9HF3Mb2-nA?2%SprjC{q#!)kL%xMn zxx0LMad;~bEGeL!sH$$B!7BNF1y2|d3Go#L&U@Lu_>B+EyrzoCTc00Xg?G>1<2c)x z#T#KG9nsVPT#NW3&Daapvo^XcAd^Jf1>&<~3ndy;n^stctS$!DhHti|8j@l{ma-!J z>OU3%pm#yNvvdc-2>hO#yUV?gyEP->js+`EJjav9t(YL7NPIH<$OF4FzAvFqFXgtQ zCKv;K)vmySb^I7q6VOIvTQCMy*~nZ>#Nx~1ApR=&0p<R2U*<_aFMO+=H1_0qKqqcFidWT4~wN%`Ng0Cjw0!zx^yoCV9ki_O1Z@@|0~ z?+-9tqQ4%%zj0}o$v*&hU-;${$PGIyt?H8Vt zQemg(r<_|%pb;`$xM%$UG4|t+ab+3uCWRUPNGC6R3_$X7YOy!5dc94d;V`=aAN%QW z1|Yi8qnb>F4{84zlfRrF?8;<1{`hT3l+O_jbrxs-y7}&TEh@PSmNcYOB$58DcTeh4 zql5$x7(NHa{?^P6FhOSuOOOc%iKTzkx*nI5kGfJyKM-Xj8ozW1>jXKbOi{M|?5faq zu3gFqoT75&CJHAwx-Fr$!G7|rNRqHh$2_E2M4t*hOCZ6Rr-afoX-pR0i68kwBz^CK zLunF2?BEp(f0Z>}ceaA$k3nv49mkKhX`E+qOJ`ZlG?H#H%(tp7YFRiti4_6a zME5B}@ua6#lzjU{b~cF;hR>{($s=K!*cN|Jq;JILDPp09gj0aQI}*Qqv{ z%$FaR2rWf=m9w|Wh2GiT7Gk_p;k-0MqeQX{rBcB^A@{%MjYpd)vLz6b5^alW+~g?U z{$MKJF4sjk<&sA;Y-*p9F%uRL>9@i7FJxK#j9mEKk7=(CE4O0J@A(`x8l8=!; zj);fovFpX_{d5~fk?pVv@3Cy6p=mkECre8)@6SJm8)a5XESb@Tjc3aO=hY9@qn$HJ5I!Q8h>xkwkY4v} zVXX{)uBMGxB_oFIsYz-&iTU(Yk~Z>*Hcz_J_eR~z8;I`FtmUt%QKz(bcDUckf^)lN z0f{!p<-(%@*9NcJ&n7`1UkJ(G3B$u{b(uMsx4AblE@Zz1(}d56vI-^zWxcLuR@jk4 zWFl_{P1Pzx71#vmE%qn0Mb$D$>eRDiZEAii2X~5*!dX2E%(O$hiE)i z?4b=0GT9zSzd@FXMwzYy1x@4%aEAdc6CzG1Y;df%c0Uh(p58c!JmK;#x$nwbOscK= z5W9r&*T9e}OEysUF85Z25d!94DFA@W&PwQ@FV}#U^f#JGQ5kn3+#Al}TtA*ffNQEW z_Moj;E$c5-U(;(%_2n4${njFX`m|vbZvG$4(-1at0cjya7bI*%?FLMZfJA_`RsMKb z0Y&}M9|%z8NVJ4lqwcVOUjzYWH^k0XcmEh-FKtiyD$&R7>=s{p)K?Bj+N=a+?#}G@%5w4w{6`aQwG##ZS~$91{mT|vAwkCB3?OehryA}1>bY7J$tBVUViSq#0s_6VcD zp<7{+%|Eaq)G^e;g1m-IX3;BLHSv5?I{(Fl^|o5~O?OxLp0brzF&27ssG=DD0t&?3 z=1F_;DO*Z_Un`i1b1!sVgQ$mpJsex_5k0QLAK4)N@>pBQJQ?^>)2EZb+$=3mV_GaxA|3 zRq177|KBWa<+#qxl|jeJQ-AE`oW3K!Z@Lp-#7l}tyM)VVyH7plhl@I@pCJXKV3~|` zb>}y!y|L@G$?`fJHS}}lQ#vUZZGOH4c2zZm)!4kOYCHAo8VJRLk#YI!3vr{Ie33=b zchW~%U7Diz3Vg~FA&-k`9OG8YVbZ3ZHn>9X$kTR-!U%tzLS56f4QDeqoG$Kpci+n_ zZ;MAnYzXMk^TOU|QDt7_W$05L-9evuURKt5hkRhi69*PPIT=0%jy+cFKmZl%s#>Jly|&&(m(xyBVL8h zW@(wGs9-d!$Y+RPvl!p6DZ{5YV_lQ^Y>NtAZhlYf?d3E47ggtzBpEEz4%j_0dMMw!f23!3-I zfb-=3%S!e?&;9?$Gm?M&)_4Z_Zz#NR!d=K4gs{$tFfZ(^M~H)KWfdh6Mi~!n3aYPy zm0tw(jb8l3`K=JX7*X1?|1!FI`OFWPja<1gx)b^#9Z0%R??vBVb*B1Ebt@@Us)D0p(y5ncdLZ0w9C zJQ*Nh8z8{&qB59Zy}HWm5A^r*1KU}sy;v%lHlP+kSqyudW%+UWyJ#X&w!ja;72O@- z%ZUP10hRmvY*ed67mXK3d2FhFu-GjCffhgf6k{A>dQm3{;UA_rA^IMv)gr$~njJw< zs3j@*@dG|MGxp@O+dPy11zjVk!0Tsa38F$r)UHKTo zOt;YQVWoAd>PjhMJK55s14XrmoQ}M!4i1mJHEPkhQi$_fJj`8mFAkD+UgE$TutVr^ zYQSKLAXRV?@B)_fc0Tx^vpr;k@e;iQQ@DempAQWbqlJ&Kz*shoHo-e1e@TfDSpm(k;37z-6X45GIyD`W#zt?aCP6R}!=^BcbDIkU*xCvS@qC zB~)LD^OZUB0ZSLo2VROu!4AWkd?eC~On3Xypq(vxwO5)$R{amMWE8*3WY4D@5U01p6eX!Jw--@ zLJ=&fEq5(^qxU~It-LZUUE{I=eUu;0UV-AY)0aa?p%jmv0>_KdWpNrzn=MT7j?B(g z#6-pyVvKIZu4m*9M5xxn%NQqT11Dg*Bjg*`bmLy$Qs;WLv}LY0%uPVfxPdNx`BT9* zOoKk6yl@vkK-2DH&B~>@iSk9BfpJPoUMuD%Sc2f5E^0-0&pvs$Im^rD8cuLu-{sXO z5^HNsnxm;BX?ka`Zt~|%3eDPRW!b${3B=da*6fP1pd2>K5caVCT!*9|gb6kA+;?o{ zmA+@6E*$xi9zUVA(+ji*pp3G7HTE)8>+O<092J6t>(CUlIM;Z$ttEfMQy$DU+i#y2 zw~3rETA`itw@xmWSJ`R|mM;aTn>I{g6oQ9koG=m{&*EMy^1DQaZzf#wM}x~~# zUG{59;HLPsoZTA#;KC=_;%tM$GN@eXqVXMQ5W7ye7mCNNSJpTlX4tQ@#2y~4!aWxM z%P0X$VX2&N%(4gG-Z40F7y5v49f>j3I8*z}VHHA~F-Ykn*-?%3AEtH_8$hA9y;6C_v48+V|y$phQ`JmzH~}V5=Ow5-3zJ54m!c(kR$HHZOjbhkhia%AY%ercT6b zf(99~t1U@mdrh#qu36X>@@ILqnhV>q#UGl(+Cs{{0~qAprgEQ?x{94aa;(J4wmlrg zj7BAMO^XSkXy#nUC50u0K4ur=?;zB+V)+Q96C{C@f=WrfGtxF6Ghp>MaE5z@dbW$l zHvuDm&d9-%qc3QJ)(i|xo2eATy^Mf)s(lyQBKm^a=Dw8-U69ew)?{hWO|;i-8Lmr9 zukj^?+WXG+&I#yVjM52M%P-N^1Qdp5U;OTTW(A#FFGM-#BKgL~?hSn8!F{L3HCr+8 z;xnqz4OOI`(TV)m{yW5_z2(DTyc?um(;UKsS07RU None: "planning_horizon_goal": DEFAULT_PLANNING_HORIZON_GOAL, **goal_override} machine_default = None if machine_default is None else { "planning_horizon_goal": DEFAULT_PLANNING_HORIZON_GOAL, **machine_default} + if entry["capability_id"] == "explore_harness": + from .explore.machine_defaults import resolve_explore_configuration + from ..explore_graph import plan_explore_configuration + + raw = dict(goal_override or {}) + graph = {} + if "mode" in raw: + planned = plan_explore_configuration({}, {"mode": raw.pop("mode")}) + graph["enabled"] = planned["evidence_enabled"] + raw["enabled"] = planned["planning_enabled"] + resolved = resolve_explore_configuration( + {"explore_graph": graph, "spawn_policy": {"explore_harness": raw}}, + machine_default.get("mode") if machine_default is not None else None, + ) + value = resolved["configuration"] + source = resolved["mode_source"] + entry["effective_configuration"] = { + "schema_version": CAPABILITY_CONFIGURATION_RESOLUTION_SCHEMA, + "capability_id": "explore_harness", "configuration": value, + "source": source, "inherited": source == "machine_default", + "goal_override_present": goal_override is not None, + "machine_default_present": machine_default is not None, + "effective_revision": configuration_payload_revision({"source": source, "configuration": value}), + } + return entry["effective_configuration"] = resolve_capability_configuration( str(entry["capability_id"]), goal_override=goal_override, diff --git a/loopx/capabilities/explore/README.md b/loopx/capabilities/explore/README.md index 8a7a83ed3b..85be067cf8 100644 --- a/loopx/capabilities/explore/README.md +++ b/loopx/capabilities/explore/README.md @@ -542,9 +542,9 @@ dependent* todo chains. It must not be used to size independent parallel worker lanes -- that misuse capped an early calibration run's treatment arm at 5 of 10 lanes; worker plans now use `schedule_independent_lanes` instead. -The command is read-only and sits behind the same per-goal opt-in gate as +The command is read-only and sits behind the same effective Goal-mode gate as `worker-branch-plan` (see "Per-Goal Opt-In Gate" below): without -`explore_harness.enabled=true` on the goal's orchestration boundary it returns +`explore_harness.enabled=true` on the Goal's effective orchestration boundary it returns a disabled packet, and `--width` is capped by `max_children` in addition to its own ceiling. It does not claim todos, acquire leases, launch agents, spend quota, or change the active state. Instead it emits a prediction @@ -673,7 +673,7 @@ do not claim todos, acquire leases, launch workers, write state, or grant quota authority. They only constrain the predicted portfolio; execution still enters the normal LoopX lifecycle described below. -This command is read-only and opt-in per goal. It is designed to sit on top of +This command is read-only and requires an enabled effective Goal mode. It is designed to sit on top of the existing LoopX harness, not beside it and not instead of it: 1. LoopX supplies the harness inputs: quota/status context outside this command, @@ -836,11 +836,10 @@ contract does not enable Explore Harness. #### Explore Harness planning gate Both opt-in planners — `todo-branch-plan` and `worker-branch-plan` — -are deny-by-default. The gate lives on the registered goal's `spawn_policy`, -the single writable source that the quota/status pipeline projects into -`quota should-run` as `goal_boundary.orchestration`. No other registry key is -honored: a second source would be an authorization surface invisible to the -quota boundary. +are deny-by-default. The gate consumes the Goal's effective `spawn_policy`, +composed from the explicit Goal mode or live machine preference and projected +into `quota should-run` as `goal_boundary.orchestration`. Goal-owned spawn +permissions are preserved; the machine preference adds no execution authority. ```yaml # inside the registered goal entry @@ -1374,3 +1373,31 @@ recorded and fatal failures, concurrent groups without mutable-state aliasing, fatal structural preflight, record-mode malformed-item isolation with resume continuity, aggregate metric projection, and episode-only adapters without a legacy `execute` method. + + +## Machine default + +In Settings → Device → Explore Harness, choose **Off**, **Evidence**, or +**Planning**, preview, then apply. Planning includes the evidence graph and +read-only branch guidance. The default is off until the owner configures it. + +The `explore_harness` machine namespace uses +`{"schema_version":"explore_harness_machine_defaults_v0","mode":"planning"}`. +It follows the same `machine-config` preview, exact-revision apply, remove and +rollback transaction as other device preferences. Existing and new Goals with +no explicit mode inherit live; no Goal registry is rewritten. Separate runtime +roots retain their own settings, including isolated benchmark runtimes. + +Explicit Goal modes and legacy graph/harness `enabled` fields override the +machine mode, including `false`. A profile or composition setting alone does +not pin the mode. Goal settings show the effective mode and its source. Use +**Restore inheritance** or `configure-goal --clear-explore-configuration` to +remove the Goal's Explore overrides; this preserves other spawn settings. +Set an explicit Goal mode to `off` to keep that Goal disabled. + +Turn context, planning, quota/history and material-refresh readers use the same +mode owner. Evidence does not grant external publication authority; machine +activation retains local projection without enabling a sink. Profile, research +scope, spawn permission, leases, quota and host continuation remain separately +owned. Enabled configuration alone does not prove evidence adoption or better +outcomes. diff --git a/loopx/capabilities/explore/README.zh-CN.md b/loopx/capabilities/explore/README.zh-CN.md index 150badad63..3426848775 100644 --- a/loopx/capabilities/explore/README.zh-CN.md +++ b/loopx/capabilities/explore/README.zh-CN.md @@ -273,7 +273,7 @@ Todo 关联保留既有可恢复边界与 claim/lease 证明;恢复旧批次 关于 DSpark 引文(arXiv:2607.05147)的准确性说明:真实 DSpark 会在每个 per-step 置信度低于固定阈值的第一个位置截断半自回归 draft 块,并且只把 per-step 置信度累乘作为校准诊断。这里的 prefix-survival theta 模型(survival product × throughput 曲线)是 LoopX 特有的、面向**串行依赖** todo 链的扩展。绝不能用它来衡量独立并行 worker lanes 的规模——早期校准运行曾因此把 treatment arm 截到 5/10 lanes;worker 规划现在使用 `schedule_independent_lanes` 代替。 -命令只读,并与 `worker-branch-plan` 一样受 per-goal opt-in 门控(见下文):没有 `explore_harness.enabled=true` 时返回 disabled packet,`--width` 在自身上限之外还被 `max_children` 封顶。它不 claim todo、不 acquire lease、不 launch agent、不 spend quota、不改变 active state。它只输出预测 packet: +命令只读,并与 `worker-branch-plan` 一样受 Goal 有效模式门控(见下文):没有 `explore_harness.enabled=true` 时返回 disabled packet,`--width` 在自身上限之外还被 `max_children` 封顶。它不 claim todo、不 acquire lease、不 launch agent、不 spend quota、不改变 active state。它只输出预测 packet: - 选中的分支、置信度、hazards 与 reason codes; - 被排除的 `continuous_monitor` 诊断——仍可见,但绝不进入探索调度器或消耗分支宽度; @@ -322,7 +322,7 @@ loopx explore worker-branch-plan --goal-id --worker-width 5 \ 这仍是仅分析证据:`resource_portfolio.score_delta=0`、typed evidence 保持 `score_delta=0`、planner 只读。容量与占用不 claim todo、不 acquire lease、不 launch worker、不写状态、不授予 quota 权威。它们只约束预测 portfolio;执行仍进入下面描述的正常 LoopX 生命周期。 -该命令只读、per-goal opt-in。它设计为**叠加在现有 LoopX harness 之上**,而不是并排或取代: +该命令只读,需要开启 Goal 有效模式。它设计为**叠加在现有 LoopX harness 之上**,而不是并排或取代: 1. LoopX 提供 harness 输入:quota/status 上下文、open agent todo 投影、explore result 投影、所有权、能力、写作用域元数据。 2. opt-in planner 把 todos 分组为 worker-lane 候选,用 DSpark 风格 confidence/prefix/load 打分选择 worker branch 前缀。 @@ -332,12 +332,12 @@ loopx explore worker-branch-plan --goal-id --worker-width 5 \ ### 每 Goal 独立 Opt-In 门控 -Explore Graph 与 Explore Harness 是相互独立的可选能力。开启一个绝不开启另一个: +Explore Harness 统一提供 `off`、`evidence`、`planning` 三种模式;planning 包含证据图。旧配置字段仍兼容: - `explore_graph.enabled` 控制持久图投影与任何已配置的展示 sink。每次成功的 material `refresh-state` 事务后,LoopX 折叠 canonical Explore 证据并运行已配置 sink。语义 digest 让未变更的 refresh 成为零写操作。已配置行 sink 只有在 row/result-id readback 验证投影后才算完成。失败同步或 readback 不推进其 digest,下次 material refresh 会重试。视觉 sink 还会预检确定性交付标记:已有标记对先前写做对账而不重复发布;有界 readback 超时在该 stage batch 停止后续调用并留下可重试 receipt,而不是盲目重复远端写。 -- `spawn_policy.explore_harness.enabled` 只控制下面描述的只读分支规划器。它不创建、更新或发布图。 +- `spawn_policy.explore_harness.enabled` 开启只读分支规划及证据层,但不授予外部 sink 发布权限。 -两个门控默认缺失/false。常见模式是 Graph on、Harness off:保持 operator 面向的拓扑最新,同时不改变工作的规划方式。 +没有 Goal 显式模式时继承机器默认;两者均未配置则关闭。`evidence` 保持证据图可用,`planning` 同时提供规划建议。 ```yaml # inside the registered goal entry @@ -639,3 +639,25 @@ runtime smoke 与聚焦 pytest 模块还覆盖:可恢复 prefix 复用、prefi 在解读中区分已建立的观察、仍未知的结论和下一步有用的验证。问题已回答时, 使用已有可选 `question_update` 收束,不因整体 Goal 未完成而一直保持开放, 也不因结论被确认就自动关闭问题。历史状态与 CLI finding 默认值保持兼容。 + + +## 机器默认值 + +在「设置 → 设备 → Explore Harness」选择 **关闭**、**仅证据** 或 **证据与规划**, +预览后应用。planning 包含证据图和只读分支规划建议;未配置时仍默认关闭。 + +机器命名空间 `explore_harness` 使用 +`{"schema_version":"explore_harness_machine_defaults_v0","mode":"planning"}`, +沿用 `machine-config` 的预览、精确版本应用、移除与回滚事务。已有与新建的、没有 +显式模式的 Goal 实时继承,不批量改写注册表。独立 runtime root 保留各自设置, +包括隔离的 benchmark runtime。 + +Goal 显式模式及旧版 graph/harness `enabled` 字段优先,包括 `false`。只有 profile +或组合设置时不会固定模式。Goal 设置展示有效模式及来源;「恢复继承」或 +`configure-goal --clear-explore-configuration` 清除该 Goal 的 Explore 覆盖,保留 +其他 spawn 设置。若要单独关闭某个 Goal,显式设为 `off`。 + +Turn 上下文、规划、quota/history 和交付后图更新使用同一个模式解析器。证据模式 +不授予对外发布权限;机器默认开启只保留本地图投影,不自动启用外部 sink。 +profile、研究范围、spawn 权限、lease、quota 和宿主续跑仍由各自机制管理。 +配置已开启本身不代表证据已被采纳或任务效果已提升。 diff --git a/loopx/capabilities/explore/activation.py b/loopx/capabilities/explore/activation.py index a3592e749e..9727ad1aa0 100644 --- a/loopx/capabilities/explore/activation.py +++ b/loopx/capabilities/explore/activation.py @@ -88,6 +88,12 @@ def sync_explore_graph_after_material_refresh( """ goal = load_goal_from_registry(registry_path, goal_id) + explicit_graph_enabled = ((goal or {}).get("explore_graph") or {}).get("enabled") is True + if goal is not None: + from .machine_defaults import resolve_explore_goal + from ...control_plane.runtime.runtime_projection_route import resolve_goal_source_runtime_route + route = resolve_goal_source_runtime_route(registry_path=registry_path, goal_id=goal_id) + goal = resolve_explore_goal(goal, Path(route["source_runtime_root"])) policy = compact_explore_graph_policy( (goal or {}).get("explore_graph"), ((goal or {}).get("spawn_policy") or {}).get("explore_harness") ) @@ -129,7 +135,7 @@ def sync_explore_graph_after_material_refresh( # reading or publishing anything. An enabled legacy Harness does not grant a # sink permission merely by supplying its local evidence graph. external_sink_delivery_authorized = external_sink_delivery_authorized and ( - ((goal or {}).get("explore_graph") or {}).get("enabled") is True + explicit_graph_enabled ) base["external_sink_delivery_authorized"] = external_sink_delivery_authorized diff --git a/loopx/capabilities/explore/composition_frontier.py b/loopx/capabilities/explore/composition_frontier.py index 0a47b72742..c04586ccad 100644 --- a/loopx/capabilities/explore/composition_frontier.py +++ b/loopx/capabilities/explore/composition_frontier.py @@ -235,6 +235,8 @@ def project_live_explore_composition_frontier( ), {}, ) + from .machine_defaults import resolve_explore_goal + goal = resolve_explore_goal(goal, runtime_root) orchestration = compact_orchestration_policy(goal.get("spawn_policy")) harness = ( orchestration.get("explore_harness") diff --git a/loopx/capabilities/explore/harness_gate.py b/loopx/capabilities/explore/harness_gate.py index f920322273..3077d4cbcf 100644 --- a/loopx/capabilities/explore/harness_gate.py +++ b/loopx/capabilities/explore/harness_gate.py @@ -5,14 +5,9 @@ from ...orchestration import compact_orchestration_policy -# Per-goal opt-in gate shared by the experimental exploration planners -# (todo-branch-plan and worker-branch-plan). Planning stays disabled unless -# the registered goal's spawn_policy -- the single source the quota/status -# pipeline projects into goal_boundary.orchestration -- explicitly sets -# explore_harness.enabled=true. The gate also decides whether suggested -# claim/lease commands may be emitted (spawn_allowed) and caps lane width -# with max_children; execution authority always stays with the normal LoopX -# quota/claim/lease lifecycle. +# The typed mode owner composes explicit Goal settings over the live machine +# preference. This gate receives the resulting orchestration projection, never +# reads settings itself, and preserves Goal-owned spawn/claim/lease authority. EXPLORE_HARNESS_GATE_SCHEMA_VERSION = "loopx_explore_harness_gate_v0" GATE_STATE_DISABLED = "disabled" GATE_STATE_ANALYSIS_ONLY = "analysis_only" @@ -37,10 +32,10 @@ def explore_harness_required_contract(*, default_profile: str) -> dict[str, Any] }, }, "note": ( - "explore_harness.enabled defaults to false for every goal and must be " - "a boolean true; register the opt-in on the goal's spawn_policy (it " - "projects into quota should-run as goal_boundary.orchestration) before " - "the exploration planners will produce lanes for this goal" + "Explore planning defaults to off. Choose planning in the machine " + "settings or on this Goal; explicit Goal modes take precedence. " + "The effective mode reaches goal_boundary.orchestration without " + "granting spawn, claim, lease or quota authority." ), } diff --git a/loopx/capabilities/explore/machine_defaults.py b/loopx/capabilities/explore/machine_defaults.py new file mode 100644 index 0000000000..c922652ff6 --- /dev/null +++ b/loopx/capabilities/explore/machine_defaults.py @@ -0,0 +1,107 @@ +"""Machine preference IO and adapters to Explore's existing typed mode owner.""" +from __future__ import annotations + +from collections.abc import Mapping +from copy import deepcopy +from functools import lru_cache +import json +from pathlib import Path +from typing import Any + +from ...control_plane.effect_runtime import effect_runtime_result +from ...explore_graph import plan_explore_configuration +from ..machine_configuration.contract import ( + MACHINE_CONFIGURATION_SCHEMA, MachineConfigurationNamespace, +) + +EXPLORE_MACHINE_DEFAULTS_SCHEMA = "explore_harness_machine_defaults_v0" + + +def normalize_explore_machine_defaults(raw: Mapping[str, Any]) -> dict[str, Any]: + if set(raw) != {"schema_version", "mode"} or raw.get("schema_version") != EXPLORE_MACHINE_DEFAULTS_SCHEMA: + raise ValueError("explore_harness requires its schema_version and mode") + if not isinstance(raw["mode"], str): + raise ValueError("Explore machine mode must be off, evidence or planning") + return {"schema_version": EXPLORE_MACHINE_DEFAULTS_SCHEMA, "mode": _validated_mode(raw["mode"])} + + +@lru_cache(maxsize=3) +def _validated_mode(mode: str) -> str: + return str(plan_explore_configuration({}, {"mode": mode})["mode"]) + + +def explore_machine_configuration_namespace() -> MachineConfigurationNamespace: + return MachineConfigurationNamespace( + namespace="explore_harness", + schema_versions=frozenset({EXPLORE_MACHINE_DEFAULTS_SCHEMA}), + normalize=normalize_explore_machine_defaults, + project_public=lambda value: dict(value), + apply_public_update=lambda _current, update: dict(update), + title="Explore Harness", + description=("Default exploration mode for existing and new Goals. Explicit Goal modes take precedence. " + "Planning includes evidence and read-only guidance; execution authority remains separate."), + documentation={"path": "loopx/capabilities/explore/README.md#machine-default"}, + default_configuration={"schema_version": EXPLORE_MACHINE_DEFAULTS_SCHEMA, "mode": "off"}, + ) + + +@lru_cache(maxsize=128) +def _resolve(encoded: str) -> dict[str, Any]: + return effect_runtime_result("explore.configuration.goal", json.loads(encoded)) + + +def resolve_explore_configuration( + goal: Mapping[str, Any], machine_mode: str | None = None, +) -> dict[str, Any]: + spawn = goal.get("spawn_policy") or {} + # Only the capability configuration crosses the typed boundary, never the + # Goal's private context or another capability's bindings. + return deepcopy(_resolve(json.dumps({ + "graph": goal.get("explore_graph") or {}, + "harness": spawn.get("explore_harness") or {}, + "machine_mode": machine_mode, + }, sort_keys=True))) + + +def configuration_summary(goal: Mapping[str, Any]) -> dict[str, Any] | None: + return resolve_explore_configuration(goal)["goal_override"] + + +def apply_explore_machine_default( + goal: Mapping[str, Any], machine_configuration: Mapping[str, Any] | None, +) -> dict[str, Any]: + machine_mode = None + if machine_configuration is not None: + if machine_configuration.get("schema_version") != MACHINE_CONFIGURATION_SCHEMA: + raise ValueError(f"machine_configuration must use {MACHINE_CONFIGURATION_SCHEMA}") + namespaces = machine_configuration.get("namespaces") + if not isinstance(namespaces, Mapping): + raise TypeError("machine_configuration.namespaces must be an object") + raw = namespaces.get("explore_harness") + if raw is not None: + if not isinstance(raw, Mapping): + raise TypeError("explore_harness machine configuration must be an object") + machine_mode = normalize_explore_machine_defaults(raw)["mode"] + resolved = resolve_explore_configuration(goal, machine_mode) + projected = deepcopy(dict(goal)) + if resolved["mode_source"] == "machine_default": + projected["explore_graph"] = {**(projected.get("explore_graph") or {}), + "enabled": resolved["evidence_enabled"]} + spawn = dict(projected.get("spawn_policy") or {}) + harness = dict(spawn.get("explore_harness") or {}) + harness["enabled"] = resolved["planning_enabled"] + spawn["explore_harness"] = harness + projected["spawn_policy"] = spawn + return projected + + +def resolve_explore_goal(goal: Mapping[str, Any], runtime_root: Path) -> dict[str, Any]: + """Resolve live settings for callers that read the raw registry, without writes.""" + if resolve_explore_configuration(goal)["mode_source"] == "goal_override": + return deepcopy(dict(goal)) + from ..machine_configuration.builtins import build_builtin_machine_configuration_registry + from ..machine_configuration.store import read_machine_configuration + + return apply_explore_machine_default(goal, read_machine_configuration( + runtime_root, registry=build_builtin_machine_configuration_registry(), + )) diff --git a/loopx/capabilities/explore/research_evidence.py b/loopx/capabilities/explore/research_evidence.py index 8fbdb45cec..d189f1141c 100644 --- a/loopx/capabilities/explore/research_evidence.py +++ b/loopx/capabilities/explore/research_evidence.py @@ -1,6 +1,8 @@ """Transport for the Explore research contract; TypeScript owns its rules.""" from __future__ import annotations +from .machine_defaults import resolve_explore_goal + from collections.abc import Mapping from pathlib import Path from typing import Any @@ -121,7 +123,7 @@ def append_research_observation( lineage = canonical["execution_lineage"] goal = find_registry_goal(load_registry(registry_path), goal_id) or {} - harness = (goal.get("spawn_policy") or {}).get("explore_harness") or {} + harness = (resolve_explore_goal(goal, runtime_root).get("spawn_policy") or {}).get("explore_harness") or {} policy = _research_result("explore.research.composition_policy", {"harness": harness}) candidate_sources = [{"node_id": event["result_id"], "research_observation": event["research_observation"]} for event in events if event.get("research_observation")] diff --git a/loopx/capabilities/explore/research_frontier.py b/loopx/capabilities/explore/research_frontier.py index 12e886f38c..9b369eca0d 100644 --- a/loopx/capabilities/explore/research_frontier.py +++ b/loopx/capabilities/explore/research_frontier.py @@ -5,6 +5,8 @@ """ from __future__ import annotations +from .machine_defaults import resolve_explore_goal + from collections.abc import Mapping, Sequence from contextlib import contextmanager from pathlib import Path @@ -138,7 +140,7 @@ def prepare_research_replan_evidence( from .composition_frontier import project_live_explore_composition_frontier goal = {**(registry_goal or {}), "id": goal_id} - harness = (goal.get("spawn_policy") or {}).get("explore_harness") or {} + harness = (resolve_explore_goal(goal, runtime_root).get("spawn_policy") or {}).get("explore_harness") or {} if not (harness.get("enabled") is True and harness.get("composition_mode") == "explicit_only") and capability_guard is None: return None frontier = project_live_explore_composition_frontier(runtime_root=runtime_root, goal_id=goal_id, @@ -172,7 +174,7 @@ def attach_research_execution_projection( from ...control_plane.todos.contract import normalize_todo_claimed_by goal = find_registry_goal(registry, projection["goal_id"]) or {} - harness = (goal.get("spawn_policy") or {}).get("explore_harness") or {} + harness = (resolve_explore_goal(goal, runtime_root).get("spawn_policy") or {}).get("explore_harness") or {} if harness.get("enabled") is not True or harness.get("composition_mode") != "explicit_only": return registered = registered_agent_ids_for_goal(goal) @@ -214,7 +216,7 @@ def hold_research_completion_evidence( yield None return goal = find_registry_goal(load_registry(registry_path), goal_id) or {} - harness = (goal.get("spawn_policy") or {}).get("explore_harness") or {} + harness = (resolve_explore_goal(goal, runtime_root).get("spawn_policy") or {}).get("explore_harness") or {} policy = _research_result("explore.research.composition_policy", {"harness": harness}) if not policy["enabled"] or todo.get("status") == "done" or todo.get("role") == "user": yield None diff --git a/loopx/capabilities/explore/turn_context.py b/loopx/capabilities/explore/turn_context.py index d86cbf6cbc..ff80689aef 100644 --- a/loopx/capabilities/explore/turn_context.py +++ b/loopx/capabilities/explore/turn_context.py @@ -27,10 +27,16 @@ ) -def _policy(registry_path, goal_id): +def _policy(registry_path, goal_id, runtime_root=None): goal = load_goal_from_registry(registry_path, goal_id) if goal is None: raise ValueError(f"Goal {goal_id!r} is not registered") + from .machine_defaults import resolve_explore_goal + if runtime_root is None: + from ...control_plane.runtime.runtime_projection_route import resolve_goal_source_runtime_route + route = resolve_goal_source_runtime_route(registry_path=registry_path, goal_id=goal_id) + runtime_root = Path(route["source_runtime_root"]) + goal = resolve_explore_goal(goal, runtime_root) graph = compact_explore_graph_policy( goal.get("explore_graph"), (goal.get("spawn_policy") or {}).get("explore_harness"), @@ -67,7 +73,7 @@ def explore_turn_context( ): if type(include_finding_digests) is not bool: raise ValueError("include_finding_digests must be an explicit boolean") - goal, graph, gate = _policy(registry_path, goal_id) + goal, graph, gate = _policy(registry_path, goal_id, runtime_root) require_registered_agent_id( registry_path=registry_path, goal_id=goal_id, agent_id=agent_id ) @@ -153,7 +159,7 @@ def extend_turn_start_dispatch( ): if not agent_id: return dispatch - _, graph, gate = _policy(registry_path, goal_id) + _, graph, gate = _policy(registry_path, goal_id, runtime_root) if not graph and not gate["enabled"]: return dispatch @@ -219,7 +225,7 @@ def produce(): return result -def project_settlement_attachment(plan, *, registry_path: Path): +def project_settlement_attachment(plan, *, registry_path: Path, runtime_root: Path | None = None): """Compose the existing optional result option into a Todo-bound CLI plan. Registry access and hook dispatch are adapters. The typed Explore owner @@ -230,7 +236,7 @@ def project_settlement_attachment(plan, *, registry_path: Path): return plan def produce(): - _, graph, _ = _policy(registry_path, identity["goal_id"]) + _, graph, _ = _policy(registry_path, identity["goal_id"], runtime_root) return { "schema_version": INTERACTION_PROJECTION_HOOK_RESULT_SCHEMA_VERSION, "hook_id": "explore.settlement_attachment", diff --git a/loopx/capabilities/machine_configuration/builtins.py b/loopx/capabilities/machine_configuration/builtins.py index b212686dd9..368b829221 100644 --- a/loopx/capabilities/machine_configuration/builtins.py +++ b/loopx/capabilities/machine_configuration/builtins.py @@ -28,6 +28,7 @@ def build_builtin_machine_configuration_registry() -> MachineConfigurationRegist todo_replan_cadence_machine_configuration_namespace, ) + from ..explore.machine_defaults import explore_machine_configuration_namespace from .goal_storage import goal_storage_machine_configuration_namespace from ..native_chat.machine_defaults import codex_chat_machine_configuration_namespace from .context_delivery import context_delivery_machine_configuration_namespace @@ -35,6 +36,7 @@ def build_builtin_machine_configuration_registry() -> MachineConfigurationRegist return ( MachineConfigurationRegistry() .register(context_delivery_machine_configuration_namespace()) + .register(explore_machine_configuration_namespace()) .register(codex_chat_machine_configuration_namespace()) .register(goal_storage_machine_configuration_namespace()) .register(manager_runtime_machine_configuration_namespace()) @@ -59,6 +61,9 @@ def project_goal_with_builtin_machine_configuration( apply_todo_replan_cadence_machine_default, ) + from ..explore.machine_defaults import apply_explore_machine_default + + goal = apply_explore_machine_default(goal, machine_configuration) projected = apply_todo_replan_cadence_machine_default( goal, machine_configuration ) @@ -81,7 +86,10 @@ def builtin_machine_inheritable_goal_overrides( from ..pr_review_queue.goal_configuration import configuration_summary as pr_review_summary + from ..explore.machine_defaults import configuration_summary as explore_summary + summaries = { + "explore_harness": explore_summary(goal), "pull_request_review": pr_review_summary(goal), "change_quality_qualification": change_quality_summary(goal), "todo_replan_cadence": cadence_summary(goal), diff --git a/loopx/chat_goal_configuration_api.py b/loopx/chat_goal_configuration_api.py index 681682a18e..1c19ebd816 100644 --- a/loopx/chat_goal_configuration_api.py +++ b/loopx/chat_goal_configuration_api.py @@ -190,6 +190,8 @@ def _goal_capability_options( """Translate one validated UI contract into configure-goal options.""" if configuration is None: + if capability_id == "explore_harness": + return {"clear_explore_configuration": True} if capability_id == "goal_capability_organization": return {"clear_capability_improvement_configuration": True} if capability_id == "periodic_report": diff --git a/loopx/cli_commands/explore.py b/loopx/cli_commands/explore.py index 1501ae6a9c..def5c35598 100644 --- a/loopx/cli_commands/explore.py +++ b/loopx/cli_commands/explore.py @@ -295,15 +295,11 @@ def _append_event_payload(event: dict[str, object], *, runtime_root: Path, goal_ return payload -def _goal_orchestration_boundary(registry: dict[str, object], *, goal_id: str) -> dict[str, object] | None: - """Per-goal orchestration policy from the registered goal's spawn_policy. - - spawn_policy is the single writable source that the live quota/status - pipeline projects into goal_boundary.orchestration (enrich_project_asset - derives project_asset.orchestration from it too), so the planner gate must - read exactly it -- honoring any other registry key would create a second - authorization surface invisible to `quota should-run`. An unregistered - goal has no boundary, which the planners treat as opt-out. +def _goal_orchestration_boundary(registry: dict[str, object], *, goal_id: str, runtime_root: Path | None = None) -> dict[str, object] | None: + """Read the Goal boundary with the same live Explore preference as quota. + + Machine mode enables guidance only; spawn permissions remain Goal-owned. + Unregistered Goals retain the disabled planner response. """ goals = registry.get("goals") @@ -312,6 +308,9 @@ def _goal_orchestration_boundary(registry: dict[str, object], *, goal_id: str) - for goal in goals: if not isinstance(goal, dict) or str(goal.get("id") or "") != goal_id: continue + if runtime_root is not None: + from ..capabilities.explore.machine_defaults import resolve_explore_goal + goal = resolve_explore_goal(goal, runtime_root) spawn_policy = goal.get("spawn_policy") return spawn_policy if isinstance(spawn_policy, dict) else None return None @@ -678,7 +677,9 @@ def handle_explore_command( args.resource_usage, flag_name="--resource-usage", ) - orchestration = _goal_orchestration_boundary(registry, goal_id=args.goal_id) + orchestration = _goal_orchestration_boundary( + registry if same_source else load_registry(source_registry), + goal_id=args.goal_id, runtime_root=runtime_root) gate = resolve_todo_branch_plan_gate(orchestration, requested_width=args.width) if gate["state"] == GATE_STATE_DISABLED: # Short-circuit before goal-state projection so disabled and @@ -729,7 +730,9 @@ def handle_explore_command( args.resource_usage, flag_name="--resource-usage", ) - orchestration = _goal_orchestration_boundary(registry, goal_id=args.goal_id) + orchestration = _goal_orchestration_boundary( + registry if same_source else load_registry(source_registry), + goal_id=args.goal_id, runtime_root=runtime_root) gate = resolve_explore_harness_gate(orchestration, requested_width=args.worker_width) if gate["state"] == GATE_STATE_DISABLED: # Short-circuit before goal-state projection so disabled and diff --git a/loopx/cli_commands/quota.py b/loopx/cli_commands/quota.py index 84e110a174..e73f42db99 100644 --- a/loopx/cli_commands/quota.py +++ b/loopx/cli_commands/quota.py @@ -464,6 +464,7 @@ def _emit_quota_result( if isinstance(cli, dict) and isinstance(cli.get("settlement_plan"), Mapping): cli["settlement_plan"] = project_settlement_attachment( cli["settlement_plan"], registry_path=registry_path, + runtime_root=context.runtime_root if context is not None else None, ) if context is not None: observe_quota_result( diff --git a/loopx/cli_commands/registry_admin.py b/loopx/cli_commands/registry_admin.py index 01d93dc8ff..f5f85031c1 100644 --- a/loopx/cli_commands/registry_admin.py +++ b/loopx/cli_commands/registry_admin.py @@ -517,6 +517,7 @@ def handle_registry_admin_command( explore_composition_scope_id=args.explore_composition_scope_id, explore_graph_enabled=args.explore_graph_enabled, explore_mode=args.explore_mode, + clear_explore_configuration=bool(args.clear_explore_configuration), lark_kanban_heartbeat_sync=args.lark_kanban_heartbeat_sync, registered_agents=args.registered_agents, clear_registered_agents=bool(args.clear_registered_agents), diff --git a/loopx/cli_commands/registry_admin_configure.py b/loopx/cli_commands/registry_admin_configure.py index a0622642f5..eee24a94ed 100644 --- a/loopx/cli_commands/registry_admin_configure.py +++ b/loopx/cli_commands/registry_admin_configure.py @@ -256,6 +256,10 @@ def register_configure_goal_command(subparsers: argparse._SubParsersAction) -> N action="store_true", help="Clear allowed child-agent domains.", ) + configure_goal_parser.add_argument( + "--clear-explore-configuration", action="store_true", + help="Remove Goal Explore overrides and inherit the live machine mode.", + ) configure_goal_parser.add_argument( "--explore-mode", choices=("off", "evidence", "planning"), help="Explore Harness: off, evidence only, or evidence with read-only planning. Does not grant spawn authority.", diff --git a/loopx/configuration_catalog.py b/loopx/configuration_catalog.py index 7e50ce4c0f..18ee62fa33 100644 --- a/loopx/configuration_catalog.py +++ b/loopx/configuration_catalog.py @@ -896,6 +896,7 @@ def build_goal_configuration_catalog( feature_id = str(feature.get("feature_id") or "") if feature_id not in { "todo_replan_cadence", + "explore_harness", "change_quality_qualification", "pull_request_review", }: diff --git a/loopx/configure_goal.py b/loopx/configure_goal.py index 24901ced0b..1385d36907 100644 --- a/loopx/configure_goal.py +++ b/loopx/configure_goal.py @@ -480,6 +480,7 @@ def configure_goal( explore_composition_scope_id: str | None = None, explore_graph_enabled: bool | None = None, explore_mode: str | None = None, + clear_explore_configuration: bool = False, registered_agents: list[str] | None = None, clear_registered_agents: bool = False, peer_task_coordinator: str | None = None, @@ -979,6 +980,16 @@ def configure_goal( apply_reward_memory_goal_configuration(goal, reward_memory_plan) + if clear_explore_configuration: + if any(value is not None for value in ( + explore_mode, explore_graph_enabled, explore_harness_enabled, explore_harness_profile, + explore_composition_mode, explore_composition_scope_id, + )) or clear_explore_harness_profile: + raise ValueError("Clear Explore configuration or set Explore options, not both") + goal.pop("explore_graph", None) + if isinstance(goal.get("spawn_policy"), dict): + goal["spawn_policy"].pop("explore_harness", None) + if any(value is not None for value in (explore_mode, explore_graph_enabled, explore_harness_enabled)): existing_harness = (goal.get("spawn_policy") or {}).get("explore_harness") explore_plan = plan_explore_configuration( diff --git a/loopx/control_plane/capabilities/explore_configuration.ts b/loopx/control_plane/capabilities/explore_configuration.ts index d21798d756..d8cb1d9721 100644 --- a/loopx/control_plane/capabilities/explore_configuration.ts +++ b/loopx/control_plane/capabilities/explore_configuration.ts @@ -20,6 +20,32 @@ export function resolveExploreConfiguration(params: JsonObject): JsonObject { evidence_enabled: evidence, planning_enabled: planning}; } +/** Resolve one mode for both live runtime policy and configuration readback. + * Legacy enabled fields are explicit Goal choices, including false. A profile + * or composition setting alone does not pin the mode. No authority is added. + */ +export function resolveExploreGoalConfiguration(params: JsonObject): JsonObject { + const graph = requireJsonObject(params.graph ?? {}, "Explore graph configuration"); + const harness = requireJsonObject(params.harness ?? {}, "Explore harness configuration"); + const explicit = Object.hasOwn(graph, "enabled") || Object.hasOwn(harness, "enabled"); + const machine = params.machine_mode == null ? null : mode(params.machine_mode); + const selected = explicit + ? resolveExploreConfiguration({evidence_enabled: graph.enabled, planning_enabled: harness.enabled}) + : planExploreConfiguration({current: {}, changes: {mode: machine ?? "off"}}); + const override: JsonObject = {}; + if (explicit) override.mode = selected.mode; + for (const key of ["profile", "composition_mode", "composition_scope_id"]) { + if (Object.hasOwn(harness, key)) override[key] = harness[key]; + } + return { + ...selected, + mode_source: explicit ? "goal_override" : machine == null ? "capability_default" : "machine_default", + goal_override: Object.keys(override).length ? override : null, + configuration: {profile: "generic", composition_mode: "disabled", composition_scope_id: null, + ...override, mode: selected.mode}, + }; +} + export function planExploreConfiguration(params: JsonObject): JsonObject { const current = requireJsonObject(params.current, "Explore current configuration"); const changes = requireJsonObject(params.changes, "Explore configuration changes"); diff --git a/loopx/control_plane/effect_runtime_handlers.ts b/loopx/control_plane/effect_runtime_handlers.ts index a8e037ef8f..e68edc8948 100644 --- a/loopx/control_plane/effect_runtime_handlers.ts +++ b/loopx/control_plane/effect_runtime_handlers.ts @@ -819,6 +819,7 @@ export function createEffectRuntimeHandlers( ["work_item.replan_context.project", lazyHandler(() => import("./work_items/replan_context.ts"), ({projectReplanContext}) => projectReplanContext)], ["work_item.replan_context.project_snapshot", lazyHandler(() => import("./work_items/replan_context.ts"), ({projectReplanContextSnapshot}) => projectReplanContextSnapshot)], ["explore.configuration.resolve", lazyHandler(() => import("./capabilities/explore_configuration.ts"), ({resolveExploreConfiguration}) => resolveExploreConfiguration)], + ["explore.configuration.goal", lazyHandler(() => import("./capabilities/explore_configuration.ts"), ({resolveExploreGoalConfiguration}) => resolveExploreGoalConfiguration)], ["explore.configuration.plan", lazyHandler(() => import("./capabilities/explore_configuration.ts"), ({planExploreConfiguration}) => planExploreConfiguration)], ["explore.result.normalize", lazyHandler(() => import("./capabilities/explore_result_writeback.ts"), ({normalizeExploreResultAttachment}) => normalizeExploreResultAttachment)], ["explore.execution.normalize", lazyHandler(() => import("./capabilities/explore_execution_observation.ts"), ({normalizeExploreExecutionObservation}) => normalizeExploreExecutionObservation)], diff --git a/tests/capabilities/test_explore_machine_defaults.py b/tests/capabilities/test_explore_machine_defaults.py new file mode 100644 index 0000000000..c5c5605c34 --- /dev/null +++ b/tests/capabilities/test_explore_machine_defaults.py @@ -0,0 +1,159 @@ +"""Live preference, explicit override, and the actual Explore entrypoints.""" +from __future__ import annotations + +from copy import deepcopy +import json +from pathlib import Path +import subprocess +import sys + +import pytest + +from loopx.capabilities.explore.activation import sync_explore_graph_after_material_refresh +from loopx.capabilities.explore.machine_defaults import ( + EXPLORE_MACHINE_DEFAULTS_SCHEMA, apply_explore_machine_default, + normalize_explore_machine_defaults, resolve_explore_goal, +) +from loopx.capabilities.explore.turn_context import ( + explore_turn_context, extend_turn_start_dispatch, project_settlement_attachment, +) +from loopx.capabilities.configuration_inspection import inspect_machine_namespaces, project_goal_configuration +from loopx.capabilities.machine_configuration.builtins import build_builtin_machine_configuration_registry +from loopx.capabilities.machine_configuration.store import configure_machine_configuration +from loopx.chat_goal_configuration_api import _goal_capability_options +from loopx.configure_goal import configure_goal +from loopx.control_plane.coordination.goal_storage_initialization import initialize_goal_storage_target +from loopx.history import collect_history + + +def configure_machine(root: Path, mode: str): + config = {"schema_version": "loopx_machine_configuration_v0", "namespaces": { + "explore_harness": {"schema_version": EXPLORE_MACHINE_DEFAULTS_SCHEMA, "mode": mode}, + }} + args = dict(runtime_root=root, configuration=config, registry=build_builtin_machine_configuration_registry()) + preview = configure_machine_configuration(**args) + return configure_machine_configuration(**args, execute=True, expected_plan_revision=preview["plan_revision"]) + + +@pytest.fixture +def setup(tmp_path): + root = tmp_path / "runtime" + (tmp_path / "goal.md").write_text("# Goal\n\n## Agent Todos\n") + path = tmp_path / "registry.json" + goal = {"id": "research", "creation_operation_id": "goal-create:research", "status": "active", + "repo": str(tmp_path), "state_file": "goal.md", + "spawn_policy": {"spawn_allowed": False, "max_children": 2}, + "coordination": {"registered_agents": ["worker"], "storage_target": { + "schema_version": "loopx_new_goal_storage_target_v1", "provider": "file", "handoff_mode": "soft_claim"}}} + path.write_text(json.dumps({"schema_version": 1, "common_runtime_root": str(root), "goals": [goal]})) + initialize_goal_storage_target(root, goal, registry_path=path) + return path, root, goal + + +@pytest.mark.parametrize("bad", [None, True, 1, "unknown", [], {}]) +def test_invalid_mode_cannot_enable_planning(bad): + with pytest.raises((ValueError, TypeError, RuntimeError)): + normalize_explore_machine_defaults({"schema_version": EXPLORE_MACHINE_DEFAULTS_SCHEMA, "mode": bad}) + + +def test_existing_and_new_goals_inherit_live_without_registry_writes(setup): + path, root, goal = setup + original = path.read_bytes() + assert resolve_explore_goal(goal, root) == goal + for mode, evidence, planning in [("planning", True, True), ("evidence", True, False), ("off", False, False)]: + configure_machine(root, mode) + for raw in (goal, {**goal, "id": "new-goal"}): + effective = resolve_explore_goal(raw, root) + assert effective["explore_graph"]["enabled"] is evidence + assert effective["spawn_policy"]["explore_harness"]["enabled"] is planning + assert effective["spawn_policy"]["spawn_allowed"] is False + assert effective["spawn_policy"]["max_children"] == 2 + assert path.read_bytes() == original + context = explore_turn_context(registry_path=path, runtime_root=root, goal_id="research", agent_id="worker") + assert context["graph_enabled"] is evidence + assert context["harness_enabled"] is planning + assert apply_explore_machine_default(goal, None) == goal + + +def test_explicit_off_and_legacy_settings_override_machine(setup): + _, root, goal = setup + configure_machine(root, "planning") + for override in ({"explore_graph": {"enabled": False}}, + {"spawn_policy": {"explore_harness": {"enabled": False}}}, + {"explore_graph": {"enabled": True}}): + raw = {**goal, **override} + assert resolve_explore_goal(raw, root) == raw + metadata = deepcopy(goal) + metadata["spawn_policy"]["explore_harness"] = {"profile": "generic", "composition_mode": "disabled"} + effective = resolve_explore_goal(metadata, root) + assert effective["spawn_policy"]["explore_harness"] == { + "enabled": True, "profile": "generic", "composition_mode": "disabled"} + assert "enabled" not in metadata["spawn_policy"]["explore_harness"] + + +def test_goal_override_clear_restores_inheritance_in_settings_and_runtime(setup): + path, root, _ = setup + configure_machine(root, "planning") + def settings(): + packet = project_goal_configuration( + configure_goal(registry_path=path, goal_id="research"), + machine_namespaces=inspect_machine_namespaces(root)) + return next(c for c in packet["capability_catalog"]["capabilities"] if c["capability_id"] == "explore_harness") + inherited = settings() + assert inherited["effective_configuration"]["source"] == "machine_default" + assert inherited["effective_configuration"]["configuration"]["mode"] == "planning" + assert "current" not in inherited + configure_goal(registry_path=path, goal_id="research", explore_mode="off", execute=True) + assert settings()["effective_configuration"]["source"] == "goal_override" + clear = _goal_capability_options("explore_harness", None) + original = path.read_bytes() + configure_goal(registry_path=path, goal_id="research", **clear) + assert path.read_bytes() == original + with pytest.raises(ValueError, match="Clear Explore"): + configure_goal(registry_path=path, goal_id="research", explore_mode="planning", execute=True, **clear) + assert path.read_bytes() == original + configure_goal(registry_path=path, goal_id="research", execute=True, **clear) + assert settings()["effective_configuration"]["source"] == "machine_default" + goal = json.loads(path.read_text())["goals"][0] + assert goal["spawn_policy"]["spawn_allowed"] is False + assert "explore_harness" not in goal["spawn_policy"] + assert "explore_graph" not in goal + assert resolve_explore_goal(goal, root)["spawn_policy"]["explore_harness"]["enabled"] is True + + +def test_runtime_hooks_history_cli_and_material_refresh_use_same_default(setup): + path, root, _ = setup + configure_machine(root, "planning") + history = collect_history(registry_path=path, runtime_root=root, goal_id="research", limit=1) + assert history["goals"][0]["spawn_policy"]["explore_harness"]["enabled"] is True + hooks = extend_turn_start_dispatch({}, registry_path=path, runtime_root=root, goal_id="research", agent_id="worker") + assert any(read["kind"] == "explore_turn_context" for read in hooks["required_reads"]) + plan = {"identity": {"goal_id": "research", "agent_id": "worker", "todo_id": "todo-one"}, + "ordered_steps": [{"kind": "durable_writeback", "command_template": "loopx refresh-state"}]} + assert project_settlement_attachment(plan, registry_path=path)["ordered_steps"][0]["optional_attachments"] + calls = [] + def syncer(**kwargs): + calls.append(kwargs) + return {"ok": True, "status": "not_configured"} + sync_explore_graph_after_material_refresh(registry_path=path, goal_id="research", syncer=syncer) + assert calls + assert calls[0]["external_sink_delivery_authorized"] is False + for command in ("turn-context", "todo-branch-plan", "worker-branch-plan"): + result = subprocess.run([sys.executable, "-m", "loopx.cli", "--registry", str(path), + "--runtime-root", str(root), "--format", "json", "explore", command, + "--goal-id", "research", "--agent-id", "worker"], capture_output=True, text=True) + assert result.returncode == 0, result.stdout + result.stderr + packet = json.loads(result.stdout) + assert packet.get("harness_enabled", packet.get("enabled")) is True, packet + + +def test_runtime_roots_do_not_share_defaults_and_null_legacy_fields_are_absent(setup, tmp_path): + _, root, goal = setup + configure_machine(root, "planning") + isolated = tmp_path / "isolated-runtime" + assert resolve_explore_goal(goal, isolated) == goal + legacy = {**goal, "spawn_policy": None, "explore_graph": None} + assert resolve_explore_goal(legacy, root)["spawn_policy"]["explore_harness"]["enabled"] is True + configure_machine(isolated, "off") + assert resolve_explore_goal(goal, root)["spawn_policy"]["explore_harness"]["enabled"] is True + assert resolve_explore_goal(goal, isolated)["spawn_policy"]["explore_harness"]["enabled"] is False diff --git a/tests/control_plane_ts/explore_configuration.test.ts b/tests/control_plane_ts/explore_configuration.test.ts new file mode 100644 index 0000000000..5c6a5e64f3 --- /dev/null +++ b/tests/control_plane_ts/explore_configuration.test.ts @@ -0,0 +1,24 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import {resolveExploreGoalConfiguration} from "../../loopx/control_plane/capabilities/explore_configuration.ts"; + +const resolve = resolveExploreGoalConfiguration; +test("machine preference inherits live while Goal modes retain priority", () => { + const goal = {graph: {}, harness: {profile: "generic", composition_mode: "disabled"}}; + assert.equal(resolve(goal).mode, "off"); + for (const mode of ["off", "evidence", "planning"]) { + const inherited = resolve({...goal, machine_mode: mode}); + assert.equal(inherited.mode, mode); + assert.equal(inherited.mode_source, "machine_default"); + assert.equal(inherited.configuration.profile, "generic"); + assert.equal(inherited.goal_override.mode, undefined); + } + assert.deepEqual(goal.graph, {}); + assert.equal(resolve({harness: {enabled: false}, machine_mode: "planning"}).mode, "off"); + assert.equal(resolve({graph: {enabled: true}, machine_mode: "planning"}).mode, "evidence"); + const legacy = resolve({graph: {enabled: false}, harness: {enabled: true}, machine_mode: "off"}); + assert.equal(legacy.mode, "planning"); + assert.equal(legacy.evidence_enabled, true); + assert.equal(legacy.mode_source, "goal_override"); + assert.throws(() => resolve({machine_mode: "unexpected"}), /explore_mode/); +}); diff --git a/tests/test_chat_machine_configuration_api.py b/tests/test_chat_machine_configuration_api.py index 5db52c40fc..f6948d870e 100644 --- a/tests/test_chat_machine_configuration_api.py +++ b/tests/test_chat_machine_configuration_api.py @@ -342,6 +342,7 @@ def test_inspection_lists_registered_namespaces_without_local_refs( "change_quality_qualification", "codex_chat", "context_delivery", + "explore_harness", "goal_storage", "manager_runtime", "periodic_report", @@ -466,6 +467,7 @@ def test_machine_catalog_discovers_goal_features_without_granting_machine_writes assert item["machine_namespace"] == capability_id assert item["configuration_editor"]["writable_scopes"] == ["machine"] elif capability_id not in { + "explore_harness", "periodic_report", "todo_replan_cadence", "change_quality_qualification", @@ -862,3 +864,44 @@ def test_public_api_update_preserves_provider_private_namespace_state( "enabled": True, "secret": "keep-me", } + + +def test_explore_machine_mode_uses_real_http_preview_apply_and_readback(tmp_path: Path) -> None: + from loopx.chat_server import ChatHTTPServer, ChatRequestHandler + server = ChatHTTPServer(("127.0.0.1", 0), ChatRequestHandler) + server.runtime_root = tmp_path + server.verbose = False + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + connection = http.client.HTTPConnection(*server.server_address, timeout=10) + + def request(method, path, body=None): + connection.request(method, path, body=json.dumps(body) if body is not None else None, + headers={"Content-Type": "application/json"}) + response = connection.getresponse() + return response.status, json.loads(response.read()) + + try: + _, inspection = request("GET", CHAT_MACHINE_CONFIGURATION_PATH) + entry = next(c for c in inspection["capability_catalog"]["capabilities"] if c["capability_id"] == "explore_harness") + assert entry["available_scopes"] == ["machine", "goal"] + assert [f["key"] for f in entry["configuration_editor"]["fields"]] == ["mode"] + desired = {"namespace": "explore_harness", "namespace_configuration": { + "schema_version": "explore_harness_machine_defaults_v0", "mode": "planning"}} + status, preview = request("POST", CHAT_MACHINE_CONFIGURATION_PREVIEW_PATH, desired) + assert status == 201 + _, unchanged = request("GET", CHAT_MACHINE_CONFIGURATION_PATH) + assert unchanged["machine_configuration"] is None + status, rejected = request("POST", CHAT_MACHINE_CONFIGURATION_APPLY_PATH, + {**desired, "expected_plan_revision": "stale"}) + assert status >= 400 and rejected["ok"] is False + status, applied = request("POST", CHAT_MACHINE_CONFIGURATION_APPLY_PATH, + {**desired, "expected_plan_revision": preview["plan_revision"]}) + assert status == 200 and applied["ok"] is True + _, inspection = request("GET", CHAT_MACHINE_CONFIGURATION_PATH) + assert inspection["machine_configuration"]["namespaces"]["explore_harness"] == desired["namespace_configuration"] + finally: + connection.close() + server.shutdown() + thread.join(timeout=5) + server.server_close() From 9b2de9385b93ecd6579a34c1849cc3c922f97ec2 Mon Sep 17 00:00:00 2001 From: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Date: Tue, 27 Oct 2026 01:37:22 +0800 Subject: [PATCH 2/3] Fix Explore material refresh runtime selection Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --- loopx/capabilities/explore/activation.py | 6 +- .../project_lifecycle_refresh_state.py | 1 + .../test_explore_machine_defaults.py | 59 +++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/loopx/capabilities/explore/activation.py b/loopx/capabilities/explore/activation.py index 9727ad1aa0..7681060d16 100644 --- a/loopx/capabilities/explore/activation.py +++ b/loopx/capabilities/explore/activation.py @@ -74,6 +74,7 @@ def sync_explore_graph_after_material_refresh( *, registry_path: Path, goal_id: str, + runtime_root_override: str | None = None, agent_id: str | None = None, project: Path | None = None, state_file: Path | None = None, @@ -92,7 +93,10 @@ def sync_explore_graph_after_material_refresh( if goal is not None: from .machine_defaults import resolve_explore_goal from ...control_plane.runtime.runtime_projection_route import resolve_goal_source_runtime_route - route = resolve_goal_source_runtime_route(registry_path=registry_path, goal_id=goal_id) + route = resolve_goal_source_runtime_route( + registry_path=registry_path, goal_id=goal_id, + runtime_root_override=runtime_root_override, + ) goal = resolve_explore_goal(goal, Path(route["source_runtime_root"])) policy = compact_explore_graph_policy( (goal or {}).get("explore_graph"), ((goal or {}).get("spawn_policy") or {}).get("explore_harness") diff --git a/loopx/cli_commands/project_lifecycle_refresh_state.py b/loopx/cli_commands/project_lifecycle_refresh_state.py index 0c1091843c..e3bac091ea 100644 --- a/loopx/cli_commands/project_lifecycle_refresh_state.py +++ b/loopx/cli_commands/project_lifecycle_refresh_state.py @@ -851,6 +851,7 @@ def handle_refresh_state_command( graph_sync = sync_explore_graph_after_material_refresh( registry_path=registry_path, goal_id=args.goal_id, + runtime_root_override=args.runtime_root, agent_id=args.agent_id, project=Path(args.project).expanduser() if args.project else None, state_file=Path(args.state_file).expanduser() if args.state_file else None, diff --git a/tests/capabilities/test_explore_machine_defaults.py b/tests/capabilities/test_explore_machine_defaults.py index 61fcd55694..e149c0de84 100644 --- a/tests/capabilities/test_explore_machine_defaults.py +++ b/tests/capabilities/test_explore_machine_defaults.py @@ -178,6 +178,65 @@ def test_todo_settlement_plan_uses_selected_runtime(setup, tmp_path, registry_mo assert str(selected) in writeback["command_template"] +@pytest.mark.parametrize("registry_mode,selected_mode", [("off", "planning"), ("planning", "off")]) +def test_refresh_state_uses_selected_runtime_for_graph_activation(setup, tmp_path, registry_mode, selected_mode): + path, selected, _ = setup + root = tmp_path / "registry-runtime" + registry = json.loads(path.read_text()) + registry["common_runtime_root"] = str(root) + path.write_text(json.dumps(registry)) + configure_machine(root, registry_mode) + configure_machine(selected, selected_mode) + registry_before = path.read_bytes() + + result = subprocess.run( + [sys.executable, "-m", "loopx.cli", "--registry", str(path), + "--runtime-root", str(selected), "--format", "json", "refresh-state", + "--goal-id", "research", "--suppress-external-sinks", "--no-global-sync"], + capture_output=True, text=True, timeout=60, + ) + assert result.returncode == 0, result.stdout + result.stderr + packet = json.loads(result.stdout) + assert packet["appended"] is True + assert Path(packet["runtime_root"]) == selected + activation = packet["explore_graph_sync"] + assert activation["enabled"] is (selected_mode == "planning") + assert activation["status"] == ("not_applicable" if selected_mode == "planning" else "disabled") + assert activation["external_sink_delivery_authorized"] is False + assert activation["delivery_postcondition"]["satisfied"] is True + assert path.read_bytes() == registry_before + assert not (root / "goals" / "research" / "runs" / "index.jsonl").exists() + assert (selected / "goals" / "research" / "runs" / "index.jsonl").is_file() + + +@pytest.mark.parametrize("explicit_override", [False, True]) +def test_material_refresh_preserves_source_route_without_runtime_override(setup, tmp_path, explicit_override): + path, source, goal = setup + shared = tmp_path / "shared-runtime" + configure_machine(source, "planning") + configure_machine(shared, "off") + global_path = tmp_path / "registry.global.json" + global_path.write_text(json.dumps({ + "schema_version": 1, "registry_role": "global-local", "common_runtime_root": str(shared), + "goals": [{**goal, "source_registry": str(path)}], + })) + calls = [] + + def syncer(**kwargs): + calls.append(kwargs) + return {"ok": True, "status": "not_configured"} + + result = sync_explore_graph_after_material_refresh( + registry_path=global_path, goal_id="research", syncer=syncer, + runtime_root_override=str(shared) if explicit_override else None, + ) + assert result["enabled"] is not explicit_override + assert result["status"] == ("disabled" if explicit_override else "not_configured") + assert len(calls) == (0 if explicit_override else 1) + if calls: + assert calls[0]["external_sink_delivery_authorized"] is False + + @pytest.mark.parametrize("override", [ {"profile": "adaptive-resilient"}, {"composition_mode": "explicit_only", "composition_scope_id": "bounded-scope"}, From 714b4bb7fcd3d50f8eec35d858914a7101201dcb Mon Sep 17 00:00:00 2001 From: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Date: Tue, 27 Oct 2026 12:47:22 +0800 Subject: [PATCH 3/3] Fix Explore material graph source routing across runtimes Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --- loopx/capabilities/explore/activation.py | 1 + .../issue_fix/explore_projection.py | 9 +- .../lark/presentation/explore_results.py | 10 +-- .../lark/presentation/explore_singleflight.py | 7 +- .../lark/presentation/explore_source_guard.py | 3 +- .../test_explore_machine_defaults.py | 90 ++++++++++++++++++- 6 files changed, 105 insertions(+), 15 deletions(-) diff --git a/loopx/capabilities/explore/activation.py b/loopx/capabilities/explore/activation.py index 7681060d16..54fc57a35b 100644 --- a/loopx/capabilities/explore/activation.py +++ b/loopx/capabilities/explore/activation.py @@ -161,6 +161,7 @@ def sync_explore_graph_after_material_refresh( result = syncer( registry_path=registry_path, goal_id=goal_id, + runtime_root_override=runtime_root_override, agent_id=agent_id, project=project, state_file=state_file, diff --git a/loopx/capabilities/issue_fix/explore_projection.py b/loopx/capabilities/issue_fix/explore_projection.py index 86d3725a01..12c528e187 100644 --- a/loopx/capabilities/issue_fix/explore_projection.py +++ b/loopx/capabilities/issue_fix/explore_projection.py @@ -16,7 +16,7 @@ from typing import Any from ...history import load_registry -from ...paths import resolve_runtime_root +from ...control_plane.runtime.runtime_projection_route import resolve_goal_source_runtime_route from ...rollout_event_log import load_rollout_events, rollout_event_log_path from ...control_plane.todos.path_resolution import resolve_todo_state_path from ...control_plane.todos.active_state_editing import section_bounds, todo_blocks @@ -651,6 +651,7 @@ def project_issue_fix_explore_graph( *, registry_path: Path, goal_id: str, + runtime_root_override: str | None = None, agent_id: str | None = None, project: Path | None = None, state_file: Path | None = None, @@ -665,7 +666,11 @@ def project_issue_fix_explore_graph( state_file=state_file, ) registry = load_registry(registry_path) - runtime_root = resolve_runtime_root(registry, registry_path=registry_path) + route = resolve_goal_source_runtime_route( + registry_path=registry_path, goal_id=goal_id, + runtime_root_override=runtime_root_override, registry=registry, + ) + runtime_root = Path(route["source_runtime_root"]) result_log = explore_result_log_path(runtime_root, goal_id) existing_events = load_explore_result_events(result_log, goal_id=goal_id) outcomes_packet = build_issue_fix_outcome_collection_from_domain_state( diff --git a/loopx/extensions/lark/presentation/explore_results.py b/loopx/extensions/lark/presentation/explore_results.py index 47443f9df9..fe0316152d 100644 --- a/loopx/extensions/lark/presentation/explore_results.py +++ b/loopx/extensions/lark/presentation/explore_results.py @@ -1882,6 +1882,7 @@ def sync_issue_fix_explore_on_material_change( *, registry_path: Path, goal_id: str, + runtime_root_override: str | None = None, agent_id: str | None = None, project: Path | None = None, state_file: Path | None = None, @@ -1889,11 +1890,8 @@ def sync_issue_fix_explore_on_material_change( external_sink_delivery_authorized: bool = True, runner: CommandRunner = default_subprocess_runner, ) -> dict[str, Any]: - """Project issue-fix facts and sync Lark only when the graph digest changed. - - The canonical Explore result log is updated before this adapter runs. A - failed or interrupted Lark write therefore remains retryable: the stored - sink digest advances only after a successful remote sync. + """Sync changed graph digests after the canonical Explore log is updated. + Failed/interrupted Lark writes remain retryable; advance the stored sink digest only after successful remote sync. """ from ....capabilities.issue_fix.explore_projection import ( @@ -1908,10 +1906,12 @@ def sync_issue_fix_explore_on_material_change( source_registry_path, compact_source_runtime_route = resolve_explore_source_registry( registry_path=registry_path, goal_id=goal_id, + runtime_root_override=runtime_root_override, ) projection_result = project_issue_fix_explore_graph( registry_path=source_registry_path, goal_id=goal_id, + runtime_root_override=runtime_root_override, agent_id=agent_id, project=project, state_file=state_file, diff --git a/loopx/extensions/lark/presentation/explore_singleflight.py b/loopx/extensions/lark/presentation/explore_singleflight.py index 374d85d44a..f31389e62b 100644 --- a/loopx/extensions/lark/presentation/explore_singleflight.py +++ b/loopx/extensions/lark/presentation/explore_singleflight.py @@ -19,7 +19,7 @@ def default_lark_explore_config_path(registry_path: Path | None = None) -> Path: def source_lark_explore_config_path( - registry_path: Path | None, goal_id: str + registry_path: Path | None, goal_id: str, runtime_root_override: str | None = None ) -> Path: """Resolve the sink config beside the goal's canonical source registry.""" @@ -30,6 +30,7 @@ def source_lark_explore_config_path( source_registry_path, _ = resolve_explore_source_registry( registry_path=registry_path, goal_id=goal_id, + runtime_root_override=runtime_root_override, ) return default_lark_explore_config_path(source_registry_path) @@ -92,7 +93,7 @@ def explore_feishu_sync_busy_packet( def singleflight_issue_fix_material_sync( - config_path_resolver: Callable[[Path | None, str], Path], + config_path_resolver: Callable[[Path | None, str, str | None], Path], ) -> Callable[[Callable[..., dict[str, Any]]], Callable[..., dict[str, Any]]]: """Serialize an issue-fix material sync across row, visual, and checkpoint writes.""" @@ -113,7 +114,7 @@ def wrapped(*args: Any, **kwargs: Any) -> dict[str, Any]: kwargs.get("external_sink_delivery_authorized", True) ) with explore_feishu_sync_singleflight( - config_path=config_path_resolver(resolved_registry, goal_id), + config_path=config_path_resolver(resolved_registry, goal_id, kwargs.get("runtime_root_override")), execute=bool(execute and delivery_authorized), ) as acquired: if not acquired: diff --git a/loopx/extensions/lark/presentation/explore_source_guard.py b/loopx/extensions/lark/presentation/explore_source_guard.py index d608056c69..12ea7b534a 100644 --- a/loopx/extensions/lark/presentation/explore_source_guard.py +++ b/loopx/extensions/lark/presentation/explore_source_guard.py @@ -34,11 +34,12 @@ def _is_projection_derived_result_key(key: str, *, goal_id: str) -> bool: def resolve_explore_source_registry( - *, registry_path: Path, goal_id: str + *, registry_path: Path, goal_id: str, runtime_root_override: str | None = None ) -> tuple[Path, dict[str, Any]]: route = resolve_goal_source_runtime_route( registry_path=registry_path, goal_id=goal_id, + runtime_root_override=runtime_root_override, ) return ( Path(str(route["source_registry"])), diff --git a/tests/capabilities/test_explore_machine_defaults.py b/tests/capabilities/test_explore_machine_defaults.py index e149c0de84..479ce188e8 100644 --- a/tests/capabilities/test_explore_machine_defaults.py +++ b/tests/capabilities/test_explore_machine_defaults.py @@ -10,6 +10,10 @@ import pytest from loopx.capabilities.explore.activation import sync_explore_graph_after_material_refresh +from loopx.capabilities.explore.result_log import ( + append_explore_result_event, build_explore_node_event, explore_result_log_path, +) +from loopx.capabilities.issue_fix.explore_projection import project_issue_fix_explore_graph from loopx.capabilities.explore.machine_defaults import ( EXPLORE_MACHINE_DEFAULTS_SCHEMA, apply_explore_machine_default, normalize_explore_machine_defaults, resolve_explore_goal, @@ -24,6 +28,7 @@ from loopx.configure_goal import configure_goal from loopx.control_plane.coordination.goal_storage_initialization import initialize_goal_storage_target from loopx.history import collect_history +from loopx.rollout_event_log import append_rollout_event, build_rollout_event, rollout_event_log_path def configure_machine(root: Path, mode: str): @@ -36,7 +41,7 @@ def configure_machine(root: Path, mode: str): @pytest.fixture -def setup(tmp_path): +def setup(tmp_path, request): root = tmp_path / "runtime" (tmp_path / "goal.md").write_text("# Goal\n\n## Agent Todos\n") path = tmp_path / "registry.json" @@ -44,7 +49,8 @@ def setup(tmp_path): "repo": str(tmp_path), "state_file": "goal.md", "spawn_policy": {"spawn_allowed": False, "max_children": 2}, "coordination": {"registered_agents": ["worker"], "storage_target": { - "schema_version": "loopx_new_goal_storage_target_v1", "provider": "file", "handoff_mode": "soft_claim"}}} + "schema_version": "loopx_new_goal_storage_target_v1", "provider": getattr(request, "param", "file"), + "handoff_mode": "soft_claim"}}} path.write_text(json.dumps({"schema_version": 1, "common_runtime_root": str(root), "goals": [goal]})) initialize_goal_storage_target(root, goal, registry_path=path) return path, root, goal @@ -178,6 +184,7 @@ def test_todo_settlement_plan_uses_selected_runtime(setup, tmp_path, registry_mo assert str(selected) in writeback["command_template"] +@pytest.mark.parametrize("setup", ["file", "sqlite"], indirect=True) @pytest.mark.parametrize("registry_mode,selected_mode", [("off", "planning"), ("planning", "off")]) def test_refresh_state_uses_selected_runtime_for_graph_activation(setup, tmp_path, registry_mode, selected_mode): path, selected, _ = setup @@ -187,13 +194,29 @@ def test_refresh_state_uses_selected_runtime_for_graph_activation(setup, tmp_pat path.write_text(json.dumps(registry)) configure_machine(root, registry_mode) configure_machine(selected, selected_mode) + for runtime, label in [(selected, "selected"), (root, "other-runtime")]: + for node_id in ("fix_pr_lane", f"{label}-evidence"): + append_explore_result_event(explore_result_log_path(runtime, "research"), + build_explore_node_event(goal_id="research", node_id=node_id, title=node_id)) + append_rollout_event(rollout_event_log_path(runtime, "research"), + build_rollout_event(goal_id="research", event_kind="capability_gap", status="found", + summary=f"{label} observation", details={"target_capabilities": f"{label}-capability"})) + # The oracle selects the intended source directly, without the new override + # plumbing. Distinct persisted rows and rollout facts expose cross-root reads. + oracle_registry = tmp_path / "oracle-registry.json" + oracle_registry.write_text(json.dumps({**registry, "common_runtime_root": str(selected)})) + expected = project_issue_fix_explore_graph(registry_path=oracle_registry, goal_id="research") + graph = json.dumps(expected["projection"]) + assert "selected-evidence" in graph and "selected-capability" in graph + assert "other-runtime-evidence" not in graph and "other-runtime-capability" not in graph + other_before = {p.relative_to(root): p.read_bytes() for p in root.rglob("*") if p.is_file()} registry_before = path.read_bytes() result = subprocess.run( [sys.executable, "-m", "loopx.cli", "--registry", str(path), "--runtime-root", str(selected), "--format", "json", "refresh-state", "--goal-id", "research", "--suppress-external-sinks", "--no-global-sync"], - capture_output=True, text=True, timeout=60, + capture_output=True, text=True, timeout=60, cwd=tmp_path, ) assert result.returncode == 0, result.stdout + result.stderr packet = json.loads(result.stdout) @@ -201,12 +224,16 @@ def test_refresh_state_uses_selected_runtime_for_graph_activation(setup, tmp_pat assert Path(packet["runtime_root"]) == selected activation = packet["explore_graph_sync"] assert activation["enabled"] is (selected_mode == "planning") - assert activation["status"] == ("not_applicable" if selected_mode == "planning" else "disabled") + assert activation["status"] == ("not_configured" if selected_mode == "planning" else "disabled") + if selected_mode == "planning": + assert activation["semantic_digest"] == expected["semantic_digest"] + assert activation["source_runtime_route"]["status"] == "explicit_override" assert activation["external_sink_delivery_authorized"] is False assert activation["delivery_postcondition"]["satisfied"] is True assert path.read_bytes() == registry_before assert not (root / "goals" / "research" / "runs" / "index.jsonl").exists() assert (selected / "goals" / "research" / "runs" / "index.jsonl").is_file() + assert {p.relative_to(root): p.read_bytes() for p in root.rglob("*") if p.is_file()} == other_before @pytest.mark.parametrize("explicit_override", [False, True]) @@ -237,6 +264,61 @@ def syncer(**kwargs): assert calls[0]["external_sink_delivery_authorized"] is False +@pytest.mark.parametrize("explicit_override", [False, True]) +@pytest.mark.parametrize("delivery_authorized", [False, True]) +def test_material_sync_routes_populated_sources_and_sink_lock(setup, tmp_path, monkeypatch, + explicit_override, delivery_authorized): + from loopx.extensions.lark.presentation.explore_results import sync_issue_fix_explore_on_material_change + from loopx.file_lock import try_exclusive_file_lock + + _, source, goal = setup + monkeypatch.chdir(tmp_path) + shared = tmp_path / "shared-runtime" + source_registry = tmp_path / "source" / ".loopx" / "registry.json" + global_registry = tmp_path / "shared" / ".loopx" / "registry.global.json" + for registry, runtime, source_ref in [(source_registry, source, None), (global_registry, shared, source_registry)]: + registry.parent.mkdir(parents=True) + registry.write_text(json.dumps({"schema_version": 1, "registry_role": "global-local" if source_ref else "project", + "common_runtime_root": str(runtime), "goals": [{**goal, **({"source_registry": str(source_ref)} if source_ref else {})}]})) + for node_id in ("fix_pr_lane", f"{runtime.name}-evidence"): + append_explore_result_event(explore_result_log_path(runtime, "research"), + build_explore_node_event(goal_id="research", node_id=node_id, title=node_id)) + (registry.parent / "lark-explore.json").write_text(json.dumps({ + "schema_version": "loopx_lark_explore_local_config_v0", "board": { + "base_token": "BASE_FIXTURE", "tables": {"nodes": "tblNodes", "edges": "tblEdges", "findings": "tblFindings"}, + "cli_bin": "lark-cli", "identity": "user"}})) + selected = shared if explicit_override else source + excluded = source if explicit_override else shared + selected_registry = global_registry if explicit_override else source_registry + config = selected_registry.parent / "lark-explore.json" + config_before = config.read_bytes() + excluded_before = {p.relative_to(excluded): p.read_bytes() for p in excluded.rglob("*") if p.is_file()} + + def refuse_external_command(*args, **kwargs): + raise AssertionError("mode selection does not authorize external delivery") + + with try_exclusive_file_lock(config.with_name(config.name + ".feishu-sync"), operation="fixture_sync") as lock: + assert lock is not None + result = sync_issue_fix_explore_on_material_change( + registry_path=global_registry, goal_id="research", execute=True, + runtime_root_override="shared-runtime" if explicit_override else None, + external_sink_delivery_authorized=delivery_authorized, runner=refuse_external_command) + if delivery_authorized: + assert result["status"] == "sync_busy" + assert result["external_write_performed"] is False + else: + assert result["status"] == "external_sink_suppressed" + nodes = {node["node_id"] for node in result["projection"]["projection"]["nodes"]} + assert f"{selected.name}-evidence" in nodes + assert f"{excluded.name}-evidence" not in nodes + expected = project_issue_fix_explore_graph(registry_path=selected_registry, goal_id="research", + runtime_root_override=str(selected)) + assert result["semantic_digest"] == expected["semantic_digest"] + assert result["projection"]["source_runtime_route"]["status"] == ("explicit_override" if explicit_override else "source_registry") + assert config.read_bytes() == config_before + assert {p.relative_to(excluded): p.read_bytes() for p in excluded.rglob("*") if p.is_file()} == excluded_before + + @pytest.mark.parametrize("override", [ {"profile": "adaptive-resilient"}, {"composition_mode": "explicit_only", "composition_scope_id": "bounded-scope"},