Skip to content

Instantly share code, notes, and snippets.

"Stepwisdom" and "step nomadism" are two competing philosophies of how to sequence code upgrades, and they have a very long history in Urbit.

Stepwisdom is the idea that the system should guarantee that every update to a piece of code is run stepwise, in order. That is, you only ever upgrade from version n to n+1. This is very nice for developers -- instead of considering n different possible upgrade scenarios, you can consider only one. This sounds so nice that we've always planned to do it, though somehow we've never quite got there.

@philipcmonk
philipcmonk / fmt.hoon
Created March 16, 2023 06:46
fmt.hoon is a basic autoformatter for hoon. fmted.hoon is the result of running it on itself.
:: An autoformatter for hoon
::
:: Usage: +desk!fmt (ream .^(@t %cx /=desk=/gen/fmt/hoon))
::
:: This is still very experimental. The biggest weaknesses are:
:: - no comments (need parser to store them)
:: - core arms are in alphabetical order (need AST to store `(list
:: [term hoon])` instead of `(map term hoon)`)
:: - no vertical alignment (requires some fancy lookahead, but should
:: be doable locally)
@philipcmonk
philipcmonk / baby.hoon
Created February 11, 2023 22:53
A baby pill -- no jets required
!.
=> ~
=/ core
!=
=> ~ =>
|%
+$ card (cask)
++ cask |$ [a] (pair mark a)
+$ knot @ta
++ list |$ [item] $@(~ [i=item t=(list item)])
=s -build-file %/lib/strandio/hoon
|pass :* %k %lard %base =/ m (strand:rand ,vase) ;< file=@t bind:m (fetch-cord:s "https://raw.githubusercontent.com/urbit/urbit/cec4e11448ee4bbcdf9d586fe0d96d493a3d60c2/pkg/landscape/app/group-store.hoon") ;< ~ bind:m (send-raw-card:s %pass /info %arvo %c %info %landscape %& [/app/group-store/hoon %mut %hoon !>(file)] ~) (pure:m !>('hotfix complete')) ==

This is a proposal for a "lure service".

While this can serve as the foundation for countless features, the primary goal is to solve the "boot into an empty landscape" problem. In other words, it's trying to close the loop of "one person uses Urbit" -> "they invite another to their group on Urbit" -> "they get on Urbit and immediately know what to do with it" -> "they invite another".

Thus, we will first consider the case of inviting someone into an Urbit group who may not already use Urbit.

Invites should be regular links. These work on any device, can be transmitted over any transport (including publicly in a tweet or physically via qr code), and are very low-friction to click. When you click this link, you should expect to receive an invite to that group.

To make this happen, we must somehow establish an association between the person who clicked the link and their @p. We should make this work for as many cases as possible -- especially, it should work even if they don't yet have a @p.

Keybase proof

I hereby claim:

  • I am philipcmonk on github.
  • I am pcmonk (https://keybase.io/pcmonk) on keybase.
  • I have a public key ASCLb38rzx85_brKQrl05d8ZFMbANIaRHwxegKVE3FesFQo

To claim this, I am signing this object:

~zod/try=> ^/%/euler5
! /~zod/try/~2015.1.30..21.28.33..9c0b:<[1 1].[1 11]>
! /~zod/try/~2015.1.30..21.28.33..9c0b/euler5:<[6 1].[56 3]>
! /~zod/try/~2015.1.30..21.28.33..9c0b/euler5:<[7 1].[56 3]>
! /~zod/try/~2015.1.30..21.28.33..9c0b/euler5:<[11 1].[56 3]>
! /~zod/try/~2015.1.30..21.28.33..9c0b/euler5:<[54 3].[55 31]>
! /~zod/try/~2015.1.30..21.28.33..9c0b/euler5:<[55 3].[55 31]>
! /~zod/try/~2015.1.30..21.28.33..9c0b/euler5:<[55 8].[55 20]>
! /~zod/try/~2015.1.30..21.28.33..9c0b/euler5:<[55 9].[55 11]>
! -find-limb.sq
/- mess,user,users,zing,zong
!:
=> |%
++ axle
$% [%0 p=(map path ,[p=(list zong) q=(map ship ,?)])]
==
++ blitz
$% [%zong p=zong]
[%user p=user]
==
~zod/try=> fjdlkfcog: %fjdlkf
error: find-none
[ %gall-crud-error
/a/~zod/._~~.terminal__/u/txt
~[/d/term-mess //term/1]
[ %g
%crud
p=%mack-made
q
~[
diff --git a/urb/zod/main/app/terminal/core.hook b/urb/zod/main/app/terminal/core.hook
index 49657b9..ed6f450 100644
--- a/urb/zod/main/app/terminal/core.hook
+++ b/urb/zod/main/app/terminal/core.hook
@@ -174,6 +174,7 @@
%nice +>.$
?(%rust %rush)
=. p.q.sih ?^(q.q.sih p.tel p.q.sih) :: XX prompt hack
+ ~& [%term-pour dis=dis qsih=q.sih]
%_ +>.$