clay: update types ref

This commit is contained in:
Tinnus Napbus 2023-08-09 23:43:42 +12:00
parent 4461ff3b8b
commit 9bac8a7b8e
3 changed files with 642 additions and 463 deletions

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,7 @@ Example:
### `/rang` - Get `rang` ### `/rang` - Get `rang`
A buc scry with a path of `/rang` will return the full A buc scry with a path of `/rang` will return the full
[`rang`](/reference/arvo/clay/data-types#rangclay) from Clay's state. [`rang`](/reference/arvo/clay/data-types#rang) from Clay's state.
Example: Example:
@ -90,7 +90,7 @@ The type returned is:
(set [@p rave:clay]) (set [@p rave:clay])
``` ```
See the [`$rave:clay`](/reference/arvo/clay/data-types#raveclay) data See the [`$rave:clay`](/reference/arvo/clay/data-types#rave) data
type entry for more details of the `$rave` structure. type entry for more details of the `$rave` structure.
Example: Example:
@ -122,7 +122,7 @@ Example:
### `/domes` - All domes ### `/domes` - All domes
A buc scry with a path of `/domes` will return a A buc scry with a path of `/domes` will return a
[`cone:clay`](/reference/arvo/clay/data-types#coneclay) containing the `dome`s [`cone`](/reference/arvo/clay/data-types#cone) containing the `dome`s
and associated metadata for all desks, foreign and local. and associated metadata for all desks, foreign and local.
Example: Example:
@ -149,7 +149,7 @@ Example:
A buc scry with a path of `/tire` will return the `rock:tire:clay` for all A buc scry with a path of `/tire` will return the `rock:tire:clay` for all
domestic desks, which is a `(map desk [=zest wic=(set weft)])`. The domestic desks, which is a `(map desk [=zest wic=(set weft)])`. The
[`zest`](/reference/arvo/clay/data-types#zestclay) specifies whether apps on the [`zest`](/reference/arvo/clay/data-types#zest) specifies whether apps on the
desk are running or suspended. The `wic` set contains the `weft`s (kernel desk are running or suspended. The `wic` set contains the `weft`s (kernel
versions) of any queued updates. versions) of any queued updates.
@ -198,7 +198,7 @@ Example:
## `%b` - Dyn. mark core ## `%b` - Dyn. mark core
A scry with a `care` of `%b` will produce a `dais:clay` processed `mark` core A scry with a `care` of `%b` will produce a `dais` processed `mark` core
for the specified `mark`. The `path` in the scry is a `mark`. for the specified `mark`. The `path` in the scry is a `mark`.
Example: Example:
@ -209,7 +209,7 @@ Example:
## %c - Dyn. mark convert ## %c - Dyn. mark convert
A scry with a `care` of `%c` will produce a `tube:clay` dynamically typed `mark` A scry with a `care` of `%c` will produce a `tube` dynamically typed `mark`
conversion gate. The `path` specifies two `mark`s - _from_ and _to_, like conversion gate. The `path` specifies two `mark`s - _from_ and _to_, like
`/txt/noun`. `/txt/noun`.
@ -243,7 +243,7 @@ Example:
## `%e` - Static mark core ## `%e` - Static mark core
A scry with a `care` of `%e` will return a statically typed `nave:clay` `mark` A scry with a `care` of `%e` will return a statically typed `nave` `mark`
core. The `path` in the scry specifies the `mark`. The type returned is a core. The `path` in the scry specifies the `mark`. The type returned is a
`(nave:clay [type] [diff])`, where `[type]` is the type the `mark` takes and `(nave:clay [type] [diff])`, where `[type]` is the type the `mark` takes and
`[diff]` is the type taken by the `mark` specified in `+form:grad`. `[diff]` is the type taken by the `mark` specified in `+form:grad`.
@ -273,7 +273,7 @@ A scry with a `care` of `%f` will return a static `mark` conversion gate. The
A scry with a `care` of `%p` will return the permissions of the file or A scry with a `care` of `%p` will return the permissions of the file or
directory in question. The type returned is a [`[dict:clay directory in question. The type returned is a [`[dict:clay
dict:clay]`](/reference/arvo/clay/data-types#dictclay) where the head is read dict:clay]`](/reference/arvo/clay/data-types#dict) where the head is read
permissions and the tail is write permissions. permissions and the tail is write permissions.
If the specified file or directory has no permissions set, it will default to If the specified file or directory has no permissions set, it will default to
@ -329,14 +329,14 @@ you use. We'll look at each in turn.
### `%yaki` - Commit ### `%yaki` - Commit
This will return the [yaki:clay](/reference/arvo/clay/data-types#yakiclay) of This will return the [yaki:clay](/reference/arvo/clay/data-types#yaki) of
the specified commit. It takes a the specified commit. It takes a
[tako:clay](/reference/arvo/clay/data-types#takoclay). [tako:clay](/reference/arvo/clay/data-types#tako).
Example: Example:
Here we scry the [dome:clay](/reference/arvo/clay/data-types#domeclay) for `%`, Here we scry the [dome:clay](/reference/arvo/clay/data-types#dome) for `%`,
get the latest `tako:clay` and the do a `%s` scry for the `yaki:clay` in get the latest `tako` and the do a `%s` scry for the `yaki` in
question. question.
``` ```
@ -360,13 +360,13 @@ question.
### `%blob` - File blob ### `%blob` - File blob
This will return the [page:clay](/reference/arvo/clay/data-types#pageclay) of This will return the [page:clay](/reference/arvo/clay/data-types#page) of
some file. It takes a [lobe:clay](/reference/arvo/clay/data-types#lobeclay). some file. It takes a [lobe:clay](/reference/arvo/clay/data-types#lobe).
Example: Example:
Here we grab the `lobe:clay` of `/gen/hood/hi/hoon` with a `%y` scry, then use Here we grab the `lobe` of `/gen/hood/hi/hoon` with a `%y` scry, then use
it to do a `%s` scry for the `blob:clay` of the file. it to do a `%s` scry for the `blob` of the file.
``` ```
> =/ =arch .^(arch %cy %/gen/hood/hi/hoon) > =/ =arch .^(arch %cy %/gen/hood/hi/hoon)
@ -384,13 +384,13 @@ it to do a `%s` scry for the `blob:clay` of the file.
### `%hash` - Commit hash ### `%hash` - Commit hash
This will return the `@uvI` (256-bit) content hash of the specified commit. It This will return the `@uvI` (256-bit) content hash of the specified commit. It
takes a [`tako:clay`](/reference/arvo/clay/data-types#takoclay). takes a [`tako`](/reference/arvo/clay/data-types#tako).
Example: Example:
Here we grab the [`dome:clay`](/reference/arvo/clay/data-types#domeclay) for `%` Here we grab the [`dome`](/reference/arvo/clay/data-types#dome) for `%`
with a `%v` scry, get the latest with a `%v` scry, get the latest
[`tako:clay`](/reference/arvo/clay/data-types#takoclay) and then do a `%s` [`tako`](/reference/arvo/clay/data-types#tako) and then do a `%s`
`%hash` scry for it. `%hash` scry for it.
``` ```
@ -404,11 +404,11 @@ with a `%v` scry, get the latest
### `%cage` - File as cage ### `%cage` - File as cage
This will return a `cage` of the data of some file. It takes a `lobe:clay`. This will return a `cage` of the data of some file. It takes a `lobe`.
Example: Example:
Here we grab the `lobe:clay` of `/gen/hood/hi/hoon` with a `%y` scry, then use it to do a `%s` scry for the `cage` of the data. Here we grab the `lobe` of `/gen/hood/hi/hoon` with a `%y` scry, then use it to do a `%s` scry for the `cage` of the data.
``` ```
> =/ =arch .^(arch %cy %/gen/hood/hi/hoon) > =/ =arch .^(arch %cy %/gen/hood/hi/hoon)
@ -438,10 +438,10 @@ documentaton at a later date.
This will return the most recent revision number of a `desk` that has been fully This will return the most recent revision number of a `desk` that has been fully
downloaded. The type it returns is a downloaded. The type it returns is a
[`cass:clay`](/reference/arvo/clay/data-types#cassclay). The `case` in the [`cass`](/reference/arvo/clay/data-types#cass). The `case` in the
`beak` must be a revision number rather than a date. You can just provide a case `beak` must be a revision number rather than a date. You can just provide a case
of `1` since it returns the latest regardless. If we have nothing for the of `1` since it returns the latest regardless. If we have nothing for the
specified `desk`, this will just return the bunt of a `cass:clay` like specified `desk`, this will just return the bunt of a `cass` like
`cass=[ud=0 da=~2000.1.1]`. `cass=[ud=0 da=~2000.1.1]`.
Example: Example:
@ -542,7 +542,7 @@ Examples:
## `%v` - Desk state ## `%v` - Desk state
A scry with a care of `%v` will return the entire state of a `desk` as a A scry with a care of `%v` will return the entire state of a `desk` as a
[`dome:clay`](/reference/arvo/clay/data-types#domeclay). [`dome`](/reference/arvo/clay/data-types#dome).
Example: Example:
@ -560,7 +560,7 @@ Note: If you try printing this it will take forever and probably OOM your ship.
A scry with a `care` of `%w` will return the revision number and date of a given A scry with a `care` of `%w` will return the revision number and date of a given
`case`. The type returned is a `case`. The type returned is a
[`cass:clay`](/reference/arvo/clay/data-types#cassclay) like `[ud=@ud da=@da]` [`cass`](/reference/arvo/clay/data-types#cass) like `[ud=@ud da=@da]`
where `ud` is the revision number and `da` is the date. where `ud` is the revision number and `da` is the date.
Example: Example:
@ -602,7 +602,7 @@ Crash!
A scry with a `care` of `%y` will return the `arch` of a file or directory. A scry with a `care` of `%y` will return the `arch` of a file or directory.
An `arch` is a `[fil=(unit lobe:clay) dir=(map @ta ~)]`. The `fil` will contain An `arch` is a `[fil=(unit lobe:clay) dir=(map @ta ~)]`. The `fil` will contain
the [`lobe:clay`](/reference/arvo/clay/data-types#lobeclay) hash if it's a file, the [`lobe`](/reference/arvo/clay/data-types#lobe) hash if it's a file,
otherwise it will be null. The `dir` will contain a map of the files and otherwise it will be null. The `dir` will contain a map of the files and
directories it contains, otherwise it will be null. directories it contains, otherwise it will be null.

View File

@ -24,8 +24,8 @@ Clay from a kernel development perspective.
A `%warp` `task` is for reading and subscribing to files and directories. A `%warp` `task` is for reading and subscribing to files and directories.
The `wer` field is the target ship. The `(unit rave)` of the The `wer` field is the target ship. The `(unit rave)` of the
[riff](/reference/arvo/clay/data-types#riffclay) is null to cancel an existing [riff](/reference/arvo/clay/data-types#riff) is null to cancel an existing
subscription, otherwise the [rave](/reference/arvo/clay/data-types#raveclay) is subscription, otherwise the [rave](/reference/arvo/clay/data-types#rave) is
tagged with one of: tagged with one of:
- `%sing` - Read a single file or directory. - `%sing` - Read a single file or directory.
@ -51,10 +51,10 @@ A `%wris` `gift` looks like:
[%writ p=riot] :: response [%writ p=riot] :: response
``` ```
The `unit` of the [riot](/reference/arvo/clay/data-types#riotclay) will be null The `unit` of the [riot](/reference/arvo/clay/data-types#riot) will be null
if the target file cannot be found or if a subscription has ended (depending on if the target file cannot be found or if a subscription has ended (depending on
context). Otherwise it will have a context). Otherwise it will have a
[rant](/reference/arvo/clay/data-types#rantclay) with a `cage` containing the [rant](/reference/arvo/clay/data-types#rant) with a `cage` containing the
data you requested. Its contents will vary depending on the kind of request and data you requested. Its contents will vary depending on the kind of request and
`care`. `care`.
@ -68,13 +68,13 @@ Now we'll look at each of the `rave` request types in turn.
This `rave` is for reading a single file or directory immediately. This `rave` is for reading a single file or directory immediately.
The `care` of the [mood](/reference/arvo/clay/data-types#moodclay) will The `care` of the [mood](/reference/arvo/clay/data-types#mood) will
determine what you can read and what type of data will be returned. See the determine what you can read and what type of data will be returned. See the
[care](/reference/arvo/clay/data-types#careclay) documentation and [care](/reference/arvo/clay/data-types#care) documentation and
[scry](/reference/arvo/clay/scry) documentation for details on the various [scry](/reference/arvo/clay/scry) documentation for details on the various
`care`s. `care`s.
The [case](/reference/arvo/clay/data-types#caseclay) specifies the `desk` The [case](/reference/arvo/clay/data-types#case) specifies the `desk`
revision and you can use whichever kind you prefer. The `path` will usually be revision and you can use whichever kind you prefer. The `path` will usually be
a path to a file or directory like `/gen/hood/hi/hoon` but may be something a path to a file or directory like `/gen/hood/hi/hoon` but may be something
else depending on the `care`. else depending on the `care`.
@ -92,7 +92,7 @@ else depending on the `care`.
``` ```
This subscribes to the next version of the specified file. See This subscribes to the next version of the specified file. See
[here](/reference/arvo/clay/data-types#moodclay) for details of the `mood` [here](/reference/arvo/clay/data-types#mood) for details of the `mood`
structure. structure.
If you subscribe to the current `case` of the `desk`, Clay will not respond until the file changes. If you subscribe to a previous `case` of the `desk` and the file has changed in between then and now, it will immediately return the first change it comes across in that range. For example, if you're currently at `case` `100`, subscribe to case `50` and the file in question has been modified at both `60` and `80`, clay will immediately return the version of the file at `case` `60`. If you subscribe to the current `case` of the `desk`, Clay will not respond until the file changes. If you subscribe to a previous `case` of the `desk` and the file has changed in between then and now, it will immediately return the first change it comes across in that range. For example, if you're currently at `case` `100`, subscribe to case `50` and the file in question has been modified at both `60` and `80`, clay will immediately return the version of the file at `case` `60`.
@ -151,7 +151,7 @@ large and fairly complicated. The `nako` structure is defined in the
you're unlikely to work with it yourself. you're unlikely to work with it yourself.
The `from` and `to` fields of the The `from` and `to` fields of the
[moat](/reference/arvo/clay/data-types#moatclay) specify the range of `case`s [moat](/reference/arvo/clay/data-types#moat) specify the range of `case`s
for which to subscribe. The range is _inclusive_. It can be specified by date for which to subscribe. The range is _inclusive_. It can be specified by date
or by revision number, whichever you prefer. or by revision number, whichever you prefer.
@ -189,18 +189,18 @@ To cancel a subscription, you just send a `%warp` with a null `(unit rave)` in t
To write or modify a file, we send Clay a `%info` `task`. To write or modify a file, we send Clay a `%info` `task`.
If the head of the [nori](/reference/arvo/clay/data-types#noriclay) `dit` is If the head of the [nori](/reference/arvo/clay/data-types#nori) `dit` is
`%|`, it's a request to add a label to a commit, and the `nori` looks like `[%| `%|`, it's a request to add a label to a commit, and the `nori` looks like `[%|
p=@tas q=(unit aeon)]` where `p` is the label and `q` is the p=@tas q=(unit aeon)]` where `p` is the label and `q` is the
[`aeon`](/reference/arvo/clay/data-types#aeonclay) (commit reference). If `q` [`aeon`](/reference/arvo/clay/data-types#aeon) (commit reference). If `q`
is null, the label is applied to the latest commit in the desk. is null, the label is applied to the latest commit in the desk.
If the head of the `nori` is `%&`, it's a request to add, delete or modify one If the head of the `nori` is `%&`, it's a request to add, delete or modify one
or more files in the given desk, and looks like `[%& p=soba]`. The or more files in the given desk, and looks like `[%& p=soba]`. The
[soba](/reference/arvo/clay/data-types#sobaclay) in the `nori` is just a list [soba](/reference/arvo/clay/data-types#soba) in the `nori` is just a list
of changes so you can make more than one change in one request. Its `path` is of changes so you can make more than one change in one request. Its `path` is
just the path to a file like `/gen/hood/hi/hoon` and the just the path to a file like `/gen/hood/hi/hoon` and the
[miso](/reference/arvo/clay/data-types#misoclay) is one of these types of [miso](/reference/arvo/clay/data-types#miso) is one of these types of
requests: requests:
- `%del` - Delete a file. - `%del` - Delete a file.
@ -232,7 +232,7 @@ Here are examples of using each of these as well as making multiple changes in o
``` ```
Force on/off apps on a desk. A Force on/off apps on a desk. A
[`rein:clay`](/reference/arvo/clay/data-types#reinclay) is a `map` from Gall agent [`rein`](/reference/arvo/clay/data-types#rein) is a `map` from Gall agent
name to `?`, where `%.y` is *on* and `%.n` is *off*. By default, a live desk name to `?`, where `%.y` is *on* and `%.n` is *off*. By default, a live desk
will run the agents defined in its `desk.bill` manifest, so this is used to will run the agents defined in its `desk.bill` manifest, so this is used to
either stop agents in its manifest or start agents which aren't in its manifest. either stop agents in its manifest or start agents which aren't in its manifest.
@ -265,7 +265,7 @@ A `rock:tire` is a:
+$ rock (map desk [=zest wic=(set weft)]) +$ rock (map desk [=zest wic=(set weft)])
``` ```
The [`zest:clay`](/reference/arvo/clay/data-types#zestclay) says whether the The [`zest`](/reference/arvo/clay/data-types#zest) says whether the
desk is running (`%live`), suspended (`%dead`), or suspended pending a desk is running (`%live`), suspended (`%dead`), or suspended pending a
kernel-compatible update (`%held`). The `wic` set contains the `weft`s (kernel kernel-compatible update (`%held`). The `wic` set contains the `weft`s (kernel
versions) of any queued updates. versions) of any queued updates.
@ -301,7 +301,7 @@ Try to apply a queued kernel update.
``` ```
A `%zest` `task` suspends or unsuspends a desk. the A `%zest` `task` suspends or unsuspends a desk. the
[`zest:clay`](/reference/arvo/clay/data-types#zestclay) in `liv` is one of: [`zest`](/reference/arvo/clay/data-types#zest) in `liv` is one of:
- `%live`: running. - `%live`: running.
- `%dead`: suspended. - `%dead`: suspended.
@ -316,7 +316,7 @@ A `%zest` `task` suspends or unsuspends a desk. the
``` ```
Tombstoning is the deletion of data for old desk revisions. Clay has a single Tombstoning is the deletion of data for old desk revisions. Clay has a single
`%tomb` `task`, but its [`clue:clay`](/reference/arvo/clay/data-types#clueclay) `%tomb` `task`, but its [`clue`](/reference/arvo/clay/data-types#clue)
has a number of different possible actions: has a number of different possible actions:
```hoon ```hoon
@ -339,7 +339,7 @@ We'll look at each of these in turn.
``` ```
A `%tomb` `task` with a `%lobe` `clue` will tombstone the `page` matching the A `%tomb` `task` with a `%lobe` `clue` will tombstone the `page` matching the
given [`lobe:clay`](/reference/arvo/clay/data-types#lobeclay). If the `page` in given [`lobe`](/reference/arvo/clay/data-types#lobe). If the `page` in
question is used in the current revision of any desks, it will fail. Otherwise, question is used in the current revision of any desks, it will fail. Otherwise,
it will be tombstoned globally. it will be tombstoned globally.
@ -364,7 +364,7 @@ by current desk revisions, globally. This should be used with caution.
A `%tomb` `task` with a `%pick` `clue` will perform garbage collection, A `%tomb` `task` with a `%pick` `clue` will perform garbage collection,
tombstoning any data that should be tombstoned according to current tombstoning tombstoning any data that should be tombstoned according to current tombstoning
policy ([`norm`](/reference/arvo/clay/data-types#normclay)s). policy ([`norm`](/reference/arvo/clay/data-types#norm)s).
--- ---
@ -376,7 +376,7 @@ policy ([`norm`](/reference/arvo/clay/data-types#normclay)s).
A `%tomb` `task` with a `%norm` `clue` will set the default tombstoning policy A `%tomb` `task` with a `%norm` `clue` will set the default tombstoning policy
for the given `desk` and `ship`. A for the given `desk` and `ship`. A
[`norm:clay`](/referende/arvo/clay/data-types#normclay) is an `(axal ?)`. An [`norm`](/referende/arvo/clay/data-types#norm) is an `(axal ?)`. An
`axal` is like a recursive `arch`, and is defined in `arvo.hoon`. The `?` says `axal` is like a recursive `arch`, and is defined in `arvo.hoon`. The `?` says
whether to *keep* the given file or directory. You may want to look at the `+of` whether to *keep* the given file or directory. You may want to look at the `+of`
axal engine in `arvo.hoon` for constructing and manipulating the `norm`. axal engine in `arvo.hoon` for constructing and manipulating the `norm`.
@ -395,7 +395,7 @@ make your changes.
A `%tomb` `task` with a `%worn` `clue` is like A `%tomb` `task` with a `%worn` `clue` is like
[`%norm`](#norm---default-policy), except it only applies to a specific commit [`%norm`](#norm---default-policy), except it only applies to a specific commit
for a ship/desk. The [`tako:clay`](/reference/arvo/clay/data-types#takoclay) for a ship/desk. The [`tako`](/reference/arvo/clay/data-types#tako)
denotes the commit to apply the policy. denotes the commit to apply the policy.
--- ---
@ -408,10 +408,10 @@ denotes the commit to apply the policy.
A `%tomb` `task` with a `%seek` `clue` will attempt to retrieve missing, A `%tomb` `task` with a `%seek` `clue` will attempt to retrieve missing,
tombstoned data and integrate it into Clay's object store. The tombstoned data and integrate it into Clay's object store. The
[`cash:clay`](/reference/arvo/clay/data-types#cashclay) is a reference to a [`cash`](/reference/arvo/clay/data-types#cash) is a reference to a
commit on the given ship/desk as either a commit on the given ship/desk as either a
[`tako:clay`](/reference/arvo/clay/data-types#takoclay) or a [`tako`](/reference/arvo/clay/data-types#tako) or a
[`case:clay`](/reference/arvo/clay/data-types#caseclay). [`case`](/reference/arvo/clay/data-types#case).
--- ---
@ -458,7 +458,7 @@ The type it returns is a `%hill` `gift`, which looks like:
A `%mont` `task` mounts the specified `beam` to the specified `term` mount point. A `%mont` `task` mounts the specified `beam` to the specified `term` mount point.
A `beam:clay` is the following structure: A `beam` is the following structure:
```hoon ```hoon
+$ beam [[p=ship q=desk r=case] s=path] :: global name +$ beam [[p=ship q=desk r=case] s=path] :: global name
@ -484,7 +484,7 @@ Clay does not return a `gift` in response to a `%mont` `%task`.
A `%ogre` `task` unmounts the specified mount. A `%ogre` `task` unmounts the specified mount.
It's defined in `lull.hoon` as taking `$@(desk beam)` but in fact it will only unmount the target when specified as a `term` mount name. Passing it a `desk` will incidentally work if the mount is named the same as the `desk` but otherwise it won't work. Passing it a `beam:clay` will simply not work. It's defined in `lull.hoon` as taking `$@(desk beam)` but in fact it will only unmount the target when specified as a `term` mount name. Passing it a `desk` will incidentally work if the mount is named the same as the `desk` but otherwise it won't work. Passing it a `beam` will simply not work.
#### Returns #### Returns
@ -569,9 +569,9 @@ If permissions are not set for a particular file, they will be inherited from th
A group is called a `crew` and is just a `set` of ships with a `@ta` name. A group is called a `crew` and is just a `set` of ships with a `@ta` name.
The permissions for each file or directory are a pair of `dict:clay` where the head is read permissions and the tail is write permissions. The permissions for each file or directory are a pair of `dict` where the head is read permissions and the tail is write permissions.
A `dict:clay` is this structure: A `dict` is this structure:
```hoon ```hoon
+$ dict [src=path rul=real] :: effective permission +$ dict [src=path rul=real] :: effective permission
@ -740,7 +740,7 @@ To read files on a foreign `desk`, you just send Clay a `%warp` `task` (as you w
Clay only allows a subset of `care`s to be used remotely. They are: Clay only allows a subset of `care`s to be used remotely. They are:
- `%u` - Check for existence of file. - `%u` - Check for existence of file.
- `%v` - Get entire `dome:clay` state of a desk. - `%v` - Get entire `dome` state of a desk.
- `%w` - Get revision number. - `%w` - Get revision number.
- `%x` - Get data of file. - `%x` - Get data of file.
- `%y` - Get `arch` of file or directory. - `%y` - Get `arch` of file or directory.