on master help sign in
remove list headers, delete some spurious span tags
commit8a1588008ce84bbf35e105e51e2bd1c719acbfa1 authorMorgan Sutherland <morgan@morgansutherland.com> dateThu 23 May 2019, 14:47 (7 years ago) parentaf454a3
6 files changed+54−129
learn/arvo/eyre.md−47 learn/arvo/hall.md+3−3 learn/nock/implementations.md+12−13 reference/glossary.md+34−60 using/messaging.md+1−2 using/sail-and-udon.md+4−4
learn/arvo/eyre.md−47
@@ -47,7 +47,6 @@ Runtime
4747Let us follow the loading of a simple cli app, as it bounces from
4848browser to server to browser and back.
4949
50−<span id="init"></span>
5150### Initial request
5251
5352An http request for `http://sampel-sipnym.urbit.org/cli` will be [redirected](dns)
@@ -183,7 +182,6 @@ to a `[%auth %try {password}]` perk. `%get:process-auth` checks it against
183182serves a fresh `auth.json` which reflects the changed `user`. Upon receiving
184183this, the page is refreshed to retry the original request.
185184
186−<span id="auth-ok"></span>
187185### Post-authentication: app communication.
188186
189187Upon refresh, `/~~/cli` brings us for the third time to `%get:process-auth`, but
@@ -207,7 +205,6 @@ of `oryx` that identifies the connection. `++as-aux-request`, an `%is` is a
207205`++add-subs:ix`, the ix core fetched `++for-view` by hashing the request
208206`++oryx-to-ixor`.
209207
210−<span id="view-ixor"></span>
211208A view has all the state associated with a client that must be
212209remembered between events. In this case, this is what app/path the request duct
213210is associated with; but mainly, `++add-subs:ix` will `pass-note` to `%gall` so
@@ -242,7 +239,6 @@ would occur first, and `%made:axon` would send the gall message proper. In
242239either case, eventually a `%mean` or `%nice` arrives, is encoded as json, and
243240sent to the client callback.
244241
245−<span id="mage"></span>
246242## A path not taken: magic filenames
247243
248244The `/robots.txt` and `/favicon.(ico|png)` files are static, and served
@@ -250,7 +246,6 @@ immediately when caught by a `++parse`.
250246
251247XX index.html?
252248
253−<span id="xeno"></span>
254249## A path not taken: foreign auth
255250
256251While this example details a login `/~/as/own`, it is possible to be
@@ -281,7 +276,6 @@ and sending `%g %nuke`.
281276
282277XX unmentioned arms: abet, add-poll, adit, ames-gram, anon, ares-to-json, bolo, cyst, doze, even, ford-kill, get-mean, gift, give-json, give-thou, gram, hapt, hasp, host-to-ship, ix, ixor, js, kiss, load, mean-json, move, note, pass-note, perk, perk-auth, pest, poke-test, print-subs, render-tang, resp, root-beak, scry, ses-authed, ses-ya, sign, silk, sine, stay, stem, teba, titl, to-oryx, urb, wait-era, wake, whir, wush, xml, ya, ye
283278
284−<span id="dns"></span>
285279### Appendix A: DNS
286280
287281The `*.urbit.org` domain can be used to access destroyers and cruisers. In the
@@ -350,7 +344,6 @@ When a new version of a page becomes available, it is useful to propagate it to
350344- `/~/on/[hash].json` retuns `true` when a page may require updating.
351345- `/~/on/[hash].js` is a lightweight script that polls for the above. It is primarily used in error messages.
352346
353−<span id="auth"></span>
354347### 1.3 Authentication
355348
356349Authenticated requests are accomplished through sessions, tracked with cookies which are set on the first such request.
@@ -376,10 +369,8 @@ So far, all the paths specified have been GET requests. Authentication, however,
376369- `POST {oryx, wire, xyro} /~/to/[app]/[mark].json`, where `xyro` is data that will be converted to the `mark`. In the simplest case, `/~/to/hello/json.json` will pass `xyro` through verbatim, sending `[%json xyro]` to the `++poke` arm of app `%hello`.
377370- `POST {oryx, wire, xyro} /~/to/<ship>/[app]/[mark].json` is a foreign message send, as above.
378371
379−<span id="subs"></span>
380372### 1.5 Subscriptions
381373
382−<span id="of-ixor"></span>
383374- `/~/of/[ixor]` is an `EventSource`: a conceptually infinite file containing a stream of events. By default, it sends a newline every 30 seconds serving to signal that the connection is alive to both the server and IP middleware.
384375 + `/~/of/[ixor]?poll={n}` is a long-polling fallback interface. Produces event number `{n}`, blocking until it occurs. Its contexts can be affected by `POST` requests with a body of `{oryx, wire}`, and a query string of `PUT` or `DELETE`. They return either `{mark}`(which may be `null`), or [`{fail, mess}`](#mean-json)
385376- `/~/in/[hash].json` is a dual to [`/~/on`](#on-change). It binds `mod` events, which echo the requesting token.
@@ -387,14 +378,12 @@ So far, all the paths specified have been GET requests. Authentication, however,
387378
388379
389380
390−<span id="temp"></span>
391381### 1.6 Ablative
392382
393383These interfaces will temporarily exist to aid development, and are to be considered unstable.
394384- `/~/debug/...` access normally inaccessible pages. For example, `/~/debug/as.html` will present the login page, regardless of current session status.
395385
396386
397−<span id="client"></span>
398387## 2. Client state
399388
400389Some information is stored on, and provided to, browser clients
@@ -403,7 +392,6 @@ Some information is stored on, and provided to, browser clients
403392
404393Authenticated users receive a cookie on the domain of `*.urbit.org`. The cookie contains a client session token, keyed by the serving ship.
405394
406−<span id="auth-json"></span>
407395### 2.2 Authentication
408396
409397It is common(e.g. by the `%urb` mark) to set window.urb to the contents of `/~/auth.json`:
@@ -422,7 +410,6 @@ To this object, `/main/lib/urb.js` adds helpers:
422410- `drop({path,app?=urb.app}, cb?)` pulls the subscription
423411- `util` is an object containing methods for converting between JavaScript types and Hoon atom odors.
424412
425−<span id="kiss"></span>
426413## 3. Requests
427414
428415## `[%born port=@ud]`, unix init
@@ -485,22 +472,17 @@ Sometimes, messages are received from other ships. They are expected to take the
485472
486473**Gifts given in response:** [`%nice` or `%mean`](#ack).
487474
488−<span id="gram"></span>
489475#### 3.4.1 `gram`
490476
491−<span id="foreign"></span>
492477There are three messages of note, all concerning authentication
493−<span id="lon"></span>
494478- `[/lon ses]` is a login request, which contains the session wishing to authenticate.
495479- if the session is already authorized, a reply of `[/aut ses]` from (%eyre on) a foreign ship prescribes that the session is henceforth allowed to act on its behalf. All waiting `/~/as` are resolved as successful.
496480- otherwise, `[/hat ses hart]` contains the ship's preferred hostname. This can then be used to redirect the client. All waiting `/~/as` are given `307 Redirect`s to `/~/am` on the provided host.
497481
498482**Gifts given in response:** nice?
499483
500−<span id="gift"></span>
501484## 4. Responses
502485
503−<span id="ack"></span>
504486### 4.1 `[%nice ~]`, `[%mean ares]`, network acknowledgement
505487
506488A `%nice` is given upon receiving an [ames message](#gram), indicating succesful receipt. `%mean` is currently unused directly, but reserved for error conditions.
@@ -516,30 +498,23 @@ Most requests are served with one coherent response, consisting of
516498- `q=mess`, response headers
517499- `r=(unit octs)`, an optional body
518500
519−<span id="that"></span>
520501### 4.3 `[%that httr]`, partial HTTP response
521502
522503[EventStream responses](#of-ixor) consist of multiple sequential chunks. Treated as `%thou`, except the request is kept open.
523504
524−<span id="thar"></span>
525505### 4.4 `[%thar (unit octs)]`, partial HTTP body
526506
527507Complementing `%that`, `%thar` is a body chunk, containing an event. An empty `%thar` signals for the connection to be closed.
528508
529509Body chunks, besides `[1 '\0a']`(a heartbeat newline), are encoded from `even` events. The stem becomes the [`event` field](#eventsource), and the content, `data` lines.
530510
531−<span id="even"></span>
532511#### 4.4.1 `even`, event types
533512
534513There are three events that a [client subscription](#subs) will be given.
535514
536−<span id="even-news"></span>
537515- `[%news hash]` is a `%f` update, and contains the relevant dependency token.
538−<span id="even-rush"></span>
539−- `[%rush [term path] wain]` is sourced subscription data.
540516- `[%mean [term path] ares]` is a sourced subscription error.
541517
542−<span id="note"></span>
543518## 5. Vane requests
544519
545520### 5.1 ``[%a %wont sock `[path *]`gram]``, outbound message
@@ -548,15 +523,12 @@ The `%a` interface provides conveyance of [messages](#gram) over UDP.
548523
549524Signs a `%woot` upon message arrival.
550525
551−<span id="wait"></span>
552−### 5.2 `[%b ?(%wait %rest) time]`, timeout set/unset
553526
554527All open [subscriptions](#of-ixor) require a "heartbeat" newline every `~s30`. When this fails to arrive, a complementary timer is set for `~m1`, after which the client is considered to have departed.
555528The `%b` timer interface is used to schedule the next such event, or cancel past scheduled ones when a connection closes.
556529
557530Signs a `%wake` upon timer activation.
558531
559−<span id="wasp"></span>
560532### 5.3 `[%f %wasp @uvI]`, dependency listen
561533
562534Knowledge of filesystem changes, requested by `/~/on` and `/~/in`, is requested the `%wasp` note. It contains the hash token which identifies a set of dependencies to query. Saved as a (live[live](#live)#live] request in case of cancellation when caused by `/~/on`.
@@ -578,7 +550,6 @@ The simplest functional request is the construction of a page. Saved as a [live]
578550- A `beam`(path in `%clay`) is decoded from the request path.
579551- A `/web/<nyp ced quy>` virtual path is appended, span-encoding method, auth, and query string.
580552
581−<span id="done"></span>
582553### `[%cast mark %done ~ cage]`, convert
583554
584555This is used when communicating with apps, in both directions.
@@ -589,14 +560,12 @@ This is used when communicating with apps, in both directions.
589560
590561The end goal of many a userspace `hymn.hook` is to provide UI for a `%gall` app. To accommodate this, various functionality needs to be interfaced with.
591562
592−<span id="mess"></span>
593563### `[%mess hapt ship cage]`, app message
594564
595565After a `/~/to` POST has been received, and possibly converted to the correct mark, it is sent to `%g` for processing. The `hapt` is the destination, the `ship` is the source, the `cage` is the marked message data.
596566
597567Signs a `%nice` or `%mean`, in userspace or upon crashing.
598568
599−<span id="show"></span>
600569### `[%show hapt ship path]`, app subscription
601570
602571An `/~/is` PUT, if not already registered, results in a new subscription. A request for such contains the destination `hapt`, requesting `ship`, and app-internal `path`.
@@ -615,17 +584,14 @@ An `/~/is` DELETE is used to remove a subscription, and is converted straightfor
615584
616585Signs an empty `%mean` for each open subscription that is closed.
617586
618−<span id="whir"></span>
619587## 6. In-flight metadata
620588
621589Various state can be associated with requests, but not necessarily be returned in responses to them.
622590
623−<span id="wire-drop"></span>
624591### 6.1 `~`, dropthrough
625592
626593If the response should be sent statelessly further up the duct, the `wire` is empty. This is used in `%f` pure functional page generation.
627594
628−<span id="wire-live"></span>
629595### 6.2 `[?(%y %n) ...]`, stability
630596
631597The first element of a [`%b` timer](#wait) path distinguishes between live(%y) and dying(%n) channels.
@@ -638,17 +604,14 @@ Designates which stream to act upon. Present on `%b` timer cards.
638604
639605Present on `%f` dependency news. Looked up in [the state](#bolo) to see if any response is necessary.
640606
641−<span id="wire-to"></span>
642607### 6.5 `/to/<hasp>/<ship>`, app
643608
644609Present on `%f` translations of message marks
645610
646−<span id="wire-is"></span>
647611### 6.6 `/is/[ixor]/{hasp path}`, subscription
648612
649613Subscription requests. Present on `%g` subscription requests, and `%f` translations of [`%rush` subscription data](#show).
650614
651−<span id="sign"></span>
652615## 7. Vane responses
653616
654617The goal of requests is to cause some manner of result. Specifically,
@@ -685,14 +648,12 @@ The former is [served](#mime) back to the requester(i.e. the remaining duct), an
685648
686649A `%rush` arrives on a [subscription wire](#wire-is), and is then sent [for conversion](#done) to the correct mark. An unexpected `%rush` is `%nuke`d.
687650
688−<span id="bolo"></span>
689651## 8. Server state
690652
691653There is a quantity of data that persists between events.
692654
693655### 8.1 Global
694656
695−<span id="prefix"></span>
696657- `path` the default path which is prepended to relative plain requests. Initialized to `/<our>`, the serving ship; this interprets the first element of requests as a desk, and injects a `case` of `0`.
697658- `(jar ship hart)` remembered hostnames in order of preference, made accessible through `.^`
698659 + The default values(for self) are `http://<ship>.urbit.org:80` if not on a fake network, followed by `https://0.0.0.0:[port]`.
@@ -703,7 +664,6 @@ There is a quantity of data that persists between events.
703664- `(map hole sink)`, session state.
704665- `(map hole ,[ship ?])`, foreign session names, along with their origin ships and whether they are authorized to act on our behalf.
705666
706−<span id="live"></span>
707667### 8.2 `live`, per-request state
708668
709669To honor request cancellations, each unserved request must track which effect it is causing.
@@ -712,7 +672,6 @@ To honor request cancellations, each unserved request must track which effect it
712672+ `[%xeno ship]` if this is a proxied request
713673+ `[%poll ixor]` if this is a session long-poll
714674
715−<span id="sink"></span>
716675### 8.3 `sink`, per-session state
717676
718677Each `hole` has associated authentication state.
@@ -721,12 +680,10 @@ Each `hole` has associated authentication state.
721680- `(jug ship ,[path duct])`, authentication `/~/as` requests waiting on foreign ships.
722681- `(set oryx)`, views associated with this session. Dual of `hole` in `stem`.
723682
724−<span id="stem"></span>
725683### 8.4 `stem`, per-view state
726684
727685Each `oryx` has active subscription state.
728686- `hole`, session in which this view resides. Dual of `(set oryx)` in `sink`.
729−<span id="ixor"></span>
730687- `ixor`, a cached hash of the `oryx` that is used as a subscription id, by the `/~/of` EventStream.
731688- `[,@u (map ,@u even)]`, queued [events](#even). Has a maximum size.
732689- `(unit ,[duct @u ?])`, http connection, its last received event, and whether it is a long-poll request.
@@ -737,14 +694,10 @@ Each `oryx` has active subscription state.
737694## Appendix A: Glossary
738695
739696- An `oryx` is a CSRF token used for [authenticated requests](#auth)
740−<span id="mean-json"></span>
741697- `mean.json` is a rendering of hoon `ares`: an error message formatted as `{fail:'type',mess:"Error message"}`
742−<span id="urb-js"></span>
743698- `urb.js` is the standard client-side implementation of the `%eyre` protocols, normally found in `/=main=/lib`
744−<span id="mime"></span>
745699- The act of "serving", refers to the wrapping of a `%mime` cage in an HTTP `200 Success` response, and errors or other marks being [sent to ford](#done) for conversion. Inside a `sign`, this conversion occurs along the same [`wire`](#wire); otherwise, the `wire` is [empty](#wire-drop).
746700
747−<span id="eventsource"></span>
748701## Appendix B: EventSource
749702
750703UNIMPLEMENTED
learn/arvo/hall.md+3−3
@@ -11,11 +11,11 @@ Hall is the Urbit messaging and notifications protocol. This document details Ha
1111
1212## Table of contents
1313
14−- #### [Hall Architecture](#architecture)
14+- [Hall Architecture](#architecture)
1515
16−- #### [The Hall Interface](#interface)
16+- [The Hall Interface](#interface)
1717
18−- #### [The New Gall Model](#new-gall)
18+- [The New Gall Model](#new-gall)
1919
2020# Hall Architecture
2121
learn/nock/implementations.md+12−13
@@ -7,31 +7,31 @@ We use a C implementation for our Nock interpreter. But building a Nock interpre
77
88## Table of Contents
99
10−- #### [C](#C)
10+- [C](#C)
1111
12−- #### [Clojure](#clojure)
12+- [Clojure](#clojure)
1313
14−- #### [C#](#c-sharp)
14+- [C#](#c-sharp)
1515
16−- #### [Groovy](#groovy)
16+- [Groovy](#groovy)
1717
18−- #### [Haskell](#haskell)
18+- [Haskell](#haskell)
1919
20−- #### [JavaScript](#javascript)
20+- [JavaScript](#javascript)
2121
22−- #### [Python](#python)
22+- [Python](#python)
2323
24−- #### [Ruby](#ruby)
24+- [Ruby](#ruby)
2525
26−- #### [Scala](#scala)
26+- [Scala](#scala)
2727
28−- #### [Scheme](#scheme)
28+- [Scheme](#scheme)
2929
30−- #### [Swift](#swift)
30+- [Swift](#swift)
3131
3232## C Implementation
3333
34−The actual production Nock interpreter. Note gotos for tail-call elimination,
34+The actual production Nock interpreter. Note gotos for tail-call elimination,
3535and manual reference counting. More about the C environment can be found
3636in the [runtime system documentation](./docs/learn/vere/runtime.md).
3737```
@@ -399,7 +399,6 @@ From [Matt Earnshaw](https://github.com/mattearnshaw/anock/blob/master/src/anock
399399
400400## C#
401401
402−
403402From [Julien Beasley](https://github.com/zass30/Nock5KCSharp):
404403
405404```
reference/glossary.md+34−60
@@ -9,12 +9,10 @@ from the strange words within.
99As Dijkstra put it: "The purpose of abstraction is not to be vague, but
1010to create a new semantic level in which one can be absolutely precise."
1111
12−<span id="application"></span>
1312### application
1413
1514Also known as an “app,” an _application_ is a Hoon program that can hold state.
1615
17−<span id="arm"></span>
1816### arm
1917
2018An _arm_ is a named, functionally-computed attribute of a [core](#core).
@@ -25,14 +23,14 @@ enclosing [core](#core) itself as the subject.
2523There are two kinds of arms: _dry_ and _wet_. Most arms are
2624dry.
2725
28−- ##### dry:
26+##### dry
2927
3028 normal, `++`, polymorphic by means of _variance_
3129
3230 For a dry arm, we ask: is the new payload compatible with the old
3331 payload (against which the core was compiled)?
3432
35−- ##### wet:
33+##### wet
3634
3735 unusual, `+-`, polymorphic by means of _genericity_
3836
@@ -43,7 +41,7 @@ dry.
4341_See [advanced types](/docs/reference/hoon-expressions/advanced/)_.
4442
4543
46−<span id="arvo"></span>
44+
4745### Arvo
4846
4947The Urbit operating system and kernel. Arvo's state is a pure function of its
@@ -69,7 +67,7 @@ More in-depth information on Arvo can be found
6967
7068Below are Arvo modules, which are called "vanes".
7169
72−- ##### Ames
70+##### Ames
7371
7472 The networking vane. Ames handles all things UDP. Here live the protocols for
7573 discovering and interacting with other urbits. It’s also the name for the Urbit
@@ -80,7 +78,7 @@ Below are Arvo modules, which are called "vanes".
8078 More in-depth information on Ames can be found
8179 [`here`](.t/docs/learn/arvo/ames.md).
8280
83−- ##### Behn
81+##### Behn
8482
8583 The timing vane. Behn allows for applications to schedule events, which are
8684 managed in a simple priority queue. For example, Clay, the Urbit filesystem,
@@ -89,7 +87,7 @@ Below are Arvo modules, which are called "vanes".
8987
9088 Behn is located in `/home/sys/vane/behn.hoon` within your urbit.
9189
92−- ##### Clay
90+##### Clay
9391
9492 The filesystem and typed revision-control vane. Think of Clay as a
9593 continuously synced git. It handles file-change events and maps them from Urbit
@@ -106,7 +104,7 @@ Below are Arvo modules, which are called "vanes".
106104 of the architecture can be found
107105 [`here`](./docs/learn/arvo/clay.md).
108106
109−- ##### Dill
107+##### Dill
110108
111109 The terminal-driver vane. You run your urbit in your Unix terminal, and
112110 Unix sends every event -- such as a keystroke or a change in the dimensions of
@@ -125,7 +123,7 @@ Below are Arvo modules, which are called "vanes".
125123 More in-depth information on Dill can be found
126124 [`here`](./docs/learn/arvo/dill.md).
127125
128−- ##### Eyre
126+##### Eyre
129127
130128 The web-server vane. Anything HTTP-related lives here. Unix sends HTTP messages
131129 though to Eyre, and Eyre produces HTTP messages in response.
@@ -139,7 +137,7 @@ Below are Arvo modules, which are called "vanes".
139137 More in-depth information on Eyre can be found
140138 [`here`](./docs/learn/arvo/eyre.md).
141139
142−- ##### Ford
140+##### Ford
143141
144142 The build-system vane. Ford is capable of sequencing generic asynchronous
145143 computations. Its uses include linking source files into programs, assembling
@@ -154,7 +152,7 @@ Below are Arvo modules, which are called "vanes".
154152 More in-depth information on Ford can be found
155153 [`here`](content/docs/learn/arvo/ford.md).
156154
157−- ##### Gall
155+##### Gall
158156
159157 The application-management vane. Userspace apps -- daemons, really -- are
160158 started, stopped, and sandboxed by Gall. Gall provides developers with a
@@ -179,17 +177,16 @@ optional constant.
179177
180178An atom type is _warm_ or _cold_ based on whether the constant exists.
181179
182−- ##### warm:
180+##### warm
183181
184182 If the constant is `~` (null), any atom is in the type.
185183
186−- ##### cold:
184+##### cold
187185
188186 If the constant is `[~ atom]`, its only legal value is `atom`.
189187
190188_See [basic types](./docs/reference/hoon-expressions/basic.md)_
191189
192−<span id="aura"></span>
193190### aura
194191
195192An aura is a soft atom type. They appear as strings beginning with `@`. Auras
@@ -293,7 +290,6 @@ least-significant bit first. Represented as the aura `@t`.
293290 'hello'
294291```
295292
296−<span id="core"></span>
297293### core
298294
299295A _core_ is a [cell](#nock-cell) of `[code data]`, where we call the
@@ -301,11 +297,11 @@ code head the _battery_ and the data tail the _payload_. All code-data
301297structures in normal languages (functions, objects, modules, etc.)
302298translate to cores in Hoon.
303299
304−- ##### battery
300+##### battery
305301
306302 The code-containing head of a core.
307303
308−- ##### payload
304+##### payload
309305
310306 The data-containing tail of a core.
311307
@@ -361,7 +357,6 @@ _no_.
361357Why? It's fresh, it's different, it's new. And it's annoying. And it
362358keeps you on your toes. And it's also just intuitively right.
363359
364−<span id="gate"></span>
365360### gate
366361
367362A _gate_ is a [core](#core) with one [arm](#arm) -- Hoon's closest
@@ -371,11 +366,11 @@ in the core) with the argument, and then compute the arm.
371366
372367The payload of a gate has a shape of `[sample context]`.
373368
374−- ##### sample
369+##### sample
375370
376371 The argument tuple.
377372
378−- ##### context
373+##### context
379374
380375 The subject in which the gate was defined.
381376
@@ -433,7 +428,7 @@ such app that uses Hall.
433428
434429_More information on Hall can be found [here](./docs/learn/arvo/hall.md)._
435430
436−- ##### circle
431+##### circle
437432
438433 A circle is the “audience” of your messages -- who can receive them. It can be
439434 thought of as a chat channel, but this is a little too narrow. More
@@ -447,7 +442,6 @@ _More information on Hall can be found [here](./docs/learn/arvo/hall.md)._
447442_Hood_ orchestrates many of the Urbit initialization systems necessary
448443for boot.
449444
450−<span id="hoon"></span>
451445### Hoon
452446
453447Hoon is a strict, higher-order typed functional language that compiles itself
@@ -457,8 +451,7 @@ The Hoon source file is located in `/home/sys/hoon.hoon` within your urbit.
457451
458452_More information can be found in the [hoon](./docs/learn/hoon/_index.md) section._
459453
460−<span id="mint"></span>
461−- ##### Mint
454+##### Mint
462455
463456 _Mint_ is the Hoon compiler function. Mint takes the subject type and the
464457 expression source (a [hoon](#a-hoon), for example) and produces the product
@@ -550,7 +543,6 @@ you desire.
55054315
551544```
552545
553−<span id="limb"></span>
554546### limb
555547
556548A _limb_ is an attribute or variable reference. A limb is an [arm](#arm) or a
@@ -561,71 +553,58 @@ head-first for either a face named "foo" or a core with an arm of
561553"foo". If a face is found, the result is a leg, if a core is
562554found, the result is the product of the arm.
563555
564−- ##### leg
556+##### leg
565557
566558 a subexpression, or subtree of the
567559 [subject](#nock-subject).
568560
569−- ##### wing
561+##### wing
570562
571563 a search path into the subject, composed of
572564 limbs. Search occurs from right to left (`a.b` means `b` within `a`).
573565
574566_See [Limbs and wings](./docs/reference/hoon-expressions/limb/_index.md)_
575567
576−
577−<span id="move"></span>
578568### move
579569
580570A move is the [Arvo](#arvo) equivalent of a syscall.
581571
582−
583−<span id="noun"></span>
584572### noun
585573
586574In [Nock](#nock) and [Hoon](#hoon), a _noun_ is an atom or a cell.
587575
588−
589−<span id="nock"></span>
590576### Nock
591577
592578Nock is a Turing-complete, non-lambda combinator interpreter. It's
593579Urbit's low-level programming language. Nock is functional and typeless.
594580
595−<span id="nock-noun"></span>
596−- ##### noun
581+##### noun
597582
598583 an _atom_ or a _cell_.
599584
600−<span id="nock-atom"></span>
601−- ##### atom
585+##### atom
602586
603587 any natural number, including zero.
604588
605−<span id="nock-cell"></span>
606−- ##### cell
589+##### cell
607590
608591 any ordered pair of nouns.
609592
610−<span id="nock-subject"></span>
611−- ##### subject
593+
594+##### subject
612595
613596 a noun - the data against which a _formula_ is evaluated.
614597
615−<span id="nock-formula"></span>
616−- ##### formula
598+##### formula
617599
618600 a noun - a function at the nock level.
619601
620−<span id="nock-product"></span>
621−- ##### product
602+##### product
622603
623604 a noun - the result of evaluating a formula against a subject.
624605
625606_See the [Nock definition](./docs/learn/nock/definition.md)._
626607
627−
628−<span id="mark"></span>
629608### mark
630609
631610A _mark_ is Urbit's version of a MIME type, if a MIME type was an
@@ -701,13 +680,11 @@ whose number is its bottom half. So the planet `~firbyr-napbes`,
701680`48.879`, whose parent is `~mun`, `0xef`, `239`. The galaxy at the address of
702681`0` is `~zod`.
703682
704−
705−- ##### pier
683+##### pier
706684
707685 A ship's _pier_ is its Unix directory. For planets, the name of the pier is
708686 usually the planet name.
709687
710−<span id="structure"></span>
711688### structure
712689
713690A _structure_ is an idempotent [gate](#gate) (function) that constructs and
@@ -718,7 +695,7 @@ validate untrusted network data.
718695
719696Here's some common structure terminology:
720697
721−- ##### bunt:
698+##### bunt
722699
723700 A bunt is the default value of a [structure](#structure). It's also a verb;
724701 to _bunt_ a structure is to produce the bunt of that structure. For example,
@@ -732,11 +709,10 @@ Here's some common structure terminology:
732709 ''
733710 ```
734711
735−- ##### icon: The type of the mold's range.
712+##### icon: The type of the mold's range
736713
737714_See [mold hoons](/docs/reference/hoon-expressions/rune/buc/)._
738715
739−<span id="rune"></span>
740716### rune
741717
742718A Hoon _rune_ is a pair of ASCII symbols used to begin a
@@ -753,7 +729,7 @@ a [`hoon`](#a-hoon).
753729
754730Runes have two syntactic forms, _tall_ and _flat_:
755731
756−- ##### tall:
732+##### tall
757733
758734 multiple lines, no parentheses, two or more spaces between tokens
759735
@@ -764,7 +740,7 @@ Runes have two syntactic forms, _tall_ and _flat_:
764740 4
765741 ```
766742
767−- ##### flat:
743+##### flat
768744
769745 one line, parentheses, one space between tokens
770746
@@ -806,7 +782,6 @@ The head of `+n` is `+2n`, the tail is `+(2n+1)`.
806782`+7` is a special address for gates, because the position is defined
807783(by convention) as the context of a gate and of all cores.
808784
809−<span id="talk"></span>
810785### talk
811786
812787_Talk_ is Urbit's built-in chat app. It’s one example of an app that can be
@@ -826,7 +801,7 @@ All types are assembled out of base types defined in `++type`.
826801does type-inference on a program, it assembles complex types out
827802of the simpler built-in types.
828803
829−- ##### nest
804+##### nest
830805
831806 `nest` is an internal Hoon function on two types which performs a type
832807 compatibility test. `nest` produces yes if the
@@ -834,8 +809,7 @@ of the simpler built-in types.
834809 If `nest` produces no, the Hoon programmer will receive a `nest-fail`
835810 error. This is one of the most commons errors in Hoon programming.
836811
837− _See [advanced types](./docs/reference/hoon-expressions/advanced.md)_.
838− _See [troubleshooting](./docs/reference/troubleshooting.md)_.
812+ _See [advanced types](./docs/reference/hoon-expressions/advanced.md)_ and [troubleshooting](./docs/reference/troubleshooting.md).
839813
840814
841815### Unit
using/messaging.md+1−2
@@ -125,7 +125,6 @@ Now you can tell your friends to `;join ~your-urbit/my-channel`.
125125
126126---
127127
128−<span id="manual"></span>
129128## Manual
130129
131130Hall's design is similar in spirit to
@@ -306,7 +305,7 @@ For example:
306305sampel-palnet:talk> ;depict %coolbox 'cool messages only. NO EXCEPTIONS.'
307306```
308307
309−<span id="filter"></span>
308+
310309#### Filter
311310
312311Syntax: `;filter %name [capitals] [unicode]`
using/sail-and-udon.md+4−4
@@ -12,13 +12,13 @@ This document will be divided into two main sections: the Sail guide and the Udo
1212
1313## Table of Contents
1414
15−- #### [Sail: A Guide](#sail)
15+- [Sail: A Guide](#sail)
1616
17−- #### [Udon: A Guide](#udon)
17+- [Udon: A Guide](#udon)
1818
19−- #### [Udon: A Simple Blog](#blog)
19+- [Udon: A Simple Blog](#blog)
2020
21−- #### [Udon: A Static Site](#static)
21+- [Udon: A Static Site](#static)
2222
2323## Getting Started
2424