From 380f1cc6ecc0d9eda173bd883ec6cd411d76115b Mon Sep 17 00:00:00 2001 From: rajames Date: Thu, 8 Oct 2026 01:59:28 -0400 Subject: [PATCH] fix(v4.0.0): 29 values left on the stack hung the node; and what the review of step 6d found The review of step 6d found it not sound. Mended here, with a check that failed first: a text that left 29 values on the stack hung the node for ever, on the products too -- the passes over the messages waiting that follow every text need four cells, and a stack fault in the middle of one left the messages in pieces. Such a text ends 'Stack overflow', as before step 6d. hosted-check types it. The other findings are open and are written under step 6d in MESH.md section 10; the README no longer says the aim is met. make -C v4 test and sanitize at both widths, hosted-check. The bare metal boots have not been made again. Co-Authored-By: Claude Opus 5.5 --- capsules/v4/nucleus-64.f18 | Bin 58416 -> 58488 bytes docs/v4.0.0/MESH.md | 31 +++++++++++++++++++++++++++++++ v4/Makefile | 2 ++ v4/README.md | 7 ++++--- v4/capsule/quit.v4 | 7 +++++++ v4/tests/test_host_quit.c | 15 +++++++++++++++ 6 files changed, 59 insertions(+), 3 deletions(-) diff --git a/capsules/v4/nucleus-64.f18 b/capsules/v4/nucleus-64.f18 index b615b42e6043d7b06a9f7c16ddb636bbf406eb4a..6a9e18e8dd649c641ba069f2e82f66a121f2623a 100644 GIT binary patch delta 11436 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 delta 11501 zcmai4d3+Q__MZYoD~XWi>I|?p;|lGdGGrCUfXfhMjp0Zf1wvRQj3O9iVZtHAph-Xj z;mq&=4TlgEkxPjPI4F?ehy-L{5P=8+Q9PokL~u2_$gisV+i^4d@$;KM`t|o+^B(X^unia-KK#ay`79BX63<&QeaA$9V?2 zr+A;B^w41Q{Nr%cQ72X-_lk-8hm7M_GIud9G8jldj81SvY{Nv2d@emSxGRkfSIUY{u6JtL7RYo+Kavx4-(`5|K{FpvD zk~a)d4?{`O6+euW!Md^>6*~|9H&g0h&GAM|oY7T|GP5~iW6bJb46T_`%Wi4;ptTm# zwG3LOAu*F2Lp*FI`G%;XtL6?_>#TwGVKmiMG*u+3=|tH> zHDQ@ORI{J3;z5oFW6iS8P}xv5@zW@&9G9|YHo7_+ougB|L^fMLbj6ueJ5=Le!s=^M zGF<#SpdTnzpesQCros%pNqr2h&nU9T#hRmY0&ixxZDM-0O`z0aI%`2W;@OExhb?g2 z5^IWDgWeun5t5wlvF60lol-N$@Vg-GO2JGI?+w(8*l@K;dMwRu)0>6G|L7TZLDN8S=sO!A{H$D5GM23=+| z$HO+1R6>DAJ&qlaZUGG;fl4G$Np+8EV(L;xxLJf!M|ju?Djt!-PE%xrTlp;Z;1L;& z7@XHj`kg3WrS4hrtd^3qGI&OuS&^rxEK7~K8f#96*JA0L0e#w=!{Is%hwGs_I8IEp z7YB9ZadGD4Hkgt}YRM|Zo#M=4|2z7U3)q?lJW*J>laU>xvXLt9Xca=Cks2FJH6t}= zXR91&`qPwM(!%oSY_M_qT#hTT1yiLoTIC^=AB5Hw@;#>6t+Jyhiz`(6n9Dv2x}&42 zEt_f{%Xf^8ld0NlyU{uPn8Uq@=X)xATuq(|AH(9zJ|8{BOoMzPva}|b+2GHn>c?G) zGvgXhE)(IcmNjoQ&s+S7lr&0n%t3@XpbO*7@wWulODK0#244zk3005E=j(x1lJ5x@ ze;a5sl|JF-L7?qaEo32}-K30m^8-MY!L1?37@djv zVvNqe2k&djHF#xX#t4b;Nhkg7$!^A5hIl4sKR_(oWxP!h&vn@v>qk}DZZR>kr&MR^ zjppEqo|7iu*mxZ*pv0#%$D%0i$|$^^a-P!i_eF6(j=~qB@DEY=*C@)ZR6z<#@ zH@S8fDNk#T2O6`l4U58$llN&&R7v5}vZCrH*y+coWyLwhT6p2u-U3Gq>=>Is$^ViS zne(ri#&Z~X$4Oi`PFAdAtV;3Y`-nI1cxf+j#rTo(%`Y29`d{rIA>LSy)R%Z+jw~;f zBlYbQ^2JkHZJr>#)J;eMesE&$B^II5%kR9Jpmn0cL}@@I5m zS^bR8&qEd=J|&%B1p2~==a(oyUs!&qY)TeqEzPVh5ud8_=0Mj`l0b1lv6L-PDX|s){h$!Jcs>{=pX29oU(An_42)+evywQ2?>;J?rtu~4 zGmFXvS_ZU~ss&mFw366!8eaqS8aV}8544WF&$;+!pf{;lpzT0gDI_#^0=-YQ0__0` zk@CF8KLDzvq~~@1A_93pM7X`a;d#A3CFEk2ZW;u??Wa=^A^GywhEZ7dgd&4x_+y zHy;i(gd)>b`{VEvo#SX?GhFOxN}S=gPy7>|XQYlY&5G7$cIW3PG(%%IQOyj^QGl{W zfX<3HyX%nnimzoxH<9B7jonDeFQ|^W(0LJb(f{b?zMu=;GNJo2bV@*1{f}<7q03&> z?5{y*Ip_xHj-{j*wZt3IMoqf9WIzqSx1hZabX$W}@ryEwa^ZOgWLrQ((7B0fU(_6y z=cdVN{iNF);Cnx`cayV7;|GDN$ScqhpfKeYY07b+k3dh;x+1soDbOj<3shI+PWlq4 z<`1dy#{S-rlJW8_u3I;2~y!y&#gu)mni0_oJ+pB8V^8gE)~yBNn8rF7_;CeQ}TndjzPf!?O_c`kbh{`M+n9f}@i^q7@YKTl%^$Ua|ZVM?B_I@6Sj zK1jsp|F;yj zK;;*Z%MNlZ&{!2E3*JTWz9!!S-BE?|nhxpq(0@n&6SOW#OUH3&H5tk6sIfH470+j= zbfKm^(yAaw1~Rmj+0curYGDQ&OAgW!C$%yMWsg?o5)$3iqT?FnT68hxkca2BG6(i3 z3R1eWs8x#<(*Lq3Ut(c1c30pcghy{y}=!OjV0D`%ZA*YtXtMQnp0p`@r2pjwL!j z2y}qF0v!bkQ{fU9KM8c4fX^ z=`p_n)wiNgUh1YaX)VJRmmpws%6YjHCB59z83RdkP^GoCOJa?VDQ$#>OKA(O7M2y2 zzpUEZ1KB~Z#+wa%ifV+k6Sy~liq*qt{!^rss!3hIy#>@-tGZcnyfVJg8r867k*`#> zcZXG1P-}(iN`X>Uxf|TOK>tp`QkT6qP*2b+@kPeGDdzd5y8V7|`$kCzQSwrkBMsdC zp#Jcd?`6GOIbETE@R0%O!=NLOi})C^RCSKAGQ&P{bZc`sUh3GZ(ap$Xq%2FfkA;s% zKqtcbdFe}eF3Q(5DqE(pDHK|k!l%O`hm_?mWfo8o=mPRC*X<=h^FaOMzCAAUIYoix zs(lH#i!3R2t~C@A(&gYT1r?r+c3nhu%T?!Ua94q@Z#{p$^ehIj(XXr>?gmO+q4SN< zdYybLT*?-p&7ec5Y=x!-fwnhrBP+DT!>#9jZ1^3w)!1$CM~zgrZoJ2-0{;*>Uhz1O zS@nkA^-*hc%CdUb3CK?gZH?Y|uwLXFB+ zxtU7ULbnri+Jai+;=<|ojQ)B%Im&c)C#9CT#LgqPOe_k}>}*jg7u;SzNe$fEGMBS2 zP#@3%RwUuZbH)%#Uahf*$hTT&1E_elt_+361E3=)wA#f+QQc~{{i!zL*JOTAw=rAJ zkG6S^l3&&Mls4ulnMB#IW{Hzb)vLO=SgCte758cUHMcSg9{&kiLf+S0YzY;mS!E zEa^c~Uf0+jN_^er_z)g;{)wj((v#!dpLjYA{y7Q?k0+@5b#e6qPvYujt&4vJ^aUjg z^gYl;$`$A*pvzRg))R9T=+`#%>)N61d0QE(=sKX{jza8=Y_{v$Qv1JmVHySA7{j_! z{TnlRcc`?a;&mB`o!XjX+S(7^-*&E1H&?J1>D1P|hO%%9DeE)Dx0LMlI)4bBdQjoxvZ+k$nn;K@|Cemu`Yt1(AkZ+TwywP^wZ!(Ht zTeDB)Q$Sd}L+duVcm-nGOEsHP_(7n|QO(<) z_M@PwgIditqMgxf;wEd0hfju3eD8ioW8%8_9hFZ6Zz9!h(Rd+HuAw1zOhRK4c$3Kc zP6l5DR7BdSlmbHMB+v=aRTSE$CZ7R14JxKxjwFdI@pkn`K zEKTRgzFkwk0{08hMU*PI-vM0&{fct8Yk#{8^do59A0>8`4Q2i6A^)Wv9o*hUX{MSz z+nRT;C-!azk5}g#vu`W%y*q`kZD$6xmTKNrd1tl7@6wr0EU59W(7atDdLTHJ-AtjN zrrfOF|Gd=dtC~I6M|D9pHBBujm)um8`hXfXRs^4FR?oAbXU>{yk3FypOy)w4@>MG8kSmA z8kZK9(a4`whTqaR>S5}8_poVH{+?=2QqBJ^Tv*)u8>v4F_aZk_&3n3ix+-}#+f_7* zbu!*Uj`wx%eE77^h9zp6v2C}oKb&LK4xx@WB5(hQfU(1{+02iXFIjRbeP2&}1zuO7 z)>fk)tV{$p4jfYDbI#PDJ?cG$fC-}pQjZ^GgWb-!pcDnd(l=B{y?$pFg z7~HAx`R&Y>oliA8wZsbKTLfz5+b+TECH}9>PoM<9hbVEETikkO?^@}&+OD#{tShVR zMbKG_-dRM>-5H5LsUI3zzp3Wh{IhD_q5Our`BgRN*)R@XO{sjhn>R@?bFQJf-8zdS zdxgfWp;$!86&h)Twp{&II z@Nc!;K;%0(!HhC3!HjZng4w?xrp!HA{1Ip+QD~3HITB^x1Ue?c{Nh*#8>{q7SzF>`(_WQ5OWAu<#G$ubNb=!z237CXSRU2yeXGgUcC>z9HxX?0K5>bXP*EmL z-y~(ftJx+II=x@nkw)&nm4{(lNrC;kP!H~RvAt9)-j9${soO=n8qwXe{$6A6ybNu0 zguIoSxJSsTRF#tnW(zDw3w%nYmEx*BVeVd8=o|`F>g;Q(t#q?*$?<{4zNh35Qk+&D z`@g?;kJKxJ=lZCcy`9QGkT+FT!m=5Ks#NhGB6dI%|DA9gP(@ElI*=~2oqgbb5q{)= zZtr5B`=fN|Pm8=SsWs5WWqVZ$?`}6c#y#Y#a&b3MJe5}I%p=_^ee7ljw=VYXquMHu z^B;EU%Vv85jrCIk22ND?;==r3iVSG!!QL#Mst;=RESUBOwM?HR<&ayd_CGXEs0I&d zJP#_PsOFF=HktK@UP`tukgPk4|Bw2^k)1NqZt@|1Ln-p%7>9LzWev9VsP1vN5m`)` zhdulqlwUw)hjqRK=v|5&R(X}(9Ma-{9EVes!$8(DQ$eX=orhtui*mynJ4mHr@dXCF zk0@mDYQh@58&05vBk`<)oJU*>k0g-a0EI_1xd&m@`rGn9NZMRdC2qbc@3tG~rmdo-P$p`?h%es_CoiZtu4lj+8GF9jkh?+NL> zR31s;{o0%La4WH6ZaxsGJtZI0_`^VFDEpY(F&NQt(0{_ur1oYHn?#{wQ`jI%`e=${ z3Uo59jPM7*e6-UHihPviD1tPvK`Y5vK#tD8yibNKjvmJ~mPt9sRVJ=okL!FfH0Mz8 zxSOv4T1NE(tpR$Kl0J6xO+XtcSD>vxTPP^dPN4Uw{$sa&KhR##F!DN1sVBtuw+57R z!tFcVzVSBL@BhK*onN#s2+D{rwQu~P|F%ZW;=v=U=RcCQwa2O-HLep(lj#M8R+6nK_w7-gS!DHFi;gASv0g8MAc)CO*?;7$iB zXy7`}xE!;AW?9@01$|_G&E!M;7E$h*DSQQ_B~*XLt*ilh6?7pbf10k818r#FmVKI` z>;l@}z-2WmbvkR9xYlbt~17eq?D;wXpph=&Z$!vi**d z&t)Y22x;w~X#J-Hwin@$(VMPyFqhlr6gj7f1)}bpD*o8Y&u1jYb~Nkcmp}2;wqs*Y z2^2V=?&tt31#}^zv}U`7#A?#*cf+={gZY2BMBqCqyGCbsP@u-+aKnQG)cRwub!@$Z z>S|PH|Ar_|ejww$qa#+AUA-F}BKuL|XD(#`e0i+sDCaY`G8o9)zzu$OjSZ*Z=L^I$ M^@4tb_5aHM1A>}oB>(^b diff --git a/docs/v4.0.0/MESH.md b/docs/v4.0.0/MESH.md index fddaae50..a63665c3 100644 --- a/docs/v4.0.0/MESH.md +++ b/docs/v4.0.0/MESH.md @@ -1256,6 +1256,37 @@ Each is tested, committed and pushed before the next. `hosted-check`, lint; three bare-metal boots, `logs/20261008-011558` (amd64), `-011833` (aarch64), `-012159` (riscv64). On all six: POST 538 of 538, `word_count=317`, `dict_hash=0x6a39c0bb9d183418`. + - **The review (2026-10-08) found the step not sound as built.** One + finding is mended, the rest are open and the claims of 7b and 7c that + "a stuck node holds up no other" are not yet true in the cases below. + - *Mended.* A line that left 29 values on the stack hung the node for + ever, on the products too: the passes over the messages waiting + that now follow every text need four cells, and a stack fault in + the middle of one left the messages in pieces. Such a text now + ends "Stack overflow", as it did before step 6d + (`test_host_quit.c`; `hosted-check`). The boots above were made + before this and do not show it. + - *Open: a node removed while a message is being passed on to it* + leaves the node passing it on going round for ever: the error + comes in the middle of writing the message out of the messages + waiting, and leaves them in pieces. + - *Open: offers left standing.* When a node lets a message go and + then begins text without having slept, what it had offered is + still offered, and the text's own message can go to the wrong + port. The review saw text meant for one node done by another. + - *Open: what a finished text printed* is still begun as a message + from text is, and if the way to the console is through a stuck + node the node is held and cannot be typed to. + - *Open: with more than eight messages of its own waiting* (answers, + or the GONEs of `KILL`) a node begins no text at all; on Hera that + cannot be undone from the console. + - *Open, smaller:* an error while a refusal is being written leaves + a value on the stack; with no room at all, how text ended is + begun as a message and can be held by a stuck sender; a line that + was itself refused for want of room can still end a waiting text + "Interrupted"; a message a node makes itself may be passed on by + 15 nodes, not 16; the flood's figures in 7a are stale (278 arrive + now) and `(LOST)` counts some messages more than once. 7. **A second unit; scaling while running; sleep, wake and kill by command.** diff --git a/v4/Makefile b/v4/Makefile index 55260251..3621a245 100644 --- a/v4/Makefile +++ b/v4/Makefile @@ -202,6 +202,8 @@ hosted-check: $(foreach i,$(HOSTED_ISAS),$(BINDIR)/boot-$(i).txt) $(BINDIR)/star @grep -q '^ok> No one on that port$$' $(BINDIR)/noone-amd64.txt && grep -q '^ok> 3 ok$$' $(BINDIR)/noone-amd64.txt || { echo "hosted-check: a write to a port with no one on it was not an error the node came back from"; cat $(BINDIR)/noone-amd64.txt | tail -4; exit 1; } @printf '5 AWAIT\n1 2 + .\n7 8 * .\n' | $(BINDIR)/starforth4-amd64 > $(BINDIR)/await-amd64.txt 2>&1; true @grep -q '^ok> Interrupted$$' $(BINDIR)/await-amd64.txt && grep -q '^ok> 3 ok$$' $(BINDIR)/await-amd64.txt && grep -q '^ok> 56 ok$$' $(BINDIR)/await-amd64.txt || { echo "hosted-check: a line typed while the node waited did not break the wait and then run"; tail -6 $(BINDIR)/await-amd64.txt; exit 1; } + @printf '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29\n1 2 + .\n' | $(BINDIR)/starforth4-amd64 > $(BINDIR)/deep-amd64.txt 2>&1; true + @grep -q '^ok> Stack overflow$$' $(BINDIR)/deep-amd64.txt && grep -q '^ok> 3 ok$$' $(BINDIR)/deep-amd64.txt || { echo "hosted-check: a line that left 29 values on the stack was not an error the node came back from"; tail -4 $(BINDIR)/deep-amd64.txt; exit 1; } @$(BINDIR)/starforth4-postfail < /dev/null > $(BINDIR)/postfail.txt; test $$? -ne 0 || { echo "hosted-check: a boot with a failing case did not fail"; exit 1; } @grep -q '^POST FAIL: fail.wrong out<5 5 $$' $(BINDIR)/postfail.txt || { echo "hosted-check: the failing case was not named"; cat $(BINDIR)/postfail.txt; exit 1; } @grep -q '^POST FAIL: fail.many out= V4_DATA_DEPTH, "the prompt and the interpreter take no more than four cells of the stack"); + /* one more than may wait: the line ends in an error that says so, and the node goes on (found by the review of step 6d) */ + { + char line[4 * V4_DATA_DEPTH + 16]; + size_t at = 0; + unsigned m; + const char *r; + boot_bare(); + for (m = 0; m < most + 1; m++) at += (size_t)snprintf(line + at, sizeof line - at, "1 "); + snprintf(line + at, sizeof line - at, "\n"); + r = say(line); + CHECK(strstr(r, "Stack overflow") != NULL && strstr(r, " ERROR\nok> ") != NULL, "a line that leaves one value more than may wait ends in an error that says so: \"%s\"", r); + CHECK(strcmp(say("1 2 + .\n"), "3 ok\nok> ") == 0, "and the next line is done as usual"); + for (m = 0; m < 2000 && !node_idle(); m++) (void)v4_exec_step_word(&n, &es, &h); /* it finishes what it was doing when its answer went */ + CHECK(n.mem[MQ_COUNT] == 0 && node_idle(), "with nothing left among the messages waiting, and the node at its ports"); + } } /* ---- how much of the data stack a line has ---- */