Lineage
There is no pipeline object to maintain. Every producer of a dataset declares what it reads: a Python transform through itsInput, Output, Model and Connection bindings, a SQL transform through the FROM references of its query, a sync through its connection. The platform reads those declarations, from the code it scans and from the resources, and derives a graph of who feeds whom:
GET /orchestration/lineage/{id}?direction= answers. The binding names are therefore part of the contract with the platform: a transform is registered from its decorators, not from a separate manifest.
An Output can never be an Input of the same transform. That would be a cycle, and the catalog refuses it. A transform that needs its own previous output uses an incremental transform.