@@ -0,0 +1,919 @@
1+/- sur=graph-store, pos=post, pull-hook, hark=hark-store
2+/+ res=resource, migrate
3+=< [sur .]
4+=< [pos .]
5+=, sur
6+=, pos
7+|%
8+++ hark-content
9+ |= =content
10+ ^- content:hark
11+ ?- -.content
12+ %text content
13+ %mention ship+ship.content
14+ %url text+url.content
15+ %code text+'A code excerpt'
16+ %reference text+'A reference'
17+ ==
18+::
19+++ hark-contents
20+ |= cs=(list content)
21+ (turn cs hark-content)
22+:: NOTE: move these functions to zuse
23+++ nu :: parse number as hex
24+ |= jon=json
25+ ?> ?=([%s *] jon)
26+ (rash p.jon hex)
27+::
28+++ re :: recursive reparsers
29+ |* [gar=* sef=_|.(fist:dejs-soft:format)]
30+ |= jon=json
31+ ^- (unit _gar)
32+ =- ~! gar ~! (need -) -
33+ ((sef) jon)
34+::
35+++ dank :: tank
36+ ^- $-(json (unit tank))
37+ =, ^? dejs-soft:format
38+ %+ re *tank |. ~+
39+ %- of :~
40+ leaf+sa
41+ palm+(ot style+(ot mid+sa cap+sa open+sa close+sa ~) lines+(ar dank) ~)
42+ rose+(ot style+(ot mid+sa open+sa close+sa ~) lines+(ar dank) ~)
43+ ==
44+::
45+++ orm ((on atom node) gth)
46+++ orm-log ((on time logged-update) gth)
47+::
48+++ enjs
49+ =, enjs:format
50+ |%
51+ ::
52+ ++ signatures
53+ |= s=^signatures
54+ ^- json
55+ [%a (turn ~(tap in s) signature)]
56+ ::
57+ ++ signature
58+ |= s=^signature
59+ ^- json
60+ %- pairs
61+ :~ [%signature s+(scot %ux p.s)]
62+ [%ship (ship q.s)]
63+ [%life (numb r.s)]
64+ ==
65+ ::
66+ ++ index
67+ |= ind=^index
68+ ^- json
69+ :- %s
70+ ?: =(~ ind)
71+ '/'
72+ %+ roll ind
73+ |= [cur=@ acc=@t]
74+ ^- @t
75+ =/ num (numb cur)
76+ ?> ?=(%n -.num)
77+ (rap 3 acc '/' p.num ~)
78+ ::
79+ ++ uid
80+ |= u=^uid
81+ ^- json
82+ %- pairs
83+ :~ [%resource (enjs:res resource.u)]
84+ [%index (index index.u)]
85+ ==
86+ ::
87+ ++ content
88+ |= c=^content
89+ ^- json
90+ ?- -.c
91+ %mention (frond %mention (ship ship.c))
92+ %text (frond %text s+text.c)
93+ %url (frond %url s+url.c)
94+ %reference (frond %reference (reference +.c))
95+ %code
96+ %+ frond %code
97+ %- pairs
98+ :- [%expression s+expression.c]
99+ :_ ~
100+ :- %output
101+ :: virtualize output rendering, +tank:enjs:format might crash
102+ ::
103+ =/ result=(each (list json) tang)
104+ (mule |.((turn output.c tank)))
105+ ?- -.result
106+ %& a+p.result
107+ %| a+[a+[%s '[[output rendering error]]']~]~
108+ ==
109+ ==
110+ ::
111+ ++ reference
112+ |= ref=^reference
113+ |^
114+ %+ frond -.ref
115+ ?- -.ref
116+ %graph (graph +.ref)
117+ %group (group +.ref)
118+ %app (app +.ref)
119+ ==
120+ ::
121+ ++ graph
122+ |= [grp=res gra=res idx=^index]
123+ %- pairs
124+ :~ graph+s+(enjs-path:res gra)
125+ group+s+(enjs-path:res grp)
126+ index+(index idx)
127+ ==
128+ ::
129+ ++ group
130+ |= grp=res
131+ s+(enjs-path:res grp)
132+ ::
133+ ++ app
134+ |= [=^ship =desk p=^path]
135+ %- pairs
136+ :~ ship+s+(scot %p ship)
137+ desk+s+desk
138+ path+(path p)
139+ ==
140+ --
141+ ::
142+ ++ maybe-post
143+ |= mp=^maybe-post
144+ ^- json
145+ ?- -.mp
146+ %| s+(scot %ux p.mp)
147+ %& (post p.mp)
148+ ==
149+ ::
150+ ++ post
151+ |= p=^post
152+ ^- json
153+ %- pairs
154+ :~ [%author (ship author.p)]
155+ [%index (index index.p)]
156+ [%time-sent (time time-sent.p)]
157+ [%contents [%a (turn contents.p content)]]
158+ [%hash ?~(hash.p ~ s+(scot %ux u.hash.p))]
159+ [%signatures (signatures signatures.p)]
160+ ==
161+ ::
162+ ++ update
163+ |= upd=^update
164+ ^- json
165+ |^ (frond %graph-update (pairs ~[(encode q.upd)]))
166+ ::
167+ ++ encode
168+ |= upd=action
169+ ^- [cord json]
170+ ?- -.upd
171+ %add-graph
172+ :- %add-graph
173+ %- pairs
174+ :~ [%resource (enjs:res resource.upd)]
175+ [%graph (graph graph.upd)]
176+ [%mark ?~(mark.upd ~ s+u.mark.upd)]
177+ [%overwrite b+overwrite.upd]
178+ ==
179+ ::
180+ %remove-graph
181+ [%remove-graph (enjs:res resource.upd)]
182+ ::
183+ %add-nodes
184+ :- %add-nodes
185+ %- pairs
186+ :~ [%resource (enjs:res resource.upd)]
187+ [%nodes (nodes nodes.upd)]
188+ ==
189+ ::
190+ %remove-posts
191+ :- %remove-posts
192+ %- pairs
193+ :~ [%resource (enjs:res resource.upd)]
194+ [%indices (indices indices.upd)]
195+ ==
196+ ::
197+ %add-signatures
198+ :- %add-signatures
199+ %- pairs
200+ :~ [%uid (uid uid.upd)]
201+ [%signatures (signatures signatures.upd)]
202+ ==
203+ ::
204+ %remove-signatures
205+ :- %remove-signatures
206+ %- pairs
207+ :~ [%uid (uid uid.upd)]
208+ [%signatures (signatures signatures.upd)]
209+ ==
210+ ::
211+ %add-tag
212+ :- %add-tag
213+ %- pairs
214+ :~ [%term s+term.upd]
215+ [%uid (uid uid.upd)]
216+ ==
217+ ::
218+ %remove-tag
219+ :- %remove-tag
220+ %- pairs
221+ :~ [%term s+term.upd]
222+ [%uid (uid uid.upd)]
223+ ==
224+ ::
225+ %archive-graph
226+ [%archive-graph (enjs:res resource.upd)]
227+ ::
228+ %unarchive-graph
229+ [%unarchive-graph (enjs:res resource.upd)]
230+ ::
231+ %keys
232+ [%keys [%a (turn ~(tap in resources.upd) enjs:res)]]
233+ ::
234+ %tags
235+ [%tags [%a (turn ~(tap in tags.upd) |=(=term s+term))]]
236+ ::
237+ %run-updates
238+ [%run-updates ~]
239+ ::
240+ %tag-queries
241+ :- %tag-queries
242+ %- pairs
243+ %+ turn ~(tap by tag-queries.upd)
244+ |= [=term uids=(set ^uid)]
245+ ^- [cord json]
246+ [term [%a (turn ~(tap in uids) uid)]]
247+ ==
248+ ::
249+ ++ graph
250+ |= g=^graph
251+ ^- json
252+ %- pairs
253+ %+ turn
254+ (tap:orm g)
255+ |= [a=atom n=^node]
256+ ^- [@t json]
257+ :_ (node n)
258+ =/ idx (numb a)
259+ ?> ?=(%n -.idx)
260+ p.idx
261+ ::
262+ ++ node
263+ |= n=^node
264+ ^- json
265+ %- pairs
266+ :~ [%post (maybe-post post.n)]
267+ :- %children
268+ ?- -.children.n
269+ %empty ~
270+ %graph (graph +.children.n)
271+ ==
272+ ==
273+ ::
274+ ++ nodes
275+ |= m=(map ^index ^node)
276+ ^- json
277+ %- pairs
278+ %+ turn ~(tap by m)
279+ |= [n=^index o=^node]
280+ ^- [@t json]
281+ :_ (node o)
282+ =/ idx (index n)
283+ ?> ?=(%s -.idx)
284+ p.idx
285+ ::
286+ ++ indices
287+ |= i=(set ^index)
288+ ^- json
289+ [%a (turn ~(tap in i) index)]
290+ ::
291+ --
292+ --
293+::
294+++ dejs
295+ =, dejs:format
296+ |%
297+ ++ update
298+ |= jon=json
299+ ^- ^update
300+ :- *time
301+ ^- action
302+ =< (decode jon)
303+ |%
304+ ++ decode
305+ %- of
306+ :~ [%add-nodes add-nodes]
307+ [%remove-posts remove-posts]
308+ [%add-signatures add-signatures]
309+ [%remove-signatures remove-signatures]
310+ ::
311+ [%add-graph add-graph]
312+ [%remove-graph remove-graph]
313+ ::
314+ [%add-tag add-tag]
315+ [%remove-tag remove-tag]
316+ ::
317+ [%archive-graph archive-graph]
318+ [%unarchive-graph unarchive-graph]
319+ [%run-updates run-updates]
320+ ::
321+ [%keys keys]
322+ [%tags tags]
323+ [%tag-queries tag-queries]
324+ ==
325+ ::
326+ ++ add-graph
327+ %- ot
328+ :~ [%resource dejs:res]
329+ [%graph graph]
330+ [%mark (mu so)]
331+ [%overwrite bo]
332+ ==
333+ ::
334+ ++ graph
335+ |= a=json
336+ ^- ^graph
337+ =/ or-mp ((on atom ^node) gth)
338+ %+ gas:or-mp ~
339+ %+ turn ~(tap by ((om node) a))
340+ |* [b=cord c=*]
341+ ^- [atom ^node]
342+ => .(+< [b c]=+<)
343+ [(rash b dem) c]
344+ ::
345+ ++ remove-graph (ot [%resource dejs:res]~)
346+ ++ archive-graph (ot [%resource dejs:res]~)
347+ ++ unarchive-graph (ot [%resource dejs:res]~)
348+ ::
349+ ++ add-nodes
350+ %- ot
351+ :~ [%resource dejs:res]
352+ [%nodes nodes]
353+ ==
354+ ::
355+ ++ nodes (op ;~(pfix fas (more fas dem)) node)
356+ ::
357+ ++ node
358+ %- ot
359+ :~ [%post maybe-post]
360+ [%children internal-graph]
361+ ==
362+ ::
363+ ++ internal-graph
364+ |= jon=json
365+ ^- ^internal-graph
366+ ?~ jon
367+ [%empty ~]
368+ [%graph (graph jon)]
369+ ::
370+ ++ maybe-post
371+ |= jon=json
372+ ^- ^maybe-post
373+ ?~ jon !!
374+ ?+ -.jon !!
375+ %s [%| (nu jon)]
376+ %o [%& (post jon)]
377+ ==
378+ ::
379+ ++ post
380+ %- ot
381+ :~ [%author (su ;~(pfix sig fed:ag))]
382+ [%index index]
383+ [%time-sent di]
384+ [%contents (ar content)]
385+ [%hash (mu nu)]
386+ [%signatures (as signature)]
387+ ==
388+ ::
389+ ++ content
390+ %- of
391+ :~ [%mention (su ;~(pfix sig fed:ag))]
392+ [%text so]
393+ [%url so]
394+ [%reference reference]
395+ [%code eval]
396+ ==
397+ ::
398+ ++ reference
399+ |^
400+ %- of
401+ :~ graph+graph
402+ group+dejs-path:res
403+ app+app
404+ ==
405+ ::
406+ ++ graph
407+ %- ot
408+ :~ group+dejs-path:res
409+ graph+dejs-path:res
410+ index+index
411+ ==
412+ ::
413+ ++ app
414+ %- ot
415+ :~ ship+(su ;~(pfix sig fed:ag))
416+ desk+so
417+ path+pa
418+ ==
419+ --
420+ ::
421+ ++ tang
422+ |= jon=^json
423+ ^- ^tang
424+ ?> ?=(%a -.jon)
425+ %- zing
426+ %+ turn
427+ p.jon
428+ |= jo=^json
429+ ^- (list tank)
430+ ?> ?=(%a -.jo)
431+ %+ turn
432+ p.jo
433+ |= j=^json
434+ ?> ?=(%s -.j)
435+ ^- tank
436+ leaf+(trip p.j)
437+ ::
438+ ++ eval
439+ %- ot
440+ :~ expression+so
441+ output+tang
442+ ==
443+ ::
444+ ++ remove-posts
445+ %- ot
446+ :~ [%resource dejs:res]
447+ [%indices (as index)]
448+ ==
449+ ::
450+ ++ add-signatures
451+ %- ot
452+ :~ [%uid uid]
453+ [%signatures (as signature)]
454+ ==
455+ ::
456+ ++ remove-signatures
457+ %- ot
458+ :~ [%uid uid]
459+ [%signatures (as signature)]
460+ ==
461+ ::
462+ ++ signature
463+ %- ot
464+ :~ [%hash nu]
465+ [%ship (su ;~(pfix sig fed:ag))]
466+ [%life ni]
467+ ==
468+ ::
469+ ++ uid
470+ %- ot
471+ :~ [%resource dejs:res]
472+ [%index index]
473+ ==
474+ ::
475+ ++ index (su ;~(pfix fas (more fas dem)))
476+ ::
477+ ++ add-tag
478+ %- ot
479+ :~ [%term so]
480+ [%uid uid]
481+ ==
482+ ::
483+ ++ remove-tag
484+ %- ot
485+ :~ [%term so]
486+ [%uid uid]
487+ ==
488+ ::
489+ ++ keys
490+ |= =json
491+ *resources
492+ ::
493+ ++ tags
494+ |= =json
495+ *(set term)
496+ ::
497+ ++ tag-queries
498+ |= =json
499+ *^tag-queries
500+ ::
501+ ++ run-updates
502+ |= a=json
503+ ^- [resource update-log]
504+ [*resource *update-log]
505+ --
506+ ++ pa
507+ |= j=json
508+ ^- path
509+ ?> ?=(%s -.j)
510+ ?: =('/' p.j) /
511+ (stab p.j)
512+ ::
513+ --
514+::
515+++ create
516+ |_ [our=ship now=time]
517+ ++ post
518+ |= [=index contents=(list content)]
519+ ^- ^post
520+ :* our
521+ index
522+ now
523+ contents
524+ ~
525+ *signatures
526+ ==
527+ --
528+::
529+++ upgrade
530+ |%
531+ ::
532+ :: +two
533+ ::
534+ ++ marked-graph-to-two
535+ |= [=graph:one m=(unit mark)]
536+ [(graph-to-two graph) m]
537+ ::
538+ ++ graph-to-two
539+ |= =graph:one
540+ (graph:(upgrade ,post:one ,maybe-post:two) graph post-to-two)
541+ ::
542+ ++ post-to-two
543+ |= p=post:one
544+ ^- maybe-post:two
545+ [%& p]
546+ ::
547+ ::
548+ :: +one
549+ ::
550+ ++ update-log-to-one
551+ |= =update-log:zero
552+ ^- update-log:one
553+ %+ gas:orm-log:one *update-log:one
554+ %+ turn (tap:orm-log:zero update-log)
555+ |= [=time =logged-update:zero]
556+ ^- [^time logged-update:one]
557+ :- time
558+ :- p.logged-update
559+ (logged-update-to-one q.logged-update)
560+ ::
561+ ++ logged-update-to-one
562+ |= upd=logged-update-0:zero
563+ ^- logged-action:one
564+ ?+ -.upd upd
565+ %add-graph upd(graph (graph-to-one graph.upd))
566+ %add-nodes upd(nodes (~(run by nodes.upd) node-to-one))
567+ ==
568+ ::
569+ ++ node-to-one
570+ |= =node:zero
571+ (node:(upgrade ,post:zero ,post:one) node post-to-one)
572+ ::
573+ ++ graph-to-one
574+ |= =graph:zero
575+ (graph:(upgrade ,post:zero ,post:one) graph post-to-one)
576+ ::
577+ ++ marked-graph-to-one
578+ |= [=graph:zero m=(unit mark)]
579+ [(graph-to-one graph) m]
580+ ::
581+ ++ post-to-one
582+ |= p=post:zero
583+ ^- post:one
584+ p(contents (contents-to-one contents.p))
585+ ::
586+ ++ contents-to-one
587+ |= cs=(list content:zero)
588+ ^- (list content:one)
589+ %+ murn cs
590+ |= =content:zero
591+ ^- (unit content:one)
592+ ?: ?=(%reference -.content) ~
593+ `content
594+ ::
595+ ++ upgrade
596+ |* [in-pst=mold out-pst=mold]
597+ =>
598+ |%
599+ ++ in-orm
600+ ((on atom in-node) gth)
601+ +$ in-node
602+ [post=in-pst children=in-internal-graph]
603+ +$ in-graph
604+ ((mop atom in-node) gth)
605+ +$ in-internal-graph
606+ $~ [%empty ~]
607+ $% [%graph p=in-graph]
608+ [%empty ~]
609+ ==
610+ ::
611+ ++ out-orm
612+ ((on atom out-node) gth)
613+ +$ out-node
614+ [post=out-pst children=out-internal-graph]
615+ +$ out-graph
616+ ((mop atom out-node) gth)
617+ +$ out-internal-graph
618+ $~ [%empty ~]
619+ $% [%graph p=out-graph]
620+ [%empty ~]
621+ ==
622+ --
623+ |%
624+ ::
625+ ++ graph
626+ |= $: gra=in-graph
627+ fn=$-(in-pst out-pst)
628+ ==
629+ ^- out-graph
630+ %+ gas:out-orm *out-graph
631+ ^- (list [atom out-node])
632+ %+ turn (tap:in-orm gra)
633+ |= [a=atom n=in-node]
634+ ^- [atom out-node]
635+ [a (node n fn)]
636+ ::
637+ ++ node
638+ |= [nod=in-node fn=$-(in-pst out-pst)]
639+ ^- out-node
640+ :- (fn post.nod)
641+ ^- out-internal-graph
642+ ?: ?=(%empty -.children.nod)
643+ [%empty ~]
644+ [%graph (graph p.children.nod fn)]
645+ --
646+ ::
647+ ++ zero-load
648+ :: =* infinitely recurses
649+ =, store=zero
650+ =, orm=orm:zero
651+ =, orm-log=orm-log:zero
652+ |%
653+ ++ change-revision-graph
654+ |= [=graph:store q=(unit mark)]
655+ ^- [graph:store (unit mark)]
656+ |^
657+ :_ q
658+ ?+ q graph
659+ [~ %graph-validator-link] convert-links
660+ [~ %graph-validator-publish] convert-publish
661+ ==
662+ ::
663+ ++ convert-links
664+ %+ gas:orm *graph:store
665+ %+ turn (tap:orm graph)
666+ |= [=atom =node:store]
667+ ^- [^atom node:store]
668+ :: top-level
669+ ::
670+ :+ atom post.node
671+ ?: ?=(%empty -.children.node)
672+ [%empty ~]
673+ :- %graph
674+ %+ gas:orm *graph:store
675+ %+ turn (tap:orm p.children.node)
676+ |= [=^atom =node:store]
677+ ^- [^^atom node:store]
678+ :: existing comments get turned into containers for revisions
679+ ::
680+ :^ atom
681+ post.node(contents ~, hash ~)
682+ %graph
683+ %+ gas:orm *graph:store
684+ :_ ~ :- %0
685+ :_ [%empty ~]
686+ post.node(index (snoc index.post.node atom), hash ~)
687+ ::
688+ ++ convert-publish
689+ %+ gas:orm *graph:store
690+ %+ turn (tap:orm graph)
691+ |= [=atom =node:store]
692+ ^- [^atom node:store]
693+ :: top-level
694+ ::
695+ :+ atom post.node
696+ ?: ?=(%empty -.children.node)
697+ [%empty ~]
698+ :- %graph
699+ %+ gas:orm *graph:store
700+ %+ turn (tap:orm p.children.node)
701+ |= [=^atom =node:store]
702+ ^- [^^atom node:store]
703+ :: existing container for publish note revisions
704+ ::
705+ ?+ atom !!
706+ %1 [atom node]
707+ %2
708+ :+ atom post.node
709+ ?: ?=(%empty -.children.node)
710+ [%empty ~]
711+ :- %graph
712+ %+ gas:orm *graph:store
713+ %+ turn (tap:orm p.children.node)
714+ |= [=^^atom =node:store]
715+ ^- [^^^atom node:store]
716+ :+ atom post.node(contents ~, hash ~)
717+ :- %graph
718+ %+ gas:orm *graph:store
719+ :_ ~ :- %1
720+ :_ [%empty ~]
721+ post.node(index (snoc index.post.node atom), hash ~)
722+ ==
723+ --
724+ ::
725+ ++ maybe-unix-to-da
726+ |= =atom
727+ ^- @
728+ :: (bex 127) is roughly 226AD
729+ ?. (lte atom (bex 127))
730+ atom
731+ (add ~1970.1.1 (div (mul ~s1 atom) 1.000))
732+ ::
733+ ++ convert-unix-timestamped-node
734+ |= =node:store
735+ ^- node:store
736+ =. index.post.node
737+ (convert-unix-timestamped-index index.post.node)
738+ ?. ?=(%graph -.children.node)
739+ node
740+ :+ post.node
741+ %graph
742+ (convert-unix-timestamped-graph p.children.node)
743+ ::
744+ ++ convert-unix-timestamped-index
745+ |= =index:store
746+ (turn index maybe-unix-to-da)
747+ ::
748+ ++ convert-unix-timestamped-graph
749+ |= =graph:store
750+ %+ gas:orm *graph:store
751+ %+ turn
752+ (tap:orm graph)
753+ |= [=atom =node:store]
754+ ^- [^atom node:store]
755+ :- (maybe-unix-to-da atom)
756+ (convert-unix-timestamped-node node)
757+ --
758+ --
759+++ import
760+ |= [arc=* our=ship]
761+ ^- (quip card:agent:gall [%6 network])
762+ |^
763+ =/ sty [%6 (remake-network ;;(tree-network +.arc))]
764+ :_ sty
765+ %+ turn ~(tap by graphs.sty)
766+ |= [rid=resource =marked-graph]
767+ ^- card:agent:gall
768+ ?: =(our entity.rid)
769+ =/ =cage [%push-hook-action !>([%add rid])]
770+ [%pass / %agent [our %graph-push-hook] %poke cage]
771+ (try-rejoin rid 0)
772+ ::
773+ +$ tree-network
774+ $: graphs=tree-graphs
775+ tag-queries=(tree [term (tree uid)])
776+ update-logs=tree-update-logs
777+ archive=tree-graphs
778+ ~
779+ ==
780+ +$ tree-graphs (tree [resource tree-marked-graph])
781+ +$ tree-marked-graph [p=tree-graph q=(unit ^mark)]
782+ +$ tree-graph (tree [atom tree-node])
783+ +$ tree-node [post=tree-maybe-post children=tree-internal-graph]
784+ +$ tree-internal-graph
785+ $~ [%empty ~]
786+ $% [%graph p=tree-graph]
787+ [%empty ~]
788+ ==
789+ +$ tree-update-logs (tree [resource tree-update-log])
790+ +$ tree-update-log (tree [time tree-logged-update])
791+ +$ tree-logged-update
792+ $: p=time
793+ $= q
794+ $% [%add-graph =resource =tree-graph mark=(unit ^mark) ow=?]
795+ [%add-nodes =resource nodes=(tree [index tree-node])]
796+ [%remove-posts =resource indices=(tree index)]
797+ [%add-signatures =uid signatures=tree-signatures]
798+ [%remove-signatures =uid signatures=tree-signatures]
799+ ==
800+ ==
801+ +$ tree-signatures (tree signature)
802+ +$ tree-maybe-post (each tree-post hash)
803+ +$ tree-post
804+ $: author=ship
805+ =index
806+ time-sent=time
807+ contents=(list content)
808+ hash=(unit hash)
809+ signatures=tree-signatures
810+ ==
811+ ::
812+ ++ remake-network
813+ |= t=tree-network
814+ ^- network
815+ :* (remake-graphs graphs.t)
816+ (remake-jug:migrate tag-queries.t)
817+ (remake-update-logs update-logs.t)
818+ (remake-graphs archive.t)
819+ ~
820+ ==
821+ ::
822+ ++ remake-graphs
823+ |= t=tree-graphs
824+ ^- graphs
825+ %- remake-map:migrate
826+ (~(run by t) remake-marked-graph)
827+ ::
828+ ++ remake-marked-graph
829+ |= t=tree-marked-graph
830+ ^- marked-graph
831+ [(remake-graph p.t) q.t]
832+ ::
833+ ++ remake-graph
834+ |= t=tree-graph
835+ ^- graph
836+ %+ gas:orm *graph
837+ %+ turn ~(tap by t)
838+ |= [a=atom tn=tree-node]
839+ ^- [atom node]
840+ [a (remake-node tn)]
841+ ::
842+ ++ remake-internal-graph
843+ |= t=tree-internal-graph
844+ ^- internal-graph
845+ ?: ?=(%empty -.t)
846+ [%empty ~]
847+ [%graph (remake-graph p.t)]
848+ ::
849+ ++ remake-node
850+ |= t=tree-node
851+ ^- node
852+ :- (remake-post post.t)
853+ (remake-internal-graph children.t)
854+ ::
855+ ++ remake-update-logs
856+ |= t=tree-update-logs
857+ ^- update-logs
858+ %- remake-map:migrate
859+ (~(run by t) remake-update-log)
860+ ::
861+ ++ remake-update-log
862+ |= t=tree-update-log
863+ ^- update-log
864+ =/ ulm ((on time logged-update) gth)
865+ %+ gas:ulm *update-log
866+ %+ turn ~(tap by t)
867+ |= [=time tlu=tree-logged-update]
868+ ^- [^time logged-update]
869+ [time (remake-logged-update tlu)]
870+ ::
871+ ++ remake-logged-update
872+ |= t=tree-logged-update
873+ ^- logged-update
874+ :- p.t
875+ ?- -.q.t
876+ %add-graph
877+ :* %add-graph
878+ resource.q.t
879+ (remake-graph tree-graph.q.t)
880+ mark.q.t
881+ ow.q.t
882+ ==
883+ ::
884+ %add-nodes
885+ :- %add-nodes
886+ :- resource.q.t
887+ %- remake-map:migrate
888+ (~(run by nodes.q.t) remake-node)
889+ ::
890+ %remove-posts
891+ [%remove-posts resource.q.t (remake-set:migrate indices.q.t)]
892+ ::
893+ %add-signatures
894+ [%add-signatures uid.q.t (remake-set:migrate signatures.q.t)]
895+ ::
896+ %remove-signatures
897+ [%remove-signatures uid.q.t (remake-set:migrate signatures.q.t)]
898+ ==
899+ ::
900+ ++ remake-post
901+ |= t=tree-maybe-post
902+ ^- maybe-post
903+ ?- -.t
904+ %| t
905+ %& t(signatures.p (remake-set:migrate signatures.p.t))
906+ ==
907+ ::
908+ ++ try-rejoin
909+ |= [rid=resource nack-count=@]
910+ ^- card:agent:gall
911+ =/ res-path (en-path:res rid)
912+ =/ wire [%try-rejoin (scot %ud nack-count) res-path]
913+ =/ =cage
914+ :- %pull-hook-action
915+ !> ^- action:pull-hook
916+ [%add [entity .]:rid]
917+ [%pass wire %agent [our %graph-pull-hook] %poke cage]
918+ --
919+--