on main help sign in
Upgrade Astrolabe to zuse 408
3a73d33iko
base-desk/lib/dbug.hoon+9−3
unifiedsplit
@@ -4,7 +4,8 @@
4::
4::
5|%
5|%
6+$ poke
6+$ poke
7+ $% [%skip depth=@ud =poke]
7− $% [%bowl ~]
8+ [%bowl ~]
8 [%state grab=cord]
9 [%state grab=cord]
9 [%incoming =about]
10 [%incoming =about]
10 [%outgoing =about]
11 [%outgoing =about]
@@ -32,8 +33,13 @@
32 ?. ?=(%dbug mark)
33 ?. ?=(%dbug mark)
33 =^ cards agent (on-poke:ag mark vase)
34 =^ cards agent (on-poke:ag mark vase)
34 [cards this]
35 [cards this]
35− =/ dbug
36− !<(poke vase)
36+ =/ dbug !<(poke vase)
37+ =? dbug ?=([%skip %0 *] dbug) poke.dbug
38+ ?: ?=(%skip -.dbug)
39+ =^ cards agent
40+ %+ on-poke:ag %dbug
41+ !>(`poke`dbug(depth (dec depth.dbug)))
42+ [cards this]
37 =; =tang
43 =; =tang
38 ((%*(. slog pri 1) tang) [~ this])
44 ((%*(. slog pri 1) tang) [~ this])
39 ?- -.dbug
45 ?- -.dbug
base-desk/lib/keygen.hoon+1−1
@@ -94,7 +94,7 @@
94 |= seed=@
94 |= seed=@
95 ^- edkeys
95 ^- edkeys
96 =+ =< [pub=pub:ex sec=sec:ex]
96 =+ =< [pub=pub:ex sec=sec:ex]
97− (pit:nu:crub:crypto 256 seed)
97+ (pit:nu:cric:crypto 256 seed %b ~)
98 :- ^= auth
98 :- ^= auth
99 :- (rsh 3 (end [3 33] pub))
99 :- (rsh 3 (end [3 33] pub))
100 (rsh 3 (end [3 33] sec))
100 (rsh 3 (end [3 33] sec))
base-desk/lib/language-server/complete.hoon+2−2
@@ -43,7 +43,7 @@
43 %+ turn ~(tap by q.r.q.ty)
43 %+ turn ~(tap by q.r.q.ty)
44 |= [term =tome]
44 |= [term =tome]
45 %+ turn
45 %+ turn
46− ~(tap by q.tome)
46+ ~(tap by tome)
47 |= [name=term =hoon]
47 |= [name=term =hoon]
48 ^- (pair term type)
48 ^- (pair term type)
49 ~| term=term
49 ~| term=term
@@ -227,7 +227,7 @@
227 =* outer-loop $
227 =* outer-loop $
228 ?~ tomes
228 ?~ tomes
229 ~
229 ~
230− =/ arms ~(tap by q.q.i.tomes)
230+ =/ arms ~(tap by q.i.tomes)
231 |- ^- (unit [term type])
231 |- ^- (unit [term type])
232 =* inner-loop $
232 =* inner-loop $
233 ?~ arms
233 ?~ arms
base-desk/lib/language-server/easy-print.hoon+3−3
@@ -421,11 +421,11 @@
421 ?:(?=([%plot *] q.yon) [q.hin p.q.yon] [q.hin q.yon ~])
421 ?:(?=([%plot *] q.yon) [q.hin p.q.yon] [q.hin q.yon ~])
422 ::
422 ::
423 [%core *]
423 [%core *]
424− ?: ?=([[%$ * [[%$ @ *] ~ ~]] ~ ~] q.r.q.sut)
424+ ?: ?=([[%$ [[%$ @ *] ~ ~]] ~ ~] q.r.q.sut)
425 =/ dad $(sut p.sut)
425 =/ dad $(sut p.sut)
426 :- p.dad
426 :- p.dad
427 ~! q.r.q.sut
427 ~! q.r.q.sut
428− [%gate q.n.q.q.n.q.r.q.sut sut(r.p.q %gold) q.dad]
428+ [%gate q.n.q.n.q.r.q.sut sut(r.p.q %gold) q.dad]
429 =+ yad=$(sut p.sut)
429 =+ yad=$(sut p.sut)
430 :- p.yad
430 :- p.yad
431 =+ ^= doy ^- [p=(list @ta) q=wine]
431 =+ ^= doy ^- [p=(list @ta) q=wine]
@@ -438,7 +438,7 @@
438 %^ cat 3
438 %^ cat 3
439 %~ rent co
439 %~ rent co
440 :+ %$ %ud
440 :+ %$ %ud
441− %- ~(rep by (~(run by q.r.q.sut) |=(tome ~(wyt by q.+<))))
441+ %- ~(rep by (~(run by q.r.q.sut) |=(tome ~(wyt by +<))))
442 |=([[@ a=@u] b=@u] (add a b))
442 |=([[@ a=@u] b=@u] (add a b))
443 %^ cat 3
443 %^ cat 3
444 ?-(r.p.q.sut %gold '.', %iron '|', %lead '?', %zinc '&')
444 ?-(r.p.q.sut %gold '.', %iron '|', %lead '?', %zinc '&')
base-desk/lib/language-server/rune-snippet.hoon+2−2
@@ -509,8 +509,8 @@
509 :- '!@'
509 :- '!@'
510 """
510 """
511 $\{1:wing}
511 $\{1:wing}
512− $\{2:if-exists}
512+ $\{2:if-not-exists}
513− $\{3:if-not-exists}
513+ $\{3:if-exists}
514 """
514 """
515 :- '!?'
515 :- '!?'
516 """
516 """
base-desk/lib/ph/io.hoon+226−4
@@ -1,5 +1,5 @@
1/- *aquarium, spider
1/- *aquarium, spider
2−/+ libstrand=strand, *strandio, util=ph-util, aqua-azimuth
2+/+ libstrand=strand, *strandio, util=ph-util, aqua-azimuth, vere
3=, strand=strand:libstrand
3=, strand=strand:libstrand
4|%
4|%
5++ send-events
5++ send-events
@@ -88,7 +88,6 @@
88 ^- form:m
88 ^- form:m
89 (pure:m ~)
89 (pure:m ~)
90::
90::
91−::
92++ init
91++ init
93 =/ m (strand ,~)
92 =/ m (strand ,~)
94 ^- form:m
93 ^- form:m
@@ -125,6 +124,8 @@
125 1
124 1
126 +(+.old-rut)
125 +(+.old-rut)
127 ;< ~ bind:m (send-azimuth-action %breach who)
126 ;< ~ bind:m (send-azimuth-action %breach who)
127+ ;< ~ bind:m ?~ old-rut (sleep ~s20) :: XX don't wait if possible
128+ (wait-for-sunk her who) :: wait only if previously talked
128 |- ^- form:m
129 |- ^- form:m
129 =* loop $
130 =* loop $
130 ;< ~ bind:m (sleep ~s10)
131 ;< ~ bind:m (sleep ~s10)
@@ -142,7 +143,6 @@
142 ?> ?=(%earl (clan:title moon))
143 ?> ?=(%earl (clan:title moon))
143 ?: fake (init-ship moon &)
144 ?: fake (init-ship moon &)
144 =/ m (strand ,~)
145 =/ m (strand ,~)
145− ^- form:m
146 ;< ~ bind:m
146 ;< ~ bind:m
147 %+ dojo (^sein:title moon)
147 %+ dojo (^sein:title moon)
148 =/ =pass pub:ex:(get-keys:aqua-azimuth moon 1)
148 =/ =pass pub:ex:(get-keys:aqua-azimuth moon 1)
@@ -150,13 +150,46 @@
150 (init-ship moon |)
150 (init-ship moon |)
151::
151::
152++ init-ship
152++ init-ship
153+ =| core=?(%mesa %ames) :: XX make %mesa the default core
153 |= [=ship fake=?]
154 |= [=ship fake=?]
154 =/ m (strand ,~)
155 =/ m (strand ,~)
155 ^- form:m
156 ^- form:m
156 ~& > "starting {<ship>}"
157 ~& > "starting {<ship>}"
157− ;< ~ bind:m (send-events (init:util ship fake))
158+ ;< ~ bind:m (send-events (init:util ship fake ~ core))
158 (check-ship-booted ship)
159 (check-ship-booted ship)
159::
160::
161+++ init-comet
162+ =| core=?(%mesa %ames) :: XX make %mesa the default core
163+ |= comet=ship
164+ =/ m (strand ,~)
165+ ^- form:m
166+ :: hardcoded for:
167+ :: ~londeg-tirlys-somlyd-poltus--pintyn-tarbyl-bicnux-marbud
168+ ::
169+ =/ =feed:jael
170+ :* [%2 ~]
171+ who=comet
172+ ryf=0
173+ :_ ~
174+ :- lyf=1
175+ key=0wfm.lBEWM.08gfy.AxYjy.8-tBQ.uq-aa.LZt9c.CVQqd.XBJIs.
176+ CoG90.BNNGV.1ZmVi.ZbAhY.LuhwC.idNnU.lCVkt.Z4qug.7iY92
177+ ==
178+ ::
179+ ?> ?=(^ (veri:dawn:vere comet feed *point:azimuth-types ~))
180+ ~& > "mining comet under {<(^sein:title comet)>}"
181+ ;< ~ bind:m (send-events (init:util comet fake=%.n `feed core))
182+ (check-ship-booted comet)
183+::
184+:: Load network core protocol
185+::
186+++ load
187+ |= [who=ship ore=?(%mesa %ames)]
188+ =/ m (strand ,~)
189+ ^- form:m
190+ ;< ~ bind:m (send-events [%event who [/a/aqua/load %load ore]]~)
191+ (pure:m ~)
192+::
160++ check-ship-booted
193++ check-ship-booted
161 |= =ship
194 |= =ship
162 =/ m (strand ,~)
195 =/ m (strand ,~)
@@ -193,6 +226,129 @@
193 (pure:m ~)
226 (pure:m ~)
194 loop
227 loop
195::
228::
229+++ wait-for-flub
230+ |= [our=ship her=ship dap=term]
231+ =/ m (strand ,~)
232+ ^- form:m
233+ ;< =bowl:spider bind:m get-bowl
234+ |- ^- form:m
235+ =* loop $
236+ ;< [from=^ship =unix-effect] bind:m take-unix-effect
237+ ;< now=@da bind:m get-time
238+ ?. =(from our)
239+ :: our sends the $boon with the halted flow number, at this point
240+ :: gall has updated its state adding the app to gall's .halts map
241+ :: XX search deeper in the .unix-effect?
242+ ::
243+ loop
244+ =/ aqua-pax
245+ :- %i
246+ /(scot %p our)/gg/(scot %p our)//(scot %da now)/[%$]/noun
247+ =+ ;; flubs=(unit (jug ship term))
248+ (scry-aqua:util noun our.bowl now aqua-pax)
249+ ?~ flubs loop
250+ ?. (~(has ju u.flubs) her dap)
251+ loop
252+ (pure:m ~)
253+::
254+++ wait-for-spur
255+ |= [our=ship her=ship dap=term]
256+ =/ m (strand ,~)
257+ ^- form:m
258+ ;< =bowl:spider bind:m get-bowl
259+ |- ^- form:m
260+ =* loop $
261+ ;< [from=ship =unix-effect] bind:m take-unix-effect
262+ ;< now=@da bind:m get-time
263+ ?. =(from our)
264+ :: our ack to the %spur $boon is sent, at this point
265+ :: gall has updated its state adding the app to gall's .flubs map
266+ :: XX search deeper in the .unix-effect?
267+ ::
268+ loop
269+ =/ aqua-pax
270+ :- %i
271+ /(scot %p our)/gg/(scot %p our)//(scot %da now)/[%$]/noun
272+ =+ ;; flubs=(unit (jug ship term))
273+ (scry-aqua:util noun our.bowl now aqua-pax)
274+ ?~ flubs loop
275+ ?: (~(has ju u.flubs) her dap)
276+ loop
277+ (pure:m ~)
278+::
279+++ wait-for-has-halt
280+ |= [our=ship her=ship dap=term]
281+ =/ m (strand ,~)
282+ ^- form:m
283+ ;< =bowl:spider bind:m get-bowl
284+ |- ^- form:m
285+ =* loop $
286+ ;< [from=ship =unix-effect] bind:m take-unix-effect
287+ ;< now=@da bind:m get-time
288+ :: only %send or %push effects
289+ ::
290+ ?. ?=(?(%send %push) -.q.unix-effect)
291+ loop
292+ ~& >> from^unix-effect
293+ ?. =(from our)
294+ :: wait until our ack for the %flub $boon is sent, at this point
295+ :: gall has updated its state adding the app to gall's .flubs map
296+ :: XX search deeper in the .unix-effect?
297+ ::
298+ loop
299+ =/ aqua-pax
300+ :- %i
301+ /(scot %p our)/gh/(scot %p our)//(scot %da now)/[%$]/noun
302+ =+ ;; halts=(unit (jug app=term [ship =duct]))
303+ (scry-aqua:util noun our.bowl now aqua-pax)
304+ ?~ halts loop
305+ ?. (~(has by u.halts) dap) :: XX check .her as well
306+ loop
307+ (pure:m ~)
308+::
309+++ wait-for-del-halt
310+ |= [our=ship her=ship dap=term]
311+ =/ m (strand ,~)
312+ ^- form:m
313+ ;< =bowl:spider bind:m get-bowl
314+ |- ^- form:m
315+ =* loop $
316+ ;< [from=ship =unix-effect] bind:m take-unix-effect
317+ ;< now=@da bind:m get-time
318+ ?. =(from our)
319+ :: when the %spur $boon has been sent, gall has updated its state deleting
320+ :: the app from gall's .flubs map
321+ :: XX search deeper in the .unix-effect?
322+ ::
323+ loop
324+ =/ aqua-pax
325+ :- %i
326+ /(scot %p our)/gh/(scot %p our)//(scot %da now)/[%$]/noun
327+ =+ ;; halts=(unit (jug app=term [ship =duct]))
328+ (scry-aqua:util noun our.bowl now aqua-pax)
329+ ?~ halts loop
330+ ?: (~(has by u.halts) dap) :: XX check .her as well
331+ loop
332+ (pure:m ~)
333+::
334+++ wait-for-pac
335+ |= [our=ship to=ship]
336+ =/ m (strand ,~)
337+ ^- form:m
338+ ~& > "waiting for ack: {<[from=our to=to]>}"
339+ |- ^- form:m
340+ =* loop $
341+ ;< [from=ship =unix-effect] bind:m take-unix-effect
342+ ?. =(our from)
343+ loop
344+ :: only %send or %push effects
345+ ::
346+ ?. ?=(?(%send %push) -.q.unix-effect)
347+ loop
348+ :: XX check that this is an %ack?
349+ :: XX check that this is for .to?
350+ ::
351+ (pure:m ~)
196:: Send "|hi" from one ship to another
352:: Send "|hi" from one ship to another
197::
353::
198++ send-hi
354++ send-hi
@@ -204,6 +360,64 @@
204::
360::
205:: Send "|hi" and wait for "not responding" message
361:: Send "|hi" and wait for "not responding" message
206::
362::
363+++ wait-for-sunk
364+ |= [from=@p to=@p]
365+ =/ m (strand ,~)
366+ (wait-for-output from "{(scow %p to)} has sunk")
367+::
368+++ wait-for-fact
369+ |= [=ship =mark =wire gate=$-([mark noun] ?)]
370+ =/ m (strand ,noun)
371+ ^- form:m
372+ ~& > "waiting for fact: {<mark>}"
373+ |- ^- form:m
374+ =* loop $
375+ ;< [her=^ship =unix-effect] bind:m take-unix-effect
376+ ?. =(her ship)
377+ loop
378+ ?. ?& =(wire p.unix-effect)
379+ ?=([%unto %raw-fact *] q.unix-effect)
380+ =(mark mark.unto.q.unix-effect)
381+ (gate mark noun.unto.q.unix-effect)
382+ ==
383+ loop
384+ (pure:m noun.unto.q.unix-effect)
385+::
386+++ wait-for-cork
387+ |= [our=ship her=ship flow=(each bone:ames side:ames)]
388+ =/ m (strand ,~)
389+ ^- form:m
390+ ;< =bowl:spider bind:m get-bowl
391+ |- ^- form:m
392+ =* loop $
393+ ;< [from=ship =unix-effect] bind:m take-unix-effect
394+ ;< now=@da bind:m get-time
395+ :: only %send or %push effects
396+ ::
397+ ?. ?=(?(%send %push) -.q.unix-effect)
398+ loop
399+ :: XX check that this is an %ack?
400+ ::
401+ ?. =(from our)
402+ :: wait until the ack for the %cork $plea is sent, at this point
403+ :: the publisher has already corked the flow
404+ ::
405+ loop
406+ =/ aqua-pax
407+ %+ weld /i/(scot %p our)/ax/(scot %p our)//(scot %da now)
408+ ?: ?=(%& -.flow)
409+ /corked/(scot %p her)/(scot %ud +.flow)/noun
410+ =/ [=bone:ames =dire:ames] +.flow
411+ /corked/(scot %p her)/[dire]/(scot %ud bone)/noun
412+ =+ ;; corked=(unit ?) (scry-aqua:util noun our.bowl now aqua-pax)
413+ ?~ corked loop
414+ ?. u.corked :: XX check .her as well
415+ loop
416+ ~& >> flow-is-corked/flow
417+ (pure:m ~)
418+::
419+:: Send "|hi" and wait for "not responding" message
420+::
207++ send-hi-not-responding
421++ send-hi-not-responding
208 |= [from=@p to=@p]
422 |= [from=@p to=@p]
209 ~& > 'sending hi not responding'
423 ~& > 'sending hi not responding'
@@ -256,6 +470,14 @@
256 ;< ~ bind:m (send-events (insert-files:util her desk [pax warped] ~))
470 ;< ~ bind:m (send-events (insert-files:util her desk [pax warped] ~))
257 (pure:m warped)
471 (pure:m warped)
258::
472::
473+++ copy-file
474+ =/ m (strand ,~)
475+ |= [her=ship pax=path file=@t]
476+ ^- form:m
477+ ;< ~ bind:m
478+ (send-events (insert-files:util her %base [pax file] ~))
479+ (sleep ~s1)
480+::
259:: Check /sur/aquarium/hoon on the given has the given contents.
481:: Check /sur/aquarium/hoon on the given has the given contents.
260::
482::
261++ check-file-touched
483++ check-file-touched
base-desk/lib/ph/util.hoon+21−8
@@ -16,9 +16,11 @@
16:: Start a ship (low-level; prefer +raw-ship)
16:: Start a ship (low-level; prefer +raw-ship)
17::
17::
18++ init
18++ init
19− |= [who=ship fake=?]
19+ |= [who=ship ake=? eed=(unit feed:jael) ore=?(%mesa %ames)]
20 ^- (list aqua-event)
20 ^- (list aqua-event)
21− [%init-ship who fake]~
21+ :~ [%init-ship who ake eed]
22+ [%event who [/a/aqua/load %load ore]]
23+ ==
22::
24::
23:: Send dojo command
25:: Send dojo command
24::
26::
@@ -62,15 +64,26 @@
62::TODO should be rename -dill-output
64::TODO should be rename -dill-output
63++ is-dojo-output
65++ is-dojo-output
64 |= [who=ship her=ship uf=unix-effect what=tape]
66 |= [who=ship her=ship uf=unix-effect what=tape]
67+ |^
65 ?& =(who her)
68 ?& =(who her)
66 ?=(%blit -.q.uf)
69 ?=(%blit -.q.uf)
67− ::
68− %+ lien p.q.uf
70+ (lien p.q.uf handle-blit)
69− |= =blit:dill
70− ?. ?=(%put -.blit)
71− |
72− !=(~ (find what p.blit))
73 ==
71 ==
72+ ::
73+ ++ handle-blit
74+ |= =blit:dill
75+ ^- ?
76+ ?: ?=(%mor -.blit)
77+ (lien p.blit handle-blit)
78+ ?+ -.blit |
79+ %put !=(~ (find what p.blit))
80+ ::
81+ %klr
82+ %+ lien p.blit
83+ |= [* q=(list @c)]
84+ !=(~ (find what q))
85+ ==
86+ --
74::
87::
75:: Test is successful if +is-dojo-output
88:: Test is successful if +is-dojo-output
76::
89::
base-desk/lib/pill.hoon+263−19
@@ -2,6 +2,7 @@
2::
2::
3/- dice
3/- dice
4^?
4^?
5+=<
5|%
6|%
6::
7::
7+$ pill
8+$ pill
@@ -11,6 +12,14 @@
11 boot-ova=(list)
12 boot-ova=(list)
12 kernel-ova=(list unix-event)
13 kernel-ova=(list unix-event)
13 userspace-ova=(list unix-event)
14 userspace-ova=(list unix-event)
15+ ==
16+ $: %cash
17+ $: nam=term
18+ boot-ova=(list)
19+ kernel-ova=(list unix-event)
20+ userspace-ova=(list unix-event)
21+ ==
22+ cache=(list)
14 == ==
23 == ==
15::
24::
16+$ unix-event
25+$ unix-event
@@ -33,14 +42,14 @@
33 [/sys/arvo hoon/arvo]
42 [/sys/arvo hoon/arvo]
34 ==
43 ==
35:: +dirs: filter for userspace directories to include
44:: +dirs: filter for userspace directories to include
36−::
45+::
37++ dirs
46++ dirs
38 |= [bas=path exc=(list spur)]
47 |= [bas=path exc=(list spur)]
39 ^- (list spur)
48 ^- (list spur)
40 ?~ exc ~(tap in dir:.^(arch %cy bas))
49 ?~ exc ~(tap in dir:.^(arch %cy bas))
41 %+ skim
50 %+ skim
42 ~(tap in dir:.^(arch %cy bas))
51 ~(tap in dir:.^(arch %cy bas))
43− |=(=spur =(~ (find ~[spur] exc)))
52+ |=(=spur =(~ (find ~[spur] exc)))
44:: +file-ovum: userspace filesystem load
53:: +file-ovum: userspace filesystem load
45::
54::
46:: bas: full path to / directory
55:: bas: full path to / directory
@@ -99,6 +108,26 @@
99::
108::
100++ file-ovum2 |=(z=[path (list spur)] `unix-event`[//arvo what/(user-files z)])
109++ file-ovum2 |=(z=[path (list spur)] `unix-event`[//arvo what/(user-files z)])
101::
110::
111+++ get-wynn
112+ |= [sys=path new-wynn=?]
113+ ^- wynn
114+ ?. new-wynn
115+ :~ zuse+zuse
116+ lull+lull
117+ arvo+arvo
118+ hoon+hoon-version
119+ ==
120+ ~> %bout.[0 %get-wynn]
121+ =+ .^(zus=vase %ca (welp sys /zuse/hoon))
122+ =+ .^(lul=vase %ca (welp sys /lull/hoon))
123+ =+ .^(arv=vase %ca (welp sys /arvo/hoon))
124+ =+ .^(hun=vase %ca (welp sys /hoon/hoon))
125+ :~ [%zuse ;;(@ud q:(slap zus limb+%zuse))]
126+ [%lull ;;(@ud q:(slap lul limb+%lull))]
127+ [%arvo ;;(@ud q:(slap arv limb+%arvo))]
128+ [%hoon ;;(@ud q:(slap hun limb+%hoon-version))]
129+ ==
130+::
102++ prep-ovum
131++ prep-ovum
103 |= dez=(list path)
132 |= dez=(list path)
104 ^- unix-event
133 ^- unix-event
@@ -200,7 +229,7 @@
200 :- (boot-ovum:pill compiler-src arvo-src)
229 :- (boot-ovum:pill compiler-src arvo-src)
201 %+ turn
230 %+ turn
202 (snoc (turn dez tail) bas)
231 (snoc (turn dez tail) bas)
203− |= =path
232+ |= =path
204 (file-ovum2 [path exc])
233 (file-ovum2 [path exc])
205 .*(0 arvo-formula)
234 .*(0 arvo-formula)
206 |= [ovo=ovum ken=*]
235 |= [ovo=ovum ken=*]
@@ -234,19 +263,26 @@
234 :+ %pill %solid
263 :+ %pill %solid
235 :+ boot-ova ~
264 :+ boot-ova ~
236 =. dez (snoc dez [%base bas])
265 =. dez (snoc dez [%base bas])
237− %+ weld
266+ ;: weld
238− %+ turn dez
267+ %+ turn dez
239− |= [dek=desk bas=path]
268+ |= [dek=desk bas=path]
240 (file-ovum [dek bas exc])
269 (file-ovum [dek bas exc])
270+ ::
241− ?. prime ~
271+ ?. prime ~
242− [(prep-ovum (turn dez tail))]~
272+ [(prep-ovum (turn dez tail))]~
273+ ::
274+ %+ turn dez
275+ |= [dek=desk *]
276+ ^- unix-event
277+ [/c/essential/[dek] %esse dek %.y]
278+ ==
243::
279::
244++ brass
280++ brass
245 :: sys: root path to boot system, `/~me/[desk]/now/sys`
281 :: sys: root path to boot system, `/~me/[desk]/now/sys`
246 :: dez: secondary desks and their root paths
282 :: dez: secondary desks and their root paths
247 :: exc: list of desk folders to exclude
283 :: exc: list of desk folders to exclude
248 ::
284 ::
249− |= [sys=path dez=(list [desk path]) prime=? exc=(list spur)]
285+ |= [sys=path dez=(list [desk path]) cache=? prime=? new-wynn=? exc=(list spur)]
250 ^- pill
286 ^- pill
251 =/ bas=path (scag 3 sys)
287 =/ bas=path (scag 3 sys)
252 :: compiler-source: hoon source file producing compiler, `sys/hoon`
288 :: compiler-source: hoon source file producing compiler, `sys/hoon`
@@ -278,20 +314,54 @@
278 compiler-source
314 compiler-source
279 arvo-source
315 arvo-source
280 ==
316 ==
281− :: a pill is a 3-tuple of event-lists: [boot kernel userspace]
282 ::
317 ::
283− :+ %pill %brass
318+ =/ kernel-ova=(list unix-event)
284− :+ boot-ova
285 :~ (boot-ovum compiler-source arvo-source)
319 :~ (boot-ovum compiler-source arvo-source)
286 (file-ovum2 [bas exc])
320 (file-ovum2 [bas exc])
287 ==
321 ==
322+ ::
323+ =/ userspace-ova
288− =. dez (snoc dez [%base bas])
324+ =. dez (snoc dez [%base bas])
289− %+ weld
325+ ;: weld
290− %+ turn dez
326+ %+ turn dez
291− |= [dek=desk bas=path]
327+ |= [dek=desk bas=path]
292− (file-ovum [dek bas exc])
328+ (file-ovum [dek bas exc])
329+ ::
293− ?. prime ~
330+ ?. prime ~
294− [(prep-ovum (turn dez tail))]~
331+ [(prep-ovum (turn dez tail))]~
332+ ::
333+ %+ turn dez
334+ |= [dek=desk *]
335+ ^- unix-event
336+ [/c/essential/[dek] %esse dek %.y]
337+ ==
338+ ::
339+ =/ =wynn (get-wynn sys new-wynn)
340+ ::
341+ =/ cache=(list)
342+ ?. cache ~
343+ %~ tap by
344+ =< +
345+ %- mice
346+ :_ [%2 [%0 3] %0 2]
347+ ;: weld
348+ boot-ova
349+ ^- (list)
350+ :~ [*@da //arvo %wack *@uvJ]
351+ [*@da //arvo %whom *@p]
352+ [*@da //arvo %wyrd [~.nonce /] wynn]
353+ ==
354+ `(list)`(turn kernel-ova (lead *@da))
355+ `(list)`[*@da [/d/term/1 %boot & %fake *@p]]^~
356+ `(list)`(turn userspace-ova (lead *@da))
357+ `(list)`[*@da [/c/init-zest %zeal (turn dez |=([d=desk *] [d %live]))]]^~
358+ ==
359+ ::
360+ ~> %slog.[0 leaf+"brass: cache entries: {<(lent cache)>}"]
361+ ::
362+ :- %cash
363+ :_ cache
364+ [%brass boot-ova kernel-ova userspace-ova]
295::
365::
296++ ivory
366++ ivory
297 |= sys=path
367 |= sys=path
@@ -374,3 +444,177 @@
374 ==
444 ==
375 --
445 --
376--
446--
447+::
448+~% %non ..part ~
449+:: +mice: %memo hint caching version of mink
450+::
451+|%
452+++ mice !.
453+ ~/ %mice
454+ |= [subject=* formula=*]
455+ =| trace=(list [@ta *])
456+ =| memo=(map)
457+ =; [ton=tone mem=_memo]
458+ ?. ?=(%0 -.ton)
459+ [ton ~]
460+ [ton mem]
461+ |^ ^- [tone _memo]
462+ ?+ formula [[%2 trace] memo]
463+ [^ *]
464+ =^ head memo $(formula -.formula)
465+ ?. ?=(%0 -.head) [head memo]
466+ =^ tail memo $(formula +.formula)
467+ :_ memo
468+ ?. ?=(%0 -.tail) tail
469+ [%0 product.head product.tail]
470+ ::
471+ [%0 axis=@]
472+ :_ memo
473+ =/ part (frag axis.formula subject)
474+ ?~ part [%2 trace]
475+ [%0 u.part]
476+ ::
477+ [%1 constant=*]
478+ [[%0 constant.formula] memo]
479+ ::
480+ [%2 subject=* formula=*]
481+ =^ subject memo $(formula subject.formula)
482+ ?. ?=(%0 -.subject) [subject memo]
483+ =^ formula memo $(formula formula.formula)
484+ ?. ?=(%0 -.formula) [formula memo]
485+ %= $
486+ subject product.subject
487+ formula product.formula
488+ ==
489+ ::
490+ [%3 argument=*]
491+ =^ argument memo $(formula argument.formula)
492+ :_ memo
493+ ?. ?=(%0 -.argument) argument
494+ [%0 .?(product.argument)]
495+ ::
496+ [%4 argument=*]
497+ =^ argument memo $(formula argument.formula)
498+ :_ memo
499+ ?. ?=(%0 -.argument) argument
500+ ?^ product.argument [%2 trace]
501+ [%0 .+(product.argument)]
502+ ::
503+ [%5 a=* b=*]
504+ =^ a memo $(formula a.formula)
505+ ?. ?=(%0 -.a) [a memo]
506+ =^ b memo $(formula b.formula)
507+ :_ memo
508+ ?. ?=(%0 -.b) b
509+ [%0 =(product.a product.b)]
510+ ::
511+ [%6 test=* yes=* no=*]
512+ =^ result memo $(formula test.formula)
513+ ?. ?=(%0 -.result) [result memo]
514+ ?+ product.result [[%2 trace] memo]
515+ %& $(formula yes.formula)
516+ %| $(formula no.formula)
517+ ==
518+ ::
519+ [%7 subject=* next=*]
520+ =^ subject memo $(formula subject.formula)
521+ ?. ?=(%0 -.subject) [subject memo]
522+ %= $
523+ subject product.subject
524+ formula next.formula
525+ ==
526+ ::
527+ [%8 head=* next=*]
528+ =^ head memo $(formula head.formula)
529+ ?. ?=(%0 -.head) [head memo]
530+ %= $
531+ subject [product.head subject]
532+ formula next.formula
533+ ==
534+ ::
535+ [%9 axis=@ core=*]
536+ =^ core memo
537+ $(formula core.formula)
538+ ?. ?=(%0 -.core) [core memo]
539+ =/ arm (frag axis.formula product.core)
540+ ?~ arm [[%2 trace] memo]
541+ %= $
542+ subject product.core
543+ formula u.arm
544+ ==
545+ ::
546+ [%10 [axis=@ value=*] target=*]
547+ ?: =(0 axis.formula) [[%2 trace] memo]
548+ =^ target memo $(formula target.formula)
549+ ?. ?=(%0 -.target) [target memo]
550+ =^ value memo $(formula value.formula)
551+ :_ memo
552+ ?. ?=(%0 -.value) value
553+ =/ mutant=(unit *)
554+ (edit axis.formula product.target product.value)
555+ ?~ mutant [%2 trace]
556+ [%0 u.mutant]
557+ ::
558+ [%11 tag=@ next=*]
559+ =^ next memo $(formula next.formula)
560+ :_ memo
561+ ?. ?=(%0 -.next) next
562+ :- %0
563+ .* subject
564+ [11 tag.formula 1 product.next]
565+ ::
566+ [%11 [tag=@ clue=*] next=*]
567+ =^ clue memo $(formula clue.formula)
568+ ?. ?=(%0 -.clue) [clue memo]
569+ ?: ?=(%memo tag.formula)
570+ ?^ hit=(~(get by memo) subject next.formula)
571+ [[%0 u.hit] memo]
572+ =^ ton memo $(formula next.formula)
573+ ?. ?=(%0 -.ton)
574+ [ton memo]
575+ ?: ?=(?(@ [%clay %ford *]) product.clue)
576+ [ton memo]
577+ [ton (~(put by memo) [subject next.formula] product.ton)]
578+ =^ next memo
579+ =? trace
580+ ?=(?(%hunk %hand %lose %mean %spot) tag.formula)
581+ [[tag.formula product.clue] trace]
582+ $(formula next.formula)
583+ :_ memo
584+ ?. ?=(%0 -.next) next
585+ :- %0
586+ .* subject
587+ [11 [tag.formula 1 product.clue] 1 product.next]
588+ ==
589+ ::
590+ ++ frag
591+ |= [axis=@ noun=*]
592+ ^- (unit)
593+ ?: =(0 axis) ~
594+ |- ^- (unit)
595+ ?: =(1 axis) `noun
596+ ?@ noun ~
597+ =/ pick (cap axis)
598+ %= $
599+ axis (mas axis)
600+ noun ?-(pick %2 -.noun, %3 +.noun)
601+ ==
602+ ::
603+ ++ edit
604+ |= [axis=@ target=* value=*]
605+ ^- (unit)
606+ ?: =(1 axis) `value
607+ ?@ target ~
608+ =/ pick (cap axis)
609+ =/ mutant
610+ %= $
611+ axis (mas axis)
612+ target ?-(pick %2 -.target, %3 +.target)
613+ ==
614+ ?~ mutant ~
615+ ?- pick
616+ %2 `[u.mutant +.target]
617+ %3 `[-.target u.mutant]
618+ ==
619+ --
620+--
base-desk/lib/ring.hoon+36−36
@@ -18,10 +18,10 @@
18 ::
18 ::
19 ++ generate-public-linkage
19 ++ generate-public-linkage
20 |= link-scope=@
20 |= link-scope=@
21− ^- [data=@ h=@udpoint]
21+ ^- [data=@ h=@uxpoint]
22 ::
22 ::
23 =/ data=@ (mod link-scope l:ed:crypto)
23 =/ data=@ (mod link-scope l:ed:crypto)
24− =/ h=@udpoint (scalarmult-base:ed:crypto data)
24+ =/ h=@uxpoint (scalarmult-base:ed:crypto data)
25 [data h]
25 [data h]
26 :: +generate-linkage: linkage information from scope and private key
26 :: +generate-linkage: linkage information from scope and private key
27 ::
27 ::
@@ -30,13 +30,13 @@
30 :: y: y = [x] * h
30 :: y: y = [x] * h
31 ++ generate-linkage
31 ++ generate-linkage
32 |= [link-scope=(unit @) my-private-key=@]
32 |= [link-scope=(unit @) my-private-key=@]
33− ^- (unit [data=@ h=@udpoint y=@udpoint])
33+ ^- (unit [data=@ h=@uxpoint y=@uxpoint])
34 ::
34 ::
35 ?~ link-scope
35 ?~ link-scope
36 ~
36 ~
37 ::
37 ::
38− =+ [data=@ h=@udpoint]=(generate-public-linkage u.link-scope)
38+ =+ [data=@ h=@uxpoint]=(generate-public-linkage u.link-scope)
39− =/ y=@udpoint (scalarmult:ed:crypto my-private-key h)
39+ =/ y=@uxpoint (scalarmult:ed:crypto my-private-key h)
40 [~ data h y]
40 [~ data h y]
41 :: +generate-challenge: generate challenge from a given message
41 :: +generate-challenge: generate challenge from a given message
42 ::
42 ::
@@ -47,13 +47,13 @@
47 ++ generate-challenge
47 ++ generate-challenge
48 |= $: :: common to both linked and unlinked
48 |= $: :: common to both linked and unlinked
49 message=@
49 message=@
50− g=@udpoint
50+ g=@uxpoint
51 :: high level universal state
51 :: high level universal state
52 ::
52 ::
53− link-state=(unit [data=@ h=@udpoint y=@udpoint])
53+ link-state=(unit [data=@ h=@uxpoint y=@uxpoint])
54 :: point to include in challenge when link-state isn't ~
54 :: point to include in challenge when link-state isn't ~
55 ::
55 ::
56− h=(unit @udpoint)
56+ h=(unit @uxpoint)
57 ==
57 ==
58 ^- @
58 ^- @
59 :: concatenate and reduce our message down to a 512-bit hash
59 :: concatenate and reduce our message down to a 512-bit hash
@@ -74,9 +74,9 @@
74 :: +generate-challenges: generates the full list of challenges
74 :: +generate-challenges: generates the full list of challenges
75 ::
75 ::
76 ++ generate-challenges
76 ++ generate-challenges
77− |= $: link-state=(unit [data=@ h=@udpoint y=@udpoint])
77+ |= $: link-state=(unit [data=@ h=@uxpoint y=@uxpoint])
78 message=@
78 message=@
79− public-keys=(list @udpoint)
79+ public-keys=(list @uxpoint)
80 ss=(list @)
80 ss=(list @)
81 ::
81 ::
82 prev-k=@u
82 prev-k=@u
@@ -86,14 +86,14 @@
86 ==
86 ==
87 ^- (list @)
87 ^- (list @)
88 ::
88 ::
89− =/ gs=@udpoint
89+ =/ gs=@uxpoint
90 %- add-scalarmult-scalarmult-base:ed:crypto :*
90 %- add-scalarmult-scalarmult-base:ed:crypto :*
91 prev-ch
91 prev-ch
92 (snag prev-k public-keys)
92 (snag prev-k public-keys)
93 prev-s
93 prev-s
94 ==
94 ==
95 ::
95 ::
96− =/ hs=(unit @udpoint)
96+ =/ hs=(unit @uxpoint)
97 ?~ link-state
97 ?~ link-state
98 ~
98 ~
99 ::
99 ::
@@ -125,8 +125,8 @@
125 :: used to generate the (unit point) consumed by +generate-challenge.
125 :: used to generate the (unit point) consumed by +generate-challenge.
126 ::
126 ::
127 ++ scalarmult-h
127 ++ scalarmult-h
128− |= [u=@ linkage=(unit [data=@ h=@udpoint y=@udpoint])]
128+ |= [u=@ linkage=(unit [data=@ h=@uxpoint y=@uxpoint])]
129− ^- (unit @udpoint)
129+ ^- (unit @uxpoint)
130 ?~ linkage
130 ?~ linkage
131 ~
131 ~
132 [~ (scalarmult:ed:crypto u h.u.linkage)]
132 [~ (scalarmult:ed:crypto u h.u.linkage)]
@@ -143,9 +143,9 @@
143 |= $: message=@
143 |= $: message=@
144 link-scope=(unit @)
144 link-scope=(unit @)
145 ::
145 ::
146− anonymity-set=(set @udpoint)
146+ anonymity-set=(set @uxpoint)
147− my-public-key=@udpoint
147+ my-public-key=@uxpoint
148− my-private-key=@udscalar
148+ my-private-key=@uxscalar
149 ::
149 ::
150 eny=@uvJ
150 eny=@uvJ
151 ==
151 ==
@@ -157,7 +157,7 @@
157 (need (find [my-public-key ~] anonymity-list))
157 (need (find [my-public-key ~] anonymity-list))
158 :: Generate linkage information if given
158 :: Generate linkage information if given
159 ::
159 ::
160− =/ linkage=(unit [data=@ h=@udpoint y=@udpoint])
160+ =/ linkage=(unit [data=@ h=@uxpoint y=@uxpoint])
161 (generate-linkage link-scope my-private-key)
161 (generate-linkage link-scope my-private-key)
162 :: initialize our random number generator from entropy
162 :: initialize our random number generator from entropy
163 ::
163 ::
@@ -237,7 +237,7 @@
237 |= $: message=@
237 |= $: message=@
238 link-scope=(unit @)
238 link-scope=(unit @)
239 ::
239 ::
240− anonymity-set=(set @udpoint)
240+ anonymity-set=(set @uxpoint)
241 signature=raw-ring-signature
241 signature=raw-ring-signature
242 ==
242 ==
243 ^- ?
243 ^- ?
@@ -259,14 +259,14 @@
259 =/ s2-to-end=(list @) t.t.s.signature
259 =/ s2-to-end=(list @) t.t.s.signature
260 :: anonymity-list: set of public keys listified in ring order
260 :: anonymity-list: set of public keys listified in ring order
261 ::
261 ::
262− =/ anonymity-list=(list @udpoint)
262+ =/ anonymity-list=(list @uxpoint)
263 ~(tap in anonymity-set)
263 ~(tap in anonymity-set)
264 :: participants: length of :anonymity-list
264 :: participants: length of :anonymity-list
265 ::
265 ::
266 =/ participants=@u
266 =/ participants=@u
267 (lent anonymity-list)
267 (lent anonymity-list)
268 ::
268 ::
269− =/ z0p=@udpoint
269+ =/ z0p=@uxpoint
270 %- add-scalarmult-scalarmult-base:ed:crypto :*
270 %- add-scalarmult-scalarmult-base:ed:crypto :*
271 ch0.signature
271 ch0.signature
272 (head anonymity-list)
272 (head anonymity-list)
@@ -275,14 +275,14 @@
275 :: generate the linkage using public data, and the y point from the
275 :: generate the linkage using public data, and the y point from the
276 :: signature
276 :: signature
277 ::
277 ::
278− =/ linkage=(unit [data=@ h=@udpoint y=@udpoint])
278+ =/ linkage=(unit [data=@ h=@uxpoint y=@uxpoint])
279 ?~ link-scope
279 ?~ link-scope
280 ~
280 ~
281− =+ [data=@ h=@udpoint]=(generate-public-linkage u.link-scope)
281+ =+ [data=@ h=@uxpoint]=(generate-public-linkage u.link-scope)
282 :- ~
282 :- ~
283 [data h (need y.signature)]
283 [data h (need y.signature)]
284 ::
284 ::
285− =/ z0pp=(unit @udpoint)
285+ =/ z0pp=(unit @uxpoint)
286 ?~ linkage
286 ?~ linkage
287 ~
287 ~
288 :- ~
288 :- ~
@@ -319,7 +319,7 @@
319 :: +seed-to-private-key-scalar: keyfile form to scalar we can multiply with
319 :: +seed-to-private-key-scalar: keyfile form to scalar we can multiply with
320 ::
320 ::
321 ++ seed-to-private-key-scalar
321 ++ seed-to-private-key-scalar
322− |= sk=@I ^- @udscalar
322+ |= sk=@I ^- @uxscalar
323 ?: (gth (met 3 sk) 32) !!
323 ?: (gth (met 3 sk) 32) !!
324 =+ h=(shal (rsh [0 3] b:ed:crypto) sk)
324 =+ h=(shal (rsh [0 3] b:ed:crypto) sk)
325 %+ add
325 %+ add
@@ -347,7 +347,7 @@
347 ::
347 ::
348 ++ ship-life-to-pubid
348 ++ ship-life-to-pubid
349 |= [our=@p now=@da ship=@p =life]
349 |= [our=@p now=@da ship=@p =life]
350− ^- @udpoint
350+ ^- @uxpoint
351 ::
351 ::
352 =/ d=[=^life =pass *]
352 =/ d=[=^life =pass *]
353 =/ scry-path=path
353 =/ scry-path=path
@@ -364,14 +364,14 @@
364 ::
364 ::
365 =/ x=[crypt=@ auth=@] (get-public-key-from-pass pass.d)
365 =/ x=[crypt=@ auth=@] (get-public-key-from-pass pass.d)
366 ::
366 ::
367− `@udpoint`auth.x
367+ `@uxpoint`auth.x
368 ::
368 ::
369 ++ build-signing-participants
369 ++ build-signing-participants
370 |= [our=@p now=@da invited=(list @p)]
370 |= [our=@p now=@da invited=(list @p)]
371− ^- [(set [@p life]) (set @udpoint)]
371+ ^- [(set [@p life]) (set @uxpoint)]
372 ::
372 ::
373 =| participants=(set [@p life])
373 =| participants=(set [@p life])
374− =| keys=(set @udpoint)
374+ =| keys=(set @uxpoint)
375 ::
375 ::
376 |-
376 |-
377 ?~ invited
377 ?~ invited
@@ -383,7 +383,7 @@
383 ?~ lyfe
383 ?~ lyfe
384 $(invited t.invited)
384 $(invited t.invited)
385 ::
385 ::
386− =/ pubkey=@udpoint (ship-life-to-pubid our now i.invited u.lyfe)
386+ =/ pubkey=@uxpoint (ship-life-to-pubid our now i.invited u.lyfe)
387 ::
387 ::
388 =. participants (~(put in participants) [i.invited u.lyfe])
388 =. participants (~(put in participants) [i.invited u.lyfe])
389 =. keys (~(put in keys) pubkey)
389 =. keys (~(put in keys) pubkey)
@@ -393,15 +393,15 @@
393 ::
393 ::
394 ++ build-verifying-participants
394 ++ build-verifying-participants
395 |= [our=@p now=@da invited=(list [ship=@p =life])]
395 |= [our=@p now=@da invited=(list [ship=@p =life])]
396− ^- (set @udpoint)
396+ ^- (set @uxpoint)
397 ::
397 ::
398− =| keys=(set @udpoint)
398+ =| keys=(set @uxpoint)
399 ::
399 ::
400 |-
400 |-
401 ?~ invited
401 ?~ invited
402 keys
402 keys
403 ::
403 ::
404− =/ pubkey=@udpoint
404+ =/ pubkey=@uxpoint
405 (ship-life-to-pubid our now ship.i.invited life.i.invited)
405 (ship-life-to-pubid our now ship.i.invited life.i.invited)
406 =. keys
406 =. keys
407 (~(put in keys) pubkey)
407 (~(put in keys) pubkey)
@@ -432,7 +432,7 @@
432 =/ link-hash=(unit @) (bind link-scope |=(a=* (shaz (jam a))))
432 =/ link-hash=(unit @) (bind link-scope |=(a=* (shaz (jam a))))
433 :: get everyone's public keys
433 :: get everyone's public keys
434 ::
434 ::
435− =/ p=[participants=(set [ship=@p =life]) keys=(set @udpoint)]
435+ =/ p=[participants=(set [ship=@p =life]) keys=(set @uxpoint)]
436 (build-signing-participants:detail our now ~(tap in anonymity-set))
436 (build-signing-participants:detail our now ~(tap in anonymity-set))
437 :: get our ships' current life
437 :: get our ships' current life
438 ::
438 ::
@@ -448,7 +448,7 @@
448 +:(get-private-key-from-ring:detail secret-ring)
448 +:(get-private-key-from-ring:detail secret-ring)
449 :: get our ships' public key
449 :: get our ships' public key
450 ::
450 ::
451− =/ public-key=@udpoint
451+ =/ public-key=@uxpoint
452 (ship-life-to-pubid:detail our now our our-life)
452 (ship-life-to-pubid:detail our now our our-life)
453 ::
453 ::
454 :- participants.p
454 :- participants.p
@@ -467,7 +467,7 @@
467 |= [our=@p now=@da message=* =ring-signature]
467 |= [our=@p now=@da message=* =ring-signature]
468 ^- ?
468 ^- ?
469 ::
469 ::
470− =/ keys=(set @udpoint)
470+ =/ keys=(set @uxpoint)
471 %^ build-verifying-participants:detail our now
471 %^ build-verifying-participants:detail our now
472 ~(tap in participants.ring-signature)
472 ~(tap in participants.ring-signature)
473 ::
473 ::
base-desk/lib/shoe.hoon+28−19
@@ -13,8 +13,8 @@
13/- *sole
13/- *sole
14/+ sole, auto=language-server-complete
14/+ sole, auto=language-server-complete
15|%
15|%
16−+$ state-1
16++$ state-2
17− $: %1
17+ $: %2
18 soles=(map sole-id sole-share)
18 soles=(map sole-id sole-share)
19 ==
19 ==
20:: $card: standard gall cards plus shoe effects
20:: $card: standard gall cards plus shoe effects
@@ -147,7 +147,7 @@
147++ agent
147++ agent
148 |* command-type=mold
148 |* command-type=mold
149 |= =(shoe command-type)
149 |= =(shoe command-type)
150− =| state-1
150+ =| state-2
151 =* state -
151 =* state -
152 ^- agent:gall
152 ^- agent:gall
153 =>
153 =>
@@ -188,7 +188,7 @@
188 =^ cards shoe on-init:og
188 =^ cards shoe on-init:og
189 [(deal cards) this]
189 [(deal cards) this]
190 ::
190 ::
191− ++ on-save !>([%shoe-app on-save:og state])
191+ ++ on-save :(slop !>(%shoe-app) on-save:og !>(state))
192 ::
192 ::
193 ++ on-load
193 ++ on-load
194 |= old-state=vase
194 |= old-state=vase
@@ -201,23 +201,32 @@
201 ?. ?=([%shoe-app ^] q.old-state)
201 ?. ?=([%shoe-app ^] q.old-state)
202 =^ cards shoe (on-load:og old-state)
202 =^ cards shoe (on-load:og old-state)
203 [(deal cards) this]
203 [(deal cards) this]
204+ |^ :: versions %0 and %1 stored the inner state double-vased.
205+ :: fixing this coincided with the 408 type-of-type migration.
206+ ::
207+ ?: ?=([%shoe-app * ?(%0 %1) *] q.old-state)
204− |^ =| old-outer=state-any
208+ =| old-outer=state-any
205− =^ old-inner old-outer
209+ =^ old-inner old-outer
206− +:!<([%shoe-app vase state-any] old-state)
210+ +:!<([%shoe-app vase:h136 state-any] old-state)
207− :: ~! q.old-state
208− :: ?+ +>.q.old-state !!
209− :: [%0 *] +:!<([%shoe-app vase state-0] old-state)
210− :: [%1 *] +:!<([%shoe-app vase state-1] old-state)
211− :: ==
212− =^ caz shoe (on-load:og old-inner)
211+ =^ caz shoe (on-load:og (next-vase:h136 old-inner))
213− =^ cuz old-outer
212+ =^ cuz old-outer
214− ?. ?=(%0 -.old-outer) [~ old-outer]
213+ ?. ?=(%0 -.old-outer) [~ old-outer]
215− (state-0-to-1 old-outer)
214+ (state-0-to-1 old-outer)
216− ?> ?=(%1 -.old-outer)
215+ =? old-outer ?=(%1 -.old-outer) (state-1-to-2 old-outer)
216+ ?> ?=(%2 -.old-outer)
217− [(weld cuz (deal caz)) this(state old-outer)]
217+ [(weld cuz (deal caz)) this(state old-outer)]
218+ ::
219+ =+ !<(old=state-any (slot 7 old-state))
220+ ?> ?=(%2 -.old)
221+ =. state old
222+ ::
223+ =^ caz shoe (on-load:og (slot 6 old-state))
224+ [(deal caz) this]
218 ::
225 ::
219− +$ state-any $%(state-1 state-0)
226+ +$ state-any $%(state-2 state-1 state-0)
227+ +$ state-1 _%*(. *state-2 - %1)
220 +$ state-0 [%0 soles=(map @ta sole-share)]
228 +$ state-0 [%0 soles=(map @ta sole-share)]
229+ ++ state-1-to-2 |=(old=state-1 old(- %2))
221 ++ state-0-to-1
230 ++ state-0-to-1
222 |= old=state-0
231 |= old=state-0
223 ^- (quip card:agent:gall state-1)
232 ^- (quip card:agent:gall state-1)
base-desk/lib/strandio.hoon+112−6
@@ -182,16 +182,49 @@
182 `[%done ~]
182 `[%done ~]
183 `[%fail %timer-error u.error.sign-arvo.u.in.tin]
183 `[%fail %timer-error u.error.sign-arvo.u.in.tin]
184 ==
184 ==
185+++ take-whey
186+ |= =wire
187+ =/ m (strand ,[spar:ames fragment-size=@ud num-fragments=@ud])
188+ ^- form:m
189+ |= tin=strand-input:strand
190+ ?+ in.tin `[%skip ~]
191+ ~ `[%wait ~]
192+ ::
193+ [~ %sign * %ames %sage sage=*]
194+ ?. =(wire wire.u.in.tin)
195+ `[%skip ~]
196+ =/ =sage:mess:ames sage.sign-arvo.u.in.tin
197+ :^ ~ %done spar=p.sage
198+ ?~ q.sage
199+ [boq=13 tot=0]
200+ =< [boq tot]
201+ ;;([%whey boq=@ud tot=@ud] q.sage)
202+ ==
185::
203::
186−++ take-tune
204+++ take-sage
187 |= =wire
205 |= =wire
188− =/ m (strand ,[spar:ames (unit roar:ames)])
206+ =/ m (strand ,sage:mess:ames)
189 ^- form:m
207 ^- form:m
190 |= tin=strand-input:strand
208 |= tin=strand-input:strand
191 ?+ in.tin `[%skip ~]
209 ?+ in.tin `[%skip ~]
192 ~ `[%wait ~]
210 ~ `[%wait ~]
193 ::
211 ::
194− [~ %sign * %ames %tune ^ *]
212+ [~ %sign * %ames %sage sage=*]
213+ ?. =(wire wire.u.in.tin)
214+ `[%skip ~]
215+ `[%done sage.sign-arvo.u.in.tin]
216+ ==
217+:: XX deprecate in 409k
218+::
219+++ take-near
220+ |= =wire
221+ =/ m (strand ,[spar:ames (unit (unit page))])
222+ ^- form:m
223+ |= tin=strand-input:strand
224+ ?+ in.tin `[%skip ~]
225+ ~ `[%wait ~]
226+ ::
227+ [~ %sign * %ames %near ^ *]
195 ?. =(wire wire.u.in.tin)
228 ?. =(wire wire.u.in.tin)
196 `[%skip ~]
229 `[%skip ~]
197 `[%done +>.sign-arvo.u.in.tin]
230 `[%done +>.sign-arvo.u.in.tin]
@@ -331,11 +364,77 @@
331 ;< ~ bind:m (send-wait until)
364 ;< ~ bind:m (send-wait until)
332 (take-wake `until)
365 (take-wake `until)
333::
366::
367+++ mass
368+ =/ m (strand ,(list quac:dill))
369+ ^- form:m
370+ =/ =card:agent:gall [%pass /mass %arvo %d %mass ~]
371+ ;< ~ bind:m (send-raw-card card)
372+ ;< quz=(list quac:dill) bind:m take-meme
373+ (pure:m quz)
374+::
375+++ take-meme
376+ =/ m (strand ,(list quac:dill))
377+ ^- form:m
378+ |= tin=strand-input:strand
379+ ?+ in.tin `[%skip ~]
380+ ~ `[%wait ~]
381+ [~ %sign [%mass ~] %dill %meme *]
382+ `[%done p.sign-arvo.u.in.tin]
383+ ==
384+::
334++ keen
385++ keen
386+ |= [=wire =spar:ames sec=(unit [@ @])]
387+ =/ m (strand ,~)
388+ ^- form:m
389+ (send-raw-card %pass wire %arvo %a %keen sec spar)
390+::
391+++ chum
392+ |= [=wire =spar:ames]
393+ =/ m (strand ,~)
394+ ^- form:m
395+ (send-raw-card %pass wire %arvo %a %chum spar)
396+::
397+++ keen-shut
398+ |= [=wire =spar:ames]
399+ =/ m (strand ,~)
400+ ^- form:m
401+ (send-raw-card %pass wire %keen & spar)
402+::
403+++ yawn
404+ |= [=wire =spar:ames]
405+ =/ m (strand ,~)
406+ ^- form:m
407+ (send-raw-card %pass wire %arvo %a %yawn spar)
408+::
409+++ whey
410+ |= [=wire boq=@ud =spar:ames]
411+ =/ m (strand ,~)
412+ ^- form:m
413+ :: encrypted using %chum namespace
414+ ::
415+ ;< our=@p bind:m get-our
416+ =. path.spar
417+ [%a %x '1' %$ %whey (scot %ud boq) (scot %p our) path.spar]
418+ (chum wire spar)
419+::
420+++ meta
335 |= [=wire =spar:ames]
421 |= [=wire =spar:ames]
336 =/ m (strand ,~)
422 =/ m (strand ,~)
337 ^- form:m
423 ^- form:m
424+ ?+ path.spar !!
425+ $% [%ames bone=@ %cork ~]
426+ [%ames bone=@ %sent seq=@ ~]
427+ [%flow bone=@ =dire:ames %cork ~]
428+ [?(%ames %flow) bone=@ =dire:ames ?(%sent %loads %naxp %acked) seq=@ ~]
429+ ==
430+ :: encrypted using %chum namespace
431+ ::
432+ ;< our=@p bind:m get-our
338− (send-raw-card %pass wire %arvo %a %keen spar)
433+ %- send-raw-card
434+ :* %pass wire %arvo %a %chum
435+ spar(path [%a %x '1' %$ %meta (scot %p our) path.spar])
436+ ==
437+ ==
339::
438::
340++ sleep
439++ sleep
341 |= for=@dr
440 |= for=@dr
@@ -594,6 +693,14 @@
594 (strand-fail %list-tree >arg< ~)
693 (strand-fail %list-tree >arg< ~)
595 (pure:m !<((list path) q.r.u.riot))
694 (pure:m !<((list path) q.r.u.riot))
596::
695::
696+++ list-desk
697+ |= [[=ship =desk =case] =spur]
698+ =* arg +<
699+ =/ m (strand arch)
700+ ;< =riot:clay bind:m (warp ship desk ~ %sing %y case spur)
701+ ?~ riot
702+ (strand-fail %list-desk >arg< ~)
703+ (pure:m !<(arch q.r.u.riot))
597:: Take Clay read result
704:: Take Clay read result
598::
705::
599++ take-writ
706++ take-writ
@@ -802,11 +909,10 @@
802 =/ poke-vase !>(`start-args:spider`[`tid.bowl `tid byk.bowl file args])
909 =/ poke-vase !>(`start-args:spider`[`tid.bowl `tid byk.bowl file args])
803 ;< ~ bind:m (watch-our /awaiting/[tid] %spider /thread-result/[tid])
910 ;< ~ bind:m (watch-our /awaiting/[tid] %spider /thread-result/[tid])
804 ;< ~ bind:m (poke-our %spider %spider-start poke-vase)
911 ;< ~ bind:m (poke-our %spider %spider-start poke-vase)
805− ;< ~ bind:m (sleep ~s0) :: wait for thread to start
806 ;< =cage bind:m (take-fact /awaiting/[tid])
912 ;< =cage bind:m (take-fact /awaiting/[tid])
807 ;< ~ bind:m (take-kick /awaiting/[tid])
913 ;< ~ bind:m (take-kick /awaiting/[tid])
808 ?+ p.cage ~|([%strange-thread-result p.cage file tid] !!)
914 ?+ p.cage ~|([%strange-thread-result p.cage file tid] !!)
809 %thread-done (pure:m %& q.cage)
915 %thread-done (pure:m %& q.cage)
810− %thread-fail (pure:m %| ;;([term tang] q.q.cage))
916+ %thread-fail (pure:m %| !<([term tang] q.cage))
811 ==
917 ==
812--
918--
base-desk/lib/test.hoon+22−1
@@ -40,7 +40,7 @@
40 %| ~
40 %| ~
41 %& ['expected failure - succeeded' ~]
41 %& ['expected failure - succeeded' ~]
42 ==
42 ==
43−:: +expect-runs: kicks a trap, expecting success; returns trace on failure
43+:: +expect-success: kicks a trap, expecting success; returns trace on failure
44::
44::
45++ expect-success
45++ expect-success
46 |= a=(trap)
46 |= a=(trap)
@@ -50,6 +50,27 @@
50 %& ~
50 %& ~
51 %| ['expected success - failed' p.b]
51 %| ['expected success - failed' p.b]
52 ==
52 ==
53+::
54+:: +expect-fail-message: kicks a trap, expecting crash, compares the resulting error message
55+++ expect-fail-message
56+ |= [msg=@t a=(trap)]
57+ ^- tang
58+ =/ b (mule a)
59+ ?- -.b
60+ %| |^
61+ =/ =tang (flatten +.b)
62+ ?: ?=(^ (find (trip msg) tang))
63+ ~
64+ ['expected error message - not found' ~]
65+ ++ flatten
66+ |= tang=(list tank)
67+ =| res=tape
68+ |- ^- tape
69+ ?~ tang res
70+ $(tang t.tang, res (weld ~(ram re i.tang) res))
71+ --
72+ %& ['expected failure - succeeded' ~]
73+ ==
53:: $a-test-chain: a sequence of tests to be run
74:: $a-test-chain: a sequence of tests to be run
54::
75::
55:: NB: arms shouldn't start with `test-` so that `-test % ~` runs
76:: NB: arms shouldn't start with `test-` so that `-test % ~` runs
base-desk/lib/verb.hoon+88−11
@@ -1,6 +1,6 @@
1:: Print what your agent is doing.
1:: Print what your agent is doing.
2::
2::
3−/- verb
3+/- *verb
4::
4::
5|= [loud=? =agent:gall]
5|= [loud=? =agent:gall]
6=| bowl-print=_|
6=| bowl-print=_|
@@ -14,7 +14,10 @@
14 ^- (quip card:agent:gall agent:gall)
14 ^- (quip card:agent:gall agent:gall)
15 %- (print bowl |.("{<dap.bowl>}: on-init"))
15 %- (print bowl |.("{<dap.bowl>}: on-init"))
16 =^ cards agent on-init:ag
16 =^ cards agent on-init:ag
17− [[(emit-event %on-init ~) cards] this]
17+ :_ this
18+ :_ :_ cards
19+ (emit-event %on-init ~)
20+ (emit-event-plus bowl [%on-init ~] cards)
18::
21::
19++ on-save
22++ on-save
20 ^- vase
23 ^- vase
@@ -26,7 +29,10 @@
26 ^- (quip card:agent:gall agent:gall)
29 ^- (quip card:agent:gall agent:gall)
27 %- (print bowl |.("{<dap.bowl>}: on-load"))
30 %- (print bowl |.("{<dap.bowl>}: on-load"))
28 =^ cards agent (on-load:ag old-state)
31 =^ cards agent (on-load:ag old-state)
29− [[(emit-event %on-load ~) cards] this]
32+ :_ this
33+ :_ :_ cards
34+ (emit-event %on-load ~)
35+ (emit-event-plus bowl [%on-load ~] cards)
30::
36::
31++ on-poke
37++ on-poke
32 |= [=mark =vase]
38 |= [=mark =vase]
@@ -38,17 +44,23 @@
38 %bowl `this(bowl-print !bowl-print)
44 %bowl `this(bowl-print !bowl-print)
39 ==
45 ==
40 =^ cards agent (on-poke:ag mark vase)
46 =^ cards agent (on-poke:ag mark vase)
41− [[(emit-event %on-poke mark) cards] this]
47+ :_ this
48+ :_ :_ cards
49+ (emit-event %on-poke mark)
50+ (emit-event-plus bowl [%on-poke mark (mug q.vase)] cards)
42::
51::
43++ on-watch
52++ on-watch
44 |= =path
53 |= =path
45 ^- (quip card:agent:gall agent:gall)
54 ^- (quip card:agent:gall agent:gall)
46 %- (print bowl |.("{<dap.bowl>}: on-watch on path {<path>}"))
55 %- (print bowl |.("{<dap.bowl>}: on-watch on path {<path>}"))
47 =^ cards agent
56 =^ cards agent
48− ?: ?=([%verb %events ~] path)
57+ ?: ?=([%verb ?(%events %events-plus) ~] path)
49 [~ agent]
58 [~ agent]
50 (on-watch:ag path)
59 (on-watch:ag path)
51− [[(emit-event %on-watch path) cards] this]
60+ :_ this
61+ :_ :_ cards
62+ (emit-event %on-watch path)
63+ (emit-event-plus bowl [%on-watch path] cards)
52::
64::
53++ on-leave
65++ on-leave
54 |= =path
66 |= =path
@@ -57,7 +69,10 @@
57 ?: ?=([%verb %event ~] path)
69 ?: ?=([%verb %event ~] path)
58 [~ this]
70 [~ this]
59 =^ cards agent (on-leave:ag path)
71 =^ cards agent (on-leave:ag path)
60− [[(emit-event %on-leave path) cards] this]
72+ :_ this
73+ :_ :_ cards
74+ (emit-event %on-leave path)
75+ (emit-event-plus bowl [%on-leave path] cards)
61::
76::
62++ on-peek
77++ on-peek
63 |= =path
78 |= =path
@@ -70,7 +85,17 @@
70 ^- (quip card:agent:gall agent:gall)
85 ^- (quip card:agent:gall agent:gall)
71 %- (print bowl |.("{<dap.bowl>}: on-agent on wire {<wire>}, {<-.sign>}"))
86 %- (print bowl |.("{<dap.bowl>}: on-agent on wire {<wire>}, {<-.sign>}"))
72 =^ cards agent (on-agent:ag wire sign)
87 =^ cards agent (on-agent:ag wire sign)
73− [[(emit-event %on-agent wire -.sign) cards] this]
88+ :_ this
89+ :_ :_ cards
90+ (emit-event %on-agent wire -.sign)
91+ =; =^sign
92+ (emit-event-plus bowl [%on-agent wire sign] cards)
93+ ?- -.sign
94+ %poke-ack [%poke-ack ?=(~ p.sign)]
95+ %watch-ack [%watch-ack ?=(~ p.sign)]
96+ %kick [%kick ~]
97+ %fact [%fact p.cage.sign (mug q.q.cage.sign)]
98+ ==
74::
99::
75++ on-arvo
100++ on-arvo
76 |= [=wire =sign-arvo]
101 |= [=wire =sign-arvo]
@@ -78,14 +103,20 @@
78 %- %+ print bowl |.
103 %- %+ print bowl |.
79 "{<dap.bowl>}: on-arvo on wire {<wire>}, {<[- +<]:sign-arvo>}"
104 "{<dap.bowl>}: on-arvo on wire {<wire>}, {<[- +<]:sign-arvo>}"
80 =^ cards agent (on-arvo:ag wire sign-arvo)
105 =^ cards agent (on-arvo:ag wire sign-arvo)
81− [[(emit-event %on-arvo wire [- +<]:sign-arvo) cards] this]
106+ :_ this
107+ :_ :_ cards
108+ (emit-event %on-arvo wire [- +<]:sign-arvo)
109+ (emit-event-plus bowl [%on-arvo wire [- +<]:sign-arvo] cards)
82::
110::
83++ on-fail
111++ on-fail
84 |= [=term =tang]
112 |= [=term =tang]
85 ^- (quip card:agent:gall agent:gall)
113 ^- (quip card:agent:gall agent:gall)
86 %- (print bowl |.("{<dap.bowl>}: on-fail with term {<term>}"))
114 %- (print bowl |.("{<dap.bowl>}: on-fail with term {<term>}"))
87 =^ cards agent (on-fail:ag term tang)
115 =^ cards agent (on-fail:ag term tang)
88− [[(emit-event %on-fail term) cards] this]
116+ :_ this
117+ :_ :_ cards
118+ (emit-event %on-fail term)
119+ (emit-event-plus bowl [%on-fail term] cards)
89--
120--
90::
121::
91++ print
122++ print
@@ -99,7 +130,53 @@
99 same
130 same
100::
131::
101++ emit-event
132++ emit-event
102− |= =event:verb
133+ |= =event
103 ^- card:agent:gall
134 ^- card:agent:gall
104 [%give %fact ~[/verb/events] %verb-event !>(event)]
135 [%give %fact ~[/verb/events] %verb-event !>(event)]
136+::
137+++ emit-event-plus
138+ |= [=bowl:gall =cause cards=(list card:agent:gall)]
139+ ^- card:agent:gall
140+ =; event=event-plus
141+ [%give %fact ~[/verb/events-plus] %verb-event-plus !>(event)]
142+ =- [act.bowl now.bowl src.bowl sap.bowl cause -]
143+ %+ turn cards
144+ |= =card:agent:gall
145+ ^- effect
146+ ::TODO for %fact, %kick, could calculate how many ships affected
147+ ?- card
148+ [%pass * %agent * ?(%poke %poke-as) *]
149+ =, q.card
150+ =/ =cage ?-(-.task.q.card %poke cage.task, %poke-as [mark.task q.cage.task])
151+ [%poke p.card [ship name] p.cage `@`(mug q.q.cage)]
152+ ::
153+ [%pass * %agent * ?(%watch %watch-as) *]
154+ =, q.card
155+ =/ =path ?-(-.task.q.card %watch path.task, %watch-as path.task)
156+ [%watch p.card [ship name] path]
157+ ::
158+ [%pass * %agent * %leave *]
159+ =, q.card
160+ [%leave p.card [ship name]]
161+ ::
162+ [%give %fact *]
163+ =, p.card
164+ [%fact paths p.cage (mug q.q.cage)]
165+ ::
166+ [%give %kick *]
167+ [%kick paths.p.card]
168+ ::
169+ [%give ?(%poke-ack %watch-ack) *]
170+ ~| %explicit-ack
171+ !! :: shouldn't be given explicitly
172+ ::
173+ [%pass * %arvo *]
174+ [%arvo p.card -.q.card +<.q.card]
175+ ::
176+ [%pass *]
177+ [%arvo p.card %$ -.q.card]
178+ ::
179+ [%slip *]
180+ $(card [%pass //slip p.card])
181+ ==
105--
182--
base-desk/mar/css.hoon+9−5
@@ -6,11 +6,15 @@
6=, mimes:html
6=, mimes:html
7|_ mud=@t
7|_ mud=@t
8++ grow :: convert to
8++ grow :: convert to
9+ |%
9− |% ++ mime [/text/css (as-octs mud)] :: convert to %mime
10+ ++ mime [/text/css (as-octs mud)] :: convert to %mime
10− ++ elem ;style :: convert to %hymn
11+ ++ hymn :: convert to %hymn
12+ |^ html
13+ ++ style ;style
11− ;- (trip mud)
14+ ;- (trip mud)
12− ==
15+ ==
13− ++ hymn ;html:(head:"{elem}" body)
16+ ++ html ;html:(head:"{style}" body)
17+ --
14 --
18 --
15++ grab
19++ grab
16 |% :: convert from
20 |% :: convert from
base-desk/mar/hoon.hoon+285−31
@@ -1,41 +1,295 @@
1−:::: /hoon/hoon/mar
2− ::
3−/? 310
4−::
5−=, eyre
6|_ own=@t
1|_ own=@t
7::
2::
8++ grow :: convert to
3++ grow :: convert to
9 |%
4 |%
10 ++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime
5 ++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime
11− ++ elem :: convert to %html
12− ;div:pre(urb_codemirror "", mode "hoon"):"{(trip own)}"
13− :: =+ gen-id="src-{<`@ui`(mug own)>}"
14− :: ;div
15− :: ;textarea(id "{gen-id}"):"{(trip own)}"
16− :: ;script:"""
17− :: CodeMirror.fromTextArea(
18− :: window[{<gen-id>}],
19− :: \{lineNumbers:true, readOnly:true}
20− :: )
21− :: """
22− :: ==
23 ++ hymn
6 ++ hymn
24− :: ;html:(head:title:"Source" "+{elem}")
7+ ^- manx
25− ;html
8+ =/ to-wall
26− ;head
9+ |= =tape
27− ;title:"Source"
10+ ^- wall
28− ;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js";
11+ %+ roll (flop tape)
29− ;script@"/lib/syntax/hoon.js";
12+ |= [char=@tD =wall]
30− ;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/".
13+ ?~ wall
31− "codemirror/4.3.0/codemirror.min.css");
14+ [[char ~] ~]
32− ;link/"/lib/syntax/codemirror.css"(rel "stylesheet");
15+ ?: =('\0a' char)
33− ==
16+ [~ wall]
34− ;body
17+ [[char i.wall] t.wall]
18+ ::
35− ;textarea#src:"{(trip own)}"
19+ =/ src=tape (trip own)
36− ;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})'
20+ =/ count=@ud (lent (to-wall src))
21+ =; [style=tape script=tape]
22+ ;html
23+ ;head
24+ ;title: source
25+ ;meta(charset "utf-8");
26+ ;meta(name "viewport", content "width=device-width, initial-scale=1");
27+ ;style: {style}
28+ ==
29+ ;body
30+ ;div.viewer
31+ :: ;div.viewer-bar
32+ :: ;span.viewer-name: {(scow %ud count)} lines
33+ :: ;button.copy-link(id "copy-link", hidden ""): copy link
34+ :: ==
35+ ;div.code
36+ ;pre.gutter(id "gutter");
37+ ;div.code-body
38+ ;div(id "hl");
39+ ;pre.code-pre(id "code"): {src}
40+ ==
41+ ==
42+ ==
43+ ;script: {script}
44+ ==
37 ==
45 ==
38− ==
46+ ::
47+ :-
48+ ^~ ^= style
49+ ^- tape
50+ %- trip
51+ '''
52+ :root {
53+ --bg: #fbfbf9;
54+ --panel: #ffffff;
55+ --gutter-bg: #f3f3ef;
56+ --line: #e4e4dd;
57+ --fg: #2b2b2b;
58+ --fg-dim: #9a9a90;
59+ --sel: #fff7d6;
60+ --sel-edge: #f1e4a8;
61+ --accent: #4a6da7;
62+ --lh: 20px;
63+ --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
64+ "Liberation Mono", "Courier New", monospace;
65+ }
66+ * { box-sizing: border-box; }
67+ html, body {
68+ margin: 0;
69+ height: 100%;
70+ background: var(--bg);
71+ color: var(--fg);
72+ font-family: var(--mono);
73+ -webkit-font-smoothing: antialiased;
74+ }
75+ .viewer {
76+ height: 100vh;
77+ display: flex;
78+ flex-direction: column;
79+ padding: 16px;
80+ gap: 12px;
81+ }
82+ .viewer-bar {
83+ flex: 0 0 auto;
84+ display: flex;
85+ align-items: center;
86+ gap: 12px;
87+ font-size: 13px;
88+ color: var(--fg-dim);
89+ }
90+ .viewer-name {
91+ flex: 1 1 auto;
92+ min-width: 0;
93+ overflow: hidden;
94+ text-overflow: ellipsis;
95+ white-space: nowrap;
96+ color: var(--fg);
97+ }
98+ .copy-link {
99+ flex: 0 0 auto;
100+ padding: 4px 12px;
101+ border: 1px solid var(--line);
102+ border-radius: 6px;
103+ background: var(--panel);
104+ color: var(--fg-dim);
105+ font: inherit;
106+ font-size: 12px;
107+ cursor: pointer;
108+ transition: color .12s, border-color .12s;
109+ }
110+ .copy-link:hover { color: var(--accent); border-color: var(--accent); }
111+ .copy-link[hidden] { display: none; }
112+ .code {
113+ flex: 1 1 auto;
114+ min-height: 0;
115+ display: flex;
116+ align-items: flex-start;
117+ overflow: auto;
118+ background: var(--panel);
119+ border: 1px solid var(--line);
120+ border-radius: 8px;
121+ }
122+ .code-body {
123+ position: relative;
124+ flex: 1 1 auto;
125+ min-width: 0;
126+ width: max-content;
127+ }
128+ #gutter, #code {
129+ margin: 0;
130+ padding: 14px 0;
131+ font-family: var(--mono);
132+ font-size: 13px;
133+ line-height: var(--lh);
134+ white-space: pre;
135+ tab-size: 2;
136+ }
137+ #gutter {
138+ position: sticky;
139+ left: 0;
140+ z-index: 2;
141+ flex: 0 0 auto;
142+ padding-left: 16px;
143+ padding-right: 12px;
144+ text-align: right;
145+ color: var(--fg-dim);
146+ background: var(--gutter-bg);
147+ border-right: 1px solid var(--line);
148+ user-select: none;
149+ -webkit-user-select: none;
150+ cursor: pointer;
151+ }
152+ #code {
153+ display: block;
154+ padding-left: 14px;
155+ padding-right: 18px;
156+ color: var(--fg);
157+ }
158+ #hl {
159+ position: absolute;
160+ left: 0;
161+ right: 0;
162+ z-index: 0; /* under the text */
163+ display: none;
164+ background: var(--sel);
165+ box-shadow: inset 2px 0 0 var(--sel-edge);
166+ pointer-events: none;
167+ }
168+ #code { position: relative; z-index: 1; } /* text above the bar */
169+ :focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
170+ '''
171+ ^~ ^= code
172+ ^- tape
173+ %- trip
174+ '''
175+ (function () {
176+ "use strict";
177+ const panel = document.querySelector(".code"); // the scroll container
178+ const code = document.getElementById("code");
179+ const gutter = document.getElementById("gutter");
180+ const hl = document.getElementById("hl");
181+ if (!panel || !code || !gutter || !hl) return;
182+ const text = code.textContent;
183+ let lineCount = text.length ? text.split("\n").length : 1;
184+ if (text.endsWith("\n")) lineCount -= 1;
185+ if (lineCount < 1) lineCount = 1;
186+ (function fillGutter() {
187+ let s = "";
188+ for (let i = 1; i <= lineCount; i++) s += i + "\n";
189+ gutter.textContent = s;
190+ })();
191+ let lineH = 0;
192+ let codeTop = 0; // code's content-box top padding, the y-origin of line 1
193+ function measure() {
194+ const cs = getComputedStyle(code);
195+ const lh = parseFloat(cs.lineHeight);
196+ lineH = isNaN(lh) ? parseFloat(cs.fontSize) * 1.55 : lh;
197+ codeTop = parseFloat(cs.paddingTop) || 0;
198+ positionHighlight(); // keep the bar correct after a re-measure
199+ }
200+ let anchor = null;
201+ let selLo = 0;
202+ let selHi = 0;
203+ function positionHighlight() {
204+ if (!selLo) { hl.style.display = "none"; return; }
205+ hl.style.display = "block";
206+ hl.style.top = (codeTop + (selLo - 1) * lineH) + "px";
207+ hl.style.height = ((selHi - selLo + 1) * lineH) + "px";
208+ }
209+ function applySel(lo, hi) {
210+ selLo = lo;
211+ selHi = hi;
212+ positionHighlight();
213+ }
214+ function deselect() {
215+ selLo = selHi = 0;
216+ anchor = null;
217+ positionHighlight();
218+ history.replaceState(null, "", location.pathname + location.search);
219+ }
220+ function parseHash(hash) {
221+ const m = /^#L(\d+)(?:-L(\d+))?$/.exec(hash || "");
222+ if (!m) return null;
223+ let lo = parseInt(m[1], 10);
224+ let hi = m[2] ? parseInt(m[2], 10) : lo;
225+ if (hi < lo) { const t = lo; lo = hi; hi = t; }
226+ lo = Math.max(1, Math.min(lo, lineCount));
227+ hi = Math.max(1, Math.min(hi, lineCount));
228+ return [lo, hi];
229+ }
230+ function setHash(lo, hi) {
231+ const frag = lo === hi ? "L" + lo : "L" + lo + "-L" + hi;
232+ history.replaceState(null, "", "#" + frag);
233+ }
234+ function scrollToLine(n) {
235+ const y = codeTop + (n - 1) * lineH;
236+ if (y < panel.scrollTop || y > panel.scrollTop + panel.clientHeight) {
237+ panel.scrollTop = Math.max(0, y - panel.clientHeight / 2);
238+ }
239+ }
240+ function selectFromHash(scroll) {
241+ const r = parseHash(location.hash);
242+ if (!r) return false;
243+ anchor = r[0];
244+ applySel(r[0], r[1]);
245+ if (scroll) scrollToLine(r[0]);
246+ return true;
247+ }
248+ function lineFromEvent(e) {
249+ // y within the code content: pointer relative to the code pre's rendered
250+ // top, which already accounts for scroll since getBoundingClientRect is
251+ // viewport-relative and the pre moves as the panel scrolls.
252+ const rect = code.getBoundingClientRect();
253+ const y = e.clientY - rect.top - codeTop;
254+ let n = Math.floor(y / lineH) + 1;
255+ if (n < 1) n = 1;
256+ if (n > lineCount) n = lineCount;
257+ return n;
258+ }
259+ function onClick(e) {
260+ const inGutter = e.target === gutter;
261+ if (!inGutter && !e.shiftKey) return; // normal text interaction in code
262+ const n = lineFromEvent(e);
263+ if (!e.shiftKey && selLo === n && selHi === n) {
264+ deselect();
265+ return;
266+ }
267+ if (e.shiftKey && anchor !== null) {
268+ applySel(Math.min(anchor, n), Math.max(anchor, n));
269+ setHash(selLo, selHi);
270+ } else {
271+ anchor = n;
272+ applySel(n, n);
273+ setHash(n, n);
274+ }
275+ }
276+ gutter.addEventListener("click", onClick);
277+ code.addEventListener("click", onClick);
278+ document.addEventListener("keydown", function (e) {
279+ if (e.key === "Escape") deselect();
280+ });
281+ window.addEventListener("hashchange", function () {
282+ if (!selectFromHash(true)) deselect();
283+ });
284+ let rz = null;
285+ window.addEventListener("resize", function () {
286+ clearTimeout(rz);
287+ rz = setTimeout(measure, 100);
288+ });
289+ measure();
290+ selectFromHash(true);
291+ })();
292+ '''
39 ++ txt
293 ++ txt
40 (to-wain:format own)
294 (to-wain:format own)
41 --
295 --
base-desk/mar/htm.hoon+2−11
@@ -2,14 +2,5 @@
2:::: /hoon/htm/mar
2:::: /hoon/htm/mar
3 ::
3 ::
4/? 310
4/? 310
5−|_ own=manx
5+/= htm /mar/html
6−::
6+htm
7−++ grad %noun
8−++ grow :: convert to
9− |%
10− ++ noun own
11− ++ hymn own
12− --
13−++ grab |% :: convert from
14− ++ noun manx :: clam from %noun
15−-- --
base-desk/mar/js.hoon+7−4
@@ -8,10 +8,13 @@
8++ grow
8++ grow
9 |%
9 |%
10 ++ mime [/application/javascript (as-octs:mimes:html (@t mud))]
10 ++ mime [/application/javascript (as-octs:mimes:html (@t mud))]
11+ ++ hymn :: convert to %hymn
12+ |^ html
11− ++ elem ;script
13+ ++ script ;script
12− ;- (trip (@t mud))
14+ ;- (trip (@t mud))
13− ==
15+ ==
14− ++ hymn ;html:(head:"+{elem}" body)
16+ ++ html ;html:(head:"{script}" body)
17+ --
15 --
18 --
16++ grab
19++ grab
17 |% :: convert from
20 |% :: convert from
base-desk/mar/noun.hoon+3
@@ -8,6 +8,9 @@
8++ grab |%
8++ grab |%
9 ++ noun *
9 ++ noun *
10 --
10 --
11+++ grow |%
12+ ++ mime [/application/x-urb-jam (as-octs:mimes:html (jam non))]
13+ --
11++ grad
14++ grad
12 |%
15 |%
13 ++ form %noun
16 ++ form %noun
base-desk/mar/story.hoon+5−10
@@ -46,18 +46,13 @@
46 [/text/x-urb-story (as-octs:mimes:html (of-wain:format txt))]
46 [/text/x-urb-story (as-octs:mimes:html (of-wain:format txt))]
47 ++ txt
47 ++ txt
48 ^- wain
48 ^- wain
49− %- snoc :_ '' :: ensures terminating newline is present
49+ %- zing
50+ %+ join `wain`~['---']
50 %+ murn ~(tap by tale)
51 %+ murn ~(tap by tale)
51− |= [[=tako:clay =proses]]
52+ |= [=tako:clay =proses]
52− ^- (unit cord)
53+ ^- (unit wain)
53 ?~ proses ~
54 ?~ proses ~
54− %- some
55− %- crip
56− ;: welp
57− (tako-to-text tako)
55+ (some (chapter-to-text tako proses))
58− (proses-to-text proses)
59− "---"
60− ==
61 --
56 --
62++ grab
57++ grab
63 |% :: convert from
58 |% :: convert from
base-desk/mar/tang.hoon+5−5
@@ -16,15 +16,15 @@
16 %& a+p.result
16 %& a+p.result
17 %| a+[a+[%s '[[output rendering error]]']~]~
17 %| a+[a+[%s '[[output rendering error]]']~]~
18 ==
18 ==
19− ::
19+ ++ txt
20− ++ elem
20+ ^- wain
21− =- ;pre:code:"{(of-wall -)}"
22− ^- wall %- zing ^- (list wall)
23− (turn (flop tan) |=(a=tank (wash 0^160 a)))
21+ %+ turn (flop tan)
22+ |=(=tank (crip ~(ram re tank)))
24 --
23 --
25++ grab :: convert from
24++ grab :: convert from
26 |%
25 |%
27 ++ noun (list ^tank) :: clam from %noun
26 ++ noun (list ^tank) :: clam from %noun
28 ++ tank |=(a=^tank [a]~)
27 ++ tank |=(a=^tank [a]~)
28+ ++ txt |=(=wain (flop (turn wain tank)))
29 --
29 --
30--
30--
base-desk/mar/thread-fail.hoon+1−1
@@ -1,4 +1,4 @@
1−|_ err=*
1+|_ err=[term tang]
2++ grab
2++ grab
3 |%
3 |%
4 ++ noun (pair term tang)
4 ++ noun (pair term tang)
base-desk/mar/txt.hoon−1
@@ -18,7 +18,6 @@
18 => v=.
18 => v=.
19 |%
19 |%
20 ++ mime => v [/text/plain (as-octs (of-wain txt))]
20 ++ mime => v [/text/plain (as-octs (of-wain txt))]
21− ++ elem => v ;pre: {(trip (of-wain txt))}
22 --
21 --
23++ grad
22++ grad
24 |%
23 |%
base-desk/mar/udon.hoon−4
@@ -9,10 +9,6 @@
9 ++ mime [/text/x-unmark (as-octs:mimes:html mud)]
9 ++ mime [/text/x-unmark (as-octs:mimes:html mud)]
10 ++ txt
10 ++ txt
11 (to-wain:format mud)
11 (to-wain:format mud)
12− ++ elem
13− ^- manx
14− =, cram
15− elm:(static (ream mud))
16 ++ front :: XX performance, types
12 ++ front :: XX performance, types
17 ^- (map term knot)
13 ^- (map term knot)
18 %- ~(run by inf:(static:cram (ream mud)))
14 %- ~(run by inf:(static:cram (ream mud)))
base-desk/mar/umd.hoon−4
@@ -9,10 +9,6 @@
9 ++ mime [/text/x-unmark (as-octs:mimes:html mud)]
9 ++ mime [/text/x-unmark (as-octs:mimes:html mud)]
10 ++ txt
10 ++ txt
11 (to-wain:format mud)
11 (to-wain:format mud)
12− ++ elem
13− ^- manx
14− =, cram
15− elm:(static (ream mud))
16 ++ front :: XX performance, types
12 ++ front :: XX performance, types
17 ^- (map term knot)
13 ^- (map term knot)
18 %- ~(run by inf:(static:cram (ream mud)))
14 %- ~(run by inf:(static:cram (ream mud)))
base-desk/mar/urb.hoon+1−1
@@ -1,5 +1,5 @@
1::
1::
2−:::: /hoon/elem/urb/mar
2+:::: /hoon/urb/mar
3 ::
3 ::
4/? 310
4/? 310
5=, mimes:html
5=, mimes:html
base-desk/sources.txt+2−3
@@ -1,4 +1,3 @@
1urbit-src/pkg/base-dev
1urbit-src/pkg/base-dev
2−urbit-src/pkg/garden-dev
2+urbit-src/pkg/landscape
3−urbit-src/pkg/arvo/lib/naive
4−urbit-src/pkg/arvo/lib/tiny
3+urbit-src/pkg/arvo
base-desk/sur/aquarium.hoon+8−5
@@ -10,8 +10,6 @@
10:: Short names are simply the first letter of each word plus `s` if
10:: Short names are simply the first letter of each word plus `s` if
11:: it's a list.
11:: it's a list.
12::
12::
13−/+ pill
14−=, pill-lib=pill
15|%
13|%
16+$ az-log [topics=(lest @) data=@t]
14+$ az-log [topics=(lest @) data=@t]
17+$ az-state
15+$ az-state
@@ -34,14 +32,13 @@
34 [%verb p=(unit ?)]
32 [%verb p=(unit ?)]
35 task-arvo
33 task-arvo
36 ==
34 ==
37−+$ pill pill:pill-lib
38::
35::
39+$ aqua-event
36+$ aqua-event
40− $% [%init-ship who=ship fake=?]
37+ $% [%init-ship who=ship fake=? feed=(unit feed:jael)]
41 [%pause-events who=ship]
38 [%pause-events who=ship]
42 [%snap-ships lab=term hers=(list ship)]
39 [%snap-ships lab=term hers=(list ship)]
43 [%restore-snap lab=term]
40 [%restore-snap lab=term]
44− [%read [from=ship =path] [for=lane:ames num=@ud]]
41+ [%read [from=[=ship life=@ubC] =path] for=[=lane:ames life=@ubC] num=@ud]
45 [%event who=ship ue=unix-event]
42 [%event who=ship ue=unix-event]
46 ==
43 ==
47::
44::
@@ -74,6 +71,9 @@
74 %+ pair wire
71 %+ pair wire
75 $% [%blit p=(list blit:dill)]
72 $% [%blit p=(list blit:dill)]
76 [%send p=lane:ames q=@]
73 [%send p=lane:ames q=@]
74+ [%push p=(list lane:pact:ames) q=@]
75+ [%saxo sponsors=(list ship)]
76+ [%nail =ship lanes=(list lane:ames)]
77 [%doze p=(unit @da)]
77 [%doze p=(unit @da)]
78 [%thus p=@ud q=(unit hiss:eyre)]
78 [%thus p=@ud q=(unit hiss:eyre)]
79 [%ergo p=@tas q=mode:clay]
79 [%ergo p=@tas q=mode:clay]
@@ -82,5 +82,8 @@
82 [%kill ~]
82 [%kill ~]
83 [%init ~]
83 [%init ~]
84 [%request id=@ud request=request:http]
84 [%request id=@ud request=request:http]
85+ [%turf p=(list turf)]
86+ [%unto =unto:gall] :: internal gifts to host ships
87+ :: (%facts are transformed to %raw-facts)
85 ==
88 ==
86--
89--
base-desk/sur/hood.hoon+202−98
@@ -10,12 +10,41 @@
10 ==
10 ==
11::
11::
12+$ pikes (map desk pike)
12+$ pikes (map desk pike)
13+:: $jump: changes to update source change requests
13::
14::
15++$ jump
16+ $% [%all all=(map dock dock)] :: pending requests
17+ [%add old=dock new=dock] :: new request
18+ [%yea old=dock new=dock] :: approved
19+ [%nay old=dock new=dock] :: denied
20+ ==
14:: $rung: reference to upstream commit
21:: $rung: reference to upstream commit
15::
22::
16+$ rung [=aeon =weft]
23+$ rung [=aeon =weft]
24+:: #sync-record: source and destination of a kiln sync
25+::
26++$ sync-record ::
27+ $: syd=desk :: local desk
28+ her=ship :: foreign ship
29+ sud=desk :: foreign desk
30+ ==
31+::
32++$ sync-state ::
33+ $: nun=@ta :: nonce
34+ kid=(unit desk) :: has kids desk too?
35+ let=@ud :: next revision
36+ nit=(unit ?) :: automerge or default
37+ hav=(unit @ud) :: update available
38+ yea=? :: update approved
39+ ==
40+::
41++$ sync-update
42+ $% [%new for=sync-record rev=@ud]
43+ [%done for=sync-record rev=@ud]
44+ [%drop for=sync-record rev=@ud]
45+ [%pending pending=(set [for=sync-record rev=@ud])]
46+ ==
17::
47::
18−+$ sync-state [nun=@ta kid=(unit desk) let=@ud]
19+$ sink (unit [her=@p sud=desk kid=(unit desk) let=@ud])
48+$ sink (unit [her=@p sud=desk kid=(unit desk) let=@ud])
20:: +truncate-hash: get last 5 digits of hash and convert to tape
49:: +truncate-hash: get last 5 digits of hash and convert to tape
21::
50::
@@ -30,7 +59,7 @@
30 =/ ego (scot %p our)
59 =/ ego (scot %p our)
31 =/ wen (scot %da now)
60 =/ wen (scot %da now)
32 :* .^(rock:tire %cx /[ego]//[wen]/tire)
61 :* .^(rock:tire %cx /[ego]//[wen]/tire)
33− .^(=cone %cx /[ego]//[wen]/domes)
62+ .^(cone %cx /[ego]//[wen]/domes)
34 .^((map desk [ship desk]) %gx /[ego]/hood/[wen]/kiln/sources/noun)
63 .^((map desk [ship desk]) %gx /[ego]/hood/[wen]/kiln/sources/noun)
35 .^ (map [desk ship desk] sync-state) %gx
64 .^ (map [desk ship desk] sync-state) %gx
36 /[ego]/hood/[wen]/kiln/syncs/noun
65 /[ego]/hood/[wen]/kiln/syncs/noun
@@ -43,43 +72,73 @@
43 ^- tang
72 ^- tang
44 =/ ego (scot %p our)
73 =/ ego (scot %p our)
45 =/ wen (scot %da now)
74 =/ wen (scot %da now)
46− =/ prep (report-prep our now)
75+ =+ prep=[tyr cone sor zyn]=(report-prep our now)
47− ?~ filt
76+ ?: =(%$ filt)
48 %- zing
77 %- zing
78+ %+ turn
79+ ?^ desks
49− %+ turn (flop desks)
80+ (flop desks)
81+ %+ sort ~(tap in ~(key by tyr.prep))
82+ |= [a=desk b=desk]
83+ ?: |(=(a %kids) =(b %base)) &
84+ ?: |(=(a %base) =(b %kids)) |
85+ (aor b a)
50 |=(syd=@tas (report-vat prep our now syd verb))
86 |=(syd=@tas (report-vat prep our now syd verb))
51− =/ deks
87+ =/ deks=(list [=desk =zest wic=(set weft)])
52 ?~ desks
88 ?~ desks
53− %+ sort
89+ %+ sort ~(tap by tyr.prep)
54− (sort ~(tap in -.prep) |=([[a=@ *] b=@ *] !(aor a b)))
90+ |= [[a=desk *] [b=desk *]]
55− |=([[a=@ *] [b=@ *]] ?|(=(a %kids) =(b %base)))
91+ ?: |(=(a %kids) =(b %base)) &
56− %+ skip ~(tap in -.prep)
92+ ?: |(=(a %base) =(b %kids)) |
57− |=([syd=@tas *] =(~ (find ~[syd] desks)))
93+ (aor b a)
94+ %+ murn (flop desks)
95+ |= des=desk
96+ ^- (unit [=desk =zest wic=(set weft)])
97+ ?~ got=(~(get by tyr.prep) des)
98+ ~
99+ `[des u.got]
58 ?: =(filt %blocking)
100 ?: =(filt %blocking)
59− =/ base-wic
101+ =/ base-weft=(unit weft)
60− %+ sort ~(tap by wic:(~(got by -.prep) %base))
102+ %- ~(rep in wic:(~(got by tyr.prep) %base))
61− |=([[* a=@ud] [* b=@ud]] (gth a b))
103+ |= [=weft out=(unit weft)]
104+ ?~ out
105+ `weft
106+ ?: (lth num.weft num.u.out)
107+ out
108+ `weft
62− ?~ base-wic ~[leaf+"%base already up-to-date"]
109+ ?~ base-weft ~['%base already up-to-date']
63 =/ blockers=(list desk)
110 =/ blockers=(list desk)
64− %+ turn
111+ %+ sort
65− %+ skip ~(tap in -.prep)
112+ ^- (list desk)
113+ %+ murn deks
66− |= [* [zest=@tas wic=(set weft)]]
114+ |= [=desk =zest wic=(set weft)]
115+ ^- (unit ^desk)
67− ?. =(zest %live) &
116+ ?. =(%live zest)
117+ ~
68− (~(has in wic) i.base-wic)
118+ ?: (~(has in wic) u.base-weft)
69− |=([syd=desk *] syd)
119+ ~
120+ `desk
121+ aor
70− ?~ blockers ~[leaf+"No desks blocking upgrade, run |bump to apply"]
122+ ?~ blockers ~['No desks blocking upgrade']
71− :- [%rose [" %" "To unblock upgrade run |suspend %" ""] blockers]
72 %- zing
123 %- zing
124+ ^- (list tang)
125+ :- :~ %+ rap 3
126+ :~ 'These desks are blocking upgrade to [%zuse '
127+ (scot %ud num.u.base-weft)
128+ ']:'
129+ == ==
73− %+ turn (flop blockers)
130+ %+ turn blockers
74 |=(syd=desk (report-vat prep our now syd verb))
131 |=(syd=desk (report-vat prep our now syd verb))
75 ::
132 ::
76 %- zing
133 %- zing
77 %+ turn
134 %+ turn
78 ?+ filt !!
135 ?+ filt !!
79− ::
80 %exists
136 %exists
81 %+ skip deks
137 %+ skip deks
82− |=([syd=desk *] =(ud:.^(cass %cw /[ego]/[syd]/[wen]) 0))
138+ |= [syd=desk *]
139+ ?~ got=(~(get by cone.prep) our syd)
140+ &
141+ =(0 let.u.got)
83 ::
142 ::
84 %running
143 %running
85 %+ skim deks
144 %+ skim deks
@@ -90,107 +149,152 @@
90 |= [syd=@tas [zest=@tas *]]
149 |= [syd=@tas [zest=@tas *]]
91 ?| =(syd %kids)
150 ?| =(syd %kids)
92 =(zest %live)
151 =(zest %live)
93− =(ud:.^(cass %cw /[ego]/[syd]/[wen]) 0)
152+ ?~ got=(~(get by cone.prep) our syd)
153+ &
154+ =(0 let.u.got)
94 ==
155 ==
95 ::
156 ::
96 %exists-not
157 %exists-not
97 %+ skim deks
158 %+ skim deks
98− |=([syd=desk *] =(ud:.^(cass %cw /[ego]/[syd]/[wen]) 0))
159+ |= [syd=desk *]
160+ ?~ got=(~(get by cone.prep) our syd)
161+ |
162+ =(0 let.u.got)
99 ==
163 ==
100 |=([syd=desk *] (report-vat prep our now syd verb))
164 |=([syd=desk *] (report-vat prep our now syd verb))
101:: +report-vat: report on a single desk installation
165:: +report-vat: report on a single desk installation
102::
166::
103++ report-vat
167++ report-vat
104− |= $: $: tyr=rock:tire =cone sor=(map desk [ship desk])
168+ |= $: $: tyr=rock:tire =cone sor=(map desk (pair ship desk))
105 zyn=(map [desk ship desk] sync-state)
169 zyn=(map [desk ship desk] sync-state)
106 ==
170 ==
107 our=ship now=@da syd=desk verb=?
171 our=ship now=@da syd=desk verb=?
108 ==
172 ==
109− ^- tang
173+ |^ ^- tang
110− =- :: hack to force wrapped rendering
111− ::
112− :: edg=6 empirically prevents dedent
113− ::
114− %+ roll
115− (~(win re -) [0 6])
116− |=([a=tape b=(list @t)] [(crip a) b])
117− ::
118− ^- tank
119 =/ ego (scot %p our)
174 =/ ego (scot %p our)
120 =/ wen (scot %da now)
175 =/ wen (scot %da now)
121− =+ .^(=cass %cw /[ego]/[syd]/[wen])
176+ ?. ((sane %tas) syd)
122− ?: =(ud.cass 0)
177+ ~[(cat 3 'insane desk: %' syd)]
178+ ?. (~(has by cone) our syd)
123− leaf+"desk does not yet exist: {<syd>}"
179+ ~[(cat 3 'desk does not yet exist: %' syd)]
180+ =/ hash .^(@uv %cz /[ego]/[syd]/[wen])
124 ?: =(%kids syd)
181 ?: =(%kids syd)
125− =+ .^(hash=@uv %cz /[ego]/[syd]/[wen])
126− leaf+"%kids %cz hash: {<hash>}"
182+ ~[(cat 3 '%kids %cz hash: ' (scot %uv hash))]
127− =/ kel-path
128− /[ego]/[syd]/[wen]/sys/kelvin
183+ =/ kel-path /[ego]/[syd]/[wen]/sys/kelvin
129 ?. .^(? %cu kel-path)
184 ?. .^(? %cu kel-path)
130− leaf+"bad desk: {<syd>}"
185+ ~[(cat 3 'bad desk: %' syd)]
131 =+ .^(=waft %cx kel-path)
186 =+ .^(=waft %cx kel-path)
132− :+ %rose ["" "{<syd>}" "::"]
133 ^- tang
187 ^- tang
134− =/ hash .^(@uv %cz /[ego]/[syd]/[wen])
135 =/ =sink
188 =/ =sink
136 ?~ s=(~(get by sor) syd)
189 ?~ s=(~(get by sor) syd)
137 ~
190 ~
138 ?~ z=(~(get by zyn) syd u.s)
191 ?~ z=(~(get by zyn) syd u.s)
139 ~
192 ~
140− `[-.u.s +.u.s +.u.z]
193+ `[p.u.s q.u.s [kid let]:u.z]
141 =/ meb=(list @uv)
194 =/ meb=(list @uv)
142− ?~ sink [hash]~
195+ ?~ sink ~[hash]
196+ %+ turn
197+ .^ (list tako) %cs
143− (mergebase-hashes our syd now her.u.sink sud.u.sink)
198+ /[ego]/[syd]/[wen]/base/(scot %p her.u.sink)/[sud.u.sink]
199+ ==
200+ |=(=tako .^(@uv %cs /[ego]/[syd]/[wen]/hash/(scot %uv tako)))
144 =/ dek (~(got by tyr) syd)
201 =/ dek (~(got by tyr) syd)
145 =/ sat
202 =/ sat
146 ?- zest.dek
203 ?- zest.dek
147− %live "running"
204+ %live 'running'
148− %dead "suspended"
205+ %dead 'suspended'
149− %held "suspended until next update"
206+ %held 'suspended until next update'
150 ==
207 ==
151− =/ kul=tape
152− %+ roll
153− %+ sort
154− ~(tap in (waft-to-wefts:clay waft))
208+ =/ kul=cord (print-wefts (waft-to-wefts waft))
155− |= [a=weft b=weft]
209+ =/ ese=cord
156− ?: =(lal.a lal.b)
210+ ?:(.^(? %cx /[ego]//[wen]/esse/[syd]) 'yes' 'no')
157− (lte num.a num.b)
211+ =/ pax=path /(scot %p our)/[syd]/(scot %da now)
158− (lte lal.a lal.b)
159− |= [=weft =tape]
160− (welp " {<[lal num]:weft>}" tape)
161 ?. verb
212 ?. verb
162− =/ cut=(list tape) (turn meb truncate-hash)
213+ :~ '::'
163− =/ len (lent cut)
214+ =+ .^(exist=? cu+(weld pax /desk/bill))
164− =/ base-hash
215+ ?. exist ' /desk/bill: missing'
165− ?: =(0 len) "~"
216+ =+ .^(dudes=(list dude:gall) cx+(weld pax /desk/bill))
166− ?: =(1 len) (head cut)
217+ (cat 3 ' /desk/bill: ' (crip "{<dudes>}"))
167− "~[{`tape`(zing (join " " `(list tape)`cut))}]"
168− :~ leaf/"/sys/kelvin: {kul}"
169− leaf/"base hash ends in: {base-hash}"
170− leaf/"%cz hash ends in: {(truncate-hash hash)}"
171− leaf/"app status: {sat}"
172− leaf/"pending updates: {<`(list [@tas @ud])`~(tap in wic.dek)>}"
218+ (cat 3 ' pending updates: ' (print-wefts wic.dek))
219+ (cat 3 ' source ship: ' ?~(sink '~' (scot %p her.u.sink)))
220+ (cat 3 ' app status: ' sat)
221+ (cat 3 ' essential desk: ' ese)
222+ (cat 3 ' %cz hash ends in: ' (print-shorthash hash))
223+ (cat 3 ' /sys/kelvin: ' (print-wefts (waft-to-wefts waft)))
224+ (cat 3 '%' syd)
173 ==
225 ==
174 ::
226 ::
175− =/ [on=(list [@tas ?]) of=(list [@tas ?])]
227+ =/ [on=(list @tas) of=(list @tas)]
176− =/ =dome (~(got by cone) our syd)
228+ =/ [on=(list @tas) of=(list @tas)]
177− (skid ~(tap by ren.dome) |=([* ?] +<+))
229+ %- ~(rep by ren:(~(got by cone) our syd))
178− :~ leaf/"/sys/kelvin: {kul}"
230+ |= [[=dude:gall is-on=?] on=(list @tas) of=(list @tas)]
179− leaf/"base hash: {?.(=(1 (lent meb)) <meb> <(head meb)>)}"
231+ ?: is-on
180− leaf/"%cz hash: {<hash>}"
232+ [[dude on] of]
233+ [on [dude of]]
234+ [(sort on aor) (sort of aor)]
235+ :~ '::'
236+ (cat 3 ' pending updates: ' (print-wefts wic.dek))
237+ %^ cat 3 ' kids desk: ' ?~ sink '~'
238+ ?~ kid.u.sink '~'
239+ (cat 3 '%' u.kid.u.sink)
240+ (cat 3 ' source aeon: ' ?~(sink '~' (scot %ud let.u.sink)))
241+ (cat 3 ' source desk: ' ?~(sink '~' (cat 3 '%' sud.u.sink)))
242+ (cat 3 ' source ship: ' ?~(sink '~' (scot %p her.u.sink)))
243+ (cat 3 ' updates: ' ?~(sink 'local' 'remote'))
244+ %^ cat 3 ' publishing ship: ' ?~ got=(get-publisher our syd now)
245+ '~'
246+ (scot %p u.got)
181− ::
247+ ::
248+ (cat 3 ' force off: ' (print-agents of))
249+ (cat 3 ' force on: ' (print-agents on))
182− leaf/"app status: {sat}"
250+ (cat 3 ' app status: ' sat)
183− leaf/"force on: {<(sort (turn on head) aor)>}"
251+ (cat 3 ' essential desk: ' ese)
184− leaf/"force off: {<(sort (turn of head) aor)>}"
185− ::
252+ ::
186− leaf/"publishing ship: {?~(sink <~> <(get-publisher our syd now)>)}"
253+ (cat 3 ' %cz hash: ' (scot %uv hash))
187− leaf/"updates: {?~(sink "local" "remote")}"
254+ (cat 3 ' base hash: ' (print-mergebases meb))
188− leaf/"source ship: {?~(sink <~> <her.u.sink>)}"
255+ (cat 3 ' /sys/kelvin: ' (print-wefts (waft-to-wefts waft)))
189− leaf/"source desk: {?~(sink <~> <sud.u.sink>)}"
256+ (cat 3 '%' syd)
190− leaf/"source aeon: {?~(sink <~> <let.u.sink>)}"
191− leaf/"kids desk: {?~(sink <~> ?~(kid.u.sink <~> <u.kid.u.sink>))}"
192− leaf/"pending updates: {<`(list [@tas @ud])`~(tap in wic.dek)>}"
193 ==
257 ==
258+ ++ print-wefts
259+ |= wefts=(set weft)
260+ ^- @t
261+ ?: =(~ wefts)
262+ '~'
263+ %+ roll (sort ~(tap in wefts) aor)
264+ |= [=weft out=@t]
265+ ?: =('' out)
266+ (rap 3 '[%' lal.weft ' ' (scot %ud num.weft) ']' ~)
267+ (rap 3 out ' [%' lal.weft ' ' (scot %ud num.weft) ']' ~)
268+ ::
269+ ++ print-shorthash
270+ |= hash=@uv
271+ ^- @t
272+ (crip ((v-co:co 5) (end [0 25] hash)))
273+ ::
274+ ++ print-mergebases
275+ |= hashes=(list @uv)
276+ ^- @t
277+ ?~ hashes
278+ '~'
279+ ?~ t.hashes
280+ (scot %uv i.hashes)
281+ %+ roll `(list @uv)`hashes
282+ |= [hash=@uv out=@t]
283+ ?: =('' out)
284+ (print-shorthash hash)
285+ (rap 3 out ' ' (print-shorthash hash) ~)
286+ ::
287+ ++ print-agents
288+ |= agents=(list @tas)
289+ ^- @t
290+ ?~ agents
291+ '~'
292+ %+ roll `(list @tas)`agents
293+ |= [agent=@tas out=@tas]
294+ ?: =('' out)
295+ (cat 3 '%' agent)
296+ (rap 3 out ' %' agent ~)
297+ --
194:: +report-kids: non-vat cz hash report for kids desk
298:: +report-kids: non-vat cz hash report for kids desk
195::
299::
196++ report-kids
300++ report-kids
@@ -200,9 +304,9 @@
200 =/ ego (scot %p our)
304 =/ ego (scot %p our)
201 =/ wen (scot %da now)
305 =/ wen (scot %da now)
202 ?. (~(has in .^((set desk) %cd /[ego]//[wen])) syd)
306 ?. (~(has in .^((set desk) %cd /[ego]//[wen])) syd)
203− leaf/"no %kids desk"
307+ 'no %kids desk'
204 =+ .^(hash=@uv %cz /[ego]/[syd]/[wen])
308 =+ .^(hash=@uv %cz /[ego]/[syd]/[wen])
205− leaf/"%kids %cz hash: {<hash>}"
309+ (cat 3 '%kids %cz hash: ' (scot %uv hash))
206:: +read-bill-foreign: read /desk/bill from a foreign desk
310:: +read-bill-foreign: read /desk/bill from a foreign desk
207::
311::
208++ read-bill-foreign
312++ read-bill-foreign
@@ -262,8 +366,8 @@
262 =/ her (scot %p her)
366 =/ her (scot %p her)
263 =/ ego (scot %p our)
367 =/ ego (scot %p our)
264 =/ wen (scot %da now)
368 =/ wen (scot %da now)
265− %+ turn .^((list tako) %cs ~[ego syd wen %base her sud])
369+ %+ turn .^((list tako) %cs /[ego]/[syd]/[wen]/base/[her]/[sud])
266− |=(=tako .^(@uv %cs ~[ego syd wen %hash (scot %uv tako)]))
370+ |=(=tako .^(@uv %cs /[ego]/[syd]/[wen]/hash/(scot %uv tako)))
267::
371::
268++ enjs
372++ enjs
269 =, enjs:format
373 =, enjs:format
base-desk/sur/ring.hoon+1−1
@@ -15,7 +15,7 @@
15 :: resistance...but if your private keys are compromised, your
15 :: resistance...but if your private keys are compromised, your
16 :: adversary can determine which signatures you made.
16 :: adversary can determine which signatures you made.
17 ::
17 ::
18− y=(unit @udpoint)
18+ y=(unit @uxpoint)
19 ==
19 ==
20:: +ring-signature: higher level ring signature type
20:: +ring-signature: higher level ring signature type
21::
21::
base-desk/sur/spider.hoon+7−1
@@ -1,7 +1,7 @@
1/+ libstrand=strand
1/+ libstrand=strand
2=, strand=strand:libstrand
2=, strand=strand:libstrand
3|%
3|%
4−+$ thread $-(vase _*form:(strand ,vase))
4++$ thread $-(vase shed:khan)
5+$ input [=tid =cage]
5+$ input [=tid =cage]
6+$ tid tid:strand
6+$ tid tid:strand
7+$ bowl bowl:strand
7+$ bowl bowl:strand
@@ -18,4 +18,10 @@
18 file=term
18 file=term
19 =vase
19 =vase
20 ==
20 ==
21++$ inline-args
22+ $: parent=(unit tid)
23+ use=(unit tid)
24+ =beak
25+ =shed:khan
26+ ==
21--
27--
base-desk/sur/sss.hoon+4−8
@@ -10,25 +10,21 @@
10 --
10 --
11+$ aeon @ud
11+$ aeon @ud
12+$ dude dude:agent:gall
12+$ dude dude:agent:gall
13−+$ what ?(%rock %wave)
14++ poke
13++ poke
15 |%
14 |%
16 ++ request
15 ++ request
17 |* paths=mold
16 |* paths=mold
18 $: path=paths
17 $: path=paths
19 =dude
18 =dude
20− when=(unit aeon)
21 ==
19 ==
22 ++ response
20 ++ response
23 |* [=(lake) paths=mold]
21 |* [=(lake) paths=mold]
24 $: path=paths
22 $: path=paths
25 =dude
23 =dude
26− =aeon
24+ $% [what=%tomb ~]
27− $% [type=?(%nigh %yore %tomb) ~]
28− $: type=%scry
29− $% [what=%rock =rock:lake]
25+ [what=%rock =aeon =rock:lake]
30− [what=%wave =wave:lake]
26+ [what=%wave =aeon =wave:lake]
31− == == == ==
27+ == ==
32 ++ on-rock
28 ++ on-rock
33 |* [=(lake) paths=mold]
29 |* [=(lake) paths=mold]
34 $: path=paths
30 $: path=paths
base-desk/sur/verb.hoon+37−1
@@ -9,4 +9,40 @@
9 [%on-arvo =wire vane=term sign=term]
9 [%on-arvo =wire vane=term sign=term]
10 [%on-fail =term]
10 [%on-fail =term]
11 ==
11 ==
12+::
13++$ event-plus
14+ $: act=@ud
15+ now=@da
16+ src=@p
17+ sap=path
18+ =cause
19+ effects=(list effect)
20+ ==
21+::
22++$ cause
23+ $% [%on-init ~]
24+ [%on-load ~]
25+ [%on-poke =mark mug=@ux]
26+ [%on-watch =path]
27+ [%on-leave =path]
28+ [%on-agent =wire =sign]
29+ [%on-arvo =wire vane=term sign=term]
30+ [%on-fail =term]
31+ ==
32+::
33++$ sign
34+ $% [%poke-ack ack=?]
35+ [%watch-ack ack=?]
36+ [%kick ~]
37+ [%fact =mark mug=@ux]
38+ ==
39+::
40++$ effect
41+ $% [%poke =wire =gill:gall =mark mug=@ux]
42+ [%watch =wire =gill:gall =path]
43+ [%leave =wire =gill:gall]
44+ [%fact paths=(list path) =mark mug=@ux]
45+ [%kick paths=(list path)]
46+ [%arvo =wire vane=term task=term]
47+ ==
12−--
48+--
desk/sys.kelvin+1−2
@@ -1,2 +1 @@
1−[%zuse 413]
1+[%zuse 408]
2−[%zuse 412]