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.

Repository @tensei.at did:plc:7fk7ea7vlnlpzgy225x66vro namespace authority
Details · record, key tid
Kindrecord
Record keytid
Authoritytensei.at
Indexed

Record

record · key tid

Properties

createdAt

string

When 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

string

What the pipeline is called (§6.1): at most 640 bytes as UTF-8, and not only whitespace, which the lexicon language cannot state.

  • minLength: 1
  • maxLength: 640

nodes

requiredarray
  • minLength: 1
itemsref
Reference

Present on an adopted copy: the exact version copied (§1.3).

presentation

requiredref

The authoritative presentation of the output (§3.8).

slots

requiredunknown

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.

version

requiredinteger

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

string

The built-in preset this pipeline started from, as attribution only; it constrains no shape (§3.8).

  • enum: review | bookmark

#fieldExpression

object

A 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.

Properties

field

string
  • minLength: 1

inputs

array
itemsref
Reference

kind

requiredstring
  • enum: field | constant | operation

#node

object

One 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

string

The field a unique node groups by or a sort node orders by.

  • minLength: 1

collection

string · nsid

A source's collection NSID; its mapping's `source` must equal it.

count

integer
  • minimum: 0

dir

string
  • enum: asc | desc

id

requiredstring
  • minLength: 1

keep

string
  • enum: newest | oldest | most_complete

keepBy

string
  • minLength: 1

kind

requiredstring
  • enum: source | filter | union | transform | unique | sort | limit | output

mapping

string

A 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
itemsref
Reference
Reference
Reference

#operation

object

One 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

string
  • enum: reject | replace
  • minLength: 1

expr

ref
Reference

field

string
  • minLength: 1

from

string
  • minLength: 1

kind

requiredstring
  • enum: set | rename | remove
itemsstring
  • minLength: 1

to

string
  • minLength: 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.

Properties

all

array
itemsref
Reference

any

array
itemsref
Reference

field

string
  • minLength: 1

not

ref
Reference

#scope

object

§6.2. `dids` is required when `kind` is actors.

Properties

dids

array
  • maxLength: 1000
itemsstring · did

kind

requiredstring
  • enum: network | actors | self

Similar lexicons

semantic match

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • A 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 `