From 91019215410fe911f1b280370f076ae344729e95 Mon Sep 17 00:00:00 2001 From: August Cayzer Date: Sat, 24 Oct 2026 02:42:52 +0100 Subject: [PATCH] docs(folders): rename query and explain both tiers --- content/docs/guides/folder-safeguards.mdx | 8 +- content/docs/guides/keep-folders-running.mdx | 2 +- content/docs/guides/sync-a-folder.mdx | 18 ++- openapi.json | 25 ++- src/generated/GLOSSARY.md | 2 +- src/generated/catalog/builtin-catalog.json | 8 +- src/generated/catalog/edges.md | 2 +- src/generated/catalog/system.folder.md | 20 +-- src/generated/cli-commands.json | 8 +- src/generated/contract-index.json | 151 ++++++++++--------- 10 files changed, 128 insertions(+), 116 deletions(-) diff --git a/content/docs/guides/folder-safeguards.mdx b/content/docs/guides/folder-safeguards.mdx index 2efd2989..e421a28c 100644 --- a/content/docs/guides/folder-safeguards.mdx +++ b/content/docs/guides/folder-safeguards.mdx @@ -11,9 +11,11 @@ A folder deletes in both directions: a file you remove can send its item to the | --- | --- | | **You delete a file** | Moves its item to the bin after a five-second grace, so a save that replaces a file isn't taken for a delete. A sync that is running when you delete the file doesn't write it back. If another device changes what the file shows within the grace, the file comes back with that change instead. | | **You move or rename a file in the folder** | Keeps its item, even when the move lands while a sync is running, and doesn't write the file back where it was. | -| **An item is moved to the bin, purged, or leaves the states the search holds** | Removes its file at the next sync. A file you changed since Marfa wrote it stays. | -| **An item stops matching the search** | Keeps its file, and edits to the file still reach the item. [`marfa folders unmatched`](/guides/keep-folders-running#remove-files-a-folder-keeps-but-no-longer-holds) lists these files. | -| **You move a file to another folder on the same Mac** | Treats it as the same item, so the folder it left doesn't take the move for a delete. | +| **An item is moved to the bin, purged, or leaves the states the query holds** | Removes its file at the next sync. A file you changed since Marfa wrote it stays. | +| **An item stops matching the query** | Keeps its file, and edits to the file still reach the item. [`marfa folders unmatched`](/guides/keep-folders-running#remove-files-a-folder-keeps-but-no-longer-holds) lists these files. | +| **You move a file to another folder on the same Mac** | Treats it as the same item, so the folder it left doesn't take the move for a delete. A new Markdown note moved before its `marfa_id` line is written becomes a second item in the destination folder and keeps every edit ([`folders/moved-arrival-markdown-new`](https://github.com/withmarfa/marfa/blob/main/conformance/spec/folders.md#foldersmoved-arrival-markdown-new)). | + +A tier change **never deletes or moves an item to the bin**. If it takes an item outside the query's reach, the folder keeps its file unless another folder takes it. The folder follows a Markdown note by its `marfa_id`. It follows any other file, such as a photo or a `.txt` note, by its file identity or its exact bytes, and keeps its record of the file until the other folder takes it. A `.txt` note that lands at a `.md` name is a new item. diff --git a/content/docs/guides/keep-folders-running.mdx b/content/docs/guides/keep-folders-running.mdx index 4d997070..80ed3069 100644 --- a/content/docs/guides/keep-folders-running.mdx +++ b/content/docs/guides/keep-folders-running.mdx @@ -137,7 +137,7 @@ It writes and removes no file outside the folder's `.marfa` directory. If the in ## Remove files a folder keeps but no longer holds -When an item leaves a folder's search, for example because its type changed to one the search doesn't hold, the folder keeps its file instead of removing it. List those files: +When an item leaves a folder's query, for example because its type changed to one the query doesn't hold, the folder keeps its file instead of removing it. List those files: diff --git a/content/docs/guides/sync-a-folder.mdx b/content/docs/guides/sync-a-folder.mdx index e4b0b087..0b6f2d12 100644 --- a/content/docs/guides/sync-a-folder.mdx +++ b/content/docs/guides/sync-a-folder.mdx @@ -26,7 +26,7 @@ marfa --socket /srv/marfa/data/control/marfa.sock keys create \ ``` - **`system.folder`:** write creates the settings, and read lets `folders add` bind a directory to them. -- **The types the folder holds:** write on each type the search admits, here `core.note`. `core.file.*` covers `core.file` and every type under it. +- **The types the folder holds:** write on each type the query admits, here `core.note`. `core.file.*` covers `core.file` and every type under it. - **`in-folder`:** write on this edge, which records where each file sits. `folders add` is refused without read on `system.folder`, naming `system.folder:read`, and without write on `in-folder`, naming `edge.in-folder:write`. [Manage keys](/guides/manage-keys) explains each flag. @@ -36,12 +36,12 @@ marfa --socket /srv/marfa/data/control/marfa.sock keys create \ ### Create the folder's settings -The settings say which items the folder holds, through a search, and what a new file becomes. This folder holds every note: +The settings say which items the folder holds, through a query, and what a new file becomes. This folder holds every note: ```bash -marfa folders create --title Notes --search '{"types":["core.note"]}' +marfa folders create --title Notes --query '{"types":["core.note"]}' ``` ```text @@ -84,7 +84,9 @@ Keep the directory out of iCloud Drive, other cloud-synced folders and network s ### Confirm the first sync -Check the plan first. **The search decides every item the folder takes in.** A search that names only a type holds every active and archived item of that type in the library tier, and the first sync writes all of them to disk. With no `types`, it holds every type the key reads except `system.*`. To narrow it, use `filter`, `tier`, `state` or `beneath`, as [list, filter and search](/guides/list-filter-search) describes. +Check the plan first. **The query decides every item the folder takes in.** A query that names only a type holds every active and archived item of that type in the library tier, and the first sync writes all of them to disk. With no `types`, it holds every type the key reads except `system.*`. + +Set `tier: all` to write matching items from both the library and feed tiers as files. To narrow the query, use `filter`, `tier`, `state` or `beneath`, as [list, filter and search](/guides/list-filter-search) describes. Then confirm, and sync once: @@ -134,7 +136,9 @@ The lines between the `---` fences are the frontmatter. The text after them is t - **Every other line:** a property. - **`marfa_id` and `marfa_version`:** the item and the version the file was written from. Leave them to Marfa. -A new Markdown file needs no frontmatter. It takes its type and tier from the folder's `defaults` or its search, and its title from `defaults` or, without one, its file name. Once the instance creates the item, Marfa writes the frontmatter and `marfa_id` into the file. A `.txt` file is all body. Any other file the search admits, such as a photo, becomes a file item with its bytes uploaded as a blob, as [Handle files](/guides/handle-files) describes. A file item stays a file item at a `.md`, `.markdown` or `.txt` name, such as after a pull places it there or you rename it: its bytes go to the item as they are, and Marfa doesn't read them as a note. +A new Markdown file needs no frontmatter. It takes its type and tier from the folder's `defaults` or its query, and its title from `defaults` or, without one, its file name. With `query.tier: all`, a new file without an explicit tier uses `defaults.tier` or, without one, `library`. Once the instance creates the item, Marfa writes the frontmatter and `marfa_id` into the file. + +A `.txt` file is all body. Any other file the query admits, such as a photo, becomes a file item with its bytes uploaded as a blob, as [Handle files](/guides/handle-files) describes. A file item stays a file item at a `.md`, `.markdown` or `.txt` name, such as after a pull places it there or you rename it: its bytes go to the item as they are, and Marfa doesn't read them as a note. ## Edit on either side @@ -168,7 +172,7 @@ Each computer writes the folder's settings out as `.marfa/folder.yaml`: folder: 01a1232d-949d-758c-b244-70057174b96a version: 1 title: Notes -search: +query: types: - core.note ``` @@ -205,7 +209,7 @@ import Marfa let server = Server(url: serverURL, key: key) let copy = try await WorkingCopy.open(store: storeURL, server: server) let folder = try await copy.createFolder( - FolderSettings(title: "Notes", search: FolderSearch(types: ["core.note"]))) + FolderSettings(title: "Notes", query: FolderQuery(types: ["core.note"]))) let folders = Folders(server: server) let directory = URL(filePath: "/Users/sam/Notes") diff --git a/openapi.json b/openapi.json index d152438a..f720335a 100644 --- a/openapi.json +++ b/openapi.json @@ -6270,7 +6270,7 @@ ], "description": "An error response." }, - "FolderSearch": { + "FolderQuery": { "type": "object", "properties": { "types": { @@ -6282,14 +6282,13 @@ "description": "The types the folder holds, each with its subtypes. Empty or absent holds every type the machine's key can read, except `system.*`." }, "tier": { - "allOf": [ - { - "$ref": "#/components/schemas/Tier" - }, - { - "description": "The tier the folder holds. Absent means `library`." - } - ] + "type": "string", + "enum": [ + "library", + "feed", + "all" + ], + "description": "The tiers the folder holds: `library`, `feed`, or `all` for both. Absent means `library`." }, "state": { "type": "array", @@ -34986,8 +34985,8 @@ "maxLength": 500, "description": "The folder's title." }, - "search": { - "$ref": "#/components/schemas/FolderSearch" + "query": { + "$ref": "#/components/schemas/FolderQuery" }, "defaults": { "$ref": "#/components/schemas/FolderDefaults" @@ -35474,8 +35473,8 @@ "maxLength": 500, "description": "A new title for the folder." }, - "search": { - "$ref": "#/components/schemas/FolderSearch" + "query": { + "$ref": "#/components/schemas/FolderQuery" }, "defaults": { "$ref": "#/components/schemas/FolderDefaults" diff --git a/src/generated/GLOSSARY.md b/src/generated/GLOSSARY.md index e8beaf61..1f223498 100644 --- a/src/generated/GLOSSARY.md +++ b/src/generated/GLOSSARY.md @@ -134,7 +134,7 @@ Access is read the same way wherever a person sees it: on the pages where they a | **file budget** | The most bytes the file cache is to hold: a byte count a caller sets, none while every file is kept, or by default the lesser of the larger of 2 GiB and a tenth of the volume, and the bytes held plus the volume's free bytes less a twentieth of the volume, never below 256 MiB, and 2 GiB where the volume cannot be read. Bytes a queued upload names, and bytes whose path or file a caller in the same process is still waiting for, are never taken to fit it. | | **drain** | To send a device's queued writes to the server and record each answer as the write's verdict. Also the noun: a drain is one such pass over the queue, as `marfa device drain` runs it. A write that met a network rather than an answer waits for the next drain. Catch-up, which brings the server's changes into the working copy, is a different act. | | **forget** | To clear a device's answered writes from its queue: `marfa device forget`, and `forgetAnswered()` in the Swift SDK and the Node module. Given ids (`--id` on the command, `forgetAnsweredIds()` in the libraries), it clears only the writes named. The contract's rules say "clear" for the same act, as in `queue-and-verdicts/clear-answered`. `marfa keys forget` keeps the ordinary sense: it removes the credential kept for a server. | -| **folder** | A directory on a machine bound to a `system.folder`, whose settings every machine bound to it shares and each writes out as one editable file, `.marfa/folder.yaml`: a search that decides what the folder holds, the defaults a new file takes, and include and ignore lists. A device like any other (the same working copy, the same queue, the same verdicts) with a filesystem as its face: a file in it is an item on the server, and an item its search matches is a file in it. | +| **folder** | A directory on a machine bound to a `system.folder`, whose settings every machine bound to it shares and each writes out as one editable file, `.marfa/folder.yaml`: a query that decides what the folder holds, the defaults a new file takes, and include and ignore lists. A device like any other (the same working copy, the same queue, the same verdicts) with a filesystem as its face: a file in it is an item on the server, and an item its query matches is a file in it. | | **placement** | Where an item's file sits in a folder: its `in-folder` edge to the folder's `system.folder`, whose `path` names the file from the folder's root. It never decides what a folder holds, and it is never written in a file. | | **registry** | The folder registry: one file on a machine listing its folders, each by its directory and the `system.folder` it follows, so each folder can find the others and a file moved or copied between two of them is told apart. It is never a folder's store, and `MARFA_FOLDER_REGISTRY` names another file in its place. The type registry is the server's catalog of types (`types.md`). | | **embed** | A file an item's body shows inside it, `![](path)` or `![[file]]`: that file item's `attached-to` edge to the item, in a folder's Markdown file and in a body written through a working copy alike. In a folder, the file's `has-attachment` line lists only what the body does not embed, and the embedded file travels with the file showing it and is written where the link says. It names a file where a file answers to it or its extension names a MIME type; anything else, `![[A note]]` say, is an embed of a note, text in the body and neither a link nor an edge. | diff --git a/src/generated/catalog/builtin-catalog.json b/src/generated/catalog/builtin-catalog.json index a985e9e3..c914cc0d 100644 --- a/src/generated/catalog/builtin-catalog.json +++ b/src/generated/catalog/builtin-catalog.json @@ -1648,13 +1648,13 @@ "description": "The folder's name", "required": true }, - "search": { + "query": { "type": "object", - "description": "Which items the folder holds. `types`: type identifiers, each with its subtypes; empty or absent holds every type the folder's key reads. `tier`: `library` or `feed`, the one tier the folder holds; absent is `library`. `state`: `active`, `archived` or both; absent is both. `filter`: an expression in the listing grammar's `filter`. `beneath`: an item id; the item and everything under it by `parent-of`." + "description": "Which items the folder holds. `types`: type identifiers, each with its subtypes; empty or absent holds every type the folder's key reads. `tier`: `library`, `feed`, or `all` for both tiers; absent is `library`. `state`: `active`, `archived` or both; absent is both. `filter`: an expression in the listing grammar's `filter`. `beneath`: an item id; the item and everything under it by `parent-of`." }, "defaults": { "type": "object", - "description": "What a new file takes where its frontmatter leaves a blank, never applied to an edit: `type`, `tier`, `properties`, `tags`, and `edges` as a map from edge type to item ids, each edge running from the new file to the item named except `parent-of`, which runs from the item named so the new file is its child; a folder whose search follows an edge gives every new file that edge." + "description": "What a new file takes where its frontmatter leaves a blank, never applied to an edit: `type`, `tier`, `properties`, `tags`, and `edges` as a map from edge type to item ids, each edge running from the new file to the item named except `parent-of`, which runs from the item named so the new file is its child; a folder whose query follows an edge gives every new file that edge." }, "include": { "type": "array", @@ -1794,7 +1794,7 @@ { "id": "in-folder", "label": "In folder", - "description": "Where an item's file sits in a folder: the source is the item, the target the folder's `system.folder`, and `path` the file's path relative to the folder's root. Placement only; a folder's search alone decides what it holds, and the edge is never written in a file's frontmatter. An item may sit in any number of folders. Revoking or removing the folder leaves its items in place, and a revoked folder takes no new placement.", + "description": "Where an item's file sits in a folder: the source is the item, the target the folder's `system.folder`, and `path` the file's path relative to the folder's root. Placement only; a folder's query alone decides what it holds, and the edge is never written in a file's frontmatter. An item may sit in any number of folders. Revoking or removing the folder leaves its items in place, and a revoked folder takes no new placement.", "cardinality": "many-to-many", "source_type_constraints": [ "*" diff --git a/src/generated/catalog/edges.md b/src/generated/catalog/edges.md index 07783f3e..d9488db3 100644 --- a/src/generated/catalog/edges.md +++ b/src/generated/catalog/edges.md @@ -24,7 +24,7 @@ Source item is a member of the target container. The target may be any type decl ## in-folder -Where an item's file sits in a folder: the source is the item, the target the folder's `system.folder`, and `path` the file's path relative to the folder's root. Placement only; a folder's search alone decides what it holds, and the edge is never written in a file's frontmatter. An item may sit in any number of folders. Revoking or removing the folder leaves its items in place, and a revoked folder takes no new placement. +Where an item's file sits in a folder: the source is the item, the target the folder's `system.folder`, and `path` the file's path relative to the folder's root. Placement only; a folder's query alone decides what it holds, and the edge is never written in a file's frontmatter. An item may sit in any number of folders. Revoking or removing the folder leaves its items in place, and a revoked folder takes no new placement. **written_at:** `none` diff --git a/src/generated/catalog/system.folder.md b/src/generated/catalog/system.folder.md index a92a9fa6..7fd2b734 100644 --- a/src/generated/catalog/system.folder.md +++ b/src/generated/catalog/system.folder.md @@ -1,12 +1,12 @@ ## Fields -| Field | Kind | Required | Description | -| ------------------- | ------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `title` | `string` | Yes | The folder's name | -| `search` | `object` | No | Which items the folder holds. `types`: type identifiers, each with its subtypes; empty or absent holds every type the folder's key reads. `tier`: `library` or `feed`, the one tier the folder holds; absent is `library`. `state`: `active`, `archived` or both; absent is both. `filter`: an expression in the listing grammar's `filter`. `beneath`: an item id; the item and everything under it by `parent-of`. | -| `defaults` | `object` | No | What a new file takes where its frontmatter leaves a blank, never applied to an edit: `type`, `tier`, `properties`, `tags`, and `edges` as a map from edge type to item ids, each edge running from the new file to the item named except `parent-of`, which runs from the item named so the new file is its child; a folder whose search follows an edge gives every new file that edge. | -| `include` | `array` of `string` | No | Paths the folder takes, as gitignore patterns relative to its root; empty or absent takes every path. A dot-led path is taken only where a line names a dot-led name on its way, and no line reaches what the built-in lists name | -| `ignore` | `array` of `string` | No | Paths the folder leaves alone, as gitignore patterns relative to its root, winning over `include`; the built-in lists, of files a machine or an editor writes for itself and of secrets, apply whatever either list says | -| `first_placement` | `object` | No | Where a new item of a type made elsewhere first appears: a map from type identifier to a directory relative to the folder's root. Placement only; it never decides membership. | -| `removal_threshold` | `object` | No | When a removal pauses for confirmation: more than `files` files and more than `fraction` of the folder at once. Absent members are 10 and 0.25. | -| `revoked_at` | `datetime` | No | When the folder was revoked | +| Field | Kind | Required | Description | +| ------------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `title` | `string` | Yes | The folder's name | +| `query` | `object` | No | Which items the folder holds. `types`: type identifiers, each with its subtypes; empty or absent holds every type the folder's key reads. `tier`: `library`, `feed`, or `all` for both tiers; absent is `library`. `state`: `active`, `archived` or both; absent is both. `filter`: an expression in the listing grammar's `filter`. `beneath`: an item id; the item and everything under it by `parent-of`. | +| `defaults` | `object` | No | What a new file takes where its frontmatter leaves a blank, never applied to an edit: `type`, `tier`, `properties`, `tags`, and `edges` as a map from edge type to item ids, each edge running from the new file to the item named except `parent-of`, which runs from the item named so the new file is its child; a folder whose query follows an edge gives every new file that edge. | +| `include` | `array` of `string` | No | Paths the folder takes, as gitignore patterns relative to its root; empty or absent takes every path. A dot-led path is taken only where a line names a dot-led name on its way, and no line reaches what the built-in lists name | +| `ignore` | `array` of `string` | No | Paths the folder leaves alone, as gitignore patterns relative to its root, winning over `include`; the built-in lists, of files a machine or an editor writes for itself and of secrets, apply whatever either list says | +| `first_placement` | `object` | No | Where a new item of a type made elsewhere first appears: a map from type identifier to a directory relative to the folder's root. Placement only; it never decides membership. | +| `removal_threshold` | `object` | No | When a removal pauses for confirmation: more than `files` files and more than `fraction` of the folder at once. Absent members are 10 and 0.25. | +| `revoked_at` | `datetime` | No | When the folder was revoked | diff --git a/src/generated/cli-commands.json b/src/generated/cli-commands.json index e82bd0f3..83e28273 100644 --- a/src/generated/cli-commands.json +++ b/src/generated/cli-commands.json @@ -193,8 +193,8 @@ "device items embed": {"options": [], "positional": true}, "device items thumbnail": {"options": [{"flag": "--out", "value": true}], "positional": true}, "device folders": {"options": [], "subcommands": true}, - "device folders create": {"options": [{"flag": "--file", "value": true}, {"flag": "--body", "value": true}, {"flag": "--title", "value": true}, {"flag": "--search", "value": true}, {"flag": "--defaults", "value": true}, {"flag": "--include", "value": true}, {"flag": "--ignore", "value": true}, {"flag": "--first-placement", "value": true}, {"flag": "--removal-threshold", "value": true}, {"flag": "--idempotency-key", "value": true}]}, - "device folders change": {"options": [{"flag": "--version", "value": true}, {"flag": "--file", "value": true}, {"flag": "--body", "value": true}, {"flag": "--title", "value": true}, {"flag": "--search", "value": true}, {"flag": "--defaults", "value": true}, {"flag": "--include", "value": true}, {"flag": "--ignore", "value": true}, {"flag": "--first-placement", "value": true}, {"flag": "--removal-threshold", "value": true}, {"flag": "--idempotency-key", "value": true}], "positional": true}, + "device folders create": {"options": [{"flag": "--file", "value": true}, {"flag": "--body", "value": true}, {"flag": "--title", "value": true}, {"flag": "--query", "value": true}, {"flag": "--defaults", "value": true}, {"flag": "--include", "value": true}, {"flag": "--ignore", "value": true}, {"flag": "--first-placement", "value": true}, {"flag": "--removal-threshold", "value": true}, {"flag": "--idempotency-key", "value": true}]}, + "device folders change": {"options": [{"flag": "--version", "value": true}, {"flag": "--file", "value": true}, {"flag": "--body", "value": true}, {"flag": "--title", "value": true}, {"flag": "--query", "value": true}, {"flag": "--defaults", "value": true}, {"flag": "--include", "value": true}, {"flag": "--ignore", "value": true}, {"flag": "--first-placement", "value": true}, {"flag": "--removal-threshold", "value": true}, {"flag": "--idempotency-key", "value": true}], "positional": true}, "device folders revoke": {"options": [{"flag": "--idempotency-key", "value": true}], "positional": true}, "device folders get": {"options": [], "positional": true}, "device search": {"options": [{"flag": "--state", "value": true}, {"flag": "--all-states"}, {"flag": "--type", "value": true}, {"flag": "--tag", "value": true}, {"flag": "--filter", "value": true}, {"flag": "--beneath", "value": true}, {"flag": "--limit", "value": true}, {"flag": "--folder", "value": true}], "positional": true}, @@ -247,8 +247,8 @@ "folders pull": {"options": [], "positional": true}, "folders push": {"options": [{"flag": "--send-only"}], "positional": true}, "folders unmatched": {"options": [{"flag": "--remove"}, {"flag": "--yes"}], "positional": true}, - "folders create": {"options": [{"flag": "--file", "value": true}, {"flag": "--body", "value": true}, {"flag": "--title", "value": true}, {"flag": "--search", "value": true}, {"flag": "--defaults", "value": true}, {"flag": "--include", "value": true}, {"flag": "--ignore", "value": true}, {"flag": "--first-placement", "value": true}, {"flag": "--removal-threshold", "value": true}, {"flag": "--idempotency-key", "value": true}]}, - "folders change": {"options": [{"flag": "--version", "value": true}, {"flag": "--file", "value": true}, {"flag": "--body", "value": true}, {"flag": "--title", "value": true}, {"flag": "--search", "value": true}, {"flag": "--defaults", "value": true}, {"flag": "--include", "value": true}, {"flag": "--ignore", "value": true}, {"flag": "--first-placement", "value": true}, {"flag": "--removal-threshold", "value": true}, {"flag": "--idempotency-key", "value": true}], "positional": true}, + "folders create": {"options": [{"flag": "--file", "value": true}, {"flag": "--body", "value": true}, {"flag": "--title", "value": true}, {"flag": "--query", "value": true}, {"flag": "--defaults", "value": true}, {"flag": "--include", "value": true}, {"flag": "--ignore", "value": true}, {"flag": "--first-placement", "value": true}, {"flag": "--removal-threshold", "value": true}, {"flag": "--idempotency-key", "value": true}]}, + "folders change": {"options": [{"flag": "--version", "value": true}, {"flag": "--file", "value": true}, {"flag": "--body", "value": true}, {"flag": "--title", "value": true}, {"flag": "--query", "value": true}, {"flag": "--defaults", "value": true}, {"flag": "--include", "value": true}, {"flag": "--ignore", "value": true}, {"flag": "--first-placement", "value": true}, {"flag": "--removal-threshold", "value": true}, {"flag": "--idempotency-key", "value": true}], "positional": true}, "folders revoke": {"options": [{"flag": "--idempotency-key", "value": true}], "positional": true}, "folders watch": {"options": [{"flag": "--for", "value": true}, {"flag": "--log", "value": true}, {"flag": "--key-file", "value": true}], "positional": true}, "folders autostart": {"options": [], "subcommands": true}, diff --git a/src/generated/contract-index.json b/src/generated/contract-index.json index 95cf1a2d..bbd7c218 100644 --- a/src/generated/contract-index.json +++ b/src/generated/contract-index.json @@ -479,7 +479,7 @@ "device/hydrate-keeps-queue": "1fa5304bf1cf08fd", "device/hydrate-not-resumed": "4782fe567190a4c3", "device/hydrate-report": "9615b24f448e8365", - "device/hydrate-every-type": "fc3cfddc3b3602ee", + "device/hydrate-every-type": "4dc335f0247e9623", "device/hydrate-every-type-beside-system": "e1ccc2177034ff00", "device/hydrate-every-type-no-system": "82abfa8af4429d56", "device/hydrate-every-type-expected": "66257825ba853454", @@ -939,12 +939,12 @@ "device/order-replace-kept": "710b1dfe946f365e", "device/folder-system-tier": "fe0985226e4628f0", "device/folder-read": "900a26cb73352eb2", - "device/folder-read-backref": "bc10e73f8dedf4ef", - "device/folder-list": "b318857bcd5aa71d", - "device/folder-list-beneath": "69007d5fbd799914", - "device/folder-unanswerable": "7daa6fd5bd326ff2", - "device/folder-unanswerable-named": "040bdb1581099798", - "device/folder-list-backref": "1aef04ed24df358f", + "device/folder-read-backref": "4f2f7d16c53962ac", + "device/folder-list": "1ed5678db1ad2247", + "device/folder-list-beneath": "02481ef61da7ce0c", + "device/folder-unanswerable": "e7dff644f4a94810", + "device/folder-unanswerable-named": "9c3e4508b86ed9b4", + "device/folder-list-backref": "cbd1a038e4e2e89d", "device/folder-list-revoked": "8496d4bec50d8bc9", "device/folder-list-not-folder": "55a11fdc126a9833", "device/folder-not-held": "3d4b3f7be0e474a6", @@ -953,10 +953,10 @@ "device/folder-write-offline": "0d1976d74dd2c55d", "device/folder-write-backref": "d1c113b1d1bf02c6", "device/folder-write-grammar": "a9fc7736059e641c", - "device/folder-write-defaults": "281704b8f3c717dc", - "device/folder-change-as-stands": "c20945a30c2370e0", + "device/folder-write-defaults": "423ddd64a7fc285c", + "device/folder-change-as-stands": "62146255cec7b8f5", "device/folder-write-held": "b9a65474152359c5", - "device/folder-write-accepted": "68396ae853f8e63d", + "device/folder-write-accepted": "0108742459d69587", "device/file-size": "e7958d7ad16e6c63", "device/purge-not-held": "fd17b38042eb2310", "device/purge-not-in-bin": "0eeb0790daeaf6ec", @@ -1840,15 +1840,21 @@ "folders/first-sync-remove": "90a2979afa5a9419", "folders/first-sync-remove-files-preserved": "932722ade38423c5", "folders/first-sync-per-machine": "7629d835816cffda", - "folders/search-match": "67621538ab53eb0e", - "folders/search-beneath": "12bc61c61de3109e", - "folders/search-default-types": "899802a415086e5d", - "folders/search-default-tier": "3eba8aa8760e6a6a", - "folders/search-default-states": "a3d0ab811ba4d19d", - "folders/search-refuse-unsupported": "7d5ddc988db4c424", - "folders/search-edit-refused": "0493d69ebf4ab4b6", - "folders/default-document-type": "3ab314534441dbe9", - "folders/default-document-tier": "16f80e93d1162619", + "folders/search-match": "e4b53108b3bd64e0", + "folders/search-beneath": "728d8152eb7830b2", + "folders/search-default-types": "9e5101120c4c2797", + "folders/search-default-tier": "e8225cf9e2d4a81d", + "folders/query-all-tiers": "668769ef3ea6bd58", + "folders/query-tier-departure-kept": "d5bd50be7e40ecea", + "folders/query-tier-never-trashes": "a99cec0be6c4b907", + "folders/search-default-states": "dc247ecc7f055f54", + "folders/search-refuse-unsupported": "ea71e0edf6943842", + "folders/search-edit-refused": "b345c63b4c1a7302", + "folders/query-settings-file-refusal": "31bb1d69568a98cd", + "folders/query-cli-flag": "f6e0bfbc0b85f8cf", + "folders/query-cli-search-refused": "ee627f428cdd21de", + "folders/default-document-type": "b50376fb9230beba", + "folders/default-document-tier": "1727a6b3f485411d", "folders/default-properties": "c52b92e625405d58", "folders/default-tags": "816d1c1de2693434", "folders/default-explicit-tags": "27580c90e5ac3b4f", @@ -1857,16 +1863,16 @@ "folders/default-explicit-title": "599dc4d874c542d3", "folders/default-edges": "4b7e45fb7c8ba5d7", "folders/default-edit-unchanged": "168827035655763d", - "folders/default-search-refusal": "d12a0573619811ca", + "folders/default-search-refusal": "0dde40a68bebe8c1", "folders/independent-folders": "a53cc97e66614357", "folders/registry-lists-folders": "4692c2fcfd6dcc64", "folders/empty-directory": "af757548abddde20", "folders/empty-directory-push": "fb3dbf72fe7d2c5e", - "folders/item-to-file": "d2339dba61dac96a", + "folders/item-to-file": "def7de930c2b78d2", "folders/file-to-item": "d6d964b70db1ba57", "folders/default-file-properties": "697ef81d4d273016", "folders/default-file-tags": "dcc9fc1a7a127c13", - "folders/default-file-tier": "7defe0a6df6563d5", + "folders/default-file-tier": "cceb1ad53e671f2d", "folders/registry-store-identity": "4519652c990efecd", "folders/include-empty": "40a49b3775000478", "folders/include-negation": "1479f279f24d2e5e", @@ -1917,12 +1923,12 @@ "folders/lookup-both-normalizations": "34316bce7aa17614", "folders/state-not-admitted": "ddf02a5d0495d85e", "folders/watched-settings": "cad83752915116c1", - "folders/binary-outside-search": "9991801d5b963ee9", - "folders/binary-outside-search-skipped-count": "75d0cce60b007d70", - "folders/embedded-outside-search": "7744c0f8e44149ed", - "folders/document-outside-search": "76a027ef23a04a5c", - "folders/new-file-only-members": "1506035835b0d219", - "folders/outside-document-unmatched": "53ebe3076fce0254", + "folders/binary-outside-search": "140ef8de25d23408", + "folders/binary-outside-search-skipped-count": "64c837710a24b6cb", + "folders/embedded-outside-search": "38101355c370d0b9", + "folders/document-outside-search": "d6f18d7bd88a62f4", + "folders/new-file-only-members": "5d3b6d24a746d28f", + "folders/outside-document-unmatched": "8e6349211a67242d", "folders/own-field-lines": "17c4deef7785947b", "folders/property-lines": "70de468c6d15c33e", "folders/body-property": "37764f9e146b8bea", @@ -2014,7 +2020,7 @@ "folders/file-item-doc-name-unflagged": "f14624fbd75d79e8", "folders/file-item-doc-name-emptied": "0bcc3bc1b41f6b6b", "folders/file-item-doc-name-emptied-scan": "ba27c103d7f00b3a", - "folders/file-item-doc-name-moved-out": "7df948cfeb6020a5", + "folders/file-item-doc-name-moved-out": "01a5b34c61b80a16", "folders/file-item-doc-name-replaced": "9a21a995762241fb", "folders/version-line": "52e3d6e0d162afe3", "folders/version-stale-merge": "ebce032284cf0c02", @@ -2039,7 +2045,7 @@ "folders/version-not-property": "b1e5dfc80f1cac71", "folders/edge-catalog-refresh": "255565a8da1bd5ad", "folders/edge-target-hydration": "c30fbe88199d8eba", - "folders/edge-title-outside-folder": "54905a2c2647982d", + "folders/edge-title-outside-folder": "3844efbe4b4d16b3", "folders/edge-pin-held": "87bb01c4f225bfc7", "folders/edge-pin-release": "df3acca07d1a27b6", "folders/edge-pin-other-owner": "e4bfd042adffb890", @@ -2111,15 +2117,15 @@ "folders/embed-address": "a54f064bd31639fd", "folders/embed-path-case": "728b01c65f1cee09", "folders/embed-wiki-name": "f46dca4da22681c5", - "folders/embed-upload": "feeda864d91d8b7c", - "folders/embed-held": "2153388bbcc394a3", + "folders/embed-upload": "297050d8619af09d", + "folders/embed-held": "e8da80204b25d743", "folders/embed-path-placement": "93b42c11eb9919e9", "folders/embed-name-placement": "7d7b587aab3a2171", "folders/embed-placement-follows": "40dd9b6a7858f5a0", "folders/embed-renamed": "b4dec2c5758c9056", "folders/embed-renamed-report": "966aa74752b7ed61", "folders/embed-unresolved-line": "64490f98de3dbd95", - "folders/embed-attachment-hydration": "edbda91f8cc7595e", + "folders/embed-attachment-hydration": "8947ac281aa536b5", "folders/embed-trashed-line": "b679edc84f5a1f27", "folders/embed-outside": "71720c8b8999105a", "folders/embed-outside-no-write": "fd8baaf073c1b216", @@ -2164,8 +2170,8 @@ "folders/identity-equivalent-save": "9f0af0bd012858b7", "folders/identity-unread-rename": "a886c201f21b75a5", "folders/identity-unread-replacement": "96c5f4263c3d4483", - "folders/identity-placement-bytes": "6e6634dc798552a7", - "folders/identity-takeback-search": "1532bcec7ed81efa", + "folders/identity-placement-bytes": "a466edab324cc802", + "folders/identity-takeback-search": "1f8aa595fa3ff9b1", "folders/identity-takeback-peer": "ca0e55ca491a4852", "folders/watch-file-equivalence": "0c7cc66e76efaef8", "folders/copy-birth-tie": "31925a38542483eb", @@ -2221,7 +2227,7 @@ "folders/placement-add-permission": "0066c7f7917d5785", "folders/placement-add-cleanup": "b1374d40255e826f", "folders/placement-add-cleanup-keeps": "e60297d300042432", - "folders/placement-not-membership": "f87ba4fd642e8cc8", + "folders/placement-not-membership": "8c32d80c2573062b", "folders/placement-current-path": "3257fbad760adb35", "folders/placement-swap-waits": "14486da053df1660", "folders/placement-swap-count": "e98dff61c53514a5", @@ -2253,15 +2259,15 @@ "folders/moved-save-kept-beside": "41d4785890b212f0", "folders/moved-save-not-missing": "7f73b562308e29a0", "folders/moved-save-ends": "e3ec014933360136", - "folders/placement-end-departure": "a2dc7fe79d989816", - "folders/placement-end-transfer": "6bdce71a386b7b1c", + "folders/placement-end-departure": "7ddb045e768a5d98", + "folders/placement-end-transfer": "b18c0eeef08c3212", "folders/placement-end-delete": "f1dad8e00ab469ba", "folders/placement-last-binding": "69c49b911bffc613", "folders/placement-end-retry": "b0983773b46ba5c4", "folders/placement-purge-no-delete": "8bf7adbb13dee4b6", - "folders/placement-held-transfer": "13745e82fb10f2b4", + "folders/placement-held-transfer": "cedaf113ca79b1aa", "folders/placement-unmatched-kept": "e06addedc96448bc", - "folders/placement-restore-new": "f98435fcf7856932", + "folders/placement-restore-new": "531f78bbd67083d1", "folders/placement-end-count": "bc38734d39d57b05", "folders/placement-end-same-push": "f07c5731eb043a18", "folders/placement-end-already-gone": "32fd56cf00ea2bb1", @@ -2300,7 +2306,7 @@ "folders/pull-missing-file-unwritten-count": "cf6c8380bf09dbc2", "folders/pull-missing-file-moved-keeps-item": "59828aec3d896a39", "folders/delete-path-reused": "1662a3ba2cc77550", - "folders/delete-left-by-state": "5e37a50988d822fe", + "folders/delete-left-by-state": "e7463ea766465c27", "folders/delete-already-trashed": "ee44316aeb581067", "folders/delete-at-startup": "74c8328fdce1623c", "folders/root-gone-no-delete": "d3acc14109486b99", @@ -2344,11 +2350,11 @@ "folders/rendered-file-adopted-bytes-unchanged": "06becb0c193c9977", "folders/unowned-file-admitted": "4c118913c452912b", "folders/same-scan-link-resolution": "7e36d585c8a36311", - "folders/new-search-member": "585205af78136d81", - "folders/departed-file-removed": "b5a16a4127a7f548", + "folders/new-search-member": "7600cd58475b9fd1", + "folders/departed-file-removed": "551746656727b15e", "folders/departed-binding-released": "f0c4bc9e645c6291", "folders/departed-item-not-deleted": "688eb3fb6c3f20e7", - "folders/restored-file-written": "28945d59deb2e773", + "folders/restored-file-written": "813230bd575709b8", "folders/missing-departure-not-pulled": "85f780f0f1a249f0", "folders/returned-file-journal-cleared": "1a3c2aa74f0bfa76", "folders/returned-item-not-deleted": "f7194cf2c023b40d", @@ -2356,13 +2362,13 @@ "folders/departed-edited-file-kept-kept-count": "e4aaad5c4e5d9476", "folders/departed-unreadable-file": "e9b9243a6eab5826", "folders/departed-unreadable-file-unwritten-count": "12ca6bceaa79ee25", - "folders/unmatched-file-kept": "0426e9544bef0550", - "folders/unmatched-file-kept-unmatched-count": "cfc704a8c8ebb1bf", - "folders/unmatched-file-edits": "17838e2aacb103b9", - "folders/unmatched-file-updated": "9a7ae8d4e0e8e857", + "folders/unmatched-file-kept": "efeeceb164f6846b", + "folders/unmatched-file-kept-unmatched-count": "741d8be16717b726", + "folders/unmatched-file-edits": "fd6d079bc9ebd48c", + "folders/unmatched-file-updated": "a8ba7aa2309cebf5", "folders/replaced-binding-unpinned": "636e63266359c693", - "folders/embedded-archive-kept": "17a471b2861c8481", - "folders/binary-created": "535618534336e239", + "folders/embedded-archive-kept": "ccab3bb9c72cc99e", + "folders/binary-created": "2084a92fa1220915", "folders/binary-edited": "84021a258e7007bc", "folders/binary-title-preserved": "eebe4a7ca0612bac", "folders/blob-file-written": "ff3a47e87da653b2", @@ -2426,8 +2432,8 @@ "folders/registry-unreadable-deletes-held": "662ca30f9c1ad7f1", "folders/registry-invalid-replaced-on-add": "54aac21a39c9cafa", "folders/status-beside-watch": "1ebf4b9d913870b7", - "folders/cross-folder-copy": "d7705e378a512d88", - "folders/cross-folder-member-adopted": "54f7fed5be8e3f3a", + "folders/cross-folder-copy": "89653612d0685f73", + "folders/cross-folder-member-adopted": "53fc814153fcc74b", "folders/cross-folder-item-read": "df231718503757e4", "folders/cross-folder-hidden-item": "7e1fb57da0023dac", "folders/saved-back-binding": "0a43fc1ce7fc5f92", @@ -2436,10 +2442,10 @@ "folders/moved-file-count": "adeed437bd711e1b", "folders/moved-carried-id-utf16": "aa25b2589c7fe12a", "folders/peer-owned-bytes-not-move": "b5a37ef19c93a44d", - "folders/both-folders-copy": "18aa2ad3dde9f685", + "folders/both-folders-copy": "1a0f4d00b1129f73", "folders/missing-file-trashed": "06e737a76cd122cb", "folders/missing-file-trashed-path-reported": "2aabd6f32edecfb6", - "folders/missing-file-changed-revives": "3bf22b95f4f82ec7", + "folders/missing-file-changed-revives": "6323eca89ce84fb3", "folders/missing-file-said": "b3c5c5178e5a1e3f", "folders/uncertain-move-deferred": "26ddcaa6fb20dbd5", "folders/uncertain-move-deferred-unsure-reported": "a44b92875008474a", @@ -2449,7 +2455,7 @@ "folders/moved-arrival-text-note": "57c5d55561fb9ca2", "folders/moved-arrival-markdown-new": "a36da7914451782d", "folders/moved-file-item-bytes": "aa7b1188ad718f00", - "folders/moved-binding-kept": "ab532e8f9a1b8e84", + "folders/moved-binding-kept": "42b06118a3a2463f", "folders/moved-awaiting-peer": "f0e28b581c370b88", "folders/moved-awaiting-peer-no-replacement": "18fb2ba20babf39b", "folders/moved-not-revived": "a557a1d88431da1b", @@ -2555,8 +2561,8 @@ "folders/watch-log-private": "d59d0621a6dc09e9", "folders/watch-log-start-full": "7770f015395918c1", "folders/watch-log-running-full": "1e79157fc63987dd", - "folders/take-in-file": "15b8519f8c191f66", - "folders/take-in-file-taken-count": "a6c982d379a35cb4", + "folders/take-in-file": "c2adeaaafcb3f40f", + "folders/take-in-file-taken-count": "1257fa2dfd916afd", "folders/take-in-edited-source-kept": "72bf45d2c52e9e3c", "folders/take-in-state-excluded": "6069133f0ca3b6c8", "folders/take-in-destination-kept": "9b7a5b1a7d8cc9dd", @@ -2582,7 +2588,7 @@ "folders/let-go-existing-peer": "b765549bd3ed584d", "folders/let-go-existing-peer-let-go-count": "5449bc2d536facd9", "folders/unmatched-missing-not-rewritten": "92c20c9573609d22", - "folders/two-folders-editable": "5e6d1bfc02d5f165", + "folders/two-folders-editable": "be3a1b9e421183af", "folders/two-folders-delete": "c931f4b0104b606e", "folders/pull-gone-item-file": "13696a0a212da434", "folders/pull-gone-item-binding": "6ab841823387bb3c", @@ -2664,21 +2670,21 @@ "folders/confirm-deletes-queued": "0d0a811b56754c44", "folders/confirm-pull-removes": "f468356d14ab2a44", "folders/confirm-pull-removes-removed-count": "32477b40ddea1fce", - "folders/restore-disk-files": "3d2479d0ff5671c9", - "folders/restore-disk-files-put-back-count": "9235238c326acd20", - "folders/restore-not-written-listed": "6fcdcdc9e50492aa", + "folders/restore-disk-files": "690d1e5da7ebb169", + "folders/restore-disk-files-put-back-count": "3d38f1072f9d7e7d", + "folders/restore-not-written-listed": "1688bd1030443ea5", "folders/restore-written-by-binding": "36521edf6a17096c", "folders/restore-not-written-flag": "1cee3b3341aee6b9", "folders/restore-not-written-kept": "bde767785bc4f034", "folders/restore-not-written-retried": "32a729e32eb7af3c", - "folders/restore-departed-binding": "7f0bf4c8c11b604e", - "folders/restore-departed-binding-not-put-back": "702869c31bab07cd", - "folders/restore-departed-binding-item-preserved": "e1ee98ea4bfd9ce4", - "folders/restore-unmatched-count": "afd1ce2b31a86252", - "folders/restore-unmatched-count-not-put-back": "2d2de59adffa87fc", + "folders/restore-departed-binding": "88f0c81068fdb75c", + "folders/restore-departed-binding-not-put-back": "776942cf6064b3f9", + "folders/restore-departed-binding-item-preserved": "3e7c143b2bfcbd5b", + "folders/restore-unmatched-count": "2c0fb11daece4f25", + "folders/restore-unmatched-count-not-put-back": "367f1dded60f30cb", "folders/restore-embedded-departure": "72c27ac6e9105ebd", "folders/restore-embedded-not-put-back": "94b6ad6ff1df1c45", - "folders/restore-pull-items": "ced285d23363274d", + "folders/restore-pull-items": "758567b9db61e37d", "folders/pause-said": "388ac590ac9b38e5", "folders/pause-watch-once": "d229d6dfedfadc5d", "folders/size-warning": "50e94b14b1a10fc4", @@ -2694,7 +2700,7 @@ "folders/status-encoding": "34820f79662083ca", "folders/status-file-item-doc-name": "7735f40ec24b8c8d", "folders/status-file-item-doc-name-size": "9cbbc9fffc3fec9e", - "folders/status-outside": "745b4f469bd8e878", + "folders/status-outside": "a0844668cc089bd6", "folders/status-paused-counts": "a13f43afc0e1004a", "folders/status-unreached": "6668f6f20d98f2bc", "folders/status-paused-purged": "075ae2545e529fec", @@ -3558,7 +3564,8 @@ "items/extension-announced": "6101f2bc92ae7c2c", "items/folder-create": "25cca39f0a9df109", "items/folder-announced": "b585c2f49a638ed8", - "items/folder-settings": "ba8690e45d5cf7c2", + "items/folder-settings": "ba495c5377cf9f34", + "items/folder-query-tier": "f208a620e96273df", "items/folder-read": "e10c5b70c0be0b4b", "items/folder-read-hidden": "50d3b62613ca98eb", "items/folder-grant": "ab8bb45a9d2754c5", @@ -3571,9 +3578,9 @@ "items/folder-revoke": "39c8c3f99669555b", "items/folder-revoked": "ccca7a2d52653fe3", "items/folder-setting-checked": "0789b08079df2ad3", - "items/folder-setting-unknown-type": "0d8d213d86f5e107", - "items/folder-setting-invalid": "033b1e73008f9406", - "items/folder-setting-undeclared": "17422d629bc348b6", + "items/folder-setting-unknown-type": "c97984085aafae69", + "items/folder-setting-invalid": "182f0d68efcc6109", + "items/folder-setting-undeclared": "160e58b9a813e063", "items/folder-placement-inside": "a990d69b9b7eabab", "items/link-taken": "e955ce5cce5d43f3", "items/link-every-write": "b30d9836442b970d",