at.tensei.pipeline
Nodes and wires (§6). `wires` is required and is not declared: an array of [from, to] pairs of node ids, and the lexicon language has no array of arrays. Also not stated by the lexicon, and enforced by the validator (§6.1): node ids are unique; the graph is acyclic, has exactly one output reachable from every source, a source has no inbound wire and every other node exactly one, except a union, which has two or more; an output has no outbound wire; every source's mapping declares exactly the initial `slots`; every field a node names is in the shape of its incoming wire; and `presentation` names fields of the output's shape.
Details · record, key tid
| Kind | record |
|---|---|
| Record key | tid |
| Authority | tensei.at |
| Indexed |
Record
record · key tidProperties
createdAt
stringWhen the pipeline was created: a datetime as §3.1 reads one, which accepts forms atproto's `datetime` format does not, so the format is not declared.
name
stringWhat the pipeline is called (§6.1): at most 640 bytes as UTF-8, and not only whitespace, which the lexicon language cannot state.
minLength: 1maxLength: 640
origin
refPresent on an adopted copy: the exact version copied (§1.3).
The authoritative presentation of the output (§3.8).
The initial shared source-output shape (§3.8, §6.1): an object keyed by field names the user chooses, each value an at.tensei.mapping#fieldDefinition. The lexicon language has no map type, so the names and values are stated here rather than declared.
The document version. A document without one is the Phase-2 form, which is migrated explicitly to version 1 (§8.3) and never published as it is.
const: 1
viewType
stringThe built-in preset this pipeline started from, as attribution only; it constrains no shape (§3.8).
enum: review | bookmark
#fieldExpression
objectA downstream expression (§4.3, §7.2): field {field}, constant {value} or operation {op, inputs, args?}. It reads output fields only, never a source path or the key table. Not stated by the lexicon, as for at.tensei.mapping#mappingExpression: which properties each kind requires, `value` and `args`, in which a number that is not an integer is an at.tensei.mapping#fixedPoint, the input count and a nesting depth of at most 64 levels.
#node
objectOne node of §7's closed catalogue. Not stated by the lexicon: the properties each kind requires — source {collection, mapping}, filter {predicate}, transform {operations}, unique {by, keep}, sort {by, dir}, limit {count}; and that `keepBy` names a datetime field and is required by keep newest or oldest and refused with most_complete (§7.1).
Properties
by
stringThe field a unique node groups by or a sort node orders by.
minLength: 1
collection
string · nsidA source's collection NSID; its mapping's `source` must equal it.
count
integerminimum: 0
dir
stringenum: asc | desc
minLength: 1
keep
stringenum: newest | oldest | most_complete
keepBy
stringminLength: 1
enum: source | filter | union | transform | unique | sort | limit | output
mapping
stringA source's mapping: at://<authority>/at.tensei.mapping/<rkey>, or owned:<id> for an appview-owned draft, which publication replaces with the published mapping's at-uri (§6.1). An inline mapping is accepted for unsaved preview only and is never a record.
minLength: 1
operations
arraypredicate
ref#operation
objectOne structural operation of a transform node, applied in order (§7.2): set {destination, definition, expr, collision, removeInputs?}, rename {from, to, collision} or remove {field}. Not stated by the lexicon: which properties each kind requires, and that every name is checked against the shape at that exact operation.
Properties
collision
stringenum: reject | replace
definition
refdestination
stringminLength: 1
expr
reffield
stringminLength: 1
from
stringminLength: 1
enum: set | rename | remove
removeInputs
arrayminLength: 1
to
stringminLength: 1
#predicate
object§5: a leaf {field, op, value?} over output field names, or exactly one of all, any or not. `value` is a scalar (a string, an integer, an at.tensei.mapping#fixedPoint for any other number, or a boolean; never null or an object), or for in/notIn an array of scalars, and is absent for exists/notExists; the lexicon language has no type for a scalar of any kind, so it is not declared. Which form a predicate takes is not stated by the lexicon.
#scope
object§6.2. `dids` is required when `kind` is actors.
Similar lexicons
semantic matchLexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
at.tensei.mapping
recordA Tensei mapping, version 1 (spec §4): records of one source collection mapped into output fields the user authors. Built-in presets are starting points, never a contract: any field name is allowed, and a field is mandatory only when the user marks it `required`. The atproto data model has integers only, so a number in the record is an integer written as it is, or any other number in fixed point, the value times 10⁶ (spec §1.5): a bare integer where this lexicon declares it — a #mappingField's `