diff --git a/CLAUDE.md b/CLAUDE.md index 07fd2887a2..1ee29f3304 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -95,7 +95,7 @@ Local-only commands (rarely needed): `ac-os build` (binary → initramfs → ker ### Notation -- **compush** - commit & push. If the commit touches live-served paths (`system/public/**`, `system/netlify/functions/**`), follow with `fish lith/deploy.fish` unprompted — pushing alone doesn't put it in production. +- **compushloy** - always commit, push, and deploy. Land the changes on the intended deployment branch, deploy from that branch, and verify production serves the pushed revision. - **oskieploy** - commit & push, then release oskiewar across every surface with `npm run oskiewar:deploy`. That one command carries the lot: it stamps `buildVersion` to match the commit count and reburns the hash-bound social diff --git a/SCORE.md b/SCORE.md index 280869bc79..7ef9a82ddd 100644 --- a/SCORE.md +++ b/SCORE.md @@ -443,7 +443,7 @@ ac-restart # Restart AC services only - `npm run url` — Get local tunnel URL **Notation:** -- compush — commit, push; and when the commit touches live-served paths (`system/public/**`, `system/netlify/functions/**`), run `fish lith/deploy.fish` too, without being asked — push alone doesn't reach production +- compushloy — always commit, push, and deploy. Land the changes on the intended deployment branch, deploy from that branch, and verify production serves the pushed revision. ### Piece-Log Debugging (client-side errors) diff --git a/papers/arxiv-instruction-flow/ac-source-bundle.sty b/papers/arxiv-instruction-flow/ac-source-bundle.sty new file mode 100644 index 0000000000..e3750ff6c2 --- /dev/null +++ b/papers/arxiv-instruction-flow/ac-source-bundle.sty @@ -0,0 +1,22 @@ +% ac-source-bundle.sty — one machine-readable source attachment at the paper tail +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ac-source-bundle}[2026/08/11 Aesthetic Computer source bundle] +\RequirePackage{xcolor} +\RequirePackage{attachfile2} +\providecolor{acpink}{RGB}{180,72,135} +\providecolor{acgray}{RGB}{119,119,119} + +\newcommand{\acsourcebundleblock}{% + \IfFileExists{\jobname-source.zip}{% + \par\vspace{1.4em}% + \noindent\rule{\linewidth}{0.35pt}\par\vspace{0.75em}% + \noindent{\small\bfseries\color{acpink}% + \attachfile[color=0.706 0.282 0.529,icon=Paperclip,mimetype=application/zip,description={Machine-readable paper source bundle}]{\jobname-source.zip}% + \hspace{0.45em}Source bundle}\par + \vspace{0.45em}% + \noindent{\scriptsize\color{acgray}% + The attached ZIP contains the paper's machine-readable text sources and a plain-text inventory. It supports accessibility, audit, quotation, and reproducible editing; the PDF remains the canonical reading edition. Private evidence, credentials, raw datasets, generated PDFs, and unlisted assets are excluded.}\par + }{}% +} +\AtEndDocument{\acsourcebundleblock} +\endinput diff --git a/papers/arxiv-instruction-flow/aesthetic-eye.json b/papers/arxiv-instruction-flow/aesthetic-eye.json new file mode 100644 index 0000000000..6d5dd4185f --- /dev/null +++ b/papers/arxiv-instruction-flow/aesthetic-eye.json @@ -0,0 +1,46 @@ +{ + "schema": 1, + "paper": "The Score and the Session", + "pdf": "instruction-flow.pdf", + "expectedFigures": 0, + "expectedDiagrams": 1, + "visualInference": true, + "brand": { + "canonicalName": "Aesthetic.Computer", + "dotColor": "#B44887", + "design": "pass", + "checks": { + "period": "pass", + "dotColor": "pass" + } + }, + "figures": [], + "diagrams": [ + { + "id": "instruction-routes", + "page": 2, + "crop": [ + 0.075, + 0.05, + 0.85, + 0.24 + ], + "design": "pass", + "checks": { + "tangents": "pass", + "type": "pass", + "balance": "pass", + "spaceUse": "pass", + "hierarchy": "pass", + "edgeRouting": "pass" + }, + "notes": "Reviewed all five full-resolution pages, three tables, the all-page overview, and prepared diagram crop. Peer inputs share geometry; arrows and labels are legible and separated; tables have aligned numeric columns; final columns end within 10% of live page height. Project name has the pink period." + } + ], + "reviewer": { + "kind": "visual-inference", + "agent": "Codex" + }, + "pdfSha256": "c22cf1aadf682a58f8a7c4ac58c996a84aed430ce83439af114daf3326f4e8ae", + "reviewedAt": "2026-09-15T20:07:20.763Z" +} diff --git a/papers/arxiv-instruction-flow/audit-transcripts.py b/papers/arxiv-instruction-flow/audit-transcripts.py new file mode 100644 index 0000000000..99f96e961c --- /dev/null +++ b/papers/arxiv-instruction-flow/audit-transcripts.py @@ -0,0 +1,95 @@ +import json,pathlib,collections,re,hashlib,datetime,shlex +HOME=pathlib.Path.home(); ROOT='/Users/jas/aesthetic-computer'; START='2026-09-01'; END='2026-09-15' +files={'claude':sorted((HOME/'.claude/projects/-Users-jas-aesthetic-computer').glob('*.jsonl')),'codex':[p for d in range(1,15) for p in sorted((HOME/f'.codex/sessions/2026/09/{d:02}').glob('*.jsonl'))]} +seen_calls=set(); seen_prompts=set(); counts=collections.Counter(); promptterms=collections.Counter(); tools=collections.Counter(); nested=collections.Counter(); shells=collections.Counter(); tool_sessions=collections.defaultdict(set); nested_sessions=collections.defaultdict(set); shell_sessions=collections.defaultdict(set); term_sessions=collections.defaultdict(set); active=collections.defaultdict(set) +terms={'compush':r'\bcompush(?:ed|ing|es)?\b','compushloy':r'\bcompushloy(?:ed|ing|s)?\b','oskieploy':r'\boskieploy(?:ed|ing|s)?\b','prox':r'\bprox(?:es)?\b','easel':r'\beasel\b','frame_screenshot':r'\bframe\s+(?:screenshot|capture)|\bscreenshot.{0,20}\bframe\b','papers_platter':r'(?:/papers\b|\bpapers?\s+stack\b|\bplatter\b)','sticky':r'\bstick(?:y|ies)\b','cleaner':r'\bcleaner\b','wordcrust':r'\bwordcrust\b','slidecop':r'\bslidecop\b','unipointer':r'\bunipointer\b','loopboy':r'\bloopboy\b','chrome':r'\bchrome\b','cdp':r'\bcdp\b'} +allowed={'rg','grep','sed','head','git','node','python','python3','fish'} +def shell(cmd,sess): + if not isinstance(cmd,str) or '\n' in cmd:return + # Only standalone simple lines; reject metacharacters rather than interpret shell. + for line in cmd.splitlines(): + if not line.strip() or line.lstrip().startswith('#') or re.search(r'[;|&<>`()]|\$\(',line):continue + try:tok=shlex.split(line) + except ValueError:continue + while tok and re.match(r'^[A-Za-z_][A-Za-z_0-9]*=',tok[0]):tok.pop(0) + if tok and pathlib.PurePosixPath(tok[0]).name in allowed: + name=pathlib.PurePosixPath(tok[0]).name;shells[name]+=1;shell_sessions[name].add(sess) +def call(provider,name,args,cid,sess): + key=(provider,cid) + if not cid:counts['calls_missing_id_excluded']+=1;return + if key in seen_calls:counts['duplicate_call_ids_excluded']+=1;return + seen_calls.add(key);tools[name]+=1;tool_sessions[name].add(sess);counts[provider+'_calls']+=1;active[provider].add(sess) + if name in ('Bash','exec_command','functions.exec_command'): + a=args + if isinstance(a,str): + try:a=json.loads(a) + except: a={} + if isinstance(a,dict):shell(a.get('command',a.get('cmd')),sess) + if name in ('functions.exec','exec') and isinstance(args,str): + # Syntactic call-site candidates only, not execution proof. Comments/strings not parsed. + for nm in re.findall(r'\btools\.([A-Za-z_$][\w$]*)\s*\(',args): + if nm in ('find','filter','map','some','forEach'):counts['exec_non_tool_method_candidates_excluded']+=1;continue + nested[nm]+=1;nested_sessions[nm].add(sess) +def prompt(provider,txt,pid,ts,sess): + if not isinstance(txt,str):return + if not txt.strip() or len(txt)>400:counts['prompts_empty_or_long_excluded']+=1;return + if re.search(r'<(?:task-notification|system-reminder|environment_context|INSTRUCTIONS)|AGENTS\.md instructions|^\s*(?:```|#{1,6}\s|>\s)|Message Type:|^\s*\[.*?(?:agent|system)',txt,re.I):counts['prompts_marked_or_forwarded_excluded']+=1;return + # Codex often lacks ids; timestamp+content deduplicates exact history copies. + key=(provider,pid or hashlib.sha256((ts+'\0'+txt).encode()).hexdigest()) + if key in seen_prompts:counts['duplicate_prompts_excluded']+=1;return + seen_prompts.add(key);counts[provider+'_accepted_prompts']+=1;active[provider].add(sess) + for term,pat in terms.items(): + if re.search(pat,txt,re.I):promptterms[term]+=1;term_sessions[term].add(sess) +for provider,paths in files.items(): + counts[provider+'_files_scanned']=len(paths);counts[provider+'_bytes_scanned']=sum(p.stat().st_size for p in paths) + for p in paths: + sess=provider+':'+p.stem;cwd=None + with p.open() as f: + for line in f: + counts['jsonl_lines']+=1 + try:o=json.loads(line) + except:counts['malformed_lines']+=1;continue + if provider=='claude' and o.get('cwd'):cwd=o['cwd'] + if provider=='codex' and o.get('type') in ('session_meta','turn_context'): + cwd=o.get('payload',{}).get('cwd',cwd) + ts=o.get('timestamp','') + if not isinstance(ts,str):continue + try: day=datetime.datetime.fromisoformat(ts.replace('Z','+00:00')).astimezone(datetime.timezone.utc).date().isoformat() + except (ValueError,TypeError):continue + if not START<=day+xIIREIK97lkp`C?+L4<*UAu(CEIKQ+gIaN2QG%qD5Rj;_D zGI#R%pxXul$KKa*#aivPIA+*lfB9si*b9TpWkyq+mvWHaxj^B2zF zDzUdYO$ ziet}~;6+$K=JYO&55r?{J^hjB|d)?f{{~EJtk5Y^a;N zd#C27M+N%!_oVr5YO-<3Oih@d^KzBP!|OMzf0#WC{}G_sKfAy?aqHK!=c?9!^UKu9 zxcpVgYMO{e>bu#$UVT2kOiu3k%fN|z-`#iLICD6wnb-f)*UKuL=07xYBAX_fvS0Lm zBkH$RROEN;A&LEab}#tz+*>qh#ZP@}(|||2e!cPBDW`m)@p<eAEy*{R; ze6rx3cCYF6E7ROnAMaWDIj8ZQoNze&K&f*L~T0 zG^6THd|G3n_rg}oFGzKbr2nmH+-qZ^RtY^m^-yBYWiN-2Yi|MrHNQqxJiYb5@bA~J z249UgU%m3|n{V;Ft!K@@%5M2ud*AAo)CKW9Hx`w}zA$0^+ETN6?`)mxpU<`|PO;Zl z?^(6lYc#S~h)}!WIE$|AW(< z!i7?|74Bbo(ruUB@{e~;7;CTEwE554?ui8^Dihb0ed0$=pJx~C-<+$>z%VNdl0Gx@ zic5-0lS?x5^K{d4^2_x~QY+Th{?3c{I#uUa8Rf zr#Va!jN3fLPWH{ZJEzVgiRIq@zjgO5m#Qxul~{exxIh7 zz54B4QCDxORZhLLTPgeQ-^s6CP2ZcX%X#j4&1AmX@!Mv)F}HVB&CZRTyRH1{9<5!z zKTkV{ZU4Ea;J5nq*vH#${!xqG=|6i-+|#G4Ki<47vwcm>*23Jq(sw>@SaWLI&0Uu3 z%+}pasXVF8|9+F1{^a+oT34Tb;=J|bslUrl|GqZWH|}9?=x(3-JJ)_@-K}fB9WOe2 z)_0#i_pQ;Tu3^jL!;e0Cuv}7aY5wgsC!VwKe^L}U@8_HMH9_xxx}M0{w5ihPndrKI z!dgEcJn!5RFLyb^K4i1ffA{BKe$QUDMy~$9b{5W?#JxYIg`bAzs~Vfk}oSiUB)tV=I&)DPfrcl_y3Ds_VxA09xMM@f75jBZJAu_ z06Y7v^62uC=V_bnyJxzj-qx#^>^NfEvTD`k$k4l6Zm#kC$i8x~f9%cNqCLi~bMmhL z{9~8ciRWLfx#t-1`qer~XQ|C4 z(WaH$RvTItCZv513@-h8r#CHjr@+Oy9jS3v3;FExKYvR5|KZ{7_22m?e}4Ssrpeqn zHnk<;^_Ra?R(;Z`{q^Re?&d|sW&C+FWaO7me)%)*hTVFz2?vfc&)8SLqri9fF{fwz z*O{e`{l0!R?Y5)t#|Z|Er{8YlFA8q7o)w;Zcc)0qMDO)qCTrG9#ms2l+01?WsL|_N zrg}DizJ_m)xt6#6`BAfcMHzni>v}t9g>UtCNWSzbUZic+oz-UI>teQMFBEfQT65RF zXZZ%!!|`{IUDXahr>M6z`+4?;;y+h%-z?jcXuT@YxWD_- z!z_t)&A)$`ysI(2yN%r^_SubV{*&Y7)+N5ZwXJr?J*OJ^f9F%qv!0QeSN}mxK)h+^ z@09+MXO8_eBNSN`$g?bA=nZ#G>o?#`1wF{8S|t4eO2;!W-8dvrJc%JcKgxwIrQ zee2=H>+U^>uQ{#M{7SVvw05$?LruP#$cpQd_n&Tm@k>5-+m1Z5$UqhQnu@>Q&UQcf z@#Du&j(QvEx%1}9_WRBE_j~eFdpm1++B!cq|H~;=Hnx|qTWvVL{+t-MZ_ewSzV|f+ zi%dfIGV9vj^nCm(dX42w=cAuDHM?;h{FCq7e`xl#pJpd#JvrBC_Qzab{AcdI7n_*; zbt}?mo0^}s_<8c-p)@w#gWRwGHAk{L&r!?UeD<}BnpS31OyPr|w;l%jpKLnz@a*TB zM($(#b!LVJBpYlk+rD$R_o~!Ii+B%4UHG26Eq7C!%*pT_`JtgIF&ndco+jVCxu<3C zfp+oAZA~1{&Ssdr@+yCQYKHWWoioF?pNre}Vw*wJgtM+extdFMu)a6ox+QyWV;e)` zjmYawH`t~h{If*R@RXpNZH`Ymc5-%{lvrN(*({-&A`R2+mCoB9IaY+%>HBWj zI)RgY*-9I!{H*H-)-`>P<=i~QJbPcu?FlIc3w1AG5ceN!Bea%`BR}J$ui+v(|r=QrMkL*;RF)7IT}l>~=Nqko&f()a}k8)1RxBL>#)4 zV5#+A|EOGthZ%+IoYWwG%fyUzn`?}g-8}uzb)t7BtNX85`!8{!ocV#Pbkh_CeTs<-16MO*J9r z^Uhy<&G9^Be&Y8pt1Vj^XZM|s>B?#epLaCA<>kL>uG-1pKh&B$%gW>`pZ#$ABBA%H z9FzZT5PR)%x%2wDJCl4OuShNk+iB#N^VRlu;gS#cEh{Fp?%6e~lR3_T=V8wZrQhoI zmhTx>tlJ=KUQ)(jY0|yBx8ZQfg0hV-POm$pzq_#LV!q$yvkm<_ZNi(+^uE!UX)2^C z+8XxI`30j$n|IOgnzv6rr&xodJ%@?)8P%bNZ2 z6USrs_4MzlFujsnc7EPGpZUAf)75Y0=*ve5MXg%?y{zX_{`d6r^JVAH@jtJA^W)8b zOFIL2mvflxxyAd{Fj}YR>-`Abo}9;j%EYYmdJm}(1A& zlVAJpo4~#<~g_CzP*3`J)UaE z5h3(%Pf+2)i{IBDySx5=?4KXU?2IjEKREyV<V^ESBgW$1~Pi?1IN2YH$ueECFsy!L}BJ-{MmDR)MycAe;#NqUh>ujI6 zCw222o0eT6xN>Q{_+qc9J5d`Cmq?X_JiYUPopa{F=;;%jg(LQ}R%gB6^P;JB-9kf6 zi-$IQtLkqo->X#-$y?9AdtdlE*E%ts2XE&YRnLF>$d2($aP%_!o=p9B{of4EACM7K znNj|RcVh8{Dc=0ce(aHy-`x00d87F`o=LlpE3t0oTHdkhRqG9_-|OyZe_mI9{+cLu#-t4{9zhr~-&t)_~rd6J@n=J4!{34RaWzs z9gkP7nEoK}yNfs7?w7C87uM-L`r7~c_4lG)!8{M z@^TZ&`Hz#=@BMzGDz{9q|NJ1sg`Z}!F2^`^3M4;pJbXI+EW+S!o+0WbbPj$gcrR|G(r!;WR3R)2woI9f=HRV8V&HJLl zr4=rh3QCL^N(?wyi{;LU7E9jSZfG^FU`0;j;!nKwVGryUt&eUw!?0PS#G%HgM(6NG z(XyhWZ^g}Hp7-XQm;P_~o6RCu!E}*V{jbma^W$av8GrrzyLx(mU5ocxQ=4Pk4>HFX zC?5GPW$`%H$adeq$pr;fP5VP$J-W49OE8S-n^E^yzcbtKhUGoF95Wb9pa^{kQflTFg<7iHq2?m6iEdtP57#rgg0lDyAP zr=Q$&;#04q@NX~$;X z=9kAS`MqY%JbdMonx<@5ctVbHMzdx0rzf%DA~R3!X_zwW$q8zbHe_#CYqiZC~anHyWxvVYS~?&sZgH>3mAYV9inoqjq;m z=MOtsk~WCj+soV69+RFY+wbp}cv9k>)C_J5?qfPL=k=fWQ?#8WyLYMRrW+}9YL?&M zw0-;3H@fyrGi>Xs>i(+VKGaivZMou({;$uQ)NV4LomZGCwL0@iPwY>%_-)q7eHJR7 zPyR6%7Twdzbn}=z)yKPYW6jKrPImJ%8@)Kx|1-^S?9^GgYv+mt=C$GV-TVjVcT~Bp zxh&(p)-Zp5;_QddEmU7T{>L^+XQp+Rz#6x$DMqb44JR*mTwPRHXcXsfBCBpul=xFB zY8q4B{NH&QGwOn;^aQLs=OU{)ulR)8k@ve#_sb__%~ZJAyX^So<(|HhcRjRNUbug{ z;nSKpUB~;>QJpH|6{ierZH@DiLz%3KJx_go^uuUp#c2)a8yU|u&gHKZIV9ja&$(&C zB3)ivhelq^LN@6Ik)TQRnK2@l7yq> z(p)mEXM`om`EI$gT$1U1b+V1tC+RG&(2_stQ#6_<-ihWDG?Fjj6fwNnc(g0WIMeZP zwxU7H?(7W_o9C{okgDvNe0>7{*?HpDCwbKkIJbNKMqPSKR4BliEHug%Hyn$7Fumq;;{Ad zTYOySeY}#vSG6gLpN@r{zB|EV*4O*GHc$SY%$E8+p<0P^%fiLmq$GW0zh2CFtkKUA zcr8>_PC404dO^c7@lT($i?1aWzH~WUtl!pXmbq%9wbVrKQ-2Kvwx6zh&grKhZtU`q z^JIR=Y{5OLcT87L(`Dk^oVT$^iB0|T6Z_BWeZ7vXcXX>;aDM6H3xBjt4_~x8lr=-} zL0wmCC12;<2l_l4W^%aXM0ZTLpSkS(xpVG+T5oSZ^ImwRt7GNLphqk>OZuXE}w zo&Ln7T6rEKI`pY<`eVI{#fmkabsZt@2@521=J$jPUmkBNVU!p$-374 zy1lnys%pr^FWW2@tYWME!to$i`NFbkzptJ1W`CT#NL!8n%svB8y})H5g&BS`&%96T zjohen>dfqSTe%`uRJzDjZcgN#vF&iNtGKIX@(;#6B2%tz3SgA-p0=mu%vR35{3@rH zPf%^$BG}wu`z!A6t~JiZ?i23sS-^b#)8vo@Q-Qsq*FWw~TfP2e8*9WOYvJ?jq+Je6 zUki5gv@CLJ==-GnK*Uq?(hZHx<~PH-mX|O!i0NERkZooN6l&X7rn4sUibFx(#`;f% zvDU|*oAaLC7o)!9b=IOivu^S=CIvlo7I->Kyzxkio?@9dH z>5tZi)vmqU;%Dmfs=~o7qJ~w>aa)?`-&6fdcVwMieDKGc84ZnDv&%DF_GSD&a3XA@ zarxo}Dev3@U&_rB@reJfI9s|$j9-M)Te$1*qlIz5^3UC|+I{xmo1iywI$dGQ+fy`3 zYCk>kYN&Z}jw4{=pY%8KH=b-h6L#R=?W5oGTMWb3+sDM!t>^UV;tJ)dk6hcEnh?*Z zRoR$kHL+yDwR1(sZ8Enl&Q4pF_55Lr(Y;CA?l^aE_D{dU zwOT;xMZzmq8U9MK-mEKYirSAH4=XPzjL?ZqW^%B8`e*SB7le34Ja;;wPV~&2ARS zIo*4TsqFnVUZ2mmM31PwnKj9-x0fM)#>JeiiVj#HrrWy}E0}D_%0k zl$0JZ&~2-nEt={Yde!c7$iX;0p_Tpt3lD&NX#WP~una*cU!aW}8(6?nCjD?ycN&Vi(gbulyI6h;PRVV-MT6at7d0pB*bYu2{F6FCVT=xm=&spY_9Vz*6RjK9HeXEWv z-*_*ms{GKh6;~^#%t>)>+z{3*dYfm4%EII9vc}&Mc2%kT5nXxGE4z2a?-?$eLepef z64Fc6?#?gCGhDFwTB}FWl`}Orou5pbTgK$ZvAJfV-J1oMX0pX!u4ZCx@hqFoX!&L0 zn#g0eAGve{OiW&7G{u@`EqZfIStNVqy-9)szTz7<+LlficfJ4Nfsap3rC;u*A7Rtj z%_sPCav$0I$}MW8Vu|7{w-fG(F0)sN>8+A_Iq&K(fk$^tF5SAE88`cFa#^J4#RCQB zU4v9&RTti7__boMsp5A3YW6>u_Z#eLf4_{yC9yxqal#j&^%+t1+Gdk>Ot&f&6xUJx z5oB&Wc}7ySXHY}u7opn**XPt8C@54rS!FZhnxuO8tK?r|R^FGpI8~$?8B!OmQC^lO zDR|sQPs_|w<*e_%yL_{oG?FIW-E}_t?Qy}E0+SVg&R954_1eZ;Km4?KCyD2U7_5C_ zt+gkuQFPzk&XkG!6#^Yf)f26mx3aN_9Jx^Yd5WZsopP0b=QN4MnY(9tT+Cm$PT_F* z73=A_dzNtJ$Q&0i%?dDit=7#vWm=s6{lz9*e$;P%=N&mu&CI#&kn>a5c^ez*7G@pR zcz^mrKl9bz*%?a=^lRrT-@krR>;K*)wxed7+%^h_1zp?cdhqnEprdK0F7UtF$Z5QI z%fVklZ>}|+&Gx-hYar$8w{@|ZZ{43CR$I?JPQSHfoyx)oDj&UqoiDxD%H35nGo#vR z4ezFDcYaS@#}lThVD_#(y-SFHYR1#E*Iw+p=y9A$>HbPV9n0I#KEAy)sW@rPtQ#9v zet&oSjR=dEo13WXqAS~O&1#YQFy)0qk*@7yK@)>FZJIZ7di^G*=2mxHsjA!l;ccX= zVbyQ8OV4j-sV1LWCQv5!pmo}rsp?Z23-|fn7rHg0rb})6j|=H*Oog?QEW%dp&-vA= zUT!L_^4jj}yvSwt=Q@}+?*7GEf9s&mxta3Q_a)s_^q%}jR=Q%T(TXnKS4GR*JNve8 zJT0O*p>6e^J!}8$TJNz)iYMZplldO~2|w%Z>_}G4cRK#iyDZaF%k&bf=ZVUA*Q3wm zW}k{Us(9n)=Pz$c7JWS5cqg-=sP2+_z|u!E{M6GY-Mp98)hy#qRRXqbG8djrThU327Vb+04talGl^N@r*!z!FrXutR6`bna-wL znu-}$`(%cFxe`(9eL8u=;+~hwpU>Mj;cBg%X{h%#iR}*;{r{=r8>f8jwg+qQHTiXu ze|TGbcB-@bWXpZ0{>i%oMqud{dR z#k-zwrMFpbY4!N`zJB$>x6gOUecN2SL@Hyq??Z^%=WvyJmBH_&1tz(Rc4jf_E(8STWLPB%S(7& z%W>#ym#4wUExc=rQ?!(Ltt^ete)p^w{q^$l!i^thnefgsnR`JZI&xomuAT13OJ~}v zPOEkN5Q`Rc(ib&5w7Kw;+nV}2`&XH6zbBb4R&qH)X9j=xJFnuZPu42yYI{oDZ==LKt|R8#j`SKPmft>g_^REJPpTXK ziOu}+;`g4dK2?H;r%&E-d2Z=mwUrju3KjaVkF%EqpO`4BF`1`e?~^k;kFF$s-ufi` zwc6!11@{}}Re83o`^Y}`$KM&PKQ>jGd=&JW_TZT8W8JiAjz4S8PVky!@L;BkM_`)I zI}sz+)tmJ9#hCujj@`p&98NpZ7<2+wpwrCZn%G6!CL zwF_&Q>e=V;H|FeL`om-Y+<2AylXTguS511h{qmutrk|HiGWgxTsKXuJZ?k62%#vS+ z`gea7`gJLNQd{JfjC&n#j=!Fkw6uTE`ag&Ed@^WGob2m1YwF28SDwF7wAigfDEPv^^U~1=c>-SrZpJbP{Nm{b$q=m%cGmLqO ze3H?L8}sM*+L}E4|MHHRPdMwpHC!A_oEKj5yq(eWrfJ!vps?I6{C?BrQ}^?3u+Qsk ziN0jSBQ4tH^qeuP^MyowgtlgFY(dW~^9wHQe`U0tO{4_gpLtYh$e^F2p}9jko{ytH zt@t5}Sj?{77U!N#_^P#etEkSmpDcej{eHWBu9H*Z&)t8H-F^BdJZNI-)}|;AwR3_k zQ#Rb3SUPFSwCxk3?5`$j#vJ-Lv&bV((ChS{runTro~iM9-wIdszPj^#){H;9&(*2D z?}+o9?!_egV&30pa$)>*wQ%Wkrd&+rbufAi>t1KV9+E|19S ziHW)5yT-EGXz6jii&xHdJ5F0$uXk0ZZHJQpf7cr4?dy%b?Bz^FI96$u&rX?pch?GD z9g*WIuOCWlznJPQ?{HkEcJ}ETZ1x;mQ?euq8>clgCr-1RW+{KohLii0UH0_I!_!tw zSTEp}s-Uoop|8Z^T)Um%a=w5gw>2IwF^Ff&if(-)6QUIK{;JnUm-$aO$fHHa?VEk^p2FE3aTD%G{nS+0r}#qP z+KS~@ce%Yy3)=MRy2sKf3zbT5+*?8~Z6O|nap30{hZX7Z& zdY-%FRCgIa0BClAcyS&CZ z%Qm-fp0Tivagx=2PQk3F(S->C({`|iR77Z$t=O=7v!wW*w^1M4q~}Xa%gX02l;k|K z?b45H%NkQteWfHFJ})g>b@-sh!fT7p-jSL%t!PQaMUBA4KYuq}3(%E#D|v_G_|7GT zRmn_go`peE^_M*Ox1weB%e+e`9%R|QxxEjs^GF!Vm-z3ry^_9?f2SQxW+W82>g zK2Z!)-8|bWtZn7`F0E4jw>NCd-YVaHfzFb9wriDY#B%*SqjJljK)64qbz_pT!8N~g ze$JY?QSa;Q9aY!fFu$at7RoQkymdj8_Vkde3v_b!?%Zg2Z1Jjh3(aPq%B>aEf3P(m zamzc2lfRD`OHXsK*sx3GzLd>7rtHHoe<^RzSr&N?TUt#YJb86>1yz17?BQx08&BFXL zFR47+lfRGCYZcQ4^V1PG-PQ=lgtbewBqUu>5s>=xA?@AGj?Z&1t(FUIziF?j-B7}D z?1>l!VuY)iK>tXQ)5>XvC($xgI+^N8)ghm;EI_NfoDq(?xlE z4ql8X6Q~7DiwDZuak*%3t(SmS)CcK%^@tkF#FTGgX=GS*M1r; zH}m1@r&Bw(%FkRJn_g_Wx5c0BgSeRni*Sl|p!9;f{0l`jQWq~zV92XkReZMi`t}vk zOpdlppKFD3SFH0`=fKwMxT|lamt$Xy>&wNKOaO_(}2Jy|@nX6?l<7Ki!sS+^Wz-Otk;Gr{)QBb&2ML8pJK&srX{ zLur2Jl)|FLIw>lqJa4|}hGv}z`MISj)743AM)b5VPgcxrea~nblllDZk)wKNmwT#- zJStePnepaN(i&Gyk)>ScF60Cr zPF7*j{I!wi^1>A^vI+jbEFa%l^7qH@2MvAJtMABEwk;3jua{r&o6*wSX~rR5haddc z^3|1j>SkzvHBL7BwZ3%Wj$-vW&5M59U2h9{d#~#K+Po6JqmLIFdYk+`cqgJ>i=i^( z(zEWq$`>y=LiMDluR8ic?81~4;+YCF4hN@)t^3%!WZKisv-s{#JJavMZdlUZ6J>l_ zsA|ezOJ;?F1+~1>cAiWU__rcuo@dCU^D{SaFfF>8?)R(f=7b9hd7Hu8-U+ap@ zwYJV$7`2v5JnOjqzPG-~`z9L7Y_v`BJ$uud`Ha;Hw|yLHt{>iId|tonr`4X*2Ky^> z79Kd@W#M`_a`n#z{8!d!>)6UHev_Qx+W6(Qjaj=ybn~*}b0ryCj$e<&%$mf0i0ifF z%b%Ps2j&+EUYa?-z3`ex*@E@cZ=HIuF!h8eH|xGOP2RmW8#CYC<_Iy!nAdcx)q;)T zNR@KUwYFxaJVUOvDjYXNLW$A54Jw9K)HzDcp_$K zHg-98jMdh!u}Es}l>+rhlardiBkSvaf8D)(rTT&D`>)t8>0iEaZMBr_0ikIRZ>Mqi z-p*3K5FW`O#3X#krK!Vg+mrX<_BHwLy)Bvo=YLpybqi2bIi2NOwC{@Kl3yP)^=*>9 zM05Av{&Y_*UnhEb1^b*UH>Y=RIQwh)56jx?C*;>B9?Dty#zo02e)G0Ffmz>H=YJ4e zxzX*Sov(#OhDyBatp zI3u9+b*EeW<0szI-WxOG9VY9}O`XU-cW)w}Zb@=b=?S;M){PTOSI*@MGLjX^$l2M; zbUM*y*?j(=A-=_J^MaVzzrFgpE;@EMpV5*_ZJH;aa%E&_>K<=uWcSUPcyVi^DJ!ep z&+NRKhq3$P&$ILKS?O9xy}NF~^Lxo&ma;3}B`>;L4L;S?zwxg3nYqG4^=@S0JTL95 z@n(fpJ{xAwom8>mtkRUEX?yLt6W%Fg$^=bfSGXYd!_Cj9$5{W%Y<-(Fql~F;hCA|~ z8%rxMZ_#wHbtqrCwc}fu-wHGRng+{bVKoQ09rn$fpEfJ!@5zjntgOoX^>1{ixg@PS zRUW8t0nmS}EPu9|aIrf=)R?iVh~nYuEa#a(?|pOsnvy5tYjPoA{%!;KFMe7|-r+;B{?&TXb&y1L}7 zt=b3X`}wbKsIlkrt-Y<2S|0Xgp_|!(XLf47|6U)OU%!KK`R9qEXZI*=oObSKrMZqo zSL)}#=Ua?==PTY4o7?tF>`kQ0*C65c?U%mHTl>alN1yDs{cjI3OzDs7o+}xwmA33` ztnCvs1Do{v-@o_B$ovdTixvypaG2?9Uqh{m%I3?@XPrM-m1~ferL^6TvzNEjq^99x zlx&FL$>gZ@YZrX?)&AjddezjgrQTwX--{gGv1{tu8DI1GFJ;xTBn!@2pY%e+#6aQ7 zgiwWBTP$WComRp*OJ@r2XZN}tUp<~j1xu%wvfgk`JZG-<_STxGn=PkBPrc%{M|^#? ziEvN<68{Gks);AscJK5NIkEY|Ij43$4$n1;g?g%PT$>aW?L8Rh@_#;i%=V^LMC?oF z2^YHdRc3P*&%W?o_rSE5GV1nb?-r1uLFAeSXj; zdPw2lcTs8i>kC=q%H6p3%lw&H$kx_;&`0c8!^>E|HFLA7@79Q~>7Sc?WD@UkdDBpH z8~#o9{}UrEuJ^qwl3dO;Ti@&~&*Z5w-N!t4T@q2A*St-Km9cpqyVRP^vw{+HWuFzO zYVN+B)*G?g*XG-@kG*Gp2;1uy*?ULIPI&t{{hBE6weIZC$&XXw9viQ_Hd)73em;0%llO1I!HJJzUnjK4>Kv$D!J5q>`>Clpnd?x%{8aN<4>zvexAW4h zDMoIMrPo|`esw&`C8oYxdfT2hIg$D1Jh?qzPd!S0-2eV&F#nkkXFqf+ExGVz^~#3U z$C7JSeQUq#e1S+m!LPG@LgBIK2gc=!GJ?!Ur}RbJ_kNstnf)r$H&s*H)UEstMW+p1o{D#u zmiV~tpJe;4tmB;ArL0L>ZohsnKk_Oee@6PRn%&JZM}vN`G*<;{+Z2eXWTn=^!9wacqr_A{ZuwJTT$CBnrrX!G$^iDN!@tc-ll#Zf3MHa9)&LpFJ89& zYk8^cPg495PrWau-|PTgbQZRvo+d{9GCLmS4$^ z%31Z#cU%(x5V-#7fuN3Oty4`pw;tl`GS}uqW`^bsri`^$CtYt-q&b(r@yyo zsZZdwz_9zzw_EMA{^WXj@k9ILy2syD|0?C1KUeta(P;nQ*)wHioW4KYXgJ4o5}T{X z!^ekrf1I~YPwrao?%X&T*@LXtp3X@Au{zhfEkcg5zd7pF`HX@^Epgdy&T_XkEN2`u zn~`hxz2qP7tE8(2Zts>X^ekHwbn7Ma|M(QISik*OgMj0t^Im?a$V#ZwEbP?2c1bWn#`UvrS(<-I(KJ!V}|Ch&JH$Oh}|G!kv z^Kbu?3sOpYufJW^!Fpg5li6G?wFQTNSzY##9{*FTeyoPO-^ zulfG5J^ZYSGF8)RWYpQ&H&!NYVUgqsybvp)Bys6pOy9kiIXxHu^@eEvf7YeDduvB> z-0O)y#23x3zggecnpAl#bg$K^w6hn#ys5C7=QD5q{QG{%+g>t;oxFeir1c+tJ16gz zTQ{AIe!H?Y^9_Gv=&Cn0n@|5UQM>o0%p);h`u~JOCo8IIs%os31e{Y>YK%ATj^sc2 zTTkYb@sdxQ?AtiE1bkd9JUt`Q-R$7?`P|>_n$*1BU$$TN{pH8aA3uJ6{Q3Fz$<9@8 z1s305{7e09NZr|8%`Q_6`sb@3c_C)}$xX)6<8^!4SCe6?!al_&j^CtYW zy!2GVDP=EnU!2uYDBIVv zbK>L5??ONS?c3OOMnyYGQ1$&{p|~IQ0Tw2|=j~f|A}y)<$Fz%S`%HHypZ_eP^d>}X zZ$^r$_3Nh-%42UVSlb?9^0xh2O+ZCw;+&mJ13n0rq_xgoVW)jlVWoiPQ}xX!Uw+>F z^W_(tXAhq|dHLwa%SS0jH}}iTy05HjXUHBJ(Ro6C_t}6pSzkQ?-M7ct7lf?;_J6we zf3)Sf8LOp_F6Culm?8sNP@b1xl3J{nn^GEiyXej_!P@)lXK2}5tYg~1o$$V9k>;&s z%7I#4Wp9=jFz}QeKcZ`VVAAX5f1Ljr#80|x%OEyoj#g+O_nD>Zm;0OV6ErVP-Mwh) z+I8BBt9@2XJ{K}|)y+4P1A9%hgfA*Z{qCMCzmDl+#g(uJ^F>_eo??nlDcp9eYSF6b zKSH~5xI$O0I_egC^ID1K{Mc8`52KrIzL}k0us+kudiKvp@>?sfU3FaIKGp7e>~3-Y zi)o_n)>|Ww8$~X!6k2EYF-ub4{G-*$LlrAOoi)3uGif=)@A?4UZE1@POU>@6mbNB8 z$=lqq{i4~F?oz2!I@63i4~K4vTKzUCSG;gvK<19d2B zg?}QiJXiNWA$DBrVr1&Rtv5cc_q#c5N%f_xoJ?1q$^1!t{fhJbrCTXsTilkNzYw?g z)RwQpnW3uQs&@BlYIb}*^0j~a_x|~|g`fZZnqI#B&HdT^@AK++Ydr6Ka%Ym1Y<3rG zChz^wwH990Apvhb@6;*zsuPvT$CX{NazdENCfjdy*F%>{g-+~sSsj-`1WWLs7rpUqSl-~T=` z`c|m)Cx=|qn*l7Db618>%$zY%eviX^nXc3~9zSN+$hp>MhFR%dZ*6+F%d1;YdAhVl zwdyM`&JOR5_FAQ^+`Rnmx+mZOZcue_s>Kb)E9w%w*OqK{Yf#xy6(AI$EWN^1{&1t; z+xfBg>+1fz{PywPvHgGlZu|bl{Rtb3-L~B1@1J)@OL`nR637_Bbc`X!EdS2ZgBx|Z zjUJu7cxCCW?)h@^_Ka=f;ft>3E>v(?U!(t2^yk9Hw0AnTBh#U z@3Wi4OQlq&U!QZ&c9wsz+R>S^-)iz-iFY*^CTNsKg_>=3G}x$Gu!xz}i?2`c+k~~& z&0jh9M6P(i9qjdamA_s4Zu=`!e%_wXIHC2t`?3S6J8rXe`Y{!i+fM&FAt`z0_n*XZ!1#pG50FePeCfyLW>*ukwQX?Z@^^nR;%e zmH?MxWrWry;d@_>E?45%=d|wYxBMPEPqxYxnX`8l^(hDL$`Z2h+s^3nYt}OF%7D7w zk|&e?Z9Y}Jm?LYBMDyn31qDW#ua~H|)*UUhOmv<5eAd;yFE5H0&F9$Omh~j!#Qg)7 z5*{AX48JFsu{!PJ;&{jB>uqU#+|K13qjl}{PjeSbyqo#;^c(B&&kQUxA7#6)JoW3f zcDwZoJr+&<{dX3u+Ijn{tX4_ahRyL4m6q~;5M8-kn!UB?fJlsnu2QRBafGWS`xTZc zAD?P`*`T?yIw+sRc;U6zt^4EL!*ATXRmnMVZPvt#GxMzy^mT7me7w|OeoyP$^={kwQ74uuJ~y5b z(sH2X#}TU&>qXx2=Jl#)xj($rzvyVl*W4HHr-dtp&-8gdRpoPE!`}FxrwjD&1V7+( z;*L4jP`irJw&R$Uxx`sc!86l>O%G?-UNpY*W?fs>OJ=!+N1|{4+9=-suW0-Kq^shA z!GSZE<;v*E^lrZT|z>mvBMnU^QG7qYzhey8ou4o;T>2c2uCF3f2`dcw=^xnIb7x>mqp!`l>2 zuR|M>Hh)v z;jgnO!OuiRlleu#QU%G5%>s|ubS|i0c)(r1C&^*niic$i&pVe}@jdO*D|Fo=z|h*_ z)VMKW#qP?52QK`YWPO{>Hp|dv@2_t$OC5i<-)-++E8q6|?+xppM^5Ue%~;UMU%!Hh zP5srWo`Z|b9JkBydomvT7~ZL)Dzt^0CDql?zr=L8_Fu*cFJ4tV)Hj#=Q5n0ipmAsa znRW3`cU#$OcFhS_S)sw%QMmANPO@Q{M|t?tJ2|~9rDnT-b6dUa43^N1$a^&LU*-xU zBlTNs(psLPznYSrqZZB-IMT6Fc|yqEiS3ep+}nel^j)8Pu$;J;O?BJpg} z>rLebHm4nPmut^T_{6+Xxq@rk?Mn}LA2@f*i97sRqlt?4*Td^v^JemGyRw2;^WZ0@-)fE- zGw)t+W7_Di)2^{8|B3GW;}iW_uS~R^rfUCLc2b4-KlM(QMR!h=6o?zHJP8sTHfePB(t&W>}d9|Wov$JkZ#SmgDciFSMVb;j}KJFVXG`Xm?}HPQc< zpYNuh%D%L{_JqqHMJu1bBC4}jN-mM%pLFwLVe*y(3!>znOEIjgbCXf2C~V<6fA0k6 z?=R_>D|m92ZR^WzN|`d9ZMNTI4ffTG%~?|C&j?<9=B&V+H+=cWGy5$()~!6j5@J=m zqRq1D^K)h$pQ{D-5AU&FjkesBy?pP#%e@tGtPKrk%x3R=)^=#Mz)Z(m^=B)7Z=HVZ zYjjiQE5*O-Bo(`t8{1^PeE;Eh?c;&-XEkU09TAkkHy@rv6npJJ1i<)Uu;F0d>u>St3}yin|;p@PKXj~2F#+Ut)8 zUZ34oY5&Ebe#bUO)*qqC2md_$_Umr@#!|Uzsad&|PKAt*S4OVm)p|KGl2g$|wf)@D zO9hu&B_d3d<|nmn3Jh!K+xeiz?#8PXR?YukeK~X{_xM|m{xuUkP8rm^7=LZ!Z4-!_i<-;$g3{O@~S1{-0(3zccoBG#T8< z-M)N+>93uK^KNPRO*A)|8g}IW-|zKd^D3rr@@gyn>6-hWD^%9uA>-*+2M*5K(Y7f6 zj?erkCc(bmu*nSio^^lje##E>YO&o@6vcaqPt(1%BhzbHs%tCnM$>{4XU2|a zH~hL79|~{fR(bUOiNxonJ*$tZMZ6KaeOI%j?N7n)9}RncIjSyG7I*hP|MMY}C`ao; zSC^`p3(VRpo7(E$#mN4=D0G@@?)D#(4=NWsMxIoBwMpV^_QKBM2gi1$SiIJ5KH(d? zOHyp}q=~xcm#ej)Q)xVLB&gx?LhTFuuh*OK99HPrc3U;m!c0Pa9z(+)rmS6W z{*+xa_?6H7zje3hA9qiKgY9nHk4&w$^HsN4eVId2bMnic%Ul|#9o=;1e^v~1ue?+u z_Gx{|)dTx-Qzv>To4&9Yv}q7tG)Hj7&O{ysjw@Rv*~{|1e@|%k^mkY>r`M!mlEM4^ zLITfURjxICx##Vc3}$4{*l=O{)R!}4 zw;kWOBJqKuPxiv4x+#Zh=B|#IX|^V2%k6+`M`wRreel59YNnT$UaA%srlWj>z@yGOn?cYtR3Y z^-0KT5uW2YLqqL)Si}X^JAUi)(?sNFw4Sf(bTd5KIic8f2iLRzUl%MdSu5<_;(se- z_rG>NEvzq%}%Y@tJTsK{HvXcMimW_Vl zf0ZICMAo&Oe17xl-L>hj+TTbi-?yK7?&`PLNglrzCB+$SUlHrGMSbV9DbJcX`ger2 zMwqny-0*f*uhRjshb_fh#EL&mTzt@TO5gTQ?`uzL6@8~@_pW1oulj#?T}$Q-4mRyI zMvFME9g(==c3-)?y7>E@BX4bQp9xeI=}`F=9JwfpYw^_S*XtP1hMkzL@bTui6R(Zt z$JW~J-??vAu;vOOc7;|a?w5%oy_e=St>pSPb(!_yS-TG2m-=#jE@R+Tp}$!xF8)_h z@#OcEV>;5h;i={k?x;(@4ysLArC$=tnYAHwS$OB=s9P?#*&F-MxZL$EEY0^f&&_sx zQnFHm!mLamnXykv!>_W!=izA$swer+ZdRwBs?=k$tygj`F1WRe*F09hix1;Jx*@Zi7{ZD9`ek4zs!O=kEA|(DIc8q`qCnysd_GYR&&lxJ#@ZG zZS8B0odO)6CI0D1F1^`yVn%6`=8qE|y4$ukT;iCux0JJ-Et4%ba#z^FjB~4J6+ZV( zJsf(xEzkT+S5sGS*ZRZDK2JaMN6IkMMy7{tv7DjkuDJiP8LLjZPYP`R*k!3DRhjd{ zbh64#o|9&FljKVn&ff@n5)!d++l6OK?j5Vyeo6O`q;ZjK;IicY!~G{kx6VB7w)d&8 z_AXvGj`TR0S^Ex(FD`x`;r;Mh?V88o8~WJuA0IsV;77{LeFtt`u}u6Gd89mL)@3)% zrl3u)*!MhqF0VTIkao*H^Pkh2^1r-MJm|mI%0}?sy0XQuJUE&hq}sFYl$^mn~%F+eUJV;fe1yg3BJVCOkCoc2{?=F|px$e)({roy7C@%qlMZwdd-$p4%?+)lqM+ zz`Xl^xKWE)={xgueHa-SUa~PTNPvsk-29SM-ORj{)C%3=#N2|MRK2X?{JgDGe6tQ4 z2(*5;Y`t)c@%B;0%oCzjjgwln{iOvXl}(E3ICfTx-sa_kULHQpCLngob$TetXZXvd`lk*V#G z-xdlAWNs1Px@O&~&pR&jR_uBvW#fC-RAI9}*Rg3&Bi8@^YIDr(R#pL9e-5|hb;on& z1+T5yyz^zY^Q}qUnQ%N*MOOR@OWX0yU*sR!YW=>%%N;J=ue;$((z%D-TWZ30A8dHI zIlXjV$+z|U_D$aR=t1bEH`QNyKgqTpIX=_pPQVMH+ht+aSIqXAb@uWus@_?=vc8ga z-%KmkwcAe4S7Y9~*LX(LUbp(r1ybMdFFE%7(w0KC-@^q?96raeYe#DIM%^chlT!>LeKy_nY^wBG@h+?Lao(nO z@td=j|2e$x-M^T9DgL52b1NHJn<8GRbst?7yxi~Q%wKnZ?%r1Xy^C*|V)W&;zdW3m z)Op9PJr|z+^rMtq>#+FqjV$gh2O~Wh!h*_nI!@^k)o1JV{v0LTd`sTf=K&wqax!>eC(<=nY_udd9n=#RTCb7_M_UwmlCyb}2WdzF(n=5DIotX^?} zg+>2eY}cyt-pu|z4DQnFEf%+g?CpIO$NqHk+2@LrcRclvRcbgYpSu57L5tw(C>9qR zb2As6qoHwAJ^p0rtn|119si#D-?N+FkIEmsxxS;LSIS!OR9_ZbRP!8piGtm-1xu6_ zOE|V&Z(!|P9Xsg)pA}Q#HU&NRbH*w5|2`G%+ZCmMh5g3CvLB`@M!@_;}6SlwG5s)v(HYfel;;Qv;`yAK5f55p%z45Wz zSGEE+iHeCEt5ulXpRxX#;ijzorn+m^`Ub9(DviCyM?2a6S>*Fg{1jtUudrP;R5AB! z-|IDwYqA;61^D@C9$RMM>O7b6R*}@2Z*o`nxqg!7Wq8E@lZW*wU&PhY{_=Eou~+Gr z4;mPhte^GdY1F#po`atywX~ltdM^_!qF%H_WI;u?m8a$U4-C&7x%E9}OZhpyZpA=PTBg-xz+oJ5hU2tRIa-2Zu2^DKZn;oF6rR!ar|eJqAz%R=B?PeRYuD0amTFV zqOUJW-rHaE{aO3bq>qcaI1WtqGYnI*&abN3!K%2Eah|#R>S{ejVF%W)b;p*p>xfS= zlr(1dPtDhP!4xrV6Z`&+_7!_v+h)1Vy5ccOb@7JpAc+Yui4(*1ZnNdMOcR+jnHO2i#jV z-{e!d0vk|6cvvTh+RcJ?Yk>s2M!#uUC9iOmqzqKd*28D*gPPt%u(6-#N0{ z)XwAh&X^VVyER*u8O8`EzVSeK7jH($&vo$Nf1H*UlCnQ~sW&-B!{niN_Y z%T<`3^R~8CtXLMg%#xqRxUMW9qPG*{s zvag-gv3D~r>Fv1Wchzp8^ds(x7X&7-il}7m^XXDtB=@Z;JSFiG%g*yB_OdjnhMjp4 zvH5cGz=Nvsm#0thVdmYEeD2IYjZL4*J13R(M3{Sg z?OKq$Z)vcSxV()gcbd?m8kS4DdV4n7UM&~mEln3JFg@Aa z7PXN>V*z*Ht$dp$39HymR|V~#7m=#BDJ$1?NowcEh|a4yp=-G}J#b2RF|~m0>*2Fc zQ$26{tev;MNbsM<={e<4mdiKi&y&7Ls|F^S*nV)`@ zl+>1`d;gw8dC4lP_$G#!9mXal?^diz-5T)U$M443be5inld9H8o;WGL>4@4^^(|om z#d{?`_iC3vSV|MwNcjdcjm|O zuI7K|-nw?#kiExJS)-#N$3lDC26JYGk3oN3@1^c+c--BiajS4j)?eA2n zRxMBcHrqK%Fp@>tOSwj1r^_KZ+hcR*2z)tjyL)k?DCgtv`TwWAy}$o2ySBB0jWgT% zn<8?`jB>xaQhV2&xzo7q@Ut@+R{Kx)J(YBN|+DWU7F`IPq6{Q1FsD@*WK{~W$~nni_d!MkR1vwuoT=3keg zc>UBFle0EQUmBg6Th+7T&Bf4^4aqwUs>PLWKV~>O?O=ZNX78Pcn+uZu9Y|5DS^Q7& zky)fg%e5n`?D~)R%!(A%+{>$?_)oSFqifAyGZ-uj*xfT_?aM_eDc-uy&r`yt&pg*VnOP#qd#;J# zqbnI-?%OJ+7b~7P;aJhEGDobeZ{D3pDO}ELmv+c@IKSgr?DjA(o-0*u-mB?0jwcW%RCw{tue=hn0L7S3dKeD)!_bmKW*U7hgo|ISypXO(VF37qEnD=hT-=`7Ww zbv2h>vt>x$nC4d0)Y7z4_v$S6o=gRUzYMR^w*Ij&KI12`X$iyCpb%sKb|e4BUg^u* zI@WwRd^^y#n^P?R&+PMagxAE(t+!k$Y4PG;SlY^u*OwhH>)X9esUi35WdqSqbC*pr z$~vyRTtdSn?%9S4t9@SnmWC%^9ucWI?mN*Yne%Y#W_KUo8LbjmxqmVy1>L)GhkN6O z$+NDe@g-=f9{X}MZ>r@AU)lMcmz4i;r9UZ`*&@H=u=vTAGtLIvcw}P60*lPY@r9U zug_umB4>I?M78(wZb!Adg+JI$Y*yPaSN+mQZ5tlb)e1ky%D|v12s!2o-Zn()5v+~4 zpMTp-pzeLV~!J?#}J5`FPF-{EgNc$i%0C7Vq-(HWAn_~ie6%9`p>0EqtRco#Js!2OtZ2PJwyR2SwS1|Nm zRUC7$Y58x@NoyBvWNN82XJ3)J$7_;dml2zk?b*_`UT^=N2wQE~7N~jmm{qj>rNpU| zPUK5vem>@K_vNXF2UM6UCR80^54zLgMZgRXLTtzDWE&UCDH zMdszsts#~V_8*VAx-;bJS%H~rqE(E33l%H~l28_Cx19e;`LKljBmK_$gk7zU zQZCRCJU&;t>+nNQ*CX8*zfErPnAYt(>x&=j6_>EZsbb5OFSrCfF3ItkemP_B%QFvp zr!^%`eO~*=Z{HVFM)m|fMaA!`H|9P%5mtC`WpRSSW|vO(dN+eZkNAq1B@#nzEp^s; zO>_QSQ&RP^t15GSfw#9}tG)2UBkW53T7M`0n>s7D`rGcyFW>m@T2yrWe~SC0Uq{`Ms`xh z-$mjf*_CHZx8^KLSgbQ|Nz5M8>_8*Q7gwX1_ullmsCz$VX`tEB?RD9qy739tUm2}K zx9f-R_+0dT#g+%@UW}_9%!9*y_Ea98`=RISm=OuXP0Jn+Q)q8zucRj z+^o0zq!t_!PL7@tzi*$J{Dik#D$lRj=F6M@ox@T${!hf52lp7VjK=cx9gNSNX%S_aqzk z->JH9;u*;0eZ2hU8}s{~g4h2{+}3#HqT9nsE8dBGF1T~R>~=(PUvt0evV&=tX5=b& zRdNWXN6VNwU(I%@YueL`ZMo4{|@1IT|Jyn*Ky?BH7I8-7am#XSWdX?Gf?w|An_e_}BOXplN zw0mbcKlusIFT?L&?D$grH^ynbJJj<{+JjSlIHInc1X=fJ_Uu1ZU4 z^xyb}uw1AUdM0#fAOAtls8*XFs|+8$XIEy@`u-(j!tz5(FXV-Mv#+%-PsEO>jx1plFS3zCu%rZns4<)AP%@QA?z6d|GoN?Y-Q+ zzi6XETO(}Uvltl|rZ6!uC^0ZFpdWJxJCrlX)zQV*Rj;I?q;!&Rp0puP>-S56{;{{EyuZBvPK$udp( z2hYFDJA8IA3}QLEm8EH=m(P{b?LtAhUuD%V_EAN`Z}&;Nz*)=g8@F1>B5eMaJ&j)};jj^HZJi^|-U zaRD<#a{TRDf9ubCdH1aKji;9wf}VB?-_B%?P`=H!?`qBsqc2@9@1wl>Obde5)Fb5F zZ|sVj{4wQ1vi)oJDLOI+j>V5|bfrgrOb^eq2zu1XCACyoW!}v@Q&K;a-aPGY@%}Hb zPV4+R%vFzWT-)6EKzM>g@+Dpo8wVF>)z6oePey*VS-9@oYL#nYPPqaJg&QCL+Ij4q zcz`z}lN>YdBU2fmU`r#2f$acQbQ8{^9cl^E2f|w#7cgPQJ?Mx_bQ93m-GOw2@Rmk< zJq8BYDm-*u=u~2p-qM)u%)kI|HNi*J(DkFYvp{-5cuQluFOq(wRu{Sn=s6Xn8-%ws dwg+Rz9cI1_@MdKLspn+iWbk8RU@!~?@c^~`aS8wc literal 0 HcmV?d00001 diff --git a/papers/arxiv-instruction-flow/instruction-flow.atfi b/papers/arxiv-instruction-flow/instruction-flow.atfi new file mode 100644 index 0000000000..7308dae2f2 --- /dev/null +++ b/papers/arxiv-instruction-flow/instruction-flow.atfi @@ -0,0 +1,2 @@ +\attachfile@timezone{} +\attachfile@file[]{696E737472756374696F6E2D666C6F772D736F757263652E7A6970} diff --git a/papers/arxiv-instruction-flow/instruction-flow.tex b/papers/arxiv-instruction-flow/instruction-flow.tex new file mode 100644 index 0000000000..e5b4e280f2 --- /dev/null +++ b/papers/arxiv-instruction-flow/instruction-flow.tex @@ -0,0 +1,234 @@ +% !TEX program = xelatex +\documentclass[10pt,letterpaper,twocolumn]{article} +\usepackage[margin=.65in]{geometry} +\usepackage{fontspec} +\setmainfont{Latin Modern Roman}[Extension=.otf,UprightFont=lmroman10-regular,BoldFont=lmroman10-bold,ItalicFont=lmroman10-italic,BoldItalicFont=lmroman10-bolditalic] +\setsansfont{Latin Modern Sans}[Extension=.otf,UprightFont=lmsans10-regular,BoldFont=lmsans10-bold,ItalicFont=lmsans10-oblique] +\setmonofont{Latin Modern Mono}[Extension=.otf,UprightFont=lmmono10-regular,ItalicFont=lmmono10-italic,Scale=.85] +\newfontfamily\acbold{ywft-processing-bold}[Path=../../system/public/type/webfonts/,Extension=.ttf] +\usepackage{xcolor,booktabs,tabularx,enumitem,graphicx,tikz,balance,hyperref,xurl,microtype} +\usetikzlibrary{arrows.meta,positioning} +\usepackage{ac-source-bundle} +\definecolor{acpink}{RGB}{180,72,135} +\definecolor{acink}{RGB}{29,37,57} +\definecolor{acblue}{RGB}{37,100,128} +\newcommand{\ac}{Aesthetic{\color{acpink}.}Computer} +\hypersetup{colorlinks=true,urlcolor=acblue,linkcolor=acblue,citecolor=acblue,pdfauthor={@jeffrey},pdftitle={The Score and the Session}} +\setlength{\columnsep}{.25in} +\setlength{\emergencystretch}{1.5em} +\setlist[itemize]{leftmargin=*,nosep} +\setlist[enumerate]{leftmargin=*,itemsep=2pt} +\newcommand{\file}[1]{\texttt{\path{#1}}} +\begin{document} +\twocolumn[\begin{center} +{\acbold\LARGE The Score and the Session\par} +\vspace{5pt} +{\large Instructions, shared terms, and daily work in \ac}\par +\vspace{6pt} +@jeffrey\quad\small ORCID: 0009-0007-4460-4913\par +September 15, 2026\par +\end{center} +\begin{abstract} +Repository instructions serve a continuing working relationship as well as individual coding tasks. We combine a repository audit, empirical studies, recent release incidents, and a bounded review of authorized prompt history and tool traces in \ac. The initial diagnosis---uneven instruction discovery and duplicated operational authority---holds, but a shorter score is insufficient. Daily work depends on shared terms, visual inspection, parallel sessions, and resuming unfinished tasks across hosts. Published experiments also give mixed results for instruction files, using different success and efficiency endpoints. We propose a small stable policy, explicit workflow definitions, selective context preloading, and refreshed session state, with executable evidence at completion. These are testable design recommendations; the audit does not measure their productivity effect. +\end{abstract}\vspace{10pt}] + +\section{Problem and precedent} +A recent Oskiewar release appeared complete, then disappeared when production returned to an older version from another branch. This incident motivates an audit of how instructions connect user intent, repository state, and verified completion. + +The user introduced \emph{compushloy}: always commit, push, and deploy. Its amended definition also requires the intended deployment branch and verification of the pushed revision. That amendment is the only shared-policy change made during this analysis. The broader restructuring below remains a proposal. + +The earlier \emph{Reading the Score} criticized a document serving too many audiences and proposed a conductor's score with separate parts~\cite{reading}. We retain that distinction, but change the test: can the current tools actually find the right part, and can a reader establish that its requested action completed? The current public Platter and relevant local sources were consulted before drafting~\cite{platter}. + +\section{Method and observed inventory} +We inspected tracked paths, symlinks, instructions, and deployment code. A separate subagent performed a read-only audit. The primary agent checked findings and official loader documentation. Root instruction files match between working HEAD \file{275329e763ab} and fetched production main \file{a97038281a06}; the terminology amendment is additionally present locally. + +\begin{table}[ht] +\centering\small +\begin{tabularx}{\columnwidth}{@{}lrrX@{}} +\toprule +Entry & Lines & Bytes & Observed role\\ +\midrule +SCORE.md & 738 & 42,689 & Shared policy and reference\\ +AGENTS.md & --- & --- & Symlink to SCORE.md\\ +CLAUDE.md & 161 & 9,882 & Separate Claude guide\\ +CODEX.md & --- & --- & Absent\\ +\bottomrule +\end{tabularx} +\caption{Working-copy inventory on September 15. The symlink is an entry path, not another independent text. Exact hashes and nested paths accompany the paper in inventory.json.} +\label{tab:inventory} +\end{table} + +There are 22 tracked files with exact basename \file{SCORE.md}, including the root, one nested \file{CLAUDE.md}, and no nested \file{AGENTS.md}. The repository has no tracked \file{CODEX.md} or local \file{.codex/} directory in the inspected tree. + +Evidence locations, consultation notes, and exclusions are recorded in \file{notes.md}. + +\begin{figure*}[t] +\centering +\begin{tikzpicture}[font=\sffamily\small,box/.style={draw=acblue,rounded corners=3pt,align=center,minimum height=12mm,text width=42mm,inner sep=5pt},flow/.style={-{Stealth[length=2.5mm]},thick,draw=acblue}] +\node[box] (policy) at (-5.2,0) {Stable score\\Rules and workflow definitions}; +\node[box] (guides) at (0,0) {Selected guides\\Preload or retrieve}; +\node[box] (state) at (5.2,0) {Session state\\Intent, progress, capabilities}; +\node[box,text width=85mm,fill=acpink!6] (task) at (0,-1.8) {Current task\\Resolve scope, host, and applicable context}; +\node[box,text width=85mm] (evidence) at (0,-3.4) {Completion evidence\\Reviewed artifact, release receipt, pending work}; +\draw[flow] (policy.south) -- (task.north west); +\draw[flow] (guides.south) -- (task.north); +\draw[flow] (state.south) -- (task.north east); +\draw[flow] (task.south) -- (evidence.north); +\end{tikzpicture} +\caption{Proposed working context. Stable policy, selected references, and refreshed state meet at the task. A later handoff carries progress and evidence while rechecking host-dependent assumptions. These routes supplement each tool's instruction loader.} +\label{fig:routes} +\end{figure*} + +\section{What the empirical evidence supports} +Gloaguen et al.'s revised study evaluates 300 SWE-bench Lite tasks and 138 CTXbench tasks across four agent/model configurations~\cite{gloaguen}. Neither generated nor developer-provided files significantly improve test-based success over no file in its aggregate comparisons. Developer files outperform generated files ($p=0.038$); generated files increase average inference cost by 20\% and 23\% on the two benchmarks. Length and instruction-category ablations also fail to establish a strong performance effect. This directly weakens a blanket ``shorter is better'' claim. The study uses one completion per configuration and Python-focused tasks, including generated specifications and tests. It does not measure our release, design, or handoff outcomes. + +Lulla et al. report a different result in paired runs on 124 PR tasks from 10 repositories using gpt-5.2-codex~\cite{lulla}: median time to final output falls from 98.57 to 70.34 seconds with AGENTS.md, a 28.64\% relative reduction. Median output tokens fall 16.58\%. The sample requires one root instruction file and small code-only changes. Fifty tasks receive a qualitative output sanity check; systematic semantic correctness is outside scope. Faster final output is therefore evidence about efficiency in that setting, not proof of equivalent completed work. This design excludes the overlapping nested guidance central to our case. + +METR's early-2025 randomized trial covers 16 experienced developers and 246 tasks in familiar repositories; AI access increased completion time by 19\% despite perceived speedups~\cite{metr}. Its February 2026 follow-up warns that selection effects and concurrent-agent time accounting make newer estimates unreliable~\cite{metrupdate}. Neither study tests our instruction architecture. They motivate measuring human attention, review, and rework alongside agent latency, especially when several prox sessions run concurrently. + +A descriptive study of 2,303 context files across 1,925 repositories finds frequent small additions and configuration-like evolution~\cite{readmes}. That is evidence of maintenance pressure, not a causal result about length. Collectively, the literature supports an evaluation question rather than a universal rule: which context prevents a costly mistake on this task, and what extra work does it induce? + +\section{Discovery is not a filename metaphor} +Codex documents a root-to-working-directory search, choosing at most one project file per directory: \file{AGENTS.override.md}, then \file{AGENTS.md}, then configured fallback names. Its default combined project budget is 32 KiB~\cite{codex}. Our root score alone exceeds that value by 9,921 bytes. A simulated 32,768-byte prefix ends inside chat-query material at line 504. This demonstrates a default-budget risk; it does not prove this session was truncated. The user supplied score instructions directly, and launch-time overrides were not exhaustively audited. + +Claude Code documents \file{CLAUDE.md} loading and explicit \file{@path} imports; its documented shared-AGENTS route uses an import or symlink~\cite{claude}. Our Claude entry instead tells readers in ordinary prose to read the score and ant rules. That can guide an agent's subsequent action, but is not the same mechanism as an explicit import. A fourth filename has no established benefit until a loader consumes it. + +Nested scores are similarly an authoring convention rather than a universal discovery mechanism. The papers route is explicit in the root, but there is no complete path-to-score map for all domains. + + + +\section{Where authority has drifted} +Three forms of drift recur. First, scope disagrees: the root calls the ant rules ant-specific, their document says all agents, and Claude directs contributors to both. Unattended colony approval rules can conflict with an already-authorized repair. The active request establishes authorization; colony behavior needs an explicit operating scope. + +Second, shared guidance has tool-specific entry points. HAND and SCREEN are routed through Claude, although code style and piece layout apply across agents. The root also misidentifies the root Claude guide as the full piece API reference. Native release recipes differ between local upload and oven workflows; session-server descriptions disagree about hosting. These requirements need one owned source and neutral task routes. + +Third, environment guidance arrives late. ENVIRONMENT already resolves explicit identity and observed capabilities before customary editor preferences~\cite{environment}, but the root introduces it after extensive host material. Its heading-scoped Emacs block also leaves subsequent helper lists formally untagged. Move the resolver early and bound editor-specific procedures explicitly. + +\section{Completion needs executable evidence} +\subsection{The deployment incident} +The observed sequence was: feature-branch v120 served correctly; a later public read returned v118 even with a cache-busting URL; the server checkout was \file{main}; the fixes were integrated with newer main changes; v122 was pushed to main and deployed. Identity, gzip, and Brotli responses then matched the intended source. We did not identify the actor initiating the intervening deployment. The evidence supports a publication-branch mismatch, not a browser-cache explanation or a causal claim about one paragraph of instructions. + +The deployment script's default target is its current checkout branch, with an explicit override available~\cite{release}. A transient successful deploy therefore does not prove that the next routine deploy will retain the change. The release contract must name both the artifact and the branch that owns production. + +\subsection{Tracked hooks versus installed hooks} +The audited checkout contains tracked pre-commit policy, but no installed pre-commit hook or configured hooks path; post-commit is linked. A repository file describes a potential enforcement mechanism, not proof that it ran. Source inspection also found an arena push-failure branch that logs a skipped deployment without exiting before the following deployment commands. This is a code-level finding, not a reproduced failed push. A future fix should be verified with a failing transport stub and zero downstream deploy calls. + + +\section{Daily work changes the unit of analysis} +\subsection{History is a sample, not a complete diary} +At the user's request, we consulted the prompt-history index and native transcript records for recurring terms and tooling. The quantitative window is September 1--14, 2026, UTC, excluding this analysis. Searches recovered two hosts; other configured histories were unavailable. Native call requests and filtered prompt mentions are separate evidence types; neither proves successful execution. + +The local extraction uses top-level Claude and Codex transcripts, timestamp filtering, exact repository cwd, and call-ID deduplication. Worktrees, nested cwd, other repositories, and subagent directories are outside that sample. Codex's execution wrapper requires a second accounting layer: a syntactic tool call inside JavaScript is a candidate dispatch, not a confirmed invocation. Sampling details and aggregate results accompany this revision; private transcript text does not. + + +The native sample contains 8,641 tool-call requests across 83 sessions and 1,216 accepted short prompts. Of those prompts, 439 arrive as structured queued-command attachments; counting ordinary user messages alone misses them. Selected lexical matches include compush in 28 prompts across 19 sessions, prox in 19 across 13, Chrome in 16 across 13, and Easel in 10 across 6. These counts are descriptive and conservative: longer prompts and nested cwd are excluded. They are not a ranking of workflow value. + +\begin{table}[ht] +\centering\small +\begin{tabularx}{\columnwidth}{@{}Xrr@{}} +\toprule +Tool family & Native requests & Wrapper sites\\ +\midrule +Chrome browser MCP & 867 & 0\\ +Puppet MCP & 374 & 19\\ +Frame MCP & 21 & 156\\ +Paper MCP & 4 & 88\\ +Prox MCP & 16 & 13\\ +\bottomrule +\end{tabularx} +\caption{Selected local tool families. Wrapper sites are syntactic candidates inside JavaScript, not additional confirmed executions; do not sum the columns. Shell requests are more numerous: 4,541 Bash and 1,617 execution-wrapper requests.} +\end{table} + +The separate remote index slice contains compush in 36 short events across 25 sessions and prox in 29 across 21. Coverage and filters differ; those figures are not pooled with native logs. Direct read-only access recovered a host missed by the connector. + +\subsection{Shared words carry operational meaning} +The reviewed history repeatedly uses release shorthand, named prox references, requests to inspect a browser, and requests to resume earlier work. A September 13 definition makes oskieploy a release across the game's surfaces. In the current conversation, compushloy explicitly names commit, push, and deploy. These are compact workflow selections, whereas a machine or prox name identifies where the work belongs. + +\begin{table}[ht] +\centering\small +\begin{tabularx}{\columnwidth}{@{}lX@{}} +\toprule +Term family & Required interpretation\\ +\midrule +compush / compushloy & Distinct release meanings; consult the current explicit definition\\ +oskieploy & Game release across named surfaces, with channel status\\ +prox / prompt rock & Session reference; resolve identity and unfinished work\\ +frame / Chrome & Select the intended visual surface, then inspect it\\ +/papers / Platter & Scholarly workflow and evidence, including rendered QA\\ +Wordcrust / Slidecop & Editorial and presentation acceptance criteria\\ +\bottomrule +\end{tabularx} +\caption{A proposed vocabulary route, not a frequency ranking. Rare terms may still encode essential requirements.} +\end{table} + +Keep a small workflow glossary with scope, definition source, implementation entry point, and completion evidence. Similar spellings are useful retrieval candidates, but must not silently expand an action: an old compush request must not acquire a new deployment obligation solely through fuzzy matching. Likewise, frame can mean a screenshot workflow or a game's simulation frame. Resolve the surrounding task before choosing tooling. + +The existing Jeffrey Lexicon supplies a useful provenance precedent: first-hand language is separated from generated text~\cite{lexicon}. Operational definitions need an additional distinction: an explicit definition, a repeated usage, and an agent's inferred synonym have different authority. A frequent word is not automatically a rule; a one-time explicit correction can govern the next action. Keep discovered candidates separate from accepted definitions. + +\subsection{Inspection and continuity are part of completion} +The history includes a concrete visual loop: inspect a named prox window, adjust the interface, reopen it, and inspect a fresh frame. It also contains requests to recover work after reboot and continue a former prox. These observations make a file-only view of productivity incomplete. A code change may still need a live browser, rendered PDF, physical device, or release receipt before the user's objective is satisfied. + +The recent Oskiewar sequence illustrates the same pattern: performance work led into lobby input, theme contrast, start-event consumption, physics, deployment, then process analysis. The domain expanded without a new repository or a clean task boundary. Routes must therefore consider the active request and touched paths, and be reconsidered when the task changes. Cwd inheritance alone cannot cover this workflow. + +\section{Proposed instruction architecture} +Keep one short canonical score for stable shared policy, with explicit routes to owned guides. Separate four kinds of information: rules that apply across tasks, definitions of named workflows, task-specific reference material, and live session state. They have different owners and update rates. A source-tree overview can be rediscovered; the meaning of compushloy or a previously accepted correction may not be recoverable from code. + + +\file{AGENTS.md} can remain the symlink where it works. Claude can import the same short score and retain only genuinely tool-specific additions. Cross-platform environments unable to preserve symlinks need an explicitly generated adapter with a drift check. A \file{CODEX.md} may be a linked human reference, but should not be introduced as a second authority or assumed startup file. + +Nested scores need explicit path triggers. Merely splitting a large root into named files will not make those files load. Routes should cover piece authoring, runtime work, service release, native devices, papers, and host tools. Match both task intent and touched paths. Loader behavior and follow-up reads are separate mechanisms; naming another file does not ensure either. + + +\subsection{Preload repeated work; retrieve uncommon detail} +Easel deliberately inlines selected authoring guides from the checkout or its packaged context~\cite{bundle}. This is a local counterexample to deferring all detail. For repeated piece work, preload a bounded authoring bundle with source revision and freshness checks. For an occasional service repair, retrieve that service's guide. The 8 KiB root target is a proposed guardrail, not an empirical optimum; neither byte count nor link count measures usefulness. + +\subsection{Reconcile state when work resumes} +A prox handoff should retain the objective, accepted corrections, relevant definitions, worktree/revision, completed evidence, pending channels, and next action. On the receiving host, refresh actual cwd, capabilities, and resource constraints. Preserve user intent while rechecking machine-dependent assumptions. The current prox bundle records identity, cwd, and provider but lacks explicit revision and instruction digests; its resume script can fall back to the home directory~\cite{prox}. This is a schema observation, not proof that a particular handoff failed. + +Easel also documents a state gap: an autopublish toggle changes UI behavior immediately but reaches the model on a new thread. Such changes need a short state update during the task, rather than another permanent paragraph in SCORE. State reconciliation should trigger on a real transition, not add a ritual before every edit. + +\subsection{Enforce shared release state outside prose} +Recent commits repair worktree receipt placement and compressed-artifact rebuilding in the webhook path~\cite{releasefixes}. They show why one reviewed command cannot represent all production writers. Inventory the CLI, webhook, and hooks; align their branch and artifact contracts. Atomic receipt replacement prevents partial JSON, but concurrent releases may still overwrite one another's desired revision. That race is a hypothesis requiring a fixture. A release lease or revision-checked update belongs in execution tooling, while the score states the requirement. + +\section{Migration and evaluation plan} +\begin{enumerate} +\item Freeze an inventory and mark each requirement's owner, scope, and consumers. Keep exact safety and authorization semantics before editing prose. +\item Extract long operational sections into owned guides. Keep essential entry guidance within a proposed 8 KiB budget, leaving room for nested instructions. This is a design target, not a measured optimum. +\item Reduce tool adapters and validate links, symlinks, import targets, and duplicated controlled definitions. Easel's explicit context-bundle inventory and check mode provide a local implementation precedent~\cite{bundle}. +\item Define release records: target service, canonical branch, command, expected source revision, served-artifact check, and pending channels. Distinguish pushed, published, device-accepted, and physically verified states. +\item Test fresh sessions from the root and representative subdirectories. Verify which instructions loaded and which guides were subsequently read; do not infer this from filenames alone. +\end{enumerate} + +An instruction doctor should be read-only by default. It should report missing or stale adapters, budget overruns, broken route links, installed-hook state, and conflicting controlled terms. It should neither install hooks nor upload session text as a side effect of checking instructions. + +Start with paired replays of held-out tasks: piece authoring, browser-visible repair, a prox handoff, papers QA, and a multi-surface release. Compare the current entry with a concise entry plus a selected preload; then vary eager versus lazy loading separately. Keep mandatory constraints identical. Pin repository snapshots, model/harness versions, capabilities, and cache conditions; repeat runs rather than attributing one stochastic result to the file. + +Judge completion against task-specific evidence, not an agent's final answer. Record correction turns, repeated discovery, review/rework, agent elapsed time, and sampled human active time separately. Concurrent sessions make summed wall-clock time misleading. A historical replay may already be familiar to the model, so reserve prospective tasks for confirmation. Use transport stubs and artifact fixtures for release experiments; do not benchmark by repeatedly deploying production. No such intervention trial has been run here. + +\section{Limits, privacy, and conclusion} +This dated audit does not establish fleet-wide discovery, hook installation elsewhere, model attention, or an optimal instruction budget. User context can bypass normal discovery. Static contradictions do not establish runtime failures; fresh-agent trials remain future work. + +Authorized prompt history and native call records were consulted for this revision. Correspondence and credentials were outside scope. The paper retains operational aggregates and paraphrased workflow observations; raw transcripts, identifiers, and command arguments remain excluded from its source bundle. Native and indexed samples are not pooled. Prompt authorship filters and wrapper extraction are imperfect, and the history cannot identify causal productivity effects. Drafting and audit assistance were provided by Codex, with a separate subagent review. + +The recommended update is a stable shared score supported by a workflow glossary, selected task context, refreshed session state, and executable completion evidence. Shortening the entry can remove duplication; preserving the working relationship is the larger design problem. + +\balance +\begin{thebibliography}{99}\small +\bibitem{score} @jeffrey. Root score and instruction adapters. Repository snapshots and working amendment, September 2026. Evidence inventory and paths in \file{notes.md}. +\bibitem{reading} @jeffrey. \emph{Reading the Score: A Critical Analysis of SCORE.md as Governance, Interface, and Creative Form}. 2026. \file{papers/arxiv-score-analysis/score-analysis.tex}. +\bibitem{codex} OpenAI. \emph{Custom instructions with AGENTS.md}. Accessed September 15, 2026. \url{https://learn.chatgpt.com/docs/agent-configuration/agents-md}. +\bibitem{claude} Anthropic. \emph{How Claude remembers your project}. Accessed September 15, 2026. \url{https://code.claude.com/docs/en/memory}. +\bibitem{environment} @jeffrey. \emph{Execution Environments}. \file{ENVIRONMENT.md}, lines 13--41. Inspected September 2026. +\bibitem{release} @jeffrey. Deployment and release implementations. \file{lith/deploy.fish}, \file{.githooks/post-commit}, and \file{xbox/tools/oskiewar-release.mjs}. Snapshots identified in consultation notes. +\bibitem{platter} @jeffrey. \emph{Research Platter}. Rendered index and local papers score, consulted September 15, 2026. \url{https://papers.aesthetic.computer/platter.html}. +\bibitem{bundle} @jeffrey. Easel context synchronization. \file{easel/bin/sync-context.mjs}, explicit inventory and check mode. 2026. +\bibitem{gloaguen} T. Gloaguen et al. \emph{Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents?} 2026. \url{https://arxiv.org/abs/2602.11988v2}. +\bibitem{lulla} J. L. Lulla et al. \emph{On the Impact of AGENTS.md Files on the Efficiency of AI Coding Agents}. 2026. \url{https://arxiv.org/abs/2601.20404v2}. +\bibitem{metr} J. Becker et al. \emph{Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity}. 2025. \url{https://arxiv.org/abs/2507.09089v1}. +\bibitem{metrupdate} J. Becker et al. \emph{We are Changing our Developer Productivity Experiment Design}. February 24, 2026. \url{https://metr.org/blog/2026-02-24-uplift-update/}. +\bibitem{readmes} W. Chatlatanagulchai et al. \emph{Agent READMEs: An Empirical Study of Context Files for Agentic Coding}. 2025. \url{https://arxiv.org/abs/2511.12884v1}. +\bibitem{lexicon} @jeffrey. Jeffrey Lexicon. \file{papers/jeffrey-lexicon/README.md} and \file{manifest.json}. Consulted September 15, 2026. +\bibitem{prox} @jeffrey. Prox bundle and resume implementation. \file{slab/bin/prox-mcp.mjs}, bundle metadata and resume-script generation. Audited snapshot in notes. +\bibitem{releasefixes} @jeffrey. Release worktree and webhook corrections. Commits \file{3b1496c428} and \file{135d05d311}; Easel context/state handling in fetched main. See notes. +\end{thebibliography} +\end{document} diff --git a/papers/arxiv-instruction-flow/inventory.json b/papers/arxiv-instruction-flow/inventory.json new file mode 100644 index 0000000000..271d394886 --- /dev/null +++ b/papers/arxiv-instruction-flow/inventory.json @@ -0,0 +1,184 @@ +{ + "observedAt": "2026-09-15T18:44:29.675Z", + "head": "275329e763ab6cfb15735434736bd134ef78b70b", + "main": "a97038281a06c1ad3aabc15256e84e803f0ec195", + "workingEdits": "compushloy definition in SCORE.md and CLAUDE.md", + "inventory": [ + { + "path": "AGENTS.md", + "kind": "symlink", + "target": "SCORE.md", + "bytes": 42689, + "lines": 738, + "sha256": "d432632b39b8137e750b96ae47932241473bf01a4f6267fc6d36e45d5613fe07" + }, + { + "path": "CLAUDE.md", + "kind": "file", + "bytes": 9882, + "lines": 161, + "sha256": "cfdbfe8473d2a52899af3e8fd94a09b921d4a8d02090c8b4e45ee688d4a1b26e" + }, + { + "path": "SCORE.md", + "kind": "file", + "bytes": 42689, + "lines": 738, + "sha256": "d432632b39b8137e750b96ae47932241473bf01a4f6267fc6d36e45d5613fe07" + }, + { + "path": "crm/SCORE.md", + "kind": "file", + "bytes": 17694, + "lines": 352, + "sha256": "d23f91294cec994a1703e070f31a5e90b47824802b127c92fcd41a8043eb1aa6" + }, + { + "path": "experiments/intelligent-terrarium/SCORE.md", + "kind": "file", + "bytes": 6577, + "lines": 126, + "sha256": "37a9f22ed1b8646fd34d6ef6ccbd826f5f3a1fcac55a6e1b0271857f25ec297f" + }, + { + "path": "fedac/SCORE.md", + "kind": "file", + "bytes": 1256, + "lines": 31, + "sha256": "4cf30ce58b49ecd5c8691e89cbc06eb605af6bdfb43a19b0f6bfcd57d1e67d81" + }, + { + "path": "fedac/native/SCORE.md", + "kind": "file", + "bytes": 9096, + "lines": 240, + "sha256": "2f3f7dc5e81ae53739d5d26b9e8d500b9725c379ecf41cc88fca824fe6c59561" + }, + { + "path": "grants/SCORE.md", + "kind": "file", + "bytes": 10212, + "lines": 112, + "sha256": "1410b6f48a4ccf6acd7e4b83fa59dd30d561d1c5ec13c912cec093d5ba49ae2d" + }, + { + "path": "kidlisp/SCORE.md", + "kind": "file", + "bytes": 7559, + "lines": 108, + "sha256": "dc8b5bc06530086c59ad4b79c4fe475d779cda8d107c073b1b3c3436b8e88f2c" + }, + { + "path": "marketing/SCORE.md", + "kind": "file", + "bytes": 1690, + "lines": 30, + "sha256": "7da178c94e5e4772437c905888dc362ee1f45b274a109b129f046712e7a98b68" + }, + { + "path": "marketing/essay-reels/SCORE.md", + "kind": "file", + "bytes": 1311, + "lines": 33, + "sha256": "cb91b11a34a837bf1bb181086637f11a1d790ba91e786a5c1b442b19bf6c0711" + }, + { + "path": "marketing/kidlisp-reels/SCORE.md", + "kind": "file", + "bytes": 2574, + "lines": 63, + "sha256": "0cded797aa113ab00b2fd6a038efd3d8cf523974229e19e796df504dbd3ad171" + }, + { + "path": "marketing/klokkentales/SCORE.md", + "kind": "file", + "bytes": 4729, + "lines": 110, + "sha256": "e1af324ae067f734db7b011429455574726dab4b79f85ac7236aba9667f4c69d" + }, + { + "path": "marketing/podcast/SCORE.md", + "kind": "file", + "bytes": 7290, + "lines": 132, + "sha256": "6cf7f178ddcc917b7614aae9d76baeaec1dc7b0ab8843b61be10efbab8d2f853" + }, + { + "path": "neofarm/SCORE.md", + "kind": "file", + "bytes": 5802, + "lines": 109, + "sha256": "755c67ff0d63375d8b38199afea598ee9192170c961a9c4e489447e696293c71" + }, + { + "path": "papers/SCORE.md", + "kind": "file", + "bytes": 43880, + "lines": 457, + "sha256": "c071b0ba9ef5a65a518f40a34e24985e3115fa94b3dcbd2456f76031eaf74652" + }, + { + "path": "papers/mediascholar/SCORE.md", + "kind": "file", + "bytes": 2147, + "lines": 41, + "sha256": "e813100f0081fa7b92db0865aa4e71f2c57a2e8de08565e79b1c5fc97f56ad2c" + }, + { + "path": "pop/SCORE.md", + "kind": "file", + "bytes": 16792, + "lines": 243, + "sha256": "ebda00eb837439a483e759237feb9c7cca86536a9c0a74a09ed21a380df0815e" + }, + { + "path": "recap/SCORE.md", + "kind": "file", + "bytes": 10306, + "lines": 216, + "sha256": "1d81a482b63000223b90afaec83757da0895e5450005956ffb87557a5813b8ec" + }, + { + "path": "slab/menuband/SCORE.md", + "kind": "file", + "bytes": 13825, + "lines": 277, + "sha256": "4712c0a8493e936aacf8ee675aab215afb1d327aae8999c6a209b28459ea1591" + }, + { + "path": "social/SCORE.md", + "kind": "file", + "bytes": 14155, + "lines": 181, + "sha256": "8b2fcb78d2bfdfd40c50104663b63417543ea0a4fd426e44a5bca2fdfc91d4b8" + }, + { + "path": "system/public/aesthetic.computer/disks/CLAUDE.md", + "kind": "file", + "bytes": 4799, + "lines": 157, + "sha256": "66722cea97ed572b7e452270497594ebe82ebb4e3e69b07c22372deeddcb1bf0" + }, + { + "path": "system/public/opinion/SCORE.md", + "kind": "file", + "bytes": 2028, + "lines": 70, + "sha256": "e0115214cd9af32991ce873c7cb8fa2ca74c18a0aa4be15b22cb35e321fc44fc" + }, + { + "path": "thespianjas/SCORE.md", + "kind": "file", + "bytes": 2619, + "lines": 53, + "sha256": "c0b0108b57820c11ecd48bb851067909ba9d661a232833f88a92a683de00841d" + }, + { + "path": "toolchain/macos/SCORE.md", + "kind": "file", + "bytes": 13134, + "lines": 312, + "sha256": "4511cf6e055d3fe7ce8cc52dc501c512c015dee887436300455e9befcc1b08ab" + } + ] +} diff --git a/papers/arxiv-instruction-flow/notes.md b/papers/arxiv-instruction-flow/notes.md new file mode 100644 index 0000000000..d477ec2c70 --- /dev/null +++ b/papers/arxiv-instruction-flow/notes.md @@ -0,0 +1,63 @@ +# Consultation and evidence + +Prepared 2026-09-15. This is a local analysis, not an implemented instruction migration. + +## Corpus + +- Working checkout: `275329e763ab6cfb15735434736bd134ef78b70b`. +- Fetched production main: `a97038281a06c1ad3aabc15256e84e803f0ec195`. +- Root instruction documents are identical between those commits. The working copies additionally replace `compush` with `compushloy`, at the user's request. +- `inventory.json` records tracked exact-basename SCORE, AGENTS, CLAUDE and CODEX documents, byte counts and content hashes. Symlink targets count as paths, not independent texts. +- Root SCORE.md: 42,689 bytes / 738 lines. CLAUDE.md: 9,882 bytes / 161 lines. AGENTS.md is a tracked symlink to SCORE.md. No tracked CODEX.md or repository .codex directory was found. There are 22 exact-basename SCORE.md files, including root; one nested CLAUDE.md; no nested AGENTS.md. +- A 32,768-byte prefix of the working score ends at line 504, within the chat-query material. This is a simulated default-budget boundary, not evidence of what this session loaded. The user supplied instructions directly in this conversation. No explicit max-byte or fallback-filename entries were found by an allowlisted search of the local Codex config; launcher overrides and other profiles were not audited. + +## Platter consultation + +- Read papers/SCORE.md and papers/AESTHETIC-EYE.md. +- Opened https://papers.aesthetic.computer/platter.html in Chrome: HTTP 200; title Research Platter; inspected screenshot. The index displayed 74 papers. This is a displayed count, not a repository census. Browser evidence was temporary and is not included in the source bundle. +- Read papers/arxiv-score-analysis/score-analysis.tex and references.bib. Its six tensions and conductor/parts proposal are precedent, not current empirical counts. +- Consulted the source structure and section inventory of Repository Archaeology and Keymaps as Social Software. +- Consulted papers/lines-platter/manifest.md for the score/making context; excluded private correspondence and uninspected source materials. The image-oriented Jeffrey manifest is not evidence for this paper. +- Verified official Codex discovery documentation (redirecting to https://learn.chatgpt.com/docs/agent-configuration/agents-md) and Claude Code memory documentation (https://code.claude.com/docs/en/memory), accessed 2026-09-15. Their descriptions are not a measurement of this installation's effective instruction context. + +## File evidence for findings + +1. SCORE.md:446; CLAUDE.md:98: compushloy definition. lith/deploy.fish:21-37: current-branch default and DEPLOY_BRANCH override. +2. CLAUDE.md:28; SCORE.md:660-662; ants/mindset-and-rules.md:7,34-39,53-60: overlapping and inconsistent agent scope. +3. SCORE.md:214-220; CLAUDE.md:81-94; fedac/native/SCORE.md:5-41: native release routes and completion criteria. +4. CLAUDE.md:126; SCORE.md:179; session-server/deploy.fish:2-3,31-49: session-server descriptions and deployment code. +5. CLAUDE.md:34,38,121; SCORE.md:305-306; system/public/aesthetic.computer/disks/CLAUDE.md:3-5: HAND, SCREEN and piece-guide routes. +6. ENVIRONMENT.md:13-23,39-41; SCORE.md:310-337: environment selection and heading scope. +7. .githooks/post-commit:25-35,50-69; .githooks/pre-commit:270-284: branch-specific side effects and source-level push failure fall-through. Locally, no installed pre-commit hook or core.hooksPath was found; the post-commit hook is linked. This is one host observation, not a fleet census. +8. memory/codex-sync.mjs:108-116: checkout-path-specific instruction-envelope filter; stored memory was not examined. +9. easel/bin/sync-context.mjs:30-47,61 onward: explicit context-bundle inventory and check mode as local precedent. + +## Incident boundary + +In this conversation, v120 was byte-verified after a feature-branch deployment. A later read served v118, including a cache-busting URL, while the server checkout was main. The fixes were cherry-picked onto current main, preserving its loading/camera work, and deployed as v122. Identity, gzip and Brotli responses then matched the intended source. These observations support a branch-publication mismatch; they do not identify the actor that initiated the intervening deployment or prove which instruction caused it. + +## Method and limitations + +One read-only subagent independently audited repository routing and returned file/line evidence. The primary agent verified loader documentation, selected findings, measured the inventory and default-budget boundary, and authored the synthesis. No controlled agent-adherence trial, model-token benchmark, private memory audit, or cross-platform symlink trial was performed. Proposed byte budgets and migration gates are design targets. + +## Revision: empirical literature and authorized prox history + +The initial draft excluded private history. The user's follow-up explicitly requested prox-history analysis; the revised paper therefore adds bounded native/indexed history evidence. Its privacy and methods statements supersede the initial draft's history exclusion. See workflow-method.md, the selected aggregates, and the extraction script; no raw transcripts were copied into this directory. + +Additional consultation: papers/jeffrey-lexicon/README.md and manifest.json, especially first-hand provenance and separation of generated language. The history heuristics are not sufficient to certify input for that lexicon. + +Primary empirical sources checked online on 2026-09-15: +- Gloaguen et al., arXiv:2602.11988v1 and June 2026 v2, sections 3–5, Tables 2–3, and length/category ablations. The revision cites v2 and its significance-aware conclusions; the benchmark was renamed CTXbench. +- Lulla et al., arXiv:2601.20404v1 and v2, sections 3.1.2–3.1.8 and Table 1. The paper cites v2; the reported median results and correctness limitation persist. +- Becker et al., arXiv:2507.09089v1, and METR's February 24, 2026 follow-up at https://metr.org/blog/2026-02-24-uplift-update/ . Separate the earlier randomized finding from the later selection/measurement caveats. +- Chatlatanagulchai et al., arXiv:2511.12884v1, descriptive corpus study. +- Consulted arXiv:2608.20195v1 for extraction pitfalls and study limits, but did not use its headline behavior estimates as evidence for our intervention. + +Recent-work counterexamples were independently checked by the audit subagent: +- fetched main easel/src/tui.mjs:166–179 preloads checkout or bundled context; lines805–810 discuss autopublish state reaching the model on a new thread. The comment's latency estimate is not an independent timing experiment. +- slab/bin/prox-mcp.mjs:297–337 records bundle identity and cwd, with home-directory fallback in resume scripts. No claim of a reproduced failed handoff. +- commit3b1496c428 relocates release receipts into Git's common directory for worktrees. +- commit135d05d311 rebuilds compressed sidecars in the webhook path, complementing the CLI route. +- lith/deploy.fish defaults to checkout branch; lith/webhook.sh defaults to main. Multiple production writers require a shared contract. Concurrent receipt overwrite remains a hypothesis, not an observed race. + +These revisions remain analysis. No loader migration, hook installation, ongoing telemetry, public publication, or deployment was performed for this paper. diff --git a/papers/arxiv-instruction-flow/references.bib b/papers/arxiv-instruction-flow/references.bib new file mode 100644 index 0000000000..6c74ff91c1 --- /dev/null +++ b/papers/arxiv-instruction-flow/references.bib @@ -0,0 +1,16 @@ +@misc{score, author={{@jeffrey}}, title={Root score and instruction adapters}, year={2026}, note={Repository snapshot 275329e763ab; working compushloy amendment; see notes.md}} +@misc{reading, author={{@jeffrey}}, title={Reading the Score: A Critical Analysis of SCORE.md as Governance, Interface, and Creative Form}, year={2026}, note={Local source: papers/arxiv-score-analysis/score-analysis.tex}} +@misc{codex, author={{OpenAI}}, title={Custom instructions with AGENTS.md}, year={2026}, url={https://learn.chatgpt.com/docs/agent-configuration/agents-md}, note={Accessed 2026-09-15}} +@misc{claude, author={{Anthropic}}, title={How Claude remembers your project}, year={2026}, url={https://code.claude.com/docs/en/memory}, note={Accessed 2026-09-15}} +@misc{environment, author={{@jeffrey}}, title={Execution Environments}, year={2026}, note={Repository ENVIRONMENT.md, lines 13--41}} +@misc{release, author={{@jeffrey}}, title={Deployment and release implementations}, year={2026}, note={lith/deploy.fish; .githooks/post-commit; xbox/tools/oskiewar-release.mjs; snapshots identified in notes.md}} +@misc{platter, author={{@jeffrey}}, title={Research Platter}, year={2026}, url={https://papers.aesthetic.computer/platter.html}, note={Rendered index and local papers score consulted 2026-09-15}} +@misc{bundle, author={{@jeffrey}}, title={Easel context synchronization}, year={2026}, note={easel/bin/sync-context.mjs, explicit inventory and check mode}} +@misc{gloaguen, author={Thibaud Gloaguen and Niels Mündler and Mark Müller and Veselin Raychev and Martin Vechev}, title={Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents?}, year={2026}, url={https://arxiv.org/abs/2602.11988v2}} +@misc{lulla, author={Jai Lal Lulla and Seyedmoein Mohsenimofidi and Matthias Galster and Jie M. Zhang and Sebastian Baltes and Christoph Treude}, title={On the Impact of AGENTS.md Files on the Efficiency of AI Coding Agents}, year={2026}, url={https://arxiv.org/abs/2601.20404v2}} +@misc{metr, author={Joel Becker and Nate Rush and Elizabeth Barnes and David Rein}, title={Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity}, year={2025}, url={https://arxiv.org/abs/2507.09089v1}} +@misc{metrupdate, author={Joel Becker and Nate Rush and Tom Cunningham and David Rein and Khalid Mahamud}, title={We are Changing our Developer Productivity Experiment Design}, year={2026}, url={https://metr.org/blog/2026-02-24-uplift-update/}} +@misc{readmes, author={Worawalan Chatlatanagulchai and others}, title={Agent READMEs: An Empirical Study of Context Files for Agentic Coding}, year={2025}, url={https://arxiv.org/abs/2511.12884v1}} +@misc{lexicon, author={{@jeffrey}}, title={Jeffrey Lexicon}, year={2026}, note={papers/jeffrey-lexicon/README.md and manifest.json}} +@misc{prox, author={{@jeffrey}}, title={Prox bundle and resume implementation}, year={2026}, note={slab/bin/prox-mcp.mjs; audited snapshot in notes.md}} +@misc{releasefixes, author={{@jeffrey}}, title={Release worktree and webhook corrections}, year={2026}, note={Commits 3b1496c428 and 135d05d311; Easel context and state handling}} diff --git a/papers/arxiv-instruction-flow/remote-index-sample.json b/papers/arxiv-instruction-flow/remote-index-sample.json new file mode 100644 index 0000000000..ac9b74bc3a --- /dev/null +++ b/papers/arxiv-instruction-flow/remote-index-sample.json @@ -0,0 +1,108 @@ +{ + "window": [ + "2026-09-01", + "2026-09-15" + ], + "source": "Neo memory index; short role=user events only; not native tool logs", + "terms": { + "compush": { + "events": 36, + "sessions": 25, + "providers": [ + "claude", + "codex" + ] + }, + "oskieploy": { + "events": 0, + "sessions": 0, + "providers": [] + }, + "compushloy": { + "events": 0, + "sessions": 0, + "providers": [] + }, + "prox": { + "events": 29, + "sessions": 21, + "providers": [ + "claude", + "codex" + ] + }, + "easel": { + "events": 2, + "sessions": 2, + "providers": [ + "codex", + "claude" + ] + }, + "chrome": { + "events": 18, + "sessions": 12, + "providers": [ + "codex", + "claude" + ] + }, + "papers": { + "events": 16, + "sessions": 8, + "providers": [ + "claude", + "codex" + ] + }, + "frame": { + "events": 5, + "sessions": 5, + "providers": [ + "codex", + "claude" + ] + }, + "wordcrust": { + "events": 0, + "sessions": 0, + "providers": [] + }, + "slidecop": { + "events": 0, + "sessions": 0, + "providers": [] + }, + "unipointer": { + "events": 0, + "sessions": 0, + "providers": [] + }, + "loopboy": { + "events": 2, + "sessions": 2, + "providers": [ + "claude" + ] + }, + "sticky": { + "events": 0, + "sessions": 0, + "providers": [] + }, + "cleaner": { + "events": 1, + "sessions": 1, + "providers": [ + "claude" + ] + }, + "cdp": { + "events": 1, + "sessions": 1, + "providers": [ + "claude" + ] + } + } +} diff --git a/papers/arxiv-instruction-flow/source-bundle.json b/papers/arxiv-instruction-flow/source-bundle.json new file mode 100644 index 0000000000..3798ecb0f7 --- /dev/null +++ b/papers/arxiv-instruction-flow/source-bundle.json @@ -0,0 +1 @@ +{"include":["notes.md","workflow-method.md","workflow-sample.json","remote-index-sample.json"]} diff --git a/papers/arxiv-instruction-flow/workflow-method.md b/papers/arxiv-instruction-flow/workflow-method.md new file mode 100644 index 0000000000..036cfb7692 --- /dev/null +++ b/papers/arxiv-instruction-flow/workflow-method.md @@ -0,0 +1,29 @@ +# Workflow evidence: September 2026 revision + +The user requested analysis of prox history, shared terms, and regularly used tools. This is a descriptive sample, not a productivity experiment. The quantitative window is 2026-09-01 inclusive through 2026-09-15 exclusive, UTC; it excludes the current research session. No original prompt text, session IDs, command arguments, credentials, or correspondence are included in the paper or its bundle. + +## Native local sample + +`audit-transcripts.py` streams existing native records without modifying their stores. It was run locally on Blueberry with Python from the installed Command Line Tools. `workflow-sample.json` contains selected derived aggregates, extraction counts, patterns, and the parser SHA-256. Private inputs are not distributed. Reproduction requires separately authorized access to the same dated records; this is not an independently downloadable public dataset. + +Scope: 77 top-level Claude transcripts and 20 Codex transcripts; exact monorepo root cwd only. Explicit cwd changes take precedence; missing cwd inherits preceding explicit session metadata. Nested cwd, worktrees, other projects, and subagent directories are excluded. This deliberately narrow boundary undercounts overall monorepo work. Files grew during collection, but the closed date window stabilized the relevant records. + +Native tool calls are extracted from Claude assistant tool_use blocks and Codex response_item function/custom call records. Deduplication uses provider plus tool-use/call ID. Counts establish requests, not execution or success. Forked records with regenerated IDs may remain. + +Codex exec wrapper bodies are scanned for syntactic tools.NAME(...) sites. This is a separate estimate: loops, dynamic dispatch, strings, and comments are not interpreted. It cannot be added to native calls as if it measured actual completed operations. The corpus contains 8,641 native call requests: 6,961 Claude and 1,680 Codex. Selected native families: Bash 4,541; exec wrapper 1,617; Chrome browser 867; Puppet 374; Frame 21; Prox 16; Paper 4. Wrapper candidates include Frame 156, Paper 88, Puppet 19, and Prox 13. Session counts are in the aggregate. + +Short-prompt extraction accepts text at most 400 characters, excludes marked instructions/notifications, tool-result messages, and obvious forwarded Markdown, and deduplicates UUIDs or timestamp/content identities. Claude also stores human steering as queued_command attachments. We include the structured prompt only for commandMode=prompt and origin.kind=human; deduplicate source_uuid; ignore queue enqueue/remove copies and rendered attachment text. An initial parser omitted these and was corrected after checking a known workflow-definition event. The initial counts must not be reused. + +The final sample contains 1,216 accepted short prompts (944 Claude, 272 Codex), with 439 accepted queued prompts added by that correction. There are 83 sessions with accepted prompts or calls. Lexical matches: compush and selected inflections 28 prompts/19 sessions; prox/proxes 19/13; Chrome 16/13; Easel 10/6; oskieploy 1/1. Quoted or copied short text can survive the heuristic; these are likely-user prompts, not a certified first-hand language corpus. Do not feed them into the public Jeffrey Lexicon as verified authorship. + +A zero under a narrow pattern is not evidence of nonuse. The explicit frame-screenshot regex misses formulations such as a quoted “frame” followed by “shot”; ordinary frame also means simulation frame. The paper uses qualitative task context for that distinction, not the zero count. + +## Remote index sample + +The fleet memory connector recovered the local store but failed on several remote entries. Neo failed on malformed SSH option construction. A direct, read-only SSH invocation of its existing memory search recovered that host. No authentication bypass or configuration mutation was used. Other unreachable histories remain absent. + +The remote sample uses the encrypted memory index's search interface, not the native parser. Query: role=user, since 2026-09-01; a regex requires 1–400 characters, excludes named instruction/notification markers, and matches a selected bounded term. Results are additionally filtered before 2026-09-15 and to project labels core or aesthetic-computer. Each pattern is searched independently; output retains counts and distinct-session counts only. `remote-index-sample.json` records these derived values. Compush: 36 events/25 sessions; prox: 29/21; Chrome: 18/12. They must not be pooled with the native sample because provider imports, duplication, authorship filtering, and cwd coverage differ. + +## Interpretation + +Shared-term occurrences nominate workflow definitions; frequency does not establish authority or desirability. Explicit user definitions outrank inferred synonym clusters. Tool requests demonstrate an active surface, but not successful use, necessity, or efficiency. The data support examining visual inspection, asynchronous steering, and handoffs as part of the workflow; only a controlled intervention could establish whether the proposed changes improve it. diff --git a/papers/arxiv-instruction-flow/workflow-sample.json b/papers/arxiv-instruction-flow/workflow-sample.json new file mode 100644 index 0000000000..6ce5edb637 --- /dev/null +++ b/papers/arxiv-instruction-flow/workflow-sample.json @@ -0,0 +1,167 @@ +{ + "window_utc": [ + "2026-09-01", + "2026-09-15" + ], + "scope": "exact repository cwd; no nested cwd; no private text retained", + "counts": { + "claude_files_scanned": 77, + "claude_bytes_scanned": 380752104, + "jsonl_lines": 85149, + "in_window_records": 55941, + "claude_in_scope_records": 32455, + "claude_accepted_prompts": 944, + "claude_calls": 6961, + "claude_tool_result_user_records_excluded": 6964, + "claude_eligible_human_queued_prompts": 441, + "claude_nonhuman_queued_attachments_excluded": 81, + "prompts_empty_or_long_excluded": 56, + "nonexact_or_missing_cwd_records_excluded": 9559, + "prompts_marked_or_forwarded_excluded": 22, + "codex_files_scanned": 20, + "codex_bytes_scanned": 353087581, + "codex_in_scope_records": 13927, + "codex_accepted_prompts": 272, + "codex_calls": 1680, + "duplicate_prompts_excluded": 44, + "exec_non_tool_method_candidates_excluded": 3 + }, + "active_sessions": { + "claude": 63, + "codex": 20 + }, + "native_tool_families": [ + { + "name": "Bash", + "count": 4541, + "sessions": 57 + }, + { + "name": "exec", + "count": 1617, + "sessions": 19 + }, + { + "name": "mcp:claude-in-chrome", + "count": 867, + "sessions": 21 + }, + { + "name": "mcp:puppet", + "count": 374, + "sessions": 7 + }, + { + "name": "mcp:frame", + "count": 21, + "sessions": 7 + }, + { + "name": "mcp:prox", + "count": 16, + "sessions": 5 + }, + { + "name": "mcp:paper", + "count": 4, + "sessions": 1 + } + ], + "exec_candidate_families": [ + { + "name": "exec_command", + "count": 1221, + "sessions": 16 + }, + { + "name": "apply_patch", + "count": 192, + "sessions": 10 + }, + { + "name": "mcp:frame", + "count": 156, + "sessions": 4 + }, + { + "name": "mcp:paper", + "count": 88, + "sessions": 3 + }, + { + "name": "mcp:puppet", + "count": 19, + "sessions": 6 + }, + { + "name": "mcp:prox", + "count": 13, + "sessions": 6 + } + ], + "short_user_prompt_mentions": [ + { + "name": "compush", + "count": 28, + "sessions": 19 + }, + { + "name": "prox", + "count": 19, + "sessions": 13 + }, + { + "name": "chrome", + "count": 16, + "sessions": 13 + }, + { + "name": "easel", + "count": 10, + "sessions": 6 + }, + { + "name": "papers_platter", + "count": 2, + "sessions": 2 + }, + { + "name": "cdp", + "count": 2, + "sessions": 2 + }, + { + "name": "oskieploy", + "count": 1, + "sessions": 1 + } + ], + "term_patterns": { + "compush": "\\bcompush(?:ed|ing|es)?\\b", + "compushloy": "\\bcompushloy(?:ed|ing|s)?\\b", + "oskieploy": "\\boskieploy(?:ed|ing|s)?\\b", + "prox": "\\bprox(?:es)?\\b", + "easel": "\\beasel\\b", + "frame_screenshot": "\\bframe\\s+(?:screenshot|capture)|\\bscreenshot.{0,20}\\bframe\\b", + "papers_platter": "(?:/papers\\b|\\bpapers?\\s+stack\\b|\\bplatter\\b)", + "sticky": "\\bstick(?:y|ies)\\b", + "cleaner": "\\bcleaner\\b", + "wordcrust": "\\bwordcrust\\b", + "slidecop": "\\bslidecop\\b", + "unipointer": "\\bunipointer\\b", + "loopboy": "\\bloopboy\\b", + "chrome": "\\bchrome\\b", + "cdp": "\\bcdp\\b" + }, + "limitations": [ + "Native call records prove invocation requests, not successful execution.", + "Exec regex finds syntactic tools.NAME( candidates; loops/dynamic names/comments/strings are not interpreted.", + "Shell counts use single-line direct Bash/exec_command records only; wrappers and all multiline/compound commands omitted.", + "Exact cwd intentionally excludes all child directories and worktrees.", + "Prompt filtering heuristic; timestamps+content for idless Codex copies; no event_msg prompts counted.", + "Claude top-level project logs only; subagent transcript subdirectories excluded.", + "Revision2 adds structured Claude queued_command attachments only when commandMode=prompt and origin.kind=human, deduped by source_uuid; prior user-message-only count was underinclusive.", + "Cwd inherited from preceding explicit cwd within each native session when an event omits cwd; explicit cwd always wins." + ], + "parser_sha256": "0b47c85aacb7eafd314235e908131e79b1bd628e1e5c3b29eb955f7b78efd9b9" +} diff --git a/system/public/aesthetic.computer/disks/fogozo.mjs b/system/public/aesthetic.computer/disks/fogozo.mjs new file mode 100644 index 0000000000..a39ec63f5a --- /dev/null +++ b/system/public/aesthetic.computer/disks/fogozo.mjs @@ -0,0 +1,169 @@ +// fogozo, 26.09.15 +// A drifting field of dots. Touch to push them around. + +let dots = []; +let push; // where the finger is, while it's down +let t = 0; // the clock everything breathes on + +function boot({ screen }) { + dots = seed(screen, 120); +} + +function seed({ width, height }, n) { + return Array.from({ length: n }, () => ({ + x: Math.random() * width, + y: Math.random() * height, + vx: (Math.random() - 0.5) * 0.4, + vy: (Math.random() - 0.5) * 0.4, + r: 1 + Math.random() * 3, + hue: Math.random() * 360, + phase: Math.random() * Math.PI * 2, // so they don't all pulse together + })); +} + +function sim({ screen: { width, height } }) { + t += 1 / 60; + for (const d of dots) { + // a slow swirl field, so nothing ever sits still + const a = Math.sin(d.x * 0.012 + t * 0.7) + Math.cos(d.y * 0.012 - t * 0.5); + d.vx += Math.cos(a * Math.PI) * 0.03; + d.vy += Math.sin(a * Math.PI) * 0.03; + d.hue = (d.hue + 0.3) % 360; + if (push) { + const dx = d.x - push.x, + dy = d.y - push.y, + d2 = dx * dx + dy * dy; + if (d2 < 8100) { + const dist = Math.sqrt(d2) || 1, + f = (1 - dist / 90) * 0.9; + d.vx += (dx / dist) * f; + d.vy += (dy / dist) * f; + } + } + d.x += d.vx; + d.y += d.vy; + d.vx *= 0.985; + d.vy *= 0.985; + if (d.x < 0) d.x += width; + if (d.x > width) d.x -= width; + if (d.y < 0) d.y += height; + if (d.y > height) d.y -= height; + } +} + +const LINK = 58; // how close two dots have to be to hold a thread +const LINK2 = LINK * LINK; + +// a LINK-sized bucket grid, so the link pass only asks neighbors, not everyone. +// reused across frames — rebuilding it would churn 100s of arrays a second. +let grid = [], + cols = 0, + rows = 0; + +// the 4 neighbors below/right of a cell. the other 4 are covered when *they* look back. +const NEXT = [ + [1, 0], + [-1, 1], + [0, 1], + [1, 1], +]; + +function bucket(width, height) { + const c = Math.max(1, Math.ceil(width / LINK)), + r = Math.max(1, Math.ceil(height / LINK)); + if (c !== cols || r !== rows) { + cols = c; + rows = r; + grid = Array.from({ length: cols * rows }, () => []); + } + for (const cell of grid) cell.length = 0; + for (const d of dots) { + const cx = Math.min(cols - 1, Math.max(0, (d.x / LINK) | 0)), + cy = Math.min(rows - 1, Math.max(0, (d.y / LINK) | 0)); + grid[cy * cols + cx].push(d); + } +} + +function paint({ wipe, ink, circle, line, screen }) { + wipe(10, 12, 20); + + // one hsv per dot per frame instead of one per link + for (const d of dots) { + const c = hsv(d.hue, 0.6, 1); + d.lr = c[0]; + d.lg = c[1]; + d.lb = c[2]; + } + + bucket(screen.width, screen.height); + + for (let cy = 0; cy < rows; cy += 1) { + for (let cx = 0; cx < cols; cx += 1) { + const here = grid[cy * cols + cx]; + if (here.length === 0) continue; + for (let i = 0; i < here.length; i += 1) { + for (let j = i + 1; j < here.length; j += 1) + thread(here[i], here[j], ink, line); + for (const [ox, oy] of NEXT) { + const nx = cx + ox, + ny = cy + oy; + if (nx < 0 || nx >= cols || ny >= rows) continue; + const there = grid[ny * cols + nx]; + for (let j = 0; j < there.length; j += 1) + thread(here[i], there[j], ink, line); + } + } + } + } + + for (const d of dots) { + const speed = Math.min(1, Math.sqrt(d.vx * d.vx + d.vy * d.vy) * 1.6); + const beat = 0.7 + 0.5 * Math.sin(t * 2.2 + d.phase); + const c = hsv(d.hue, 0.5 + speed * 0.5, 0.45 + speed * 0.55); + ink(c[0], c[1], c[2]); + circle(d.x, d.y, Math.max(1, d.r * beat + speed * 2), true); + } +} + +function thread(a, b, ink, line) { + const dx = a.x - b.x, + dy = a.y - b.y, + d2 = dx * dx + dy * dy; + if (d2 > LINK2) return; + const near = 1 - Math.sqrt(d2) / LINK, // fades out as they drift apart + k = 0.5 + near * 0.5; + ink((a.lr * k) | 0, (a.lg * k) | 0, (a.lb * k) | 0, (20 + near * 140) | 0); + line(a.x, a.y, b.x, b.y); +} + +const rgb = [0, 0, 0]; // hsv's scratch pad — read it before the next call + +// tiny hsv→rgb so the dots keep their own tint but brighten when they move. +// writes into `rgb` rather than returning a fresh array; it runs in a hot loop. +function hsv(h, s, v) { + const c = v * s, + x = c * (1 - Math.abs(((h / 60) % 2) - 1)), + m = v - c, + i = (h / 60) | 0; + let r = 0, + g = 0, + b = 0; + if (i === 0) (r = c), (g = x); + else if (i === 1) (r = x), (g = c); + else if (i === 2) (g = c), (b = x); + else if (i === 3) (g = x), (b = c); + else if (i === 4) (r = x), (b = c); + else (r = c), (b = x); + rgb[0] = ((r + m) * 255) | 0; + rgb[1] = ((g + m) * 255) | 0; + rgb[2] = ((b + m) * 255) | 0; + return rgb; +} + +function act({ event: e, screen }) { + if (e.is("touch") || e.is("draw")) push = { x: e.x, y: e.y }; + if (e.is("lift")) push = undefined; + if (e.is("reframed")) dots = seed(screen, dots.length); +} + +export { boot, sim, paint, act }; diff --git a/system/public/aesthetic.computer/disks/nipa.mjs b/system/public/aesthetic.computer/disks/nipa.mjs new file mode 100644 index 0000000000..6964ac5b55 --- /dev/null +++ b/system/public/aesthetic.computer/disks/nipa.mjs @@ -0,0 +1,68 @@ +// nipa, 26.09.15 +// A smiley that watches the pen and blinks. + +let t = 0; +let blink = 0; // frames of squint remaining + +function sim() { + t += 1; + if (blink > 0) blink -= 1; + else if (Math.random() < 0.005) blink = 9; +} + +function paint({ wipe, ink, circle, line, box, pen, screen: { width: w, height: h } }) { + wipe(148, 208, 240); + + const r = Math.min(w, h) * 0.34; + const cx = w / 2; + const cy = h / 2 + r * 0.06; + + // where the eyes look — toward the pen, capped inside the socket. + const tx = pen?.x ?? cx + Math.cos(t / 90) * w; + const ty = pen?.y ?? cy + Math.sin(t / 70) * h; + const dx = tx - cx; + const dy = ty - cy; + const d = Math.hypot(dx, dy) || 1; + const reach = Math.min(d, r * 0.5) / d; + const gx = dx * reach * 0.22; + const gy = dy * reach * 0.22; + + ink(255, 226, 96); + circle(cx, cy, r, true); + ink(190, 130, 30); + circle(cx, cy, r, false, 2); + + const ex = r * 0.38; + const ey = r * 0.3; + const er = r * 0.17; + + for (const s of [-1, 1]) { + const x = cx + s * ex + gx; + const y = cy - ey + gy; + if (blink > 0) { + ink(40, 26, 10); + box(x - er, y - er * 0.2, er * 2, Math.max(2, er * 0.35)); + } else { + ink(255, 250, 240); + circle(cx + s * ex, cy - ey, er, true); + ink(30, 20, 40); + circle(x, y, er * 0.52, true); + } + } + + // the smile, swept across the lower arc. + const mr = r * 0.62; + const thick = Math.max(2, r * 0.09); + ink(120, 40, 50); + let px, py; + for (let i = 0; i <= 24; i += 1) { + const a = Math.PI * (0.18 + (i / 24) * 0.64); + const x = cx + Math.cos(a) * mr * -1; + const y = cy + Math.sin(a) * mr * 0.78 + r * 0.06; + if (i > 0) for (let o = 0; o < thick; o += 1) line(px, py + o, x, y + o); + px = x; + py = y; + } +} + +export { sim, paint };