Merge remote-tracking branch 'origin/next/kelvin/411' into lf/back-to-school-arc

This commit is contained in:
Liam Fitzgerald 2023-12-07 18:58:51 -05:00
commit a382f168fd
28 changed files with 563 additions and 296 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b9a127ab9bfce5f2bbca0158453da89ca6fc75435c73500b3724ceaee815354b
size 9939814
oid sha256:aec86e0302887b93c51695a08d1383257c5d54e87961a2e859b977fed2f6cdfa
size 9965085

View File

@ -346,6 +346,7 @@
++ on-poke
|= [=mark =vase]
^- (quip card _this)
?> (team:title [our src]:bowl)
=^ cards state
?+ mark (on-poke:def mark vase)
%acme-order (poke-acme-order:ac !<((set turf) vase))

View File

@ -80,6 +80,7 @@
::
++ on-poke
|= [=mark =vase]
?> (team:title [our src]:bowl)
^- step:agent:gall
=^ cards state
?+ mark ~|([%aqua-bad-mark mark] !!)

View File

@ -52,7 +52,7 @@
(handle-http-request id req)
::
%azimuth-action
?> (team:title our.bowl src.bowl)
?> (team:title [our src]:bowl)
=+ !<([%disconnect bind=binding:eyre] vase)
~& >>> "disconnecting at {<bind>}"
:_ this

View File

@ -121,6 +121,7 @@
::
++ on-poke
|= [=mark =vase]
?> (team:title [our src]:bowl)
?. ?=(%azimuth-tracker-poke mark)
(on-poke:def mark vase)
=+ !<(poke=poke-data vase)

View File

@ -208,6 +208,7 @@
++ on-poke
|= [=mark =vase]
^- (quip card _this)
?> (team:title [our src]:bowl)
?: =(%noun mark)
?+ q.vase !!
[%refresh-rate @]

View File

@ -31,6 +31,7 @@
++ on-poke
|= [=mark =vase]
^- (quip card _this)
?> (team:title [our src]:bowl)
?. ?=(%noun mark) [~ this]
?^ in-progress
~& %still-running-please-try-again-later

View File

@ -773,7 +773,7 @@
'next'^(numb next)
::
:- 'unsent-messages' :: as byte sizes
(set-array unsent-messages (cork (cury met 3) numb))
(set-array unsent-messages (cork jam (cork (cury met 3) numb)))
::
'unsent-fragments'^(numb (lent unsent-fragments)) :: as lent
::

View File

@ -807,7 +807,7 @@
::
++ dy-run-generator
!.
|= [cay=cage cig=dojo-config]
|= [cay=cage cig=dojo-config =desk]
^+ +>+>
?. (~(nest ut [%cell [%atom %$ ~] %noun]) | p.q.cay)
:: naked generator; takes one argument
@ -850,7 +850,7 @@
|. ^- vase
=/ gat=vase (slot 3 q.cay)
=/ som=vase (slot 6 gat)
=/ ven=vase !>([now=now.hid eny=eny.hid bec=he-beak])
=/ ven=vase !>([now=now.hid eny=eny.hid bec=he-beak(q.dir desk)])
=/ poz=vase (dy-sore p.cig)
=/ kev=vase
=/ kuv=(unit vase) (slew 7 som)
@ -990,7 +990,7 @@
%te (dy-wool-poke p.bil q.bil)
%ex (dy-mere p.bil)
%dv (dy-sing hand+q.bil %a p.bil (snoc q.bil %hoon))
%ge (dy-run-generator (dy-cage p.p.p.bil) q.p.bil)
%ge (dy-run-generator (dy-cage p.p.p.bil) q.p.bil desk.q.p.p.bil)
%sa
=/ has-mark .?((get-fit:clay he-beak %mar p.bil))
?. has-mark
@ -1748,6 +1748,7 @@
++ on-poke
|= [=mark =vase]
^- (quip card:agent:gall _..on-init)
?> (team:title [our src]:hid)
=^ moves state
^- (quip card:agent:gall house)
?+ mark ~|([%dojo-poke-bad-mark mark] !!)

View File

@ -58,6 +58,7 @@
++ on-poke
|= [=mark =vase]
^- (quip card _this)
?> (team:title [our src]:bowl)
?. ?=(%noun mark) [~ this]
=/ =command !<(command vase)
?- -.command

View File

@ -327,6 +327,7 @@
::
++ on-poke
|= [=mark =vase]
?> (team:title [our src]:bowl)
?: ?=(%noun mark)
~& state
`this

View File

@ -81,6 +81,7 @@
++ on-poke
|= [=mark =vase]
^- (quip card:agent:gall _this)
?> (team:title [our src]:bowl)
:_ this
:_ ~
?+ mark ~|([%unexpected-mark mark] !!)

View File

@ -77,6 +77,7 @@
^+ on-poke:*agent:gall
|= [=mark =vase]
^- (quip card _this)
?> (team:title [our src]:bowl)
=^ cards state
?+ mark (on-poke:def mark vase)
%language-server-rpc-notification

View File

@ -50,6 +50,7 @@
^- (quip card:agent:gall _this)
::
?: &(?=(%noun mark) ?=(%cancel q.vase))
?> (team:title [our src]:bowl)
~& %lens-cancel
[~ this(job.state ~)]
::

View File

@ -36,21 +36,23 @@
[%http until=@da]
[%waiting until=@da]
==
+$ state-1
$: %1
+$ state-2
$: %2
ships=(set ship)
nonce=@ud
$= plan
$~ [%nat ~]
$% [%nat ~]
[%pub ip=(unit @t)]
[%off ~]
[%one ~]
==
==
--
::
%- agent:dbug
::
=| state=state-1
=| state=state-2
=> |%
:: Bind for the the writer monad on (quip effect state)
::
@ -73,6 +75,7 @@
:: and sponsorship changes
::
++ ships
=| force=_|
|%
++ rind (^rind card state)
++ kick
@ -88,8 +91,8 @@
:: behavior here.
::
=/ new-ships (~(gas in *(set ship)) (saxo:title our now our))
=/ removed (~(dif in ships.state) new-ships)
=/ added (~(dif in new-ships) ships.state)
=/ removed (~(dif in ships.state) new-ships)
=/ added (~(dif in new-ships) ships.state)
;< new-state=_state rind
?~ removed `state
[[%pass /jael %arvo %j %nuke removed]~ state]
@ -102,7 +105,7 @@
::
:: Kick even if ships weren't added or removed
::
(kick-pings our now new-ships)
(kick-pings our now new-ships force)
::
:: Kick whenever we get a response. We really care about
:: breaches and sponsorship changes.
@ -115,24 +118,28 @@
^- (quip card _state)
[[%pass /jael/delay %arvo %b %wait now]~ state]
::
++ take-delay kick
++ take-delay %*(kick ships force %.y)
--
::
:: Starts pinging a new set of `ships`.
::
++ kick-pings
|= [our=@p now=@da ships=(set ship)]
|= [our=@p now=@da ships=(set ship) force=?]
^- (quip card _state)
=: nonce.state +(nonce.state)
ships.state ships
==
::
?: ?=(%nat -.plan.state)
(kick:nat our)
(kick:pub our now)
?: force (kick:nat our)
?- -.plan.state
%off `state
%nat (kick:nat our)
%one (kick:one our)
%pub (kick:pub our now)
==
::
:: Subsystem for pinging our sponsors when we might be behind a NAT
::
:: XX no longer true if using STUN-enabled vere 2.XX
:: Ping each ship every 25 seconds to keep the pinhole open.
:: This is expensive, but if you don't do it and you are behind a
:: NAT, you will stop receiving packets from other ships except
@ -270,6 +277,26 @@
::
(set-timer now)
--
:: Subsystem for formally acknowledging a change in our IP:PORT
::
:: If our sponsor sends a STUN response, with an IP different than what
:: we had previously cached, we formally acknowledge this change by
:: sending one %poke to every ship in the sponsorship chain.
::
++ one
?> ?=(%one -.plan.state)
|%
++ kick
|= our=@p
^- (quip card _state)
:_ state
%- ~(rep in ships.state)
|= [=ship cards=(list card)]
?: =(our ship) cards
=/ wire /one/(scot %uw nonce.state)/ping/(scot %p ship)
:_ cards ^- card
[%pass wire %agent [ship %ping] %poke %noun !>(~)]
--
--
%+ verb |
^- agent:gall
@ -291,18 +318,33 @@
|^
=/ old !<(state-any old-vase)
=? old ?=(%0 -.old) (state-0-to-1 old)
?> ?=(%1 -.old)
=? old ?=(%1 -.old) (state-1-to-2 old)
?> ?=(%2 -.old)
=. state old
=^ cards state (kick:ships our.bowl now.bowl)
[cards this]
::
+$ state-any $%(state-0 state-1)
+$ state-0 [%0 ships=(map ship [=rift =ship-state])]
+$ state-any $%(state-0 state-1 state-2)
+$ state-0 [%0 ships=(map ship [=rift =ship-state])]
+$ state-1
$: %1
ships=(set ship)
nonce=@ud
$= plan
$~ [%nat ~]
$% [%nat ~]
[%pub ip=(unit @t)]
== ==
::
++ state-0-to-1
|= old=state-0
^- state-1
[%1 ~ 0 %nat ~]
::
++ state-1-to-2
|= old=state-1
^- state-2
old(- %2)
--
:: +on-poke: positively acknowledge pokes
::
@ -311,8 +353,39 @@
?. =(our src):bowl :: don't crash, this is where pings are handled
`this
::
~& mark^vase
=^ cards state
?: =(q.vase %kick) :: NB: ames calls this on %born
?: ?=([%kick ?] q.vase)
:: NB: ames calls this on %born (with fail=%.n) and after not hearing STUN
:: responses for more than ~s5 (with fail=%.y)
::
:: if %ping was turned off (due to a successfull STUN) but we failed
:: to get a STUN response in time switch to %nat and start a ~s25 timer
::
:: if the %kick has fail=%.n (e.g. for every %born), the plan will remain
:: unchanged, but we will innitiate a new round of %poke pings with
:: increasing nonce.
::
:: if we get repeated [%stun fail=&], but we are already in either %nat
:: or %pub, do nothing, since there are already timers in place to %ping
:: repeatedly.
::
=/ stun-failed=? &(?=([%off ~] plan.state) =(+.q.vase %.y))
?: &(?=([%off ~] plan.state) =(+.q.vase %.n))
:: ignore restarts if we were already STUNning, if ip:port changed
:: %once will trigger one formal %ping
::
`state
=? plan.state stun-failed
[%nat ~]
?: &(!stun-failed =(+.q.vase %.y))
`state
(kick:ships our.bowl now.bowl)
?: =(q.vase %stop) :: NB: ames calls this on [%stun fail=%.n]
=. plan.state [%off ~]
(kick:ships our.bowl now.bowl)
?: &(=(q.vase %once) =(%off -.plan.state)) :: NB: ames calls this on %once
=. plan.state [%one ~]
(kick:ships our.bowl now.bowl)
?: =(q.vase %nat)
=. plan.state [%nat ~]
@ -345,6 +418,12 @@
?. ?=(%pub -.plan.state) `state
?. ?=(%poke-ack -.sign) `state
(take-pings:pub wire p.sign)
::
[%one *]
?. ?=(%one -.plan.state) `state
?: ?=(%poke-ack -.sign) `state
:: XX handle error?
`state
==
[cards this]
:: +on-arvo: handle timer firing

View File

@ -214,6 +214,7 @@
~/ %on-poke
|= [=mark =vase]
^- (quip card _this)
?> (team:title [our src]:bowl)
?: ?=(%spider-kill mark)
(on-load on-save)
=^ cards state

View File

@ -25,6 +25,7 @@
++ on-poke
|= [=mark =vase]
^- [(list card) _this]
?> (team:title [our src]:bowl)
|^
=+ !<(=test vase)
?- test

View File

@ -15,6 +15,7 @@
++ on-load _on-init
++ on-poke
|= [=mark =vase]
?> (team:title [our src]:bowl)
?+ mark !!
%noun :_ this
[%pass /(scot %da now.bowl) %arvo %b %wait `@da`+(now.bowl)]~

View File

@ -352,7 +352,9 @@
?~ dat=(rof lyc pov u.mon) ~
?~ u.dat [~ ~]
=* vax q.u.u.dat
?. ?& ?=(^ ref)
?. => [ref=ref vax=p=p.vax hoon-version=hoon-version wa=wa worm=worm]
~> %memo./arvo/look :: with memoization
?& ?=(^ ref)
=(hoon-version -.ref)
-:(~(nets wa *worm) +.ref p.vax)
==

View File

@ -217,6 +217,7 @@
:: computes the axis of {b} within axis {a}.
|= [a=@ b=@]
?< =(0 a)
?< =(0 b)
:: a composed axis
^- @
?- b
@ -7260,10 +7261,10 @@
=(0 p.wux)
&(!=(0 p.wux) (lte p.wux p.yoz))
==
|- ?| =(%$ p.yoz)
=(%$ p.wux)
?& =((end 3 p.yoz) (end 3 p.wux))
$(p.yoz (rsh 3 p.yoz), p.wux (rsh 3 p.wux))
|- ?| =(%$ q.yoz)
=(%$ q.wux)
?& =((end 3 q.yoz) (end 3 q.wux))
$(q.yoz (rsh 3 q.yoz), q.wux (rsh 3 q.wux))
==
==
==

View File

@ -772,6 +772,7 @@
:: %kroc: request to delete specific message flows, from their bones
:: %plea: request to send message
:: %deep: deferred calls to %ames, from itself
:: %stun: STUN response (or failure), from unix
::
:: Remote Scry Tasks
::
@ -803,12 +804,13 @@
[%kroc bones=(list [ship bone])]
$>(%plea vane-task)
[%deep =deep]
[%stun =stun]
::
[%keen sec=(unit [idx=@ key=@]) spar]
[%chum spar]
[%yawn spar]
[%wham spar]
[%plug vane=term =path]
[%plug =path]
::
$>(%born vane-task)
$>(%init vane-task)
@ -839,6 +841,7 @@
:: System and Lifecycle Gifts
::
:: %turf: domain report, relayed from jael
:: %saxo: our sponsor list report
::
+$ gift
$% [%boon payload=*]
@ -853,6 +856,7 @@
[%tune spar roar=(unit roar)]
::
[%turf turfs=(list turf)]
[%saxo sponsors=(list ship)]
==
::
:::: :: (1a2)
@ -910,6 +914,12 @@
:: payload: semantic message contents
::
+$ plea [vane=@tas =path payload=*]
::
+$ message
$% [%plea plea]
[%boon payload=*]
[%naxplanation =message-num =error]
==
:: $spar: pair of $ship and $path
::
:: Instead of fully qualifying a scry path, ames infers rift and
@ -919,12 +929,21 @@
:: $deep: deferred %ames call, from self, to keep +abet cores pure
::
+$ deep
$% [%nack =ship =nack=bone =message-blob]
$% [%nack =ship =nack=bone =message]
[%sink =ship =target=bone naxplanation=[=message-num =error]]
[%drop =ship =nack=bone =message-num]
[%cork =ship =bone]
[%kill =ship =bone]
==
:: $stun: STUN notifications, from unix
::
:: .lane is the latest cached lane in vere, from the point of view of .ship
::
+$ stun
$% [%stop =ship =lane] :: succesful STUN response, stop %ping app
[%fail =ship =lane] :: failure to STUN, re-enable %ping app
[%once =ship =lane] :: new lane discovered, notify ping %app
==
:: +| %atomics
::
+$ bone @udbone
@ -1168,7 +1187,7 @@
$+ message-pump-state
$: current=_`message-num`1
next=_`message-num`1
unsent-messages=(qeu message-blob)
unsent-messages=(qeu message)
unsent-fragments=(list static-fragment)
queued-message-acks=(map message-num ack)
=packet-pump-state

View File

@ -198,7 +198,7 @@
(cue (rep packet-size (flop sorted)))
:: +jim: caching +jam
::
++ jim |=(n=* ~+((jam n)))
++ jim |=(n=* ~>(%memo./ames/jam (jam n)))
++ spit
|= =path
^- [pat=@t wid=@ud]
@ -532,6 +532,11 @@
peer-state
peer-state(direct.u.route %.n)
::
++ poke-ping-app
|= [=duct our=ship poke=?(%stop %once [%kick fail=?])]
^- move
[duct %pass /ping %g %deal [our our /ames] %ping %poke noun+!>(poke)]
::
+| %atomics
::
+$ private-key @uwprivatekey
@ -614,7 +619,7 @@
:: dead: dead flow consolidation timer and recork timer, if set
::
+$ ames-state
$+ ames-state
$+ ames-state-19
$: peers=(map ship ship-state)
=unix=duct
=life
@ -630,25 +635,8 @@
==
::
=chain
atlas=(map path @ud)
==
::
+$ ames-state-17
$+ ames-state-17
$: peers=(map ship ship-state-17)
=unix=duct
=life
=rift
crypto-core=acru:ames
=bug
snub=[form=?(%allow %deny) ships=(set ship)]
cong=[msg=_5 mem=_100.000]
::
$= dead
$: flow=[%flow (unit dead-timer)]
cork=[%cork (unit dead-timer)]
== ==
::
+$ dead-timer [=duct =wire date=@da]
+$ azimuth-state [=symmetric-key =life =rift =public-key sponsor=ship]
+$ azimuth-state-6 [=symmetric-key =life =public-key sponsor=ship]
@ -1166,6 +1154,55 @@
--
--
::
+$ ames-state-18 ames-state-17
+$ ames-state-17
$+ ames-state-17
$: peers=(map ship ship-state-17)
=unix=duct
=life
=rift
crypto-core=acru:ames
=bug
snub=[form=?(%allow %deny) ships=(set ship)]
cong=[msg=_5 mem=_100.000]
::
$= dead
$: flow=[%flow (unit dead-timer)]
cork=[%cork (unit dead-timer)]
== ==
+$ ship-state-17
$+ ship-state-17
$% [%alien alien-agenda-17]
[%known peer-state-17]
==
+$ peer-state-17
$+ peer-state-17
$: $: =symmetric-key
=life
=rift
=public-key
sponsor=ship
==
route=(unit [direct=? =lane])
=qos
=ossuary
snd=(map bone message-pump-state-17)
rcv=(map bone message-sink-state)
nax=(set [=bone =message-num])
heeds=(set duct)
closing=(set bone)
corked=(set bone)
keens=(map path keen-state)
==
+$ message-pump-state-17
$+ message-pump-state-17
$: current=_`message-num`1
next=_`message-num`1
unsent-messages=(qeu message-blob)
unsent-fragments=(list static-fragment)
queued-message-acks=(map message-num ack)
=packet-pump-state
==
+$ ames-state-14 ames-state-16
+$ ames-state-15 ames-state-16
+$ ames-state-16
@ -1179,30 +1216,6 @@
snub=[form=?(%allow %deny) ships=(set ship)]
cong=[msg=@ud mem=@ud]
==
+$ ship-state-17
$% [%alien alien-agenda-17]
[%known peer-state-17]
==
::
+$ peer-state-17
$+ peer-state
$: $: =symmetric-key
=life
=rift
=public-key
sponsor=ship
==
route=(unit [direct=? =lane])
=qos
=ossuary
snd=(map bone message-pump-state)
rcv=(map bone message-sink-state)
nax=(set [=bone =message-num])
heeds=(set duct)
closing=(set bone)
corked=(set bone)
keens=(map path keen-state)
==
::
+$ alien-agenda-17
$+ alien-agenda
@ -1285,7 +1298,26 @@
$% [%kroc dry=?]
[%keen spar]
[%snub ships=(list ship)]
$<(?(%snub %kroc %keen) task)
$<(?(%snub %kroc) task-17)
==
::
+$ task-17
$+ task-17
$% $<(?(%deep %keen) task)
[%keen spar]
$: %deep
$% [%nack =ship =nack=bone =message-blob]
[%sink =ship =target=bone naxplanation=[=message-num =error]]
[%drop =ship =nack=bone =message-num]
[%cork =ship =bone]
[%kill =ship =bone]
== ==
==
::
+$ queued-event-17
$+ queued-event-17
$% [%call =duct wrapped-task=(hobo task-17)]
[%take =wire =duct =sign]
==
::
+$ queued-event-16
@ -1297,20 +1329,7 @@
+$ task-16
$+ task-16
$% [%kroc dry=?]
[%keen spar]
$<(?(%kroc %keen) task)
==
::
+$ queued-event-17
$+ queued-event-17
$% [%call =duct wrapped-task=(hobo task-17)]
[%take =wire =duct =sign]
==
::
+$ task-17
$+ task-17
$% [%keen spar]
$<(%keen task)
$<(%kroc task-17)
==
:: $bug: debug printing configuration
::
@ -1406,7 +1425,7 @@
:: %wake: handle timer firing
::
+$ message-pump-task
$% [%memo =message-blob]
$% [%memo =message]
[%hear =message-num =ack-meat]
[%near =naxplanation]
[%prod ~]
@ -1463,7 +1482,8 @@
[%15 ames-state-15]
[%16 ames-state-16]
[%17 ames-state-17]
[%18 ^ames-state]
[%18 ames-state-17]
[%19 ^ames-state]
==
::
|= [now=@da eny=@ rof=roof]
@ -1586,7 +1606,7 @@
:: lifecycle arms; mostly pass-throughs to the contained adult ames
::
++ scry scry:adult-core
++ stay [%18 %larva queued-events ames-state.adult-gate]
++ stay [%19 %larva queued-events ames-state.adult-gate]
++ load
|= $= old
$% $: %4
@ -1688,6 +1708,13 @@
[%adult state=ames-state-17]
== ==
$: %18
$% $: %larva
events=(qeu queued-event-17)
state=ames-state-18
==
[%adult state=ames-state-18]
== ==
$: %19
$% $: %larva
events=(qeu queued-event)
state=_ames-state.adult-gate
@ -1766,7 +1793,7 @@
[%10 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%10 state.old]
=. queued-events (event-11-to-18 events.old)
=. queued-events (event-17-to-19 (event-11-to-17 events.old))
larval-gate
::
[%11 %adult *]
@ -1777,7 +1804,7 @@
[%11 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%11 state.old]
=. queued-events (event-11-to-18 events.old)
=. queued-events (event-17-to-19 (event-11-to-17 events.old))
larval-gate
::
[%12 %adult *]
@ -1788,7 +1815,7 @@
[%12 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%12 state.old]
=. queued-events (event-16-to-18 events.old)
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
larval-gate
::
[%13 %adult *]
@ -1799,7 +1826,7 @@
[%13 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%13 state.old]
=. queued-events (event-16-to-18 events.old)
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
larval-gate
::
[%14 %adult *]
@ -1810,7 +1837,7 @@
[%14 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%14 state.old]
=. queued-events (event-16-to-18 events.old)
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
larval-gate
::
[%15 %adult *]
@ -1821,7 +1848,7 @@
[%15 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%15 state.old]
=. queued-events (event-16-to-18 events.old)
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
larval-gate
::
[%16 %adult *]
@ -1832,7 +1859,7 @@
[%16 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%16 state.old]
=. queued-events (event-16-to-18 events.old)
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
larval-gate
::
[%17 %adult *]
@ -1843,16 +1870,26 @@
[%17 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%17 state.old]
=. queued-events (event-17-to-18 events.old)
=. queued-events (event-17-to-19 events.old)
larval-gate
::
[%18 %adult *] (load:adult-core %18 state.old)
[%18 %adult *]
=. cached-state `[%18 state.old]
~> %slog.0^leaf/"ames: larva reload"
larval-gate
::
[%18 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. cached-state `[%18 state.old]
=. queued-events (event-17-to-19 events.old)
larval-gate
::
[%19 %adult *] (load:adult-core %19 state.old)
::
[%19 %larva *]
~> %slog.1^leaf/"ames: larva: load"
=. queued-events events.old
=. adult-gate (load:adult-core %18 state.old)
=. adult-gate (load:adult-core %19 state.old)
larval-gate
==
::
@ -1870,12 +1907,12 @@
wrapped-task ?.(?=(%snub -.task) task [%snub %deny ships.task])
==
::
++ event-11-to-18
++ event-11-to-17
|= events=(qeu queued-event-11-and-16)
^- (qeu queued-event)
^- (qeu queued-event-17)
%- ~(rep in events)
|= [e=queued-event-11-and-16 q=(qeu queued-event)]
%- ~(put to q) ^- queued-event
|= [e=queued-event-11-and-16 q=(qeu queued-event-17)]
%- ~(put to q) ^- queued-event-17
?. ?=(%call -.e) e
=/ task=task-11-and-16 ((harden task-11-and-16) wrapped-task.e)
%= e
@ -1883,28 +1920,26 @@
?+ -.task task
%snub [%snub %deny ships.task]
%kroc [%kroc ~]
%keen [%keen ~ +.task]
==
==
::
++ event-16-to-18
++ event-16-to-17
|= events=(qeu queued-event-16)
^- (qeu queued-event)
^- (qeu queued-event-17)
%- ~(rep in events)
|= [e=queued-event-16 q=(qeu queued-event)]
%- ~(put to q) ^- queued-event
|= [e=queued-event-16 q=(qeu queued-event-17)]
%- ~(put to q) ^- queued-event-17
?. ?=(%call -.e) e
=/ task=task-16 ((harden task-16) wrapped-task.e)
%= e
wrapped-task
^- ^task
^- task-17
?+ -.task task
%kroc [%kroc ~]
%keen [%keen ~ +.task]
==
==
::
++ event-17-to-18
++ event-17-to-19
|= events=(qeu queued-event-17)
^- (qeu queued-event)
%- ~(rep in events)
@ -1912,8 +1947,17 @@
%- ~(put to q) ^- queued-event
?. ?=(%call -.e) e
=/ task=task-17 ((harden task-17) wrapped-task.e)
%= e
wrapped-task ?.(?=(%keen -.task) task [%keen ~ +.task])
%= e
wrapped-task
?: ?=(%keen -.task)
[%keen ~ +.task]
?. ?=([%deep %nack *] task) task
=/ msg =>([cue=cue arg=message-blob.task] ~+((cue arg)))
=/ hed
?: =(1 (end 0 nack-bone.task)) %plea
?: =(0 (end 0 (rsh 0 nack-bone.task))) %boon
%naxplanation
[%deep %nack ship.task nack-bone.task ;;(message [hed msg])]
==
--
:: +molt: re-evolve to adult-ames
@ -1951,7 +1995,7 @@
17+(state-16-to-17:load:adult-core +.u.cached-state)
=^ moz u.cached-state
?. ?=(%17 -.u.cached-state) [~ u.cached-state]
:_ 18+(state-17-to-18:load:adult-core +.u.cached-state)
:_ [%18 +.u.cached-state]
~> %slog.0^leaf/"ames: init dead flow consolidation timer"
:- [[/ames]~ %pass /dead-flow %b %wait `@da`(add now ~m2)]
?^ moz moz :: if we have just added the timer in state-7-to-8, skip
@ -1965,7 +2009,16 @@
(rof ~ /ames %bx [[our %$ da+now] /debug/timers])
|=([@da =duct] ?=([[%ames %recork *] *] duct))
::
?> ?=(%18 -.u.cached-state)
=^ moz u.cached-state
?. ?=(%17 -.u.cached-state) [~ u.cached-state]
:_ [%18 +.u.cached-state]
~> %slog.0^leaf/"ames: fetching our public keys"
^- (list move)
[[[/ames]~ %pass /public-keys %j %public-keys [n=our ~ ~]] moz]
::
=? u.cached-state ?=(%18 -.u.cached-state)
19+(state-18-to-19:load:adult-core +.u.cached-state)
?> ?=(%19 -.u.cached-state)
=. ames-state.adult-gate +.u.cached-state
[moz larval-core(cached-state ~)]
--
@ -2022,6 +2075,11 @@
*peer-state
+.u.ship-state
::
++ get-sponsors
;; (list ship)
=< q.q %- need %- need
(rof ~ /ames %j `beam`[[our %saxo %da now] /(scot %p our)])
::
+| %tasks
:: +on-take-flub: vane not ready to process message, pretend it
:: was never delivered
@ -2100,12 +2158,11 @@
::
=/ failed=message-num
last-acked:(~(got by rcv.peer-state.peer-core) bone)
=/ =naxplanation [failed error]
=/ =message-blob (jam naxplanation)
=/ =message [%naxplanation failed error]
:: send nack-trace message on associated .nack-bone
::
=/ nack-bone=^bone (mix 0b10 bone)
abet:(call:(abed:mu:peer-core nack-bone) %memo message-blob)
abet:(call:(abed:mu:peer-core nack-bone) %memo message)
--
:: +on-sift: handle request to filter debug output by ship
::
@ -2432,7 +2489,7 @@
=. peers.ames-state
(~(put by peers.ames-state) sndr.shot %known peer-state)
::
=. event-core
=. event-core
%- emit
:* unix-duct.ames-state %give %nail sndr.shot
(get-forward-lanes our peer-state peers.ames-state)
@ -2545,7 +2602,7 @@
%- %^ ev-trace odd.veb her
|.("parsing old wire: {(spud wire)}")
peer-core
abet:(on-memo:peer-core bone payload %boon)
abet:(on-memo:peer-core bone [%boon payload])
:: +on-plea: handle request to send message
::
++ on-plea
@ -2567,7 +2624,7 @@
=/ sndr [our our-life.channel.peer-core]
=/ rcvr [ship her-life.channel.peer-core]
"plea {<sndr rcvr bone=bone vane.plea path.plea>}"
abet:(on-memo:peer-core bone plea %plea)
abet:(on-memo:peer-core bone [%plea plea])
:: +on-tame: handle request to delete a route
::
++ on-tame
@ -2654,7 +2711,7 @@
=/ sndr [our our-life.channel.peer-core]
=/ rcvr [ship her-life.channel.peer-core]
"cork plea {<sndr rcvr bone=bone vane.plea path.plea>}"
abet:(on-memo:(on-cork-flow:peer-core bone) bone plea %plea)
abet:(on-memo:(on-cork-flow:peer-core bone) bone [%plea plea])
:: +on-kroc: cork all stale flows from failed subscriptions
::
++ on-kroc
@ -2676,7 +2733,7 @@
?> ?=([~ %known *] ship-state)
=+ peer-core=(abed-peer:pe ship.deep +.u.ship-state)
|^ ?- -.deep
%nack abet:(send-nack-trace [nack-bone message-blob]:deep)
%nack abet:(send-nack-trace [nack-bone message]:deep)
%sink abet:(sink-naxplanation [target-bone naxplanation]:deep)
%drop abet:(clear-nack [nack-bone message-num]:deep)
%cork =~((cork-bone bone.deep) (emit duct %give %done ~))
@ -2684,8 +2741,8 @@
==
::
++ send-nack-trace
|= [=nack=bone =message-blob]
abet:(call:(abed:mu:peer-core nack-bone) %memo message-blob)
|= [=nack=bone =message]
abet:(call:(abed:mu:peer-core nack-bone) %memo message)
::
++ sink-naxplanation
|= [=target=bone =naxplanation]
@ -2706,13 +2763,22 @@
++ cork-bone |=(=bone abet:(on-cork-flow:peer-core bone))
++ kill-bone |=(=bone abet:(on-kill-flow:peer-core bone))
--
:: +on-stun: poke %ping app when hearing a STUN response
::
++ on-stun
|= =stun
^+ event-core
%- emit
%^ poke-ping-app unix-duct.ames-state our
?. ?=(%fail -.stun) -.stun
[%kick fail=%.y]
:: +set-dead-flow-timer: set dead flow timer and corresponding ames state
::
++ set-dead-flow-timer
^+ event-core
=. flow.dead.ames-state.event-core
flow/`[~[/ames] /dead-flow `@da`(add now ~m2)]
(emit:event-core ~[/ames] %pass /dead-flow %b %wait `@da`(add now ~m2))
(emit ~[/ames] %pass /dead-flow %b %wait `@da`(add now ~m2))
:: +wake-dead-flows: call on-wake on all dead flows, discarding any
:: ames-state changes
::
@ -2924,6 +2990,11 @@
:* unix-duct.ames-state %give %nail ship
(get-forward-lanes our peer-state peers.ames-state)
==
:: if one of our sponsors breached, give the updated list to vere
::
=/ sponsors (~(gas in *(set ^ship)) get-sponsors)
=? event-core (~(has in sponsors) ship)
(emit unix-duct.ames-state %give %saxo ~(tap in sponsors))
::
event-core
:: +on-publ-rekey: handle new key for peer
@ -2969,7 +3040,7 @@
^+ event-core
::
?: =(our ship)
event-core
(emit unix-duct.ames-state %give %saxo get-sponsors)
::
?~ sponsor
%- (slog leaf+"ames: {(scow %p ship)} lost sponsor, ignoring" ~)
@ -3000,10 +3071,12 @@
::
=+ ^- [=ship =point] i.points
::
?: =(our ship)
=. rift.ames-state rift.point
$(points t.points)
=? rift.ames-state =(our ship)
rift.point
::
:: XX not needed?
:: =? event-core =(our ship)
:: (emit unix-duct.ames-state %give %saxo get-sponsors)
?. (~(has by keys.point) life.point)
$(points t.points)
::
@ -3068,9 +3141,8 @@
++ on-publ-rift
|= [=ship =rift]
^+ event-core
?: =(our ship)
=. rift.ames-state rift
event-core
=? rift.ames-state =(our ship)
rift
?~ ship-state=(~(get by peers.ames-state) ship)
:: print error here? %rift was probably called before %keys
::
@ -3151,14 +3223,15 @@
cork-moves
^- (list move)
:~ [duct %give %turf turfs]
[duct %pass /ping %g %deal [our our /ames] %ping %poke %noun !>(%kick)]
[duct %give %saxo get-sponsors]
(poke-ping-app duct our %kick fail=%.n)
==
:: +on-vega: handle kernel reload
::
++ on-vega event-core
:: +on-plug: handle key reservation
++ on-plug
|= [vane=term =path]
|= =path
^+ event-core
=/ key=@ (shaz eny) :: TODO: check key width
=/ num=@ud
@ -3518,10 +3591,10 @@
:: +on-memo: handle request to send message
::
++ on-memo
|= [=bone payload=* valence=?(%plea %boon)]
|= [=bone =message]
^+ peer-core
?: ?& (~(has in closing.peer-state) bone)
!=(payload [%$ /flow %cork ~])
!=(message [%plea %$ /flow %cork ~])
==
~> %slog.0^leaf/"ames: ignoring message on closing bone {<bone>}"
peer-core
@ -3529,10 +3602,9 @@
~> %slog.0^leaf/"ames: ignoring message on corked bone {<bone>}"
peer-core
::
=/ =message-blob (dedup-message (jim payload))
=. peer-core abet:(call:(abed:mu bone) %memo message-blob)
=. peer-core abet:(call:(abed:mu bone) %memo message)
::
?: ?& =(%boon valence)
?: ?& ?=(%boon -.message)
(gte now (add ~s30 last-contact.qos.peer-state))
==
check-clog
@ -3664,38 +3736,6 @@
recork-one
::
+| %implementation
:: +dedup-message: replace with any existing copy of this message
::
++ dedup-message
|= =message-blob
^+ message-blob
?: (lte (met 13 message-blob) 1)
message-blob
=/ peers-l=(list [=ship =ship-state]) ~(tap by peers.ames-state)
|- ^+ message-blob
=* peer-loop $
?~ peers-l
message-blob
?. ?=(%known -.ship-state.i.peers-l)
peer-loop(peers-l t.peers-l)
=/ snd-l=(list [=bone =message-pump-state])
~(tap by snd.ship-state.i.peers-l)
|- ^+ message-blob
=* bone-loop $
?~ snd-l peer-loop(peers-l t.peers-l)
=* unsent-fragments unsent-fragments.message-pump-state.i.snd-l
=/ blob-l=(list ^message-blob)
~(tap to unsent-messages.message-pump-state.i.snd-l)
|- ^+ message-blob
=* blob-loop $
?^ blob-l
?: =(i.blob-l message-blob)
i.blob-l
blob-loop(blob-l t.blob-l)
?~ unsent-fragments bone-loop(snd-l t.snd-l)
?: =(message-blob fragment.i.unsent-fragments)
`@`fragment.i.unsent-fragments
bone-loop(snd-l t.snd-l)
:: +check-clog: notify clients if peer has stopped responding
::
++ check-clog
@ -3738,7 +3778,7 @@
=. mem
%+ add
%- ~(rep in unsent-messages.i.pumps)
|=([a=@ b=_mem] (add b (met 3 a)))
|=([m=message b=_mem] (add b (met 3 (jim m))))
?~ unsent-fragments.i.pumps 0
(met 3 fragment.i.unsent-fragments.i.pumps)
?: (gte mem mem.cong.ames-state)
@ -3791,8 +3831,9 @@
::
:: TODO use +trace
~> %slog.0^leaf/"ames: recork {<her i.boz>}"
=/ =plea [%$ /flow [%cork ~]]
(on-memo i.boz plea %plea)
=/ =plea [%$ /flow [%cork ~]]
=/ =message [%plea plea]
(on-memo i.boz message)
:: +handle-cork: handle flow kill after server ames has taken %done
::
++ handle-cork
@ -3890,7 +3931,7 @@
^+ pump
::
?- -.task
%memo (on-memo message-blob.task)
%memo (on-memo message.task)
%prod abet:(call:packet-pump %prod ~)
%wake abet:(call:packet-pump %wake current.state)
%near %- on-done
@ -3925,8 +3966,8 @@
:: +on-memo: handle request to send a message
::
++ on-memo
|= blob=message-blob
pump(unsent-messages.state (~(put to unsent-messages.state) blob))
|= =message
pump(unsent-messages.state (~(put to unsent-messages.state) message))
:: +on-hear: handle packet acknowledgment
::
++ on-hear
@ -4051,11 +4092,11 @@
?~(unsent feed-packets pump)
:: .unsent-messages is nonempty; pop a message off and feed it
::
=^ =message-blob unsent-messages.state
=^ =message unsent-messages.state
~(get to unsent-messages.state)
:: break .message into .chunks and set as .unsent-fragments
::
=. unsent-fragments.state (split-message next.state message-blob)
=. unsent-fragments.state (split-message next.state (jim +.message))
:: try to feed packets from the next message
::
=. next.state +(next.state)
@ -4704,13 +4745,13 @@
|.("sink plea {<dat>}")
?. ok
=/ nack-bone=^bone (mix 0b10 bone)
=/ =message-blob (jam [message-num *error])
=/ =^message [%naxplanation message-num *error]
=/ =wire (make-bone-wire her her-rift.channel nack-bone)
:: send nack-trace with blank .error for security
::
=. peer-core
%+ pe-emit duct
[%pass wire %a %deep %nack her nack-bone message-blob]
[%pass wire %a %deep %nack her nack-bone message]
::
(done ok=%.n)
::
@ -5314,7 +5355,8 @@
%tame (on-tame:event-core ship.task)
%kroc (on-kroc:event-core bones.task)
%deep (on-deep:event-core deep.task)
%plug (on-plug:event-core [vane path]:task)
%stun (on-stun:event-core stun.task)
%plug (on-plug:event-core +.task)
::
%keen (on-keen:event-core +.task)
%chum (on-chum:event-core +.task)
@ -5356,15 +5398,15 @@
[moves ames-gate]
:: +stay: extract state before reload
::
++ stay [%18 %adult ames-state]
++ stay [%19 %adult ames-state]
:: +load: load in old state after reload
::
++ load
=< |= $= old-state
$% [%18 ^ames-state]
$% [%19 ^ames-state]
==
^+ ames-gate
?> ?=(%18 -.old-state)
?> ?=(%19 -.old-state)
ames-gate(ames-state +.old-state)
:: all state transitions are called from larval ames
::
@ -5559,7 +5601,7 @@
::
++ message-pump-16-to-17
|= pump=message-pump-state-16
^- message-pump-state
^- message-pump-state-17
%= pump
metrics.packet-pump-state
[rto rtt rttvar ssthresh cwnd counter]:metrics.packet-pump-state.pump
@ -5595,24 +5637,45 @@
==
--
==
++ state-17-to-18
|= old=ames-state-17
++ state-18-to-19
|= old=ames-state-18
^- ^ames-state
%= old
dead [dead.old ~ ~]
::
dead [dead.old ~]
::
peers
%- ~(run by peers.old)
|= ship-state=ship-state-17
^- ^ship-state
?. ?=(%known -.ship-state)
%= ship-state
keens [keens.ship-state ~]
|= s=ship-state-17
^- ship-state
?: ?=(%alien -.s)
%= s
keens [keens.s ~]
==
%= ship-state
keens [keens.ship-state ~]
==
==
%= s
::
keens [keens.s ~]
::
snd.+
%- malt
%+ turn
~(tap by snd.+.s)
|= [=bone m=message-pump-state-17]
:- bone
%= m
unsent-messages
%- ~(gas to *(qeu message))
%+ turn
~(tap to unsent-messages.m)
|= b=message-blob
^- message
=/ hed
?: =(1 (end 0 bone)) %plea
?: =(0 (end 0 (rsh 0 bone))) %boon
%naxplanation
=/ msg =>([cue=cue arg=b] ~+((cue arg)))
;;(message [hed msg])
== == ==
--
:: +scry: dereference namespace
::

View File

@ -459,8 +459,6 @@
name.focus();
}
function doEauth() {
console.log('mb get value from event', event);
console.log('compare', name.value, our);
if (name.value == our) {
event.preventDefault();
goLocal();
@ -471,10 +469,6 @@
;body
=class "{?:(=(`& eauth) "eauth" "local")}"
=onload "setup({?:(=(`& eauth) "true" "false")})"
;nav
;div.local(onclick "goLocal()"):"Local"
;div.eauth(onclick "goEauth()"):"EAuth"
==
;div#local
;p:"Urbit ID"
;input(value "{(scow %p our)}", disabled "true", class "mono");
@ -528,16 +522,11 @@
==
==
;* ?: ?=(%ours -.identity) ~
=+ id=(trim 29 (scow %p who.identity))
=+ as="proceed as{?:(?=(%fake -.identity) " guest" "")}"
;+ ;span.guest.mono
; Or
; Or try to
;a/"{(trip (fall redirect-url '/'))}":"{as}"
; :
;br;
; {p.id}
;br;
; {q.id}
; .
==
==
;script:'''
@ -2973,6 +2962,7 @@
=* session-id session-id.u.connection-state
=* sessions sessions.auth.state
=* inbound inbound-request.u.connection-state
=* headers headers.response-header.http-event
::
?. (~(has by sessions) session-id)
:: if the session has expired since the request was opened,
@ -2983,9 +2973,14 @@
|= =session
session(expiry-time (add now session-timeout))
=- response-header.http-event(headers -)
%^ set-header:http 'set-cookie'
(session-cookie-string session-id &)
headers.response-header.http-event
=/ cookie=(pair @t @t)
['set-cookie' (session-cookie-string session-id &)]
|-
?~ headers
[cookie ~]
?: &(=(key.i.headers p.cookie) =(value.i.headers q.cookie))
headers
[i.headers $(headers t.headers)]
::
=* connection u.connection-state
::

View File

@ -341,8 +341,7 @@
:: remember to duplicate version tag changes here to $egg-any:gall in lull
::
+$ spore
$: %16
system-duct=duct
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request))
contacts=(set ship)
eggs=(map term egg)
@ -350,6 +349,7 @@
=bug
leaves=(unit [=duct =wire date=@da])
==
+$ spore-16 [%16 spore]
--
:: adult gall vane interface, for type compatibility with pupa
::
@ -1236,7 +1236,12 @@
++ ap-serve-brood
|= [=ship =(pole knot)]
^- [(unit (unit brood)) _mo-core]
?. ?=([%$ rest=*] pole)
~& pole/pole
?. ?=([%$ ver=@ rest=*] pole)
~& bad-pole/pole
`ap-abet
?. =(1 (slav %ud ver.pole))
~& bad-version/pole
`ap-abet
?~ cop=(ap-match-coop rest.pole)
~& no-match-coop/rest.pole
@ -1325,7 +1330,7 @@
=? gem.yoke &(!exists ?=(~ pen))
(~(put by gem.yoke) coop ~)
=/ =wire (welp /key/[agent-name]/[run-nonce.yoke]/pug coop)
(ap-move [hen %pass wire %a %plug %g [%g %x agent-name %$ coop]]~)
(ap-move [hen %pass wire %a %plug [%g %x agent-name %$ '1' coop]]~)
::
++ ap-stub
|= [=coop num=@ud key=@]
@ -1399,9 +1404,26 @@
%. sky.yoke
%+ trace odd.veb.bug.state
[leaf+"gall: {<agent-name>}: cull {<[case spur]>} no-op"]~
%- need
?~ las=(ram:on-path fan.u.old)
%. sky.yoke
%+ trace &
[leaf+"gall: {<agent-name>}: cull {<[case spur]>} no paths"]~
=/ fis (need (pry:on-path fan.u.old))
?. &((gte yon key.fis) (lte yon key.u.las))
%. sky.yoke
%+ trace &
:_ ~
:- %leaf
%+ weld
"gall: {<agent-name>}: cull {<[case spur]>} out of range, "
"min: {<key.fis>}, max: {<key.u.las>}"
=; nex=(unit farm)
?^ nex u.nex
%. sky.yoke
%+ trace &
[leaf+"gall: {<agent-name>}: cull {<[case spur]>} invalid path structure"]~
%+ ~(put of-farm sky.yoke) spur :: delete all older paths
[`yon (lot:on-path fan.u.old `+(yon) ~)]
[`yon (lot:on-path fan.u.old `yon ~)]
:: +ap-from-internal: internal move to move.
::
:: We convert from cards to duct-indexed moves when resolving
@ -2299,33 +2321,33 @@
::
++ load
|^ |= old=spore-any
=? old ?=(%7 -.old) (spore-7-to-8 old)
=? old ?=(%8 -.old) (spore-8-to-9 old)
=? old ?=(%9 -.old) (spore-9-to-10 old)
=? old ?=(%10 -.old) (spore-10-to-11 old)
=? old ?=(%11 -.old) (spore-11-to-12 old)
=? old ?=(%12 -.old) (spore-12-to-13 old)
=? old ?=(%13 -.old) (spore-13-to-14 old)
=? old ?=(%14 -.old) (spore-14-to-15 old)
=? old ?=(%15 -.old) (spore-15-to-16 old)
=? old ?=(%7 -.old) (spore-7-to-8 +.old)
=? old ?=(%8 -.old) (spore-8-to-9 +.old)
=? old ?=(%9 -.old) (spore-9-to-10 +.old)
=? old ?=(%10 -.old) (spore-10-to-11 +.old)
=? old ?=(%11 -.old) (spore-11-to-12 +.old)
=? old ?=(%12 -.old) (spore-12-to-13 +.old)
=? old ?=(%13 -.old) (spore-13-to-14 +.old)
=? old ?=(%14 -.old) (spore-14-to-15 +.old)
=? old ?=(%15 -.old) (spore-15-to-16 +.old)
?> ?=(%16 -.old)
gall-payload(state old)
::
+$ spore-any
$% spore
spore-7
spore-8
spore-9
spore-10
spore-11
spore-12
spore-13
spore-14
spore-15
$% [%16 spore]
[%7 spore-7]
[%8 spore-8]
[%9 spore-9]
[%10 spore-10]
[%11 spore-11]
[%12 spore-12]
[%13 spore-13]
[%14 spore-14]
[%15 spore-15]
==
+$ spore-15
$: %15
system-duct=duct
+$ spore-15
$+ spore-15
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request))
contacts=(set ship)
eggs=(map term egg-15)
@ -2334,8 +2356,7 @@
leaves=(unit [=duct =wire date=@da])
==
+$ spore-14
$: %14
system-duct=duct
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request))
contacts=(set ship)
eggs=(map term egg-15)
@ -2344,8 +2365,7 @@
==
::
+$ spore-13
$: %13
system-duct=duct
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request))
contacts=(set ship)
eggs=(map term egg-15)
@ -2358,8 +2378,7 @@
attributing=ship
==
+$ spore-12
$: %12
system-duct=duct
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request))
contacts=(set ship)
eggs=(map term egg-12)
@ -2383,8 +2402,7 @@
sky=(map spur farm)
== ==
+$ spore-11
$: %11
system-duct=duct
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request))
contacts=(set ship)
eggs=(map term egg-11)
@ -2405,8 +2423,7 @@
marks=(map duct mark)
==
+$ spore-10
$: %10
system-duct=duct
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request))
contacts=(set ship)
eggs=(map term egg-10)
@ -2427,8 +2444,7 @@
marks=(map duct mark)
==
+$ spore-9
$: %9
system-duct=duct
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request-9))
contacts=(set ship)
eggs=(map term egg-10)
@ -2439,8 +2455,7 @@
+$ remote-request-9 ?(remote-request %cork)
::
+$ spore-8
$: %8
system-duct=duct
$: system-duct=duct
outstanding=(map [wire duct] (qeu remote-request-9))
contacts=(set ship)
eggs=(map term egg-8)
@ -2459,8 +2474,7 @@
+$ watches-8 [inbound=bitt outbound=boat-8]
+$ boat-8 (map [wire ship term] [acked=? =path])
+$ spore-7
$: %7
wipe-eyre-subs=_| ::NOTE band-aid for #3196
$: wipe-eyre-subs=_| ::NOTE band-aid for #3196
system-duct=duct
outstanding=(map [wire duct] (qeu remote-request-9))
contacts=(set ship)
@ -2470,20 +2484,22 @@
::
++ spore-7-to-8
|= old=spore-7
^- spore-8
^- spore-any
:- %8
^- spore-8
=. eggs.old
%- ~(urn by eggs.old)
|= [a=term e=egg-8]
:: kiln will kick off appropriate app revival
::
e(old-state [%| p.old-state.e])
+>.old
+.old
::
++ spore-8-to-9
|= old=spore-8
:- %9
^- spore-9
=- old(- %9, eggs -, blocked [blocked.old *bug])
=- old(eggs -, blocked [blocked.old *bug])
%- ~(run by eggs.old)
|= =egg-8
^- egg-10
@ -2506,7 +2522,9 @@
::
++ spore-9-to-10
|= old=spore-9
=- old(- %10, outstanding -)
:- %10
^- spore-10
=- old(outstanding -)
%- ~(run by outstanding.old)
|= q=(qeu remote-request-9)
%- ~(gas to *(qeu remote-request))
@ -2519,9 +2537,9 @@
::
++ spore-10-to-11
|= old=spore-10
:- %11
^- spore-11
%= old
- %11
eggs
%- ~(urn by eggs.old)
|= [a=term e=egg-10]
@ -2533,9 +2551,9 @@
::
++ spore-11-to-12
|= old=spore-11
:- %12
^- spore-12
%= old
- %12
eggs
%- ~(urn by eggs.old)
|= [a=term e=egg-11]
@ -2547,9 +2565,9 @@
::
++ spore-12-to-13
|= old=spore-12
:- %13
^- spore-13
%= old
- %13
eggs
%- ~(urn by eggs.old)
|= [a=term e=egg-12]
@ -2557,27 +2575,12 @@
?: ?=(%nuke -.e) e
!! :: e(sky [sky.e ken:*$>(%live egg-13)])
==
:: added provenance path to routes
++ spore-15-to-16
|= old=spore-15
^- spore
%= old
- %16
::
eggs
%- ~(run by eggs.old)
|= egg=egg-15
?: ?=(%nuke -.egg)
egg
egg(sky (migrate:of-farm sky.egg), ken [ken.egg ~ ~])
==
::
++ spore-13-to-14
|= old=spore-13
:- %14
^- spore-14
%= old
- %14
::
blocked
^- (map term (qeu blocked-move))
%- ~(run by blocked.old)
@ -2594,8 +2597,45 @@
::
++ spore-14-to-15
|= old=spore-14
:- %15
^- spore-15
old(- %15, bug [bug.old ~])
old(bug [bug.old ~])
:: convert to versioned sky
::
++ spore-15-to-16
|= old=spore-15
^- spore-16
:- %16
%= old
eggs
%- ~(urn by eggs.old)
|= [=term e=egg-15]
^- egg
?: ?=(%nuke -.e) e(sky *(map spur @ud))
%= e
ken [ken.e ~ ~]
::
sky
=| =farm
=/ ski ~(tap by sky.e)
|- ^+ farm
?~ ski
farm
=/ [=spur p=plot] i.ski
=; new
?~ nex=(~(put of-farm farm) spur new)
~& %weird
!! :: shouldn't continue else loss of ref integrity
:: $(ski t.ski)
$(farm u.nex, ski t.ski)
:- ~
=/ m ~(val by fan.p)
%+ gas:on-path *_fan.p
%+ turn (gulf 1 ~(wyt by fan.p))
|= a=@ud
[a (snag (dec a) m)]
==
==
--
:: +scry: standard scry
::
@ -2702,19 +2742,22 @@
p.agent.u.yok
on-save:p.agent.u.yok
==
``noun+!>([-:*spore egg])
``noun+!>(`egg-any`[-:*spore-16 egg])
::
?: ?& =(%w care)
=([%$ %da now] coin)
=(our ship)
?=([%'1' *] path)
==
=> .(path t.path)
=/ yok (~(get by yokes.state) q.bem)
?. ?=([~ %live *] yok) [~ ~]
?~ ski=(~(get of-farm sky.u.yok) path) [~ ~]
?~ las=(ram:on-path fan.u.ski) [~ ~]
``case/!>(ud/key.u.las)
::
?: ?=(%x care)
?: &(?=(%x care) ?=([%'1' *] path))
=> .(path t.path)
?. =(p.bem our) ~
::
?: ?=(%$ q.bem) :: app %$ reserved
@ -2767,7 +2810,9 @@
?: ?& =(%t care)
=([%$ %da now] coin)
=(our ship)
?=([%'1' *] path)
==
=> .(path t.path)
=/ yok (~(get by yokes.state) q.bem)
?. ?=([~ %live *] yok) ~
:^ ~ ~ %file-list !> ^- (list ^path)
@ -2779,7 +2824,9 @@
::
?: ?& =(%z care)
=(our ship)
?=([%'1' *] path)
==
=> .(path t.path)
=/ yok (~(get by yokes.state) q.bem)
?. ?=([~ %live *] yok) ~
?~ ski=(~(get of-farm sky.u.yok) path) ~
@ -2798,7 +2845,7 @@
:: TODO: superfluous? see +molt
::
++ stay
^- spore
^- spore-16
=; eggs=(map term egg) state(yokes eggs)
%- ~(run by yokes.state)
|= =yoke

View File

@ -4298,8 +4298,11 @@
~&(%base-64-padding-err-two ~)
=/ len (sub (mul 3 (div (add lat dif) 4)) dif)
:+ ~ len
%+ swp 3
(rep [0 6] (flop (weld dat (reap dif 0))))
=/ res (rsh [1 dif] (rep [0 6] (flop dat)))
=/ amt (met 3 res)
:: left shift trailing zeroes in after byte swap
=/ trl ?: (lth len amt) 0 (sub len amt)
(lsh [3 trl] (swp 3 res))
--
--
::
@ -4777,7 +4780,7 @@
=+ spa=;~(pose comt whit)
%+ knee *manx |. ~+
%+ ifix
[;~(plug (punt decl) (star spa)) (star spa)]
[;~(plug (more spa decl) (star spa)) (star spa)]
;~ pose
%+ sear |=([a=marx b=marl c=mane] ?.(=(c n.a) ~ (some [a b])))
;~(plug head many tail)

View File

@ -80,10 +80,11 @@
=/ deks
?~ desks
%+ sort
(sort ~(tap in -.prep) |=([[a=@ *] b=@ *] !(aor a b)))
(sort ~(tap by -.prep) |=([[a=@ *] b=@ *] !(aor a b)))
|=([[a=@ *] [b=@ *]] ?|(=(a %kids) =(b %base)))
%+ skip ~(tap in -.prep)
%+ skip ~(tap by -.prep)
|=([syd=@tas *] =(~ (find ~[syd] desks)))
=. deks (skim deks |=([=desk *] ((sane %tas) desk)))
?: =(filt %blocking)
=/ base-wic
%+ sort ~(tap by wic:(~(got by -.prep) %base))
@ -147,6 +148,8 @@
^- tank
=/ ego (scot %p our)
=/ wen (scot %da now)
?. ((sane %tas) syd)
leaf+"insane desk: {<syd>}"
=+ .^(=cass %cw /[ego]/[syd]/[wen])
?: =(ud.cass 0)
leaf+"desk does not yet exist: {<syd>}"

View File

@ -38,7 +38,7 @@
:_ this
?: ?=(%keen -.action)
=/ =path
%+ welp /g/x/(scot %ud case.action)/[dap.bowl]
%+ welp /g/x/(scot %ud case.action)/[dap.bowl]//1
path.action
[%pass /keen %keen & ship.action path]~
[%pass /foo action]~

41
tests/sys/hoon/nest.hoon Normal file
View File

@ -0,0 +1,41 @@
/+ *test
|%
++ test-fitz
;: weld
%+ expect-eq
!> %.y
!> (fitz ~. ~.tas)
::
%+ expect-eq
!> %.y
!> (fitz ~.ud ~.)
::
%+ expect-eq
!> %.n
!> (fitz ~.p ~.q)
::
%+ expect-eq
!> %.n
!> (fitz ~.ux ~.ud)
::
%+ expect-eq
!> %.y
!> (fitz ~.tas ~.ta)
::
%+ expect-eq
!> %.n
!> (fitz 'uvD' 'uvE')
::
%+ expect-eq
!> %.y
!> (fitz 'uvE' 'uvD')
::
%+ expect-eq
!> %.n
!> (fitz 'AD' 'CB')
::
%+ expect-eq
!> %.n
!> (fitz 'AC' 'CB')
==
--